Name: series-workflowg97pg Phase: Succeeded StartedAt: 2026-08-24 02:36:00 +0000 UTC FinishedAt: 2026-08-24 06:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[0] Phase: Succeeded StartedAt: 2026-08-24 02:36:00 +0000 UTC FinishedAt: 2026-08-24 03:07:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 02:36:00 +0000 UTC FinishedAt: 2026-08-24 03:07:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4352b8aee98005853aa63f57d6377282de17a33f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EPOLL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4352b8aee98005853aa63f57d6377282de17a33f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EPOLL" ], "series_id": "0a2de8be-5ebb-487f-9df0-eb4ac5e24bca" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "do_epoll_ctl", "do_epoll_ctl_file", "epoll_sendevents" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFUE9MTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX2Vwb2xsX2N0bCYjMzQ7LAogICAgJiMzNDtkb19lcG9sbF9jdGxfZmlsZSYjMzQ7LAogICAgJiMzNDtlcG9sbF9zZW5kZXZlbnRzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgZXBvbGwgdXNpbmcgYXRvbWljIHN0YXRlIGJpdHMgaW4gYHN0cnVjdCBlcGl0ZW1gLiBJdCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gbG9naWMsIGV2ZW50IGFjY291bnRpbmcsIGFuZCB3YWtldXBzLiBBbGwgbmV3IGZpZWxkcyAobGlrZSBgYXRvbWljX3Qgc3RhdGVgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSBga21lbV9jYWNoZV96YWxsb2NgIGFuZCBgYXRvbWljX3NldGApLCBhbmQgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIGVwb2xsIGNhbGxiYWNrcywgYWRkaW5nIG5ldyBzdGF0ZSBiaXRzIChFUF9TVEFURV9BQ0NPVU5URUQsIEVQX1NUQVRFX0ZBU1QpIGFuZCBtb2RpZnlpbmcgdGhlIGNvcmUgZXZlbnQgZGVsaXZlcnkgYW5kIHBvbGxpbmcgbG9naWMgaW4gZnMvZXZlbnRwb2xsLmMuIFRoaXMgYWZmZWN0cyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGFuZCBpcyBoaWdobHkgcmVhY2hhYmxlIHZpYSBlcG9sbCBzeXNjYWxscyBhbmQgaW9fdXJpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ODkyODY5YmQyMzYzNDdhMmZjOTIxZjczOWVmNjdjYzA2MTAxZTkwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMDI6NTA6MjQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuY1xuaW5kZXggZTBjNGJmODhhODM4My4uNjAwZDNkMmQ0NzYzNiAxMDA2NDRcbi0tLSBhL2ZzL2V2ZW50cG9sbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9ldmVudHBvbGwuY1xuQEAgLTI0Myw2ICYjNDM7MjQzLDE0IEBAIHN0cnVjdCBlcHBvbGxfZW50cnkge1xuIFx0d2FpdF9xdWV1ZV9oZWFkX3QgKndoZWFkO1xuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEZBU1QgaXMgc2V0IGZvciBlbGlnaWJsZSBpdGVtcyBhdCBpbnNlcnRpb24uIEFDQ09VTlRFRCB0cmFja3MgRkFTVCBpdGVtc1xuJiM0MzsgKiB3aGlsZSB0aGUgcmVhZHkgcGF0aCBvd25zIHRoZW0gYW5kIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHJlLXBvbGwuXG4mIzQzOyAqL1xuJiM0MztlbnVtIHtcbiYjNDM7XHRFUF9TVEFURV9BQ0NPVU5URURcdD0gQklUKDApLFxuJiM0MztcdEVQX1NUQVRFX0ZBU1RcdFx0PSBCSVQoMSksXG4mIzQzO307XG4gLypcbiAgKiBFYWNoIGZpbGUgZGVzY3JpcHRvciBhZGRlZCB0byB0aGUgZXZlbnRwb2xsIGludGVyZmFjZSB3aWxsXG4gICogaGF2ZSBhbiBlbnRyeSBvZiB0aGlzIHR5cGUgbGlua2VkIHRvIHRoZSBcJiMzNDtyYnJcJiMzNDsgUkIgdHJlZS5cbkBAIC0yNzEsNiAmIzQzOzI3OSw5IEBAIHN0cnVjdCBlcGl0ZW0ge1xuIFx0LyogVGhlIGZpbGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiB0aGlzIGl0ZW0gcmVmZXJzIHRvICovXG4gXHRzdHJ1Y3QgZXBvbGxfa2V5IGZmZDtcbiBcbiYjNDM7XHQvKiBBdG9taWMgc3RhdGUgYml0cywgc2VlIHRoZSBFUF9TVEFURV8qIGVudW0gYWJvdmUuICovXG4mIzQzO1x0YXRvbWljX3Qgc3RhdGU7XG4mIzQzO1xuIFx0LyogTGlzdCBjb250YWluaW5nIHBvbGwgd2FpdCBxdWV1ZXMgKi9cbiBcdHN0cnVjdCBlcHBvbGxfZW50cnkgKnB3cWxpc3Q7XG4gXG5AQCAtNjIwLDYgJiM0Mzs2MzEsNjUgQEAgc3RhdGljIGlubGluZSBib29sIGVwX2V2ZW50c19hdmFpbGFibGUoc3RydWN0IGV2ZW50cG9sbCAqZXApXG4gXHRcdHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2ZXAtXHUwMDNlc2VxLCBzZXEpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogTGV0IEEgYmUgQUNDT1VOVEVEIGFuZCBCIGJlIGZpbGUgcmVhZGluZXNzLiBGdWxseSBvcmRlcmVkIGF0b21pYyBSTVdzXG4mIzQzOyAqIHBhaXIgVyhBPTApIGJlZm9yZSBSKEIpIHdpdGggVyhCKSBiZWZvcmUgUihBKSwgc28gYSBzY2FubmVyIGNhbm5vdCBtaXNzXG4mIzQzOyAqIEIgd2hpbGUgaXRzIGNhbGxiYWNrIHNraXBzIGFuIGFjY291bnRlZCBpdGVtLiBlcF9kb25lX3NjYW4oKSBhbmQgdGhlXG4mIzQzOyAqIGZhdGFsLXNpZ25hbCBoYW5kb2ZmIHBhc3MgcXVldWVkIGV2ZW50cyBiZXR3ZWVuIGV4Y2x1c2l2ZSB3YWl0ZXJzLlxuJiM0MzsgKiBwb2xsX3dhaXQgdXNlcnMsIHByaXZhdGUgbW9kZXMgYW5kIHNwZWNpYWwgY2FsbGJhY2tzIHRha2UgdGhlIHNsb3cgcGF0aC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBlcF9zdGF0ZV90ZXN0KGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSwgdW5zaWduZWQgaW50IGJpdClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZlcGktXHUwMDNlc3RhdGUpIFx1MDAyNiBiaXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBlcF9yZWFkeV9mYXN0X2VuYWJsZWQoY29uc3Qgc3RydWN0IGVwaXRlbSAqZXBpKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGVwX3N0YXRlX3Rlc3QoZXBpLCBFUF9TVEFURV9GQVNUKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoc3RydWN0IGVwaXRlbSAqZXBpKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChlcGkpKVxuJiM0MztcdFx0YXRvbWljX29yKEVQX1NUQVRFX0FDQ09VTlRFRCwgXHUwMDI2ZXBpLVx1MDAzZXN0YXRlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVwX3ByZXBhcmVfcmVwb2xsKHN0cnVjdCBlcGl0ZW0gKmVwaSlcbiYjNDM7e1xuJiM0MztcdGlmIChlcF9yZWFkeV9mYXN0X2VuYWJsZWQoZXBpKSlcbiYjNDM7XHRcdGF0b21pY19mZXRjaF9hbmRub3QoRVBfU1RBVEVfQUNDT1VOVEVELCBcdTAwMjZlcGktXHUwMDNlc3RhdGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBlcF9jYWxsYmFja19jYW5fc2tpcChzdHJ1Y3QgZXBpdGVtICplcGksIF9fcG9sbF90IHBvbGxmbGFncylcbiYjNDM7e1xuJiM0MztcdF9fcG9sbF90IGV2ZW50cztcbiYjNDM7XG4mIzQzO1x0ZXZlbnRzID0gUkVBRF9PTkNFKGVwaS1cdTAwM2VldmVudC5ldmVudHMpO1xuJiM0MztcdFxuJiM0MztcdC8qIE9ubHkgaW5zZXJ0aW9uLXRpbWUgY2FuZGlkYXRlcyBtYXkgdXNlIHRoZSBsb2NrbGVzcyBwYXRoLiAqL1xuJiM0MztcdGlmICghZXBfcmVhZHlfZmFzdF9lbmFibGVkKGVwaSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XG4mIzQzO1x0LyogZXBfbW9kaWZ5KCkgY2FuIHNlbGVjdCBhIHByaXZhdGUgbW9kZSB0aGF0IHJlcXVpcmVzIHRoZSBzbG93IHBhdGguICovXG4mIzQzO1x0aWYgKGV2ZW50cyBcdTAwMjYgRVBfUFJJVkFURV9CSVRTKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBwb2xsX3dhaXQgdXNlcnMgbXVzdCBiZSB3b2tlbiBieSB0aGlzIGNhbGxiYWNrLiAqL1xuJiM0MztcdGlmICh3YWl0cXVldWVfYWN0aXZlKFx1MDAyNmVwaS1cdTAwM2VlcC1cdTAwM2Vwb2xsX3dhaXQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBQT0xMRlJFRSB0ZWFycyBkb3duIHdhaXQgZW50cmllczsgVVJJTkdfV0FLRSBtdXN0IHByb3BhZ2F0ZS4gKi9cbiYjNDM7XHRpZiAocG9sbGZsYWdzIFx1MDAyNiAoUE9MTEZSRUUgfCBFUE9MTF9VUklOR19XQUtFKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogVW5tYXRjaGVkIHdha2Uga2V5cyByZXRhaW4gdGhlIHNsb3ctcGF0aCBjYWxsYmFjayBzZW1hbnRpY3MuICovXG4mIzQzO1x0aWYgKHBvbGxmbGFncyBcdTAwMjZcdTAwMjYgIShwb2xsZmxhZ3MgXHUwMDI2IGV2ZW50cykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIEZ1bGx5IG9yZGVyZWQgUk1XIHBhaXJzIHRoZSBCIHVwZGF0ZSB3aXRoIHRoZSBzY2FubmVyJiMzOTtzIEEgY2xlYXIuICovXG4mIzQzO1x0cmV0dXJuIGF0b21pY19mZXRjaF9vcigwLCBcdTAwMjZlcGktXHUwMDNlc3RhdGUpIFx1MDAyNiBFUF9TVEFURV9BQ0NPVU5URUQ7XG4mIzQzO31cbiYjNDM7XG4gI2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMXG4gLyoqXG4gICogYnVzeV9sb29wX2VwX3RpbWVvdXQgLSBjaGVjayBpZiBidXN5IHBvbGwgaGFzIHRpbWVkIG91dC4gVGhlIHRpbWVvdXQgdmFsdWVcbkBAIC0xMDA3LDYgJiM0MzsxMDc3LDcgQEAgc3RhdGljIHZvaWQgZXBfZG9uZV9zY2FuKHN0cnVjdCBldmVudHBvbGwgKmVwLFxuIFx0XHRcdCAqIHJldmVyc2VzIHRoZSBpdGVyYXRpb24gb3JkZXIgaW50byBGSUZPLlxuIFx0XHRcdCAqL1xuIFx0XHRcdGxpc3RfYWRkKFx1MDAyNmVwaS1cdTAwM2VyZGxsaW5rLCBcdTAwMjZlcC1cdTAwM2VyZGxsaXN0KTtcbiYjNDM7XHRcdFx0ZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpO1xuIFx0XHRcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTEzMDMsOCAmIzQzOzEzNzQsMTAgQEAgc3RhdGljIF9fcG9sbF90IF9fZXBfZXZlbnRwb2xsX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQsIGludCBkZXBcbiBcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNmVwLVx1MDAzZW10eCwgZGVwdGgpO1xuIFx0ZXBfc3RhcnRfc2NhbihlcCwgXHUwMDI2c2Nhbl9iYXRjaCk7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXBpLCB0bXAsIFx1MDAyNnNjYW5fYmF0Y2gsIHJkbGxpbmspIHtcbiYjNDM7XHRcdGVwX3ByZXBhcmVfcmVwb2xsKGVwaSk7XG4gXHRcdGlmIChlcF9pdGVtX3BvbGwoZXBpLCBcdTAwMjZwdCwgZGVwdGggJiM0MzsgMSkpIHtcbiBcdFx0XHRyZXMgPSBFUE9MTElOIHwgRVBPTExSRE5PUk07XG4mIzQzO1x0XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKlxuQEAgLTE0OTcsNiAmIzQzOzE1NzAsOSBAQCBzdGF0aWMgaW50IGVwX3BvbGxfY2FsbGJhY2sod2FpdF9xdWV1ZV9lbnRyeV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdlxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBld2FrZSA9IDA7XG4gXG4mIzQzO1x0aWYgKGVwX2NhbGxiYWNrX2Nhbl9za2lwKGVwaSwgcG9sbGZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmVwLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdGVwX3NldF9idXN5X3BvbGxfbmFwaV9pZChlcGkpO1xuQEAgLTE1MjksMTEgJiM0MzsxNjA1LDEzIEBAIHN0YXRpYyBpbnQgZXBfcG9sbF9jYWxsYmFjayh3YWl0X3F1ZXVlX2VudHJ5X3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2XG4gXHRcdGlmICghZXBpX29uX292Zmxpc3QoZXBpKSkge1xuIFx0XHRcdGVwaS1cdTAwM2VvdmZsaXN0X25leHQgPSBSRUFEX09OQ0UoZXAtXHUwMDNlb3ZmbGlzdCk7XG4gXHRcdFx0V1JJVEVfT05DRShlcC1cdTAwM2VvdmZsaXN0LCBlcGkpO1xuJiM0MztcdFx0XHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XG4gXHRcdFx0ZXBfcG1fc3RheV9hd2FrZV9yY3UoZXBpKTtcbiBcdFx0fVxuIFx0fSBlbHNlIGlmICghZXBfaXNfbGlua2VkKGVwaSkpIHtcbiBcdFx0LyogSW4gdGhlIHVzdWFsIGNhc2UsIGFkZCBldmVudCB0byByZWFkeSBsaXN0LiAqL1xuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmVwaS1cdTAwM2VyZGxsaW5rLCBcdTAwMjZlcC1cdTAwM2VyZGxsaXN0KTtcbiYjNDM7XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0ZXBfcG1fc3RheV9hd2FrZV9yY3UoZXBpKTtcbiBcdH1cbiBcbkBAIC0xOTEyLDYgJiM0MzsxOTkwLDEzIEBAIHN0YXRpYyBpbnQgZXBfaW5zZXJ0KHN0cnVjdCBlcF9jdGxfY3R4ICpjdHgsIHN0cnVjdCBldmVudHBvbGwgKmVwLFxuIFx0aWYgKElTX0VSUihlcGkpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihlcGkpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogTG9ja2xlc3MgY2FuZGlkYXRlcyBhcmUgcGxhaW4gbGV2ZWwtdHJpZ2dlcmVkIGludGVyZXN0cztcbiYjNDM7XHQgKiBwcml2YXRlIG1vZGVzIGFuZCBuZXN0ZWQgZXBvbGwgY2hhbmdlIHRoZSBjYWxsYmFjayBjb250cmFjdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXRlcCBcdTAwMjZcdTAwMjYgIShldmVudC1cdTAwM2VldmVudHMgXHUwMDI2IEVQX1BSSVZBVEVfQklUUykpXG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNmVwaS1cdTAwM2VzdGF0ZSwgRVBfU1RBVEVfRkFTVCk7XG4mIzQzO1xuIFx0ZXJyb3IgPSBlcF9yZWdpc3Rlcl9lcGl0ZW0oY3R4LCBlcCwgZXBpLCB0ZXAsIGZ1bGxfY2hlY2spO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtMTk1Niw2ICYjNDM7MjA0MSw3IEBAIHN0YXRpYyBpbnQgZXBfaW5zZXJ0KHN0cnVjdCBlcF9jdGxfY3R4ICpjdHgsIHN0cnVjdCBldmVudHBvbGwgKmVwLFxuIFxuIFx0aWYgKHJldmVudHMgXHUwMDI2XHUwMDI2ICFlcF9pc19saW5rZWQoZXBpKSkge1xuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmVwaS1cdTAwM2VyZGxsaW5rLCBcdTAwMjZlcC1cdTAwM2VyZGxsaXN0KTtcbiYjNDM7XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0ZXBfcG1fc3RheV9hd2FrZShlcGkpO1xuIFxuIFx0XHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcdTAwMjZlcC1cdTAwM2V3cSkpXG5AQCAtMTk5Miw3ICYjNDM7MjA3OCw3IEBAIHN0YXRpYyBpbnQgZXBfbW9kaWZ5KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksXG4gXHQgKiBvdGhlcndpc2Ugd2UgbWlnaHQgbWlzcyBhbiBldmVudCB0aGF0IGhhcHBlbnMgYmV0d2VlbiB0aGVcbiBcdCAqIGZfb3AtXHUwMDNlcG9sbCgpIGNhbGwgYW5kIHRoZSBuZXcgZXZlbnQgc2V0IHJlZ2lzdGVyaW5nLlxuIFx0ICovXG4tXHRlcGktXHUwMDNlZXZlbnQuZXZlbnRzID0gZXZlbnQtXHUwMDNlZXZlbnRzOyAvKiBuZWVkIGJhcnJpZXIgYmVsb3cgKi9cbiYjNDM7XHRXUklURV9PTkNFKGVwaS1cdTAwM2VldmVudC5ldmVudHMsIGV2ZW50LVx1MDAzZWV2ZW50cyk7IC8qIG5lZWQgYmFycmllciBiZWxvdyAqL1xuIFx0ZXBpLVx1MDAzZWV2ZW50LmRhdGEgPSBldmVudC1cdTAwM2VkYXRhOyAvKiBwcm90ZWN0ZWQgYnkgbXR4ICovXG4gXHRpZiAoZXBpLVx1MDAzZWV2ZW50LmV2ZW50cyBcdTAwMjYgRVBPTExXQUtFVVApIHtcbiBcdFx0aWYgKCFlcF9oYXNfd2FrZXVwX3NvdXJjZShlcGkpKVxuQEAgLTIwMzEsNiAmIzQzOzIxMTcsNyBAQCBzdGF0aWMgaW50IGVwX21vZGlmeShzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmVwLVx1MDAzZWxvY2spO1xuIFx0XHRpZiAoIWVwX2lzX2xpbmtlZChlcGkpKSB7XG4gXHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZlcGktXHUwMDNlcmRsbGluaywgXHUwMDI2ZXAtXHUwMDNlcmRsbGlzdCk7XG4mIzQzO1x0XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0XHRlcF9wbV9zdGF5X2F3YWtlKGVwaSk7XG4gXG4gXHRcdFx0LyogTm90aWZ5IHdhaXRpbmcgdGFza3MgdGhhdCBldmVudHMgYXJlIGF2YWlsYWJsZSAqL1xuQEAgLTIwODQsNiAmIzQzOzIxNzEsNyBAQCBzdGF0aWMgaW50IGVwX2RlbGl2ZXJfZXZlbnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcbiBcdFx0X19wbV9yZWxheCh3cyk7XG4gXHR9XG4gXG4mIzQzO1x0ZXBfcHJlcGFyZV9yZXBvbGwoZXBpKTtcbiBcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZXBpLVx1MDAzZXJkbGxpbmspO1xuIFxuIFx0LypcbkBAIC0yMTA0LDEzICYjNDM7MjE5MiwxNSBAQCBzdGF0aWMgaW50IGVwX2RlbGl2ZXJfZXZlbnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcbiBcdFx0ICogYXR0ZW1wdC5cbiBcdFx0ICovXG4gXHRcdGxpc3RfYWRkKFx1MDAyNmVwaS1cdTAwM2VyZGxsaW5rLCBzY2FuX2JhdGNoKTtcbiYjNDM7XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0ZXBfcG1fc3RheV9hd2FrZShlcGkpO1xuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdH1cbiBcdCp1ZXZlbnRzID0gbmV4dDtcbiBcbiBcdGlmIChlcGktXHUwMDNlZXZlbnQuZXZlbnRzIFx1MDAyNiBFUE9MTE9ORVNIT1QpIHtcbi1cdFx0ZXBpLVx1MDAzZWV2ZW50LmV2ZW50cyBcdTAwMjY9IEVQX1BSSVZBVEVfQklUUztcbiYjNDM7XHRcdFdSSVRFX09OQ0UoZXBpLVx1MDAzZWV2ZW50LmV2ZW50cyxcbiYjNDM7XHRcdFx0ICAgUkVBRF9PTkNFKGVwaS1cdTAwM2VldmVudC5ldmVudHMpIFx1MDAyNiBFUF9QUklWQVRFX0JJVFMpO1xuIFx0fSBlbHNlIGlmICghKGVwaS1cdTAwM2VldmVudC5ldmVudHMgXHUwMDI2IEVQT0xMRVQpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIExldmVsLXRyaWdnZXJlZDogcmUtcXVldWUgc28gdGhlIG5leHQgZXBvbGxfd2FpdCgpXG5AQCAtMjEyMCw2ICYjNDM7MjIxMCw3IEBAIHN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxuIFx0XHQgKiBkdXJpbmcgc2NhbnMuXG4gXHRcdCAqL1xuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmVwaS1cdTAwM2VyZGxsaW5rLCBcdTAwMjZlcC1cdTAwM2VyZGxsaXN0KTtcbiYjNDM7XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0ZXBfcG1fc3RheV9hd2FrZShlcGkpO1xuIFx0fVxuIFx0cmV0dXJuIDE7XG5AQCAtMjI4Nyw2ICYjNDM7MjM3OCwxMSBAQCBzdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcbiBcdHdoaWxlICgxKSB7XG4gXHRcdGlmIChlYXZhaWwpIHtcbiBcdFx0XHRyZXMgPSBlcF90cnlfc2VuZF9ldmVudHMoZXAsIGV2ZW50cywgbWF4ZXZlbnRzKTtcbiYjNDM7XHRcdFx0aWYgKHJlcyA9PSAtRUlOVFIpIHtcbiYjNDM7XHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmVwLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHRcdHdha2VfdXAoXHUwMDI2ZXAtXHUwMDNld3EpO1xuJiM0MztcdFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZlcC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdGlmIChyZXMpXG4gXHRcdFx0XHRyZXR1cm4gcmVzO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFUE9MTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX2Vwb2xsX2N0bCYjMzQ7LAogICAgJiMzNDtkb19lcG9sbF9jdGxfZmlsZSYjMzQ7LAogICAgJiMzNDtlcG9sbF9zZW5kZXZlbnRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIGVwb2xsIGNhbGxiYWNrcywgYWRkaW5nIG5ldyBzdGF0ZSBiaXRzIChFUF9TVEFURV9BQ0NPVU5URUQsIEVQX1NUQVRFX0ZBU1QpIGFuZCBtb2RpZnlpbmcgdGhlIGNvcmUgZXZlbnQgZGVsaXZlcnkgYW5kIHBvbGxpbmcgbG9naWMgaW4gZnMvZXZlbnRwb2xsLmMuIFRoaXMgYWZmZWN0cyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGFuZCBpcyBoaWdobHkgcmVhY2hhYmxlIHZpYSBlcG9sbCBzeXNjYWxscyBhbmQgaW9fdXJpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ODkyODY5YmQyMzYzNDdhMmZjOTIxZjczOWVmNjdjYzA2MTAxZTkwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMDI6NTA6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9ldmVudHBvbGwuYyBiL2ZzL2V2ZW50cG9sbC5jCmluZGV4IGUwYzRiZjg4YTgzODMuLjYwMGQzZDJkNDc2MzYgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50cG9sbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V2ZW50cG9sbC5jCkBAIC0yNDMsNiAmIzQzOzI0MywxNCBAQCBzdHJ1Y3QgZXBwb2xsX2VudHJ5IHsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAqd2hlYWQ7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBGQVNUIGlzIHNldCBmb3IgZWxpZ2libGUgaXRlbXMgYXQgaW5zZXJ0aW9uLiBBQ0NPVU5URUQgdHJhY2tzIEZBU1QgaXRlbXMKJiM0MzsgKiB3aGlsZSB0aGUgcmVhZHkgcGF0aCBvd25zIHRoZW0gYW5kIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHJlLXBvbGwuCiYjNDM7ICovCiYjNDM7ZW51bSB7CiYjNDM7CUVQX1NUQVRFX0FDQ09VTlRFRAk9IEJJVCgwKSwKJiM0MzsJRVBfU1RBVEVfRkFTVAkJPSBCSVQoMSksCiYjNDM7fTsKIC8qCiAgKiBFYWNoIGZpbGUgZGVzY3JpcHRvciBhZGRlZCB0byB0aGUgZXZlbnRwb2xsIGludGVyZmFjZSB3aWxsCiAgKiBoYXZlIGFuIGVudHJ5IG9mIHRoaXMgdHlwZSBsaW5rZWQgdG8gdGhlICYjMzQ7cmJyJiMzNDsgUkIgdHJlZS4KQEAgLTI3MSw2ICYjNDM7Mjc5LDkgQEAgc3RydWN0IGVwaXRlbSB7CiAJLyogVGhlIGZpbGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiB0aGlzIGl0ZW0gcmVmZXJzIHRvICovCiAJc3RydWN0IGVwb2xsX2tleSBmZmQ7CiAKJiM0MzsJLyogQXRvbWljIHN0YXRlIGJpdHMsIHNlZSB0aGUgRVBfU1RBVEVfKiBlbnVtIGFib3ZlLiAqLwomIzQzOwlhdG9taWNfdCBzdGF0ZTsKJiM0MzsKIAkvKiBMaXN0IGNvbnRhaW5pbmcgcG9sbCB3YWl0IHF1ZXVlcyAqLwogCXN0cnVjdCBlcHBvbGxfZW50cnkgKnB3cWxpc3Q7CiAKQEAgLTYyMCw2ICYjNDM7NjMxLDY1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlcF9ldmVudHNfYXZhaWxhYmxlKHN0cnVjdCBldmVudHBvbGwgKmVwKQogCQlyZWFkX3NlcWNvdW50X3JldHJ5KCZhbXA7ZXAtJmd0O3NlcSwgc2VxKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogTGV0IEEgYmUgQUNDT1VOVEVEIGFuZCBCIGJlIGZpbGUgcmVhZGluZXNzLiBGdWxseSBvcmRlcmVkIGF0b21pYyBSTVdzCiYjNDM7ICogcGFpciBXKEE9MCkgYmVmb3JlIFIoQikgd2l0aCBXKEIpIGJlZm9yZSBSKEEpLCBzbyBhIHNjYW5uZXIgY2Fubm90IG1pc3MKJiM0MzsgKiBCIHdoaWxlIGl0cyBjYWxsYmFjayBza2lwcyBhbiBhY2NvdW50ZWQgaXRlbS4gZXBfZG9uZV9zY2FuKCkgYW5kIHRoZQomIzQzOyAqIGZhdGFsLXNpZ25hbCBoYW5kb2ZmIHBhc3MgcXVldWVkIGV2ZW50cyBiZXR3ZWVuIGV4Y2x1c2l2ZSB3YWl0ZXJzLgomIzQzOyAqIHBvbGxfd2FpdCB1c2VycywgcHJpdmF0ZSBtb2RlcyBhbmQgc3BlY2lhbCBjYWxsYmFja3MgdGFrZSB0aGUgc2xvdyBwYXRoLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBlcF9zdGF0ZV90ZXN0KGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSwgdW5zaWduZWQgaW50IGJpdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhdG9taWNfcmVhZCgmYW1wO2VwaS0mZ3Q7c3RhdGUpICZhbXA7IGJpdDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgZXBpdGVtICplcGkpCiYjNDM7ewomIzQzOwlyZXR1cm4gZXBfc3RhdGVfdGVzdChlcGksIEVQX1NUQVRFX0ZBU1QpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZXBfc2V0X3JlYWR5X2FjY291bnRlZChzdHJ1Y3QgZXBpdGVtICplcGkpCiYjNDM7ewomIzQzOwlpZiAoZXBfcmVhZHlfZmFzdF9lbmFibGVkKGVwaSkpCiYjNDM7CQlhdG9taWNfb3IoRVBfU1RBVEVfQUNDT1VOVEVELCAmYW1wO2VwaS0mZ3Q7c3RhdGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZXBfcHJlcGFyZV9yZXBvbGwoc3RydWN0IGVwaXRlbSAqZXBpKQomIzQzO3sKJiM0MzsJaWYgKGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChlcGkpKQomIzQzOwkJYXRvbWljX2ZldGNoX2FuZG5vdChFUF9TVEFURV9BQ0NPVU5URUQsICZhbXA7ZXBpLSZndDtzdGF0ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGVwX2NhbGxiYWNrX2Nhbl9za2lwKHN0cnVjdCBlcGl0ZW0gKmVwaSwgX19wb2xsX3QgcG9sbGZsYWdzKQomIzQzO3sKJiM0MzsJX19wb2xsX3QgZXZlbnRzOwomIzQzOwomIzQzOwlldmVudHMgPSBSRUFEX09OQ0UoZXBpLSZndDtldmVudC5ldmVudHMpOwomIzQzOwkKJiM0MzsJLyogT25seSBpbnNlcnRpb24tdGltZSBjYW5kaWRhdGVzIG1heSB1c2UgdGhlIGxvY2tsZXNzIHBhdGguICovCiYjNDM7CWlmICghZXBfcmVhZHlfZmFzdF9lbmFibGVkKGVwaSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CQomIzQzOwkvKiBlcF9tb2RpZnkoKSBjYW4gc2VsZWN0IGEgcHJpdmF0ZSBtb2RlIHRoYXQgcmVxdWlyZXMgdGhlIHNsb3cgcGF0aC4gKi8KJiM0MzsJaWYgKGV2ZW50cyAmYW1wOyBFUF9QUklWQVRFX0JJVFMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIHBvbGxfd2FpdCB1c2VycyBtdXN0IGJlIHdva2VuIGJ5IHRoaXMgY2FsbGJhY2suICovCiYjNDM7CWlmICh3YWl0cXVldWVfYWN0aXZlKCZhbXA7ZXBpLSZndDtlcC0mZ3Q7cG9sbF93YWl0KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogUE9MTEZSRUUgdGVhcnMgZG93biB3YWl0IGVudHJpZXM7IFVSSU5HX1dBS0UgbXVzdCBwcm9wYWdhdGUuICovCiYjNDM7CWlmIChwb2xsZmxhZ3MgJmFtcDsgKFBPTExGUkVFIHwgRVBPTExfVVJJTkdfV0FLRSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIFVubWF0Y2hlZCB3YWtlIGtleXMgcmV0YWluIHRoZSBzbG93LXBhdGggY2FsbGJhY2sgc2VtYW50aWNzLiAqLwomIzQzOwlpZiAocG9sbGZsYWdzICZhbXA7JmFtcDsgIShwb2xsZmxhZ3MgJmFtcDsgZXZlbnRzKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogRnVsbHkgb3JkZXJlZCBSTVcgcGFpcnMgdGhlIEIgdXBkYXRlIHdpdGggdGhlIHNjYW5uZXImIzM5O3MgQSBjbGVhci4gKi8KJiM0MzsJcmV0dXJuIGF0b21pY19mZXRjaF9vcigwLCAmYW1wO2VwaS0mZ3Q7c3RhdGUpICZhbXA7IEVQX1NUQVRFX0FDQ09VTlRFRDsKJiM0Mzt9CiYjNDM7CiAjaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTEwKIC8qKgogICogYnVzeV9sb29wX2VwX3RpbWVvdXQgLSBjaGVjayBpZiBidXN5IHBvbGwgaGFzIHRpbWVkIG91dC4gVGhlIHRpbWVvdXQgdmFsdWUKQEAgLTEwMDcsNiAmIzQzOzEwNzcsNyBAQCBzdGF0aWMgdm9pZCBlcF9kb25lX3NjYW4oc3RydWN0IGV2ZW50cG9sbCAqZXAsCiAJCQkgKiByZXZlcnNlcyB0aGUgaXRlcmF0aW9uIG9yZGVyIGludG8gRklGTy4KIAkJCSAqLwogCQkJbGlzdF9hZGQoJmFtcDtlcGktJmd0O3JkbGxpbmssICZhbXA7ZXAtJmd0O3JkbGxpc3QpOwomIzQzOwkJCWVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTsKIAkJCWVwX3BtX3N0YXlfYXdha2UoZXBpKTsKIAkJfQogCX0KQEAgLTEzMDMsOCAmIzQzOzEzNzQsMTAgQEAgc3RhdGljIF9fcG9sbF90IF9fZXBfZXZlbnRwb2xsX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQsIGludCBkZXAKIAltdXRleF9sb2NrX25lc3RlZCgmYW1wO2VwLSZndDttdHgsIGRlcHRoKTsKIAllcF9zdGFydF9zY2FuKGVwLCAmYW1wO3NjYW5fYmF0Y2gpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlcGksIHRtcCwgJmFtcDtzY2FuX2JhdGNoLCByZGxsaW5rKSB7CiYjNDM7CQllcF9wcmVwYXJlX3JlcG9sbChlcGkpOwogCQlpZiAoZXBfaXRlbV9wb2xsKGVwaSwgJmFtcDtwdCwgZGVwdGggJiM0MzsgMSkpIHsKIAkJCXJlcyA9IEVQT0xMSU4gfCBFUE9MTFJETk9STTsKJiM0MzsJCQllcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7CiAJCQlicmVhazsKIAkJfSBlbHNlIHsKIAkJCS8qCkBAIC0xNDk3LDYgJiM0MzsxNTcwLDkgQEAgc3RhdGljIGludCBlcF9wb2xsX2NhbGxiYWNrKHdhaXRfcXVldWVfZW50cnlfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHYKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBld2FrZSA9IDA7CiAKJiM0MzsJaWYgKGVwX2NhbGxiYWNrX2Nhbl9za2lwKGVwaSwgcG9sbGZsYWdzKSkKJiM0MzsJCXJldHVybiAxOwomIzQzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZXAtJmd0O2xvY2ssIGZsYWdzKTsKIAogCWVwX3NldF9idXN5X3BvbGxfbmFwaV9pZChlcGkpOwpAQCAtMTUyOSwxMSAmIzQzOzE2MDUsMTMgQEAgc3RhdGljIGludCBlcF9wb2xsX2NhbGxiYWNrKHdhaXRfcXVldWVfZW50cnlfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHYKIAkJaWYgKCFlcGlfb25fb3ZmbGlzdChlcGkpKSB7CiAJCQllcGktJmd0O292Zmxpc3RfbmV4dCA9IFJFQURfT05DRShlcC0mZ3Q7b3ZmbGlzdCk7CiAJCQlXUklURV9PTkNFKGVwLSZndDtvdmZsaXN0LCBlcGkpOwomIzQzOwkJCWVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTsKIAkJCWVwX3BtX3N0YXlfYXdha2VfcmN1KGVwaSk7CiAJCX0KIAl9IGVsc2UgaWYgKCFlcF9pc19saW5rZWQoZXBpKSkgewogCQkvKiBJbiB0aGUgdXN1YWwgY2FzZSwgYWRkIGV2ZW50IHRvIHJlYWR5IGxpc3QuICovCiAJCWxpc3RfYWRkX3RhaWwoJmFtcDtlcGktJmd0O3JkbGxpbmssICZhbXA7ZXAtJmd0O3JkbGxpc3QpOwomIzQzOwkJZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpOwogCQllcF9wbV9zdGF5X2F3YWtlX3JjdShlcGkpOwogCX0KIApAQCAtMTkxMiw2ICYjNDM7MTk5MCwxMyBAQCBzdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCwKIAlpZiAoSVNfRVJSKGVwaSkpCiAJCXJldHVybiBQVFJfRVJSKGVwaSk7CiAKJiM0MzsJLyoKJiM0MzsJICogTG9ja2xlc3MgY2FuZGlkYXRlcyBhcmUgcGxhaW4gbGV2ZWwtdHJpZ2dlcmVkIGludGVyZXN0czsKJiM0MzsJICogcHJpdmF0ZSBtb2RlcyBhbmQgbmVzdGVkIGVwb2xsIGNoYW5nZSB0aGUgY2FsbGJhY2sgY29udHJhY3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXRlcCAmYW1wOyZhbXA7ICEoZXZlbnQtJmd0O2V2ZW50cyAmYW1wOyBFUF9QUklWQVRFX0JJVFMpKQomIzQzOwkJYXRvbWljX3NldCgmYW1wO2VwaS0mZ3Q7c3RhdGUsIEVQX1NUQVRFX0ZBU1QpOwomIzQzOwogCWVycm9yID0gZXBfcmVnaXN0ZXJfZXBpdGVtKGN0eCwgZXAsIGVwaSwgdGVwLCBmdWxsX2NoZWNrKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTE5NTYsNiAmIzQzOzIwNDEsNyBAQCBzdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCwKIAogCWlmIChyZXZlbnRzICZhbXA7JmFtcDsgIWVwX2lzX2xpbmtlZChlcGkpKSB7CiAJCWxpc3RfYWRkX3RhaWwoJmFtcDtlcGktJmd0O3JkbGxpbmssICZhbXA7ZXAtJmd0O3JkbGxpc3QpOwomIzQzOwkJZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpOwogCQllcF9wbV9zdGF5X2F3YWtlKGVwaSk7CiAKIAkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmFtcDtlcC0mZ3Q7d3EpKQpAQCAtMTk5Miw3ICYjNDM7MjA3OCw3IEBAIHN0YXRpYyBpbnQgZXBfbW9kaWZ5KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksCiAJICogb3RoZXJ3aXNlIHdlIG1pZ2h0IG1pc3MgYW4gZXZlbnQgdGhhdCBoYXBwZW5zIGJldHdlZW4gdGhlCiAJICogZl9vcC0mZ3Q7cG9sbCgpIGNhbGwgYW5kIHRoZSBuZXcgZXZlbnQgc2V0IHJlZ2lzdGVyaW5nLgogCSAqLwotCWVwaS0mZ3Q7ZXZlbnQuZXZlbnRzID0gZXZlbnQtJmd0O2V2ZW50czsgLyogbmVlZCBiYXJyaWVyIGJlbG93ICovCiYjNDM7CVdSSVRFX09OQ0UoZXBpLSZndDtldmVudC5ldmVudHMsIGV2ZW50LSZndDtldmVudHMpOyAvKiBuZWVkIGJhcnJpZXIgYmVsb3cgKi8KIAllcGktJmd0O2V2ZW50LmRhdGEgPSBldmVudC0mZ3Q7ZGF0YTsgLyogcHJvdGVjdGVkIGJ5IG10eCAqLwogCWlmIChlcGktJmd0O2V2ZW50LmV2ZW50cyAmYW1wOyBFUE9MTFdBS0VVUCkgewogCQlpZiAoIWVwX2hhc193YWtldXBfc291cmNlKGVwaSkpCkBAIC0yMDMxLDYgJiM0MzsyMTE3LDcgQEAgc3RhdGljIGludCBlcF9tb2RpZnkoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSwKIAkJc3Bpbl9sb2NrX2lycSgmYW1wO2VwLSZndDtsb2NrKTsKIAkJaWYgKCFlcF9pc19saW5rZWQoZXBpKSkgewogCQkJbGlzdF9hZGRfdGFpbCgmYW1wO2VwaS0mZ3Q7cmRsbGluaywgJmFtcDtlcC0mZ3Q7cmRsbGlzdCk7CiYjNDM7CQkJZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpOwogCQkJZXBfcG1fc3RheV9hd2FrZShlcGkpOwogCiAJCQkvKiBOb3RpZnkgd2FpdGluZyB0YXNrcyB0aGF0IGV2ZW50cyBhcmUgYXZhaWxhYmxlICovCkBAIC0yMDg0LDYgJiM0MzsyMTcxLDcgQEAgc3RhdGljIGludCBlcF9kZWxpdmVyX2V2ZW50KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksCiAJCV9fcG1fcmVsYXgod3MpOwogCX0KIAomIzQzOwllcF9wcmVwYXJlX3JlcG9sbChlcGkpOwogCWxpc3RfZGVsX2luaXQoJmFtcDtlcGktJmd0O3JkbGxpbmspOwogCiAJLyoKQEAgLTIxMDQsMTMgJiM0MzsyMTkyLDE1IEBAIHN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLAogCQkgKiBhdHRlbXB0LgogCQkgKi8KIAkJbGlzdF9hZGQoJmFtcDtlcGktJmd0O3JkbGxpbmssIHNjYW5fYmF0Y2gpOwomIzQzOwkJZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpOwogCQllcF9wbV9zdGF5X2F3YWtlKGVwaSk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAkqdWV2ZW50cyA9IG5leHQ7CiAKIAlpZiAoZXBpLSZndDtldmVudC5ldmVudHMgJmFtcDsgRVBPTExPTkVTSE9UKSB7Ci0JCWVwaS0mZ3Q7ZXZlbnQuZXZlbnRzICZhbXA7PSBFUF9QUklWQVRFX0JJVFM7CiYjNDM7CQlXUklURV9PTkNFKGVwaS0mZ3Q7ZXZlbnQuZXZlbnRzLAomIzQzOwkJCSAgIFJFQURfT05DRShlcGktJmd0O2V2ZW50LmV2ZW50cykgJmFtcDsgRVBfUFJJVkFURV9CSVRTKTsKIAl9IGVsc2UgaWYgKCEoZXBpLSZndDtldmVudC5ldmVudHMgJmFtcDsgRVBPTExFVCkpIHsKIAkJLyoKIAkJICogTGV2ZWwtdHJpZ2dlcmVkOiByZS1xdWV1ZSBzbyB0aGUgbmV4dCBlcG9sbF93YWl0KCkKQEAgLTIxMjAsNiAmIzQzOzIyMTAsNyBAQCBzdGF0aWMgaW50IGVwX2RlbGl2ZXJfZXZlbnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSwKIAkJICogZHVyaW5nIHNjYW5zLgogCQkgKi8KIAkJbGlzdF9hZGRfdGFpbCgmYW1wO2VwaS0mZ3Q7cmRsbGluaywgJmFtcDtlcC0mZ3Q7cmRsbGlzdCk7CiYjNDM7CQllcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7CiAJCWVwX3BtX3N0YXlfYXdha2UoZXBpKTsKIAl9CiAJcmV0dXJuIDE7CkBAIC0yMjg3LDYgJiM0MzsyMzc4LDExIEBAIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLAogCXdoaWxlICgxKSB7CiAJCWlmIChlYXZhaWwpIHsKIAkJCXJlcyA9IGVwX3RyeV9zZW5kX2V2ZW50cyhlcCwgZXZlbnRzLCBtYXhldmVudHMpOwomIzQzOwkJCWlmIChyZXMgPT0gLUVJTlRSKSB7CiYjNDM7CQkJCXNwaW5fbG9ja19pcnEoJmFtcDtlcC0mZ3Q7bG9jayk7CiYjNDM7CQkJCXdha2VfdXAoJmFtcDtlcC0mZ3Q7d3EpOwomIzQzOwkJCQlzcGluX3VubG9ja19pcnEoJmFtcDtlcC0mZ3Q7bG9jayk7CiYjNDM7CQkJfQogCQkJaWYgKHJlcykKIAkJCQlyZXR1cm4gcmVzOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEVwb2xsIFBhdGNoIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTt2ZSBnb3QgYSBwYXRjaCB0b3VjaGluZyBgZnMvZXZlbnRwb2xsLmNgLCB3aGljaCBpcyBhIGNvcmUga2VybmVsIGNvbXBvbmVudCwgc28gaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBiZSBmdXp6aW5nLiBUaGlzIHBhdGNoIGlzIGFkZGluZyBhIGZhc3QgcGF0aCBmb3IgZXBvbGwgY2FsbGJhY2tzLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmcm9tIGEgcGVyZm9ybWFuY2UgYW5kLCBwb3RlbnRpYWxseSwgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGVwX2NhbGxiYWNrX2Nhbl9za2lwKClgIGlzIHRoZSBrZXkuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIGJ5cGFzcyB0aGUgc3BpbmxvY2sgaW4gYGVwX3BvbGxfY2FsbGJhY2tgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgYW5kIHRoYXQga2luZCBvZiBvcHRpbWl6YXRpb24gaXMgb2Z0ZW4gYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gVGhlIG5ldyBzdGF0ZSBiaXRzLCBgRVBfU1RBVEVfQUNDT1VOVEVEYCBhbmQgYEVQX1NUQVRFX0ZBU1RgIGluIGBzdHJ1Y3QgZXBpdGVtYCwgZnVydGhlciBjZW1lbnQgdGhpcyBuZXcgZmFzdCBwYXRoLgoKU28sIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgbmV3IGFuZCBtb2RpZmllZCBmdW5jdGlvbnM6IGBlcF9jYWxsYmFja19jYW5fc2tpcGAsIGBlcF9wb2xsX2NhbGxiYWNrYCwgYGVwX2luc2VydGAsIGBlcF9tb2RpZnlgLCBgZXBfZGVsaXZlcl9ldmVudGAsIGBlcF9wb2xsYCwgYF9fZXBfZXZlbnRwb2xsX3BvbGxgLCBhbmQgYGVwX2RvbmVfc2NhbmAuIE5vdywgd2hpY2ggb25lcyBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIGZ1enppbmcgdGFyZ2V0cz8gRm9jdXNpbmcgb24gdGhlIG9uZXMgd2l0aCB0aGUgbW9zdCBwb3RlbnRpYWwgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgbmV3IGZhc3QgcGF0aDogYGVwX3BvbGxfY2FsbGJhY2tgLCBgZXBfaW5zZXJ0YCwgYGVwX21vZGlmeWAsIGBlcF9wb2xsYCwgYGVwX2RlbGl2ZXJfZXZlbnRgIGFuZCBgX19lcF9ldmVudHBvbGxfcG9sbGAgbG9vayBsaWtlIHRoZSBiZXN0IGNhbmRpZGF0ZXMuCgpgZXBfZGVsaXZlcl9ldmVudGAgaXMgbWFya2VkIGFzIGBzdGF0aWNgLCB3aGljaCBjb3VsZCBtZWFuIGl0JiMzOTtzIGlubGluZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgaXTigJlzIG5vdCBpbmxpbmVkIHRvIHNlZSBpZiB3ZSBjYW4gdGFyZ2V0IGl0LiBXZeKAmWxsIHZlcmlmeSB0aGF0IGl04oCZcyBgc3RhdGljYCB3aXRoIGBncmVwcGVyYCwgYnV0IHdl4oCZbGwgYWxzbyBuZWVkIHRvIGNoZWNrIGBmcy9ldmVudHBvbGwuY2AgZGlyZWN0bHkgdG8gY29uZmlybSB3aGV0aGVyIGl0IGlzIGFjdHVhbGx5IGlubGluZWQgb3Igbm90IHRvIGRlY2lkZSBpZiB3ZSB3aWxsIGluY2x1ZGUgaXQgaW4gb3VyIGZ1enppbmcgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlcF9kZWxpdmVyX2V2ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXZlbnRwb2xsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXZlbnRwb2xsLmM9MjA2Nj1zdGF0aWMgaW50IGVwX21vZGlmeShzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTIxNTEtICovXG5mcy9ldmVudHBvbGwuYzoyMTUyOnN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxuZnMvZXZlbnRwb2xsLmMtMjE1My1cdFx0XHQgICAgcG9sbF90YWJsZSAqcHQsXG4tLVxuZnMvZXZlbnRwb2xsLmM9MjIxOT1zdGF0aWMgaW50IGVwX3NlbmRfZXZlbnRzKHN0cnVjdCBldmVudHBvbGwgKmVwLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTIyNDktXG5mcy9ldmVudHBvbGwuYzoyMjUwOlx0XHRkZWxpdmVyZWQgPSBlcF9kZWxpdmVyX2V2ZW50KGVwLCBlcGksIFx1MDAyNnB0LCBcdTAwMjZldmVudHMsIFx1MDAyNnNjYW5fYmF0Y2gpO1xuZnMvZXZlbnRwb2xsLmMtMjI1MS1cdFx0aWYgKGRlbGl2ZXJlZCBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1OTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIEV2ZW50IERlbGl2ZXJ5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZXBfZGVsaXZlcl9ldmVudGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3Mgc2NvcGVkIHByZXR0eSB0aWdodGx5LCBzcGVjaWZpY2FsbHkgY2FsbGVkIGZyb20gYGVwX3NlbmRfZXZlbnRzYC4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBgZXBfc2VuZF9ldmVudHNgIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIGhvdyBpdCBjYWxscyBgZXBfZGVsaXZlcl9ldmVudGAgaXMga2V5IHRvIGZpZ3VyaW5nIG91dCB0aGUgb3ZlcmFsbCBldmVudCBkZWxpdmVyeSBtZWNoYW5pc20uIEkgbmVlZCB0byB0cmFjZSB0aGlzIGNhbGwgYW5kIHNlZSBob3cgaXQmIzM5O3MgdHJpZ2dlcmVkLCB3aGF0IGRhdGEgaXQgcGFzc2VzLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBmbG93IGxvb2tzIGxpa2UuIFRoaXMgaW5pdGlhbCBvYnNlcnZhdGlvbiBwb2ludHMgdG93YXJkcyBhIHNwZWNpZmljIGludGVyYWN0aW9uIEkgbmVlZCB0byBhbmFseXplIGluIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlcF9zZW5kX2V2ZW50cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jPTMwNj1zdHJ1Y3QgZXZlbnRwb2xsIHtcbi0tXG5mcy9ldmVudHBvbGwuYy0zMzktXG5mcy9ldmVudHBvbGwuYzozNDA6XHQvKiB3YWtldXBfc291cmNlIHVzZWQgd2hlbiBlcF9zZW5kX2V2ZW50cyBvciBfX2VwX2V2ZW50cG9sbF9wb2xsIGlzIHJ1bm5pbmcgKi9cbmZzL2V2ZW50cG9sbC5jLTM0MS1cdHN0cnVjdCB3YWtldXBfc291cmNlICp3cztcbi0tXG5mcy9ldmVudHBvbGwuYz0yMTUyPXN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTIyMTgtXG5mcy9ldmVudHBvbGwuYzoyMjE5OnN0YXRpYyBpbnQgZXBfc2VuZF9ldmVudHMoc3RydWN0IGV2ZW50cG9sbCAqZXAsXG5mcy9ldmVudHBvbGwuYy0yMjIwLVx0XHRcdCAgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLCBpbnQgbWF4ZXZlbnRzKVxuLS1cbmZzL2V2ZW50cG9sbC5jPTIzMDU9c3RhdGljIGludCBlcF90cnlfc2VuZF9ldmVudHMoc3RydWN0IGV2ZW50cG9sbCAqZXAsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjMxNC1cdCAqL1xuZnMvZXZlbnRwb2xsLmM6MjMxNTpcdHJlcyA9IGVwX3NlbmRfZXZlbnRzKGVwLCBldmVudHMsIG1heGV2ZW50cyk7XG5mcy9ldmVudHBvbGwuYy0yMzE2LVx0aWYgKHJlcyBcdTAwM2UgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTExCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29uc2lkZXJpbmcgYGVwX3NlbmRfZXZlbnRzYCBhbmQgYGVwX3BvbGxgIGluIFJlbGF0aW9uIHRvIEVhY2ggT3RoZXIqKgoKUmlnaHQsIHNvIGBlcF9zZW5kX2V2ZW50c2AgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGdpdmVuLiBCdXQgdGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBpdHMgY291bnRlcnBhcnQgaW4gdGhpcyBjb250ZXh0OiBgZXBfcG9sbGAuIElzIGBlcF9wb2xsYCBhbHNvIHN0YXRpYz8gT3IgZG9lcyBpdHMgZGVmaW5pdGlvbiwgb3IgbGFjayB0aGVyZW9mLCBoYXZlIGltcGxpY2F0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBBcmUgdGhlcmUgYXNwZWN0cyBvZiB0aGVpciBpbXBsZW1lbnRhdGlvbiwgb3IgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGhpbiB0aGlzIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCB0aGF0IGFyZSBiZWluZyBzdWJ0bHkgaW5mbHVlbmNlZCBieSBvbmUgYmVpbmcgc3RhdGljIGFuZCB0aGUgb3RoZXIgbm90PyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhleSBpbnRlcmFjdCwgYW5kIHdoZXRoZXIgdGhlIHNjb3BlIG9mIGBlcF9wb2xsYCBpcyBwbGF5aW5nIGEgc2lnbmlmaWNhbnQgcm9sZSBoZXJlLCByZWxhdGl2ZSB0byBgZXBfc2VuZF9ldmVudHNgLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIG9wdGltaXphdGlvbiBiZWluZyBtYWRlLCBvciBhIGxpbWl0YXRpb24gdGhhdCBuZWVkcyB0byBiZSB1bmRlcnN0b29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VwX3BvbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYy01NC0gKiBldmVudHBvbGwgdmlhIHRoZSB3YXRjaGVkIGZpbGUmIzM5O3MgZl9vcC1cdTAwM2Vwb2xsKCkgd2FpdCBxdWV1ZShzKS4gV2hlblxuZnMvZXZlbnRwb2xsLmM6NTU6ICogdGhlIHdhdGNoZWQgZmlsZSBzaWduYWxzIHJlYWRpbmVzcywgZXBfcG9sbF9jYWxsYmFjaygpIGZpcmVzIGFuZFxuZnMvZXZlbnRwb2xsLmMtNTYtICogbWFya3MgdGhlIGVwaXRlbSByZWFkeS4gZXBvbGxfd2FpdCgyKSBkcmFpbnMgdGhlIHJlYWR5IGxpc3QgdW5kZXJcbi0tXG5mcy9ldmVudHBvbGwuYy03Ni0gKiBSYXRpb25hbGU6XG5mcy9ldmVudHBvbGwuYzo3NzogKiAgIC0gZXAtXHUwMDNlbG9jayBpcyBhIHNwaW5sb2NrIGJlY2F1c2UgZXBfcG9sbF9jYWxsYmFjaygpIGlzIGNhbGxlZCBmcm9tXG5mcy9ldmVudHBvbGwuYy03OC0gKiAgICAgd2FrZV91cCgpIHdoaWNoIG1heSBydW4gaW4gaGFyZC1JUlEgY29udGV4dC4gQWxsIGVwLVx1MDAzZWxvY2tcbi0tXG5mcy9ldmVudHBvbGwuYy0xMjYtICogICBldmVudCAgICAgICAgICAgIC0gZXAtXHUwMDNlbXR4IGZvciB3cml0ZXM7IGxvY2tsZXNzIHJlYWQgaW5cbmZzL2V2ZW50cG9sbC5jOjEyNzogKiAgICAgICAgICAgICAgICAgICAgICBlcF9wb2xsX2NhbGxiYWNrIHBhaXJzIHdpdGggc21wX21iKCkgaW5cbmZzL2V2ZW50cG9sbC5jLTEyOC0gKiAgICAgICAgICAgICAgICAgICAgICBlcF9tb2RpZnkoKVxuLS1cbmZzL2V2ZW50cG9sbC5jLTE4MC0gKiAgIGVwX3VucmVnaXN0ZXJfcG9sbHdhaXQoKSAgLSBkcmFpbiBwd3FsaXN0OyBzeW5jaHJvbml6ZXMgd2l0aCBhbnlcbmZzL2V2ZW50cG9sbC5jOjE4MTogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4tZmxpZ2h0IGVwX3BvbGxfY2FsbGJhY2sgdmlhIHRoZVxuZnMvZXZlbnRwb2xsLmMtMTgyLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXRjaGVkIHdhaXQtcXVldWUgaGVhZCYjMzk7cyBsb2NrLlxuLS1cbmZzL2V2ZW50cG9sbC5jLTIwMS0gKlxuZnMvZXZlbnRwb2xsLmM6MjAyOiAqICAgZXBfcG9sbF9jYWxsYmFjaygpIFBPTExGUkVFIGJyYW5jaDpcbmZzL2V2ZW50cG9sbC5jLTIwMy0gKiAgICAgc21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2cHdxLVx1MDAzZXdoZWFkLCBOVUxMKVxuLS1cbmZzL2V2ZW50cG9sbC5jPTU5Nj1zdGF0aWMgaW5saW5lIGJvb2wgZXBfaXNfc2Nhbm5pbmcoc3RydWN0IGV2ZW50cG9sbCAqZXApXG4tLVxuZnMvZXZlbnRwb2xsLmMtNjAwLVxuZnMvZXZlbnRwb2xsLmM6NjAxOi8qIENhbGxlZCBieSBlcF9zdGFydF9zY2FuKCk6IGRpdmVydCBlcF9wb2xsX2NhbGxiYWNrKCkgdG8gb3ZmbGlzdC4gKi9cbmZzL2V2ZW50cG9sbC5jLTYwMi1zdGF0aWMgaW5saW5lIHZvaWQgZXBfZW50ZXJfc2NhbihzdHJ1Y3QgZXZlbnRwb2xsICplcClcbi0tXG5mcy9ldmVudHBvbGwuYy02MDYtXG5mcy9ldmVudHBvbGwuYzo2MDc6LyogQ2FsbGVkIGJ5IGVwX2RvbmVfc2NhbigpOiByZWRpcmVjdCBlcF9wb2xsX2NhbGxiYWNrKCkgYmFjayB0byByZGxsaXN0LiAqL1xuZnMvZXZlbnRwb2xsLmMtNjA4LXN0YXRpYyBpbmxpbmUgdm9pZCBlcF9leGl0X3NjYW4oc3RydWN0IGV2ZW50cG9sbCAqZXApXG4tLVxuZnMvZXZlbnRwb2xsLmM9ODgwPXN0YXRpYyB2b2lkIGVwX3Jlc3VtZV9uYXBpX2lycXMoc3RydWN0IGV2ZW50cG9sbCAqZXApXG4tLVxuZnMvZXZlbnRwb2xsLmMtOTAwLSAqIGNhbGxiYWNrIHdha2V1cCBlbnRyeSBvbiB0aGF0IHF1ZXVlLCBhbmQgdGhlIHdha2VfdXAoKSBwZXJmb3JtZWQgYnkgdGhlXG5mcy9ldmVudHBvbGwuYzo5MDE6ICogXCYjMzQ7ZGZkXCYjMzQ7IG5ldCBjb2RlIHdpbGwgZW5kIHVwIGluIGVwX3BvbGxfY2FsbGJhY2soKS4gQXQgdGhpcyBwb2ludCBlcG9sbFxuZnMvZXZlbnRwb2xsLmMtOTAyLSAqIChlZmQxKSBub3RpY2VzIHRoYXQgaXQgbWF5IGhhdmUgc29tZSBldmVudCByZWFkeSwgc28gaXQgbmVlZHMgdG8gd2FrZSB1cFxuZnMvZXZlbnRwb2xsLmM6OTAzOiAqIHRoZSB3YWl0ZXJzIG9uIGl0cyBwb2xsIHdhaXQgbGlzdCAoZWZkMikuIFNvIGl0IGNhbGxzIGVwX3BvbGxfc2FmZXdha2UoKVxuZnMvZXZlbnRwb2xsLmMtOTA0LSAqIHRoYXQgZW5kcyB1cCBpbiBhbm90aGVyIHdha2VfdXAoKSwgYWZ0ZXIgaGF2aW5nIGNoZWNrZWQgYWJvdXQgdGhlXG4tLVxuZnMvZXZlbnRwb2xsLmMtOTEyLVxuZnMvZXZlbnRwb2xsLmM6OTEzOnN0YXRpYyB2b2lkIGVwX3BvbGxfc2FmZXdha2Uoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcbmZzL2V2ZW50cG9sbC5jLTkxNC1cdFx0XHQgICAgIHVuc2lnbmVkIHBvbGxmbGFncylcbi0tXG5mcy9ldmVudHBvbGwuYy05MjUtXHQgKiBwcm90ZWN0ZWQuIFRodXMsIHdlIGFyZSBpbnRyb2R1Y2luZyBhIHBlciBldmVudHBvbGwgbmVzdCBmaWVsZC5cbmZzL2V2ZW50cG9sbC5jOjkyNjpcdCAqIElmIHdlIGFyZSBub3QgYmVpbmcgY2FsbCBmcm9tIGVwX3BvbGxfY2FsbGJhY2soKSwgZXBpIGlzIE5VTEwgYW5kXG5mcy9ldmVudHBvbGwuYy05MjctXHQgKiB3ZSBhcmUgYXQgdGhlIGZpcnN0IGxldmVsIG9mIG5lc3RpbmcsIDAuIE90aGVyd2lzZSwgd2UgYXJlIGJlaW5nXG5mcy9ldmVudHBvbGwuYzo5Mjg6XHQgKiBjYWxsZWQgZnJvbSBlcF9wb2xsX2NhbGxiYWNrKCkgYW5kIGlmIGEgcHJldmlvdXMgd2FrZXVwIHNvdXJjZSBpc1xuZnMvZXZlbnRwb2xsLmMtOTI5LVx0ICogbm90IGFuIGVwb2xsIGZpbGUgaXRzZWxmLCB3ZSBhcmUgYXQgZGVwdGggMSBzaW5jZSB0aGUgd2FrZXVwIHNvdXJjZVxuLS1cbmZzL2V2ZW50cG9sbC5jLTk1MS1cbmZzL2V2ZW50cG9sbC5jOjk1MjpzdGF0aWMgdm9pZCBlcF9wb2xsX3NhZmV3YWtlKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksXG5mcy9ldmVudHBvbGwuYy05NTMtXHRcdFx0ICAgICBfX3BvbGxfdCBwb2xsZmxhZ3MpXG4tLVxuZnMvZXZlbnRwb2xsLmM9OTYwPXN0YXRpYyB2b2lkIGVwX3JlbW92ZV93YWl0X3F1ZXVlKHN0cnVjdCBlcHBvbGxfZW50cnkgKnB3cSlcbi0tXG5mcy9ldmVudHBvbGwuYy05NjktXHQgKiBBIE5VTEwgbG9hZCBpcyBwYWlyZWQgd2l0aCB0aGUgc21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2d2hlYWQsIE5VTEwpXG5mcy9ldmVudHBvbGwuYzo5NzA6XHQgKiBpbiBlcF9wb2xsX2NhbGxiYWNrKCkmIzM5O3MgUE9MTEZSRUUgYnJhbmNoOiB0aGUgdGVhcmRvd24gaXNcbmZzL2V2ZW50cG9sbC5jLTk3MS1cdCAqIGNvbXBsZXRlIGFuZCB3ZSBtdXN0IG5vdCB0b3VjaCB3aGVhZCBhZ2Fpbi4gT24gYSBub24tTlVMTCBsb2FkXG4tLVxuZnMvZXZlbnRwb2xsLmM9MTAxMz1zdGF0aWMgaW5saW5lIGJvb2wgZXBfaGFzX3dha2V1cF9zb3VyY2Uoc3RydWN0IGVwaXRlbSAqZXBpKVxuLS1cbmZzL2V2ZW50cG9sbC5jLTEwMTctXG5mcy9ldmVudHBvbGwuYzoxMDE4Oi8qIGNhbGwgd2hlbiBlcC1cdTAwM2VtdHggY2Fubm90IGJlIGhlbGQgKGVwX3BvbGxfY2FsbGJhY2spICovXG5mcy9ldmVudHBvbGwuYy0xMDE5LXN0YXRpYyBpbmxpbmUgdm9pZCBlcF9wbV9zdGF5X2F3YWtlX3JjdShzdHJ1Y3QgZXBpdGVtICplcGkpXG4tLVxuZnMvZXZlbnRwb2xsLmM9MTIyNT1zdGF0aWMgdm9pZCBlcF9yZW1vdmUoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSlcbi0tXG5mcy9ldmVudHBvbGwuYy0xMjUwLSAqIGVwX3VucmVnaXN0ZXJfcG9sbHdhaXQoKSB0YWtlcyBlYWNoIHdhdGNoZWQgd2FpdC1xdWV1ZSBoZWFkJiMzOTtzIGxvY2ssXG5mcy9ldmVudHBvbGwuYzoxMjUxOiAqIHdoaWNoIHN5bmNocm9uaXplcyB3aXRoIGFueSBpbi1mbGlnaHQgZXBfcG9sbF9jYWxsYmFjaygpOyBhZnRlclxuZnMvZXZlbnRwb2xsLmMtMTI1Mi0gKiB0aGlzIHJldHVybnMgbm8gY2FsbGJhY2sgY2FuIHN0aWxsIGJlIGFib3V0IHRvIGRlcmVmZXJlbmNlIGFuIGVwaVxuLS1cbmZzL2V2ZW50cG9sbC5jPTEzMDk9c3RhdGljIHZvaWQgZXBfY2xlYXJfYW5kX3B1dChzdHJ1Y3QgZXZlbnRwb2xsICplcClcbi0tXG5mcy9ldmVudHBvbGwuYy0xMzEyLVx0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2ZXAtXHUwMDNlcG9sbF93YWl0KSlcbmZzL2V2ZW50cG9sbC5jOjEzMTM6XHRcdGVwX3BvbGxfc2FmZXdha2UoZXAsIE5VTEwsIDApO1xuZnMvZXZlbnRwb2xsLmMtMTMxNC1cbi0tXG5mcy9ldmVudHBvbGwuYz0xNTM3PXN0YXRpYyBzdHJ1Y3QgZXBpdGVtICplcF9maW5kKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfa2V5ICp0Zilcbi0tXG5mcy9ldmVudHBvbGwuYy0xNTYzLSAqL1xuZnMvZXZlbnRwb2xsLmM6MTU2NDpzdGF0aWMgaW50IGVwX3BvbGxfY2FsbGJhY2sod2FpdF9xdWV1ZV9lbnRyeV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqa2V5KVxuZnMvZXZlbnRwb2xsLmMtMTU2NS17XG4tLVxuZnMvZXZlbnRwb2xsLmMtMTY1MS1cdGlmIChwd2FrZSlcbmZzL2V2ZW50cG9sbC5jOjE2NTI6XHRcdGVwX3BvbGxfc2FmZXdha2UoZXAsIGVwaSwgcG9sbGZsYWdzIFx1MDAyNiBFUE9MTF9VUklOR19XQUtFKTtcbmZzL2V2ZW50cG9sbC5jLTE2NTMtXG4tLVxuZnMvZXZlbnRwb2xsLmM9MTY4Nz1zdGF0aWMgdm9pZCBlcF9wdGFibGVfcXVldWVfcHJvYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgd2FpdF9xdWV1ZV9oZWFkX3QgKndoZWFkLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTE3MDItXG5mcy9ldmVudHBvbGwuYzoxNzAzOlx0aW5pdF93YWl0cXVldWVfZnVuY19lbnRyeShcdTAwMjZwd3EtXHUwMDNld2FpdCwgZXBfcG9sbF9jYWxsYmFjayk7XG5mcy9ldmVudHBvbGwuYy0xNzA0LVx0cHdxLVx1MDAzZXdoZWFkID0gd2hlYWQ7XG4tLVxuZnMvZXZlbnRwb2xsLmM9MTk3ND1zdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCxcbi0tXG5mcy9ldmVudHBvbGwuYy0yMDU2LVx0aWYgKHB3YWtlKVxuZnMvZXZlbnRwb2xsLmM6MjA1NzpcdFx0ZXBfcG9sbF9zYWZld2FrZShlcCwgTlVMTCwgMCk7XG5mcy9ldmVudHBvbGwuYy0yMDU4LVxuLS1cbmZzL2V2ZW50cG9sbC5jPTIwNjY9c3RhdGljIGludCBlcF9tb2RpZnkoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcbi0tXG5mcy9ldmVudHBvbGwuYy0yMDkzLVx0ICogMSkgRmx1c2ggZXBpIGNoYW5nZXMgYWJvdmUgdG8gb3RoZXIgQ1BVcy4gIFRoaXMgZW5zdXJlc1xuZnMvZXZlbnRwb2xsLmM6MjA5NDpcdCAqICAgIHdlIGRvIG5vdCBtaXNzIGV2ZW50cyBmcm9tIGVwX3BvbGxfY2FsbGJhY2sgaWYgYW5cbmZzL2V2ZW50cG9sbC5jLTIwOTUtXHQgKiAgICBldmVudCBvY2N1cnMgaW1tZWRpYXRlbHkgYWZ0ZXIgd2UgY2FsbCBmX29wLVx1MDAzZXBvbGwoKS5cbmZzL2V2ZW50cG9sbC5jLTIwOTYtXHQgKiAgICBXZSBuZWVkIHRoaXMgYmVjYXVzZSB3ZSBkaWQgbm90IHRha2UgZXAtXHUwMDNlbG9jayB3aGlsZVxuZnMvZXZlbnRwb2xsLmM6MjA5NzpcdCAqICAgIGNoYW5naW5nIGVwaSBhYm92ZSAoYnV0IGVwX3BvbGxfY2FsbGJhY2sgZG9lcyB0YWtlXG5mcy9ldmVudHBvbGwuYy0yMDk4LVx0ICogICAgZXAtXHUwMDNlbG9jaykuXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjEwNC1cdCAqXG5mcy9ldmVudHBvbGwuYzoyMTA1Olx0ICogVGhpcyBiYXJyaWVyIHdpbGwgbm93IGd1YXJhbnRlZSBlcF9wb2xsX2NhbGxiYWNrIG9yIGZfb3AtXHUwMDNlcG9sbFxuZnMvZXZlbnRwb2xsLmMtMjEwNi1cdCAqIChvciBib3RoKSB3aWxsIG5vdGljZSB0aGUgcmVhZGluZXNzIG9mIGFuIGl0ZW0uXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjEzMy1cdGlmIChwd2FrZSlcbmZzL2V2ZW50cG9sbC5jOjIxMzQ6XHRcdGVwX3BvbGxfc2FmZXdha2UoZXAsIE5VTEwsIDApO1xuZnMvZXZlbnRwb2xsLmMtMjEzNS1cbi0tXG5mcy9ldmVudHBvbGwuYz0yMjY1PXN0YXRpYyBzdHJ1Y3QgdGltZXNwZWM2NCAqZXBfdGltZW91dF90b190aW1lc3BlYyhzdHJ1Y3QgdGltZXNwZWM2NCAqdG8sIGxvbmcgbXMpXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjI4OC0gKiBrbm93IHRoYXQgZGVmYXVsdF93YWtlX2Z1bmN0aW9uL3R0d3Ugd2lsbCBvbmx5IGZhaWwgaWYgdGhlIHRocmVhZCBpcyBhbHJlYWR5XG5mcy9ldmVudHBvbGwuYzoyMjg5OiAqIHdva2VuLCBhbmQgaW4gdGhhdCBjYXNlIHRoZSBlcF9wb2xsIGxvb3Agd2lsbCByZW1vdmUgdGhlIGVudHJ5IGFueXdheXMsIG5vdFxuZnMvZXZlbnRwb2xsLmMtMjI5MC0gKiB0cnkgdG8gcmV1c2UgaXQuXG4tLVxuZnMvZXZlbnRwb2xsLmM9MjI5Mj1zdGF0aWMgaW50IGVwX2F1dG9yZW1vdmVfd2FrZV9mdW5jdGlvbihzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FfZW50cnksXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjI5Ny1cdC8qXG5mcy9ldmVudHBvbGwuYzoyMjk4Olx0ICogUGFpcnMgd2l0aCBsaXN0X2VtcHR5X2NhcmVmdWwgaW4gZXBfcG9sbCwgYW5kIGVuc3VyZXMgZnV0dXJlIGxvb3BcbmZzL2V2ZW50cG9sbC5jLTIyOTktXHQgKiBpdGVyYXRpb25zIHNlZSB0aGUgY2F1c2Ugb2YgdGhpcyB3YWtldXAuXG4tLVxuZnMvZXZlbnRwb2xsLmM9MjMyMT1zdGF0aWMgaW50IGVwX3NjaGVkdWxlX3RpbWVvdXQoa3RpbWVfdCAqdG8pXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjMyOS0vKipcbmZzL2V2ZW50cG9sbC5jOjIzMzA6ICogZXBfcG9sbCAtIFJldHJpZXZlcyByZWFkeSBldmVudHMsIGFuZCBkZWxpdmVycyB0aGVtIHRvIHRoZSBjYWxsZXItc3VwcGxpZWRcbmZzL2V2ZW50cG9sbC5jLTIzMzEtICogICAgICAgICAgIGV2ZW50IGJ1ZmZlci5cbi0tXG5mcy9ldmVudHBvbGwuYy0yMzQ1LSAqL1xuZnMvZXZlbnRwb2xsLmM6MjM0NjpzdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcbmZzL2V2ZW50cG9sbC5jLTIzNDctXHRcdCAgIGludCBtYXhldmVudHMsIHN0cnVjdCB0aW1lc3BlYzY0ICp0aW1lb3V0KVxuLS1cbmZzL2V2ZW50cG9sbC5jLTI0MjItXHRcdCAqIEJhcnJpZXJsZXNzIHZhcmlhbnQsIHdhaXRxdWV1ZV9hY3RpdmUoKSBpcyBjYWxsZWQgdW5kZXJcbmZzL2V2ZW50cG9sbC5jOjI0MjM6XHRcdCAqIHRoZSBzYW1lIGxvY2sgb24gd2FrZXVwIGVwX3BvbGxfY2FsbGJhY2soKSBzaWRlLCBzbyBpdFxuZnMvZXZlbnRwb2xsLmMtMjQyNC1cdFx0ICogaXMgc2FmZSB0byBhdm9pZCBhbiBleHBsaWNpdCBiYXJyaWVyLlxuLS1cbmZzL2V2ZW50cG9sbC5jPTI5MDM9c3RhdGljIGludCBkb19lcG9sbF93YWl0KGludCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjkyNC1cdC8qIFRpbWUgdG8gZmlzaCBmb3IgZXZlbnRzIC4uLiAqL1xuZnMvZXZlbnRwb2xsLmM6MjkyNTpcdHJldHVybiBlcF9wb2xsKGVwLCBldmVudHMsIG1heGV2ZW50cywgdG8pO1xuZnMvZXZlbnRwb2xsLmMtMjkyNi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE5NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV2ZW50cG9sbCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIE15IGZvY3VzIHNob3VsZCBiZSBvbiBgZXBfcG9sbF9jYWxsYmFja2AsIGBlcF9pbnNlcnRgLCBgZXBfbW9kaWZ5YCwgYGVwX3BvbGxgLCBgX19lcF9ldmVudHBvbGxfcG9sbGAsIGFuZCBgZXBfZG9uZV9zY2FuYC4gTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gc29tZXRoaW5nIOKAkyB5ZXMsIGBfX2VwX2V2ZW50cG9sbF9wb2xsYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb24uIEFuZCBgZXBfZG9uZV9zY2FuYD8gWWVwLCBhbHNvIHN0YXRpYy4gSW50ZXJlc3RpbmcuIExldCYjMzk7cyBzZWUsIGBlcF9pbnNlcnRgIGlzIHN0YXRpYyB0b28uIEh1aCwgaXQgbG9va3MgbGlrZSBhbGwgdGhlc2UgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyB3aXRoaW4gYGZzL2V2ZW50cG9sbC5jYCBhcmUgZGVmaW5lZCBhcyBzdGF0aWMuIFRoYXQgaGVscHMgd2l0aCBlbmNhcHN1bGF0aW9uLCBJIHN1cHBvc2UuIFRoZSB0cnVlIGVudHJ5IHBvaW50cyB0byB0aGlzIHdob2xlIGV2ZW50cG9sbCBtZWNoYW5pc20gYXJlIGBkb19lcG9sbF93YWl0YCwgYGRvX2Vwb2xsX2N0bGAsIGFuZCBgZG9fZXBvbGxfY3JlYXRlYC4gQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgZG9fZXBvbGxfY3RsYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2Vwb2xsX2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jPTM4NT1zdGF0aWMgbG9uZyBtYXhfdXNlcl93YXRjaGVzIF9fcmVhZF9tb3N0bHk7XG4tLVxuZnMvZXZlbnRwb2xsLmMtNDAyLSAqIGFuZCBjYXJyaWVzIGl0cyBzY3JhdGNoIHN0YXRlIG9uIGEgc3RhY2stYWxsb2NhdGVkIHN0cnVjdFxuZnMvZXZlbnRwb2xsLmM6NDAzOiAqIGVwX2N0bF9jdHggc2NvcGVkIHRvIG9uZSBkb19lcG9sbF9jdGwoKSBjYWxsLiBOb24tbmVzdGVkIGluc2VydHNcbmZzL2V2ZW50cG9sbC5jLTQwNC0gKiBza2lwIHRoaXMgbWFjaGluZXJ5IGVudGlyZWx5IGFuZCB0YWtlIG9ubHkgZXAtXHUwMDNlbXR4LlxuLS1cbmZzL2V2ZW50cG9sbC5jPTQyNz1zdGF0aWMgdTY0IGxvb3BfY2hlY2tfZ2VuID0gMDtcbi0tXG5mcy9ldmVudHBvbGwuYy00MzEtLypcbmZzL2V2ZW50cG9sbC5jOjQzMjogKiBQZXItZG9fZXBvbGxfY3RsKCkgc2NyYXRjaCBmb3IgdGhlIGxvb3AgLyBwYXRoIGNoZWNrcy4gQWxsb2NhdGVkIG9uXG5mcy9ldmVudHBvbGwuYy00MzMtICogdGhlIGNhbGxlciYjMzk7cyBzdGFjazsgcG9wdWxhdGVkIGJ5IGVwX2N0bF9sb2NrKCkgYW5kIHRoZSBkb3dud2FyZFxuLS1cbmZzL2V2ZW50cG9sbC5jPTE3Njk9c3RhdGljIGludCByZXZlcnNlX3BhdGhfY2hlY2tfcHJvYyhzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LFxuLS1cbmZzL2V2ZW50cG9sbC5jLTE3OTUtICogICAgICAgICAgICAgICAgICAgICAgb3ZlciBpdHMgbGltaXQgaW4gcGF0aF9saW1pdHNbXS5cbmZzL2V2ZW50cG9sbC5jOjE3OTY6ICogQGN0eDogUGVyLWRvX2Vwb2xsX2N0bCgpIHNjcmF0Y2ggZm9yIHRoZSBsb29wIC8gcGF0aCBjaGVja3MuXG5mcy9ldmVudHBvbGwuYy0xNzk3LSAqXG4tLVxuZnMvZXZlbnRwb2xsLmM9MjM0Nj1zdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcbi0tXG5mcy9ldmVudHBvbGwuYy0yNDc4LSAqXG5mcy9ldmVudHBvbGwuYzoyNDc5OiAqIEBjdHg6IFBlci1kb19lcG9sbF9jdGwoKSBzY3JhdGNoIGZvciB0aGUgbG9vcCAvIHBhdGggY2hlY2tzLlxuZnMvZXZlbnRwb2xsLmMtMjQ4MC0gKiBAZXA6IHRoZSBcdTAwMjZzdHJ1Y3QgZXZlbnRwb2xsIHRvIGJlIGN1cnJlbnRseSBjaGVja2VkLlxuLS1cbmZzL2V2ZW50cG9sbC5jPTI2NDc9c3RhdGljIGlubGluZSBpbnQgZXBvbGxfbXV0ZXhfbG9jayhzdHJ1Y3QgbXV0ZXggKm11dGV4LCBib29sIG5vbmJsb2NrKVxuLS1cbmZzL2V2ZW50cG9sbC5jLTI2NTYtLypcbmZzL2V2ZW50cG9sbC5jOjI2NTc6ICogQWNxdWlyZSB0aGUgbG9ja3MgcmVxdWlyZWQgZm9yIGRvX2Vwb2xsX2N0bCgpIG9uIEBlcCBmb3IgQG9wLlxuZnMvZXZlbnRwb2xsLmMtMjY1OC0gKlxuLS1cbmZzL2V2ZW50cG9sbC5jPTI3MjQ9c3RhdGljIHZvaWQgZXBfY3RsX3VubG9jayhzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCxcbi0tXG5mcy9ldmVudHBvbGwuYy0yNzM0LVxuZnMvZXZlbnRwb2xsLmM6MjczNTppbnQgZG9fZXBvbGxfY3RsX2ZpbGUoc3RydWN0IGZpbGUgKmYsIGludCBvcCwgc3RydWN0IGVwb2xsX2tleSAqdGYsXG5mcy9ldmVudHBvbGwuYy0yNzM2LVx0XHQgICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmVwZHMsIGJvb2wgbm9uYmxvY2spXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjgyMS1cbmZzL2V2ZW50cG9sbC5jOjI4MjI6aW50IGRvX2Vwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXBkcyxcbmZzL2V2ZW50cG9sbC5jLTI4MjMtXHRcdCBib29sIG5vbmJsb2NrKVxuLS1cbmZzL2V2ZW50cG9sbC5jLTI4MzctXHRlZmQuZmQgPSBmZDtcbmZzL2V2ZW50cG9sbC5jOjI4Mzg6XHRyZXR1cm4gZG9fZXBvbGxfY3RsX2ZpbGUoZmRfZmlsZShmKSwgb3AsIFx1MDAyNmVmZCwgZXBkcywgbm9uYmxvY2spO1xuZnMvZXZlbnRwb2xsLmMtMjgzOS19XG4tLVxuZnMvZXZlbnRwb2xsLmM9Mjg0Nj1TWVNDQUxMX0RFRklORTQoZXBvbGxfY3RsLCBpbnQsIGVwZmQsIGludCwgb3AsIGludCwgZmQsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjg1NC1cbmZzL2V2ZW50cG9sbC5jOjI4NTU6XHRyZXR1cm4gZG9fZXBvbGxfY3RsKGVwZmQsIG9wLCBmZCwgXHUwMDI2ZXBkcywgZmFsc2UpO1xuZnMvZXZlbnRwb2xsLmMtMjg1Ni19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTM5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEVwb2xsIEVudHJ5IFBvaW50IEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGVwb2xsIGVudHJ5IHBvaW50cy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHRoZSB1c2Vyc3BhY2UgcmVxdWVzdHMuIEZyb20gd2hhdCBJIHNlZSwgdGhlcmUgYXJlIGEgZmV3IHByaW1hcnkgZnVuY3Rpb25zOiBgZG9fZXBvbGxfY3RsYCwgYGRvX2Vwb2xsX3dhaXRgLCBhbmQgYGRvX2Vwb2xsX2NyZWF0ZWAuIFRob3NlIGFyZSB0aGUgb2J2aW91cyBzdXNwZWN0cyBmb3IgaGFuZGxpbmcgdXNlci1zcGFjZSByZXF1ZXN0cyBkaXJlY3RseS4gVGhlbiB0aGVyZSYjMzk7cyBgZXBfcG9sbF9jYWxsYmFja2AuIE5vdywgdGhhdCBvbmUgaXMgaW50ZXJlc3Rpbmc7IGl0JiMzOTtzIGEgY2FsbGJhY2sgZnVuY3Rpb24sIHR5cGljYWxseSB0cmlnZ2VyZWQgYnkgd2FpdHF1ZXVlcywgYnV0IGl0JiMzOTtzICpzdGF0aWMqLgoKV2FpdCwgbGV0IG1lIHBhcnNlIHRoYXQuIFRoZSBmYWN0IHRoYXQgYGVwX3BvbGxfY2FsbGJhY2tgIGlzIHN0YXRpYyBtZWFucyBpdCYjMzk7cyBub3QgZGlyZWN0bHkgZXhwb3NlZCBhcyBhIHN5c3RlbSBjYWxsIGVudHJ5IHBvaW50LiBJdCYjMzk7cyBjYWxsZWQgaW5kaXJlY3RseSwgbGlrZWx5IGZyb20gd2l0aGluIHRoZSBrZXJuZWwuIEl0JiMzOTtzIHRoZSB3b3JrZXIgaW4gdGhlIHNoYWRvd3MsIG5vdCB0aGUgZnJvbnQgZG9vci4gSSBuZWVkIHRvIGtlZXAgdGhhdCBkaXN0aW5jdGlvbiBjbGVhciBpbiBteSBoZWFkLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgZXBfcG9sbF9jYWxsYmFja2AgaXMgaW5kZWVkIHN0YXRpYy4gQWgsIHllcywgaXQgaXMuIFRoZSBzaWduYXR1cmUgY29uZmlybXM6IGBzdGF0aWMgaW50IGVwX3BvbGxfY2FsbGJhY2sod2FpdF9xdWV1ZV9lbnRyeV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqa2V5KWAuCgpNeSBuZXh0IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucywgYW5kIGlmIHNvLCBob3cgdGhleSBmaXQgaW50byB0aGUgcGljdHVyZS4gYGRvX2Vwb2xsX2N0bGAgbG9va3Mgbm9uLXN0YXRpYyB0byBtZS4gT2theSwgbGV0JiMzOTtzIGFzc3VtZSBgZG9fZXBvbGxfd2FpdGAgaXMgc3RhdGljLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2Vwb2xsX3dhaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYz0yODc5PWludCBlcG9sbF9zZW5kZXZlbnRzKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjkwMi0gKi9cbmZzL2V2ZW50cG9sbC5jOjI5MDM6c3RhdGljIGludCBkb19lcG9sbF93YWl0KGludCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXG5mcy9ldmVudHBvbGwuYy0yOTA0LVx0XHRcdCBpbnQgbWF4ZXZlbnRzLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdG8pXG4tLVxuZnMvZXZlbnRwb2xsLmM9MjkyOD1TWVNDQUxMX0RFRklORTQoZXBvbGxfd2FpdCwgaW50LCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICosIGV2ZW50cyxcbi0tXG5mcy9ldmVudHBvbGwuYy0yOTMyLVxuZnMvZXZlbnRwb2xsLmM6MjkzMzpcdHJldHVybiBkb19lcG9sbF93YWl0KGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLFxuZnMvZXZlbnRwb2xsLmMtMjkzNC1cdFx0XHQgICAgIGVwX3RpbWVvdXRfdG9fdGltZXNwZWMoXHUwMDI2dG8sIHRpbWVvdXQpKTtcbi0tXG5mcy9ldmVudHBvbGwuYz0yOTQxPXN0YXRpYyBpbnQgZG9fZXBvbGxfcHdhaXQoaW50IGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcbi0tXG5mcy9ldmVudHBvbGwuYy0yOTU0LVxuZnMvZXZlbnRwb2xsLmM6Mjk1NTpcdGVycm9yID0gZG9fZXBvbGxfd2FpdChlcGZkLCBldmVudHMsIG1heGV2ZW50cywgdG8pO1xuZnMvZXZlbnRwb2xsLmMtMjk1Ni1cbi0tXG5mcy9ldmVudHBvbGwuYz0zMDM2PXN0YXRpYyBpbnQgZG9fY29tcGF0X2Vwb2xsX3B3YWl0KGludCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMzA1MC1cbmZzL2V2ZW50cG9sbC5jOjMwNTE6XHRlcnIgPSBkb19lcG9sbF93YWl0KGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLCB0aW1lb3V0KTtcbmZzL2V2ZW50cG9sbC5jLTMwNTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTIzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFcG9sbCBGdW5jdGlvbiBDYWxscyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGVwb2xsIGNvZGUsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gY2FsbCBoaWVyYXJjaHkuIGBkb19lcG9sbF93YWl0YCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBleHBvc2VkIGFzIGEgc3lzdGVtIGNhbGwuIFRoYXQgbmFycm93cyBteSBmb2N1cyB0byB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHM6IGBzeXNfZXBvbGxfd2FpdGAsIGBzeXNfZXBvbGxfY3RsYCwgYHN5c19lcG9sbF9wd2FpdGAsIGFuZCBgc3lzX2Vwb2xsX3B3YWl0MmAuIFRob3NlIGFyZSB0aGUgc3lzY2FsbHMuIFBsdXMgYGRvX2Vwb2xsX2N0bGAsIGBkb19lcG9sbF9jdGxfZmlsZWAgd2hpY2ggYXJlIGludGVybmFsLgoKTm93LCBnbGFuY2luZyBhdCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCBJIHNlZSBhIG1peCBvZiBpbmxpbmUgYW5kIHN0YXRpYyBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGhhcyB0b3VjaGVkIGBlcF9ldmVudHNfYXZhaWxhYmxlYCwgYGVwX3N0YXRlX3Rlc3RgLCBgZXBfcmVhZHlfZmFzdF9lbmFibGVkYCwgYGVwX3NldF9yZWFkeV9hY2NvdW50ZWRgLCBgZXBfcHJlcGFyZV9yZXBvbGxgLCB3aGljaCBhcmUgYWxsIGlubGluZSwgcGx1cyBgZXBfY2FsbGJhY2tfY2FuX3NraXBgLCBgZXBfZG9uZV9zY2FuYCwgYF9fZXBfZXZlbnRwb2xsX3BvbGxgLCBgZXBfcG9sbF9jYWxsYmFja2AsIGBlcF9pbnNlcnRgLCBgZXBfbW9kaWZ5YCwgYGVwX2RlbGl2ZXJfZXZlbnRgLCBhbmQgYGVwX3BvbGxgIGFyZSBhbGwgc3RhdGljLiBHaXZlbiB0aGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIG1vc3RseSBzdGF0aWMgb3IgaW5saW5lLCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMgbGlrZWx5IGxpZXMgaW4gaG93IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlIHN5c2NhbGxzIGFuZCBgZG9fZXBvbGxfY3RsYCBvciBgZG9fZXBvbGxfY3RsX2ZpbGVgLCBpbnRlcmFjdCB3aXRoIHRoZW0uCgpTbywgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYGRvX2Vwb2xsX2N0bGAgYW5kIGBkb19lcG9sbF9jdGxfZmlsZWAgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBjb250cm9sIG9wZXJhdGlvbnMgYW5kIHRoZXkgY2FsbCBgZXBfaW5zZXJ0YCBhbmQgYGVwX21vZGlmeWAuIGBkb19lcG9sbF93YWl0YCAodGhlIHN0YXRpYyBvbmUpIGlzIGNhbGxlZCBieSB0aGUgYHN5c19lcG9sbF8qYCBzeXNjYWxscywgbGlrZSBgc3lzX2Vwb2xsX3dhaXRgLCBgc3lzX2Vwb2xsX3B3YWl0YCwgYW5kIGBzeXNfZXBvbGxfcHdhaXQyYC4gVGhhdCBtYWtlcyBzZW5zZS4KCmBfX2VwX2V2ZW50cG9sbF9wb2xsYCBpcyBhbHNvIGtleSBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBieSBgZXBfZXZlbnRwb2xsX3BvbGxgLCB3aGljaCBpcyB0aGUgYC5wb2xsYCBjYWxsYmFjayBmb3IgZXBvbGwgZmlsZXMuIEZpbmFsbHksIGBlcF9wb2xsX2NhbGxiYWNrYCBpcyBjYWxsZWQgYnkgd2FpdHF1ZXVlcy4gU28sIG15IHByaW1hcnkgYXJlYXMgb2YgY29uY2VybiBmb3IgYW55IGRlZXBlciBpbXBhY3QgYW5hbHlzaXMgYXJlOgoKKiAgIGBkb19lcG9sbF9jdGxgIGFuZCBgZG9fZXBvbGxfY3RsX2ZpbGVgCiogICBgc3lzX2Vwb2xsX3dhaXRgLCBgc3lzX2Vwb2xsX3B3YWl0YCwgYHN5c19lcG9sbF9wd2FpdDJgIChhbmQgYnkgaW1wbGljYXRpb24gYGRvX2Vwb2xsX3dhaXRgKQoqICAgYGVwX2V2ZW50cG9sbF9wb2xsYCAod2FpdCwgaXMgKnRoYXQqIHN0YXRpYz8pLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXBfZXZlbnRwb2xsX3BvbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYz0zMDY9c3RydWN0IGV2ZW50cG9sbCB7XG4tLVxuZnMvZXZlbnRwb2xsLmMtMzM5LVxuZnMvZXZlbnRwb2xsLmM6MzQwOlx0Lyogd2FrZXVwX3NvdXJjZSB1c2VkIHdoZW4gZXBfc2VuZF9ldmVudHMgb3IgX19lcF9ldmVudHBvbGxfcG9sbCBpcyBydW5uaW5nICovXG5mcy9ldmVudHBvbGwuYy0zNDEtXHRzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd3M7XG4tLVxuZnMvZXZlbnRwb2xsLmM9MTM1NT1zdGF0aWMgX19wb2xsX3QgZXBfaXRlbV9wb2xsKGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSwgcG9sbF90YWJsZSAqcHQsIGludCBkZXB0aCk7XG5mcy9ldmVudHBvbGwuYy0xMzU2LVxuZnMvZXZlbnRwb2xsLmM6MTM1NzpzdGF0aWMgX19wb2xsX3QgX19lcF9ldmVudHBvbGxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCwgaW50IGRlcHRoKVxuZnMvZXZlbnRwb2xsLmMtMTM1OC17XG4tLVxuZnMvZXZlbnRwb2xsLmMtMTM5Ny0vKlxuZnMvZXZlbnRwb2xsLmM6MTM5ODogKiBEaWZmZXJzIGZyb20gZXBfZXZlbnRwb2xsX3BvbGwoKSBpbiB0aGF0IGludGVybmFsIGNhbGxlcnMgYWxyZWFkeSBoYXZlXG5mcy9ldmVudHBvbGwuYy0xMzk5LSAqIHRoZSBlcC1cdTAwM2VtdHggc28gd2UgbmVlZCB0byBzdGFydCBmcm9tIGRlcHRoPTEsIHN1Y2ggdGhhdCBtdXRleF9sb2NrX25lc3RlZCgpXG4tLVxuZnMvZXZlbnRwb2xsLmM9MTQwMj1zdGF0aWMgX19wb2xsX3QgZXBfaXRlbV9wb2xsKGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSwgcG9sbF90YWJsZSAqcHQsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMTQxOC1cdGVsc2VcbmZzL2V2ZW50cG9sbC5jOjE0MTk6XHRcdHJlcyA9IF9fZXBfZXZlbnRwb2xsX3BvbGwoZmlsZSwgcHQsIGRlcHRoKTtcbmZzL2V2ZW50cG9sbC5jLTE0MjAtXHRmcHV0KGZpbGUpO1xuLS1cbmZzL2V2ZW50cG9sbC5jLTE0MjMtXG5mcy9ldmVudHBvbGwuYzoxNDI0OnN0YXRpYyBfX3BvbGxfdCBlcF9ldmVudHBvbGxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcbmZzL2V2ZW50cG9sbC5jLTE0MjUte1xuZnMvZXZlbnRwb2xsLmM6MTQyNjpcdHJldHVybiBfX2VwX2V2ZW50cG9sbF9wb2xsKGZpbGUsIHdhaXQsIDApO1xuZnMvZXZlbnRwb2xsLmMtMTQyNy19XG4tLVxuZnMvZXZlbnRwb2xsLmM9MTQ1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBldmVudHBvbGxfZm9wcyA9IHtcbi0tXG5mcy9ldmVudHBvbGwuYy0xNDU4LVx0LnJlbGVhc2VcdD0gZXBfZXZlbnRwb2xsX3JlbGVhc2UsXG5mcy9ldmVudHBvbGwuYzoxNDU5Olx0LnBvbGxcdFx0PSBlcF9ldmVudHBvbGxfcG9sbCxcbmZzL2V2ZW50cG9sbC5jLTE0NjAtXHQubGxzZWVrXHRcdD0gbm9vcF9sbHNlZWssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjgxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEVwb2xsIEZ1bmN0aW9uIEh1bnQqKgoKT2theSwgc28gYGVwX2V2ZW50cG9sbF9wb2xsYCBpcyBkZWZpbml0ZWx5IHN0YXRpYywgdGhhdCYjMzk7cyBub3QgZ29pbmcgdG8gZ2V0IG1lIGFueXdoZXJlLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZXBvbGwuIEZyb20gbXkgbm90ZXMsIGl0IGxvb2tzIGxpa2UgYGRvX2Vwb2xsX2N0bGAsIGBkb19lcG9sbF9jdGxfZmlsZWAsIGFuZCBgc3lzX2Vwb2xsX3dhaXRgIGFyZSB0aGUgb25lcyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBXYWl0LCBoYW5nIG9uLi4uIGBzeXNfZXBvbGxfd2FpdGAgaXMgYWN0dWFsbHkgZGVmaW5lZCB1c2luZyBgU1lTQ0FMTF9ERUZJTkU0YCwgc28gdGhlIHN5c3RlbSBjYWxsIG5hbWUgaXMgYHN5c19lcG9sbF93YWl0YCBvciBgX194NjRfc3lzX2Vwb2xsX3dhaXRgLiBJIGNhbiBwcm9iYWJseSBqdXN0IHN0aWNrIHdpdGggYGVwb2xsX3dhaXRgLCB0aG91Z2guCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBjYW4gSSBhY3R1YWxseSAqdXNlKiBhbnkgb2YgdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnM/IExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgc2lnbmF0dXJlIGFuZCBiZWhhdmlvciBvZiBgZG9fZXBvbGxfY3RsYCB0byBtYWtlIHN1cmUgaXQgaXMgaW5kZWVkIHRoZSBiZXN0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fZXBvbGxfY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXZlbnRwb2xsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXZlbnRwb2xsLmM9Mzg1PXN0YXRpYyBsb25nIG1heF91c2VyX3dhdGNoZXMgX19yZWFkX21vc3RseTtcbi0tXG5mcy9ldmVudHBvbGwuYy00MDItICogYW5kIGNhcnJpZXMgaXRzIHNjcmF0Y2ggc3RhdGUgb24gYSBzdGFjay1hbGxvY2F0ZWQgc3RydWN0XG5mcy9ldmVudHBvbGwuYzo0MDM6ICogZXBfY3RsX2N0eCBzY29wZWQgdG8gb25lIGRvX2Vwb2xsX2N0bCgpIGNhbGwuIE5vbi1uZXN0ZWQgaW5zZXJ0c1xuZnMvZXZlbnRwb2xsLmMtNDA0LSAqIHNraXAgdGhpcyBtYWNoaW5lcnkgZW50aXJlbHkgYW5kIHRha2Ugb25seSBlcC1cdTAwM2VtdHguXG4tLVxuZnMvZXZlbnRwb2xsLmM9NDI3PXN0YXRpYyB1NjQgbG9vcF9jaGVja19nZW4gPSAwO1xuLS1cbmZzL2V2ZW50cG9sbC5jLTQzMS0vKlxuZnMvZXZlbnRwb2xsLmM6NDMyOiAqIFBlci1kb19lcG9sbF9jdGwoKSBzY3JhdGNoIGZvciB0aGUgbG9vcCAvIHBhdGggY2hlY2tzLiBBbGxvY2F0ZWQgb25cbmZzL2V2ZW50cG9sbC5jLTQzMy0gKiB0aGUgY2FsbGVyJiMzOTtzIHN0YWNrOyBwb3B1bGF0ZWQgYnkgZXBfY3RsX2xvY2soKSBhbmQgdGhlIGRvd253YXJkXG4tLVxuZnMvZXZlbnRwb2xsLmM9MTc2OT1zdGF0aWMgaW50IHJldmVyc2VfcGF0aF9jaGVja19wcm9jKHN0cnVjdCBlcF9jdGxfY3R4ICpjdHgsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMTc5NS0gKiAgICAgICAgICAgICAgICAgICAgICBvdmVyIGl0cyBsaW1pdCBpbiBwYXRoX2xpbWl0c1tdLlxuZnMvZXZlbnRwb2xsLmM6MTc5NjogKiBAY3R4OiBQZXItZG9fZXBvbGxfY3RsKCkgc2NyYXRjaCBmb3IgdGhlIGxvb3AgLyBwYXRoIGNoZWNrcy5cbmZzL2V2ZW50cG9sbC5jLTE3OTctICpcbi0tXG5mcy9ldmVudHBvbGwuYz0yMzQ2PXN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTI0NzgtICpcbmZzL2V2ZW50cG9sbC5jOjI0Nzk6ICogQGN0eDogUGVyLWRvX2Vwb2xsX2N0bCgpIHNjcmF0Y2ggZm9yIHRoZSBsb29wIC8gcGF0aCBjaGVja3MuXG5mcy9ldmVudHBvbGwuYy0yNDgwLSAqIEBlcDogdGhlIFx1MDAyNnN0cnVjdCBldmVudHBvbGwgdG8gYmUgY3VycmVudGx5IGNoZWNrZWQuXG4tLVxuZnMvZXZlbnRwb2xsLmM9MjY0Nz1zdGF0aWMgaW5saW5lIGludCBlcG9sbF9tdXRleF9sb2NrKHN0cnVjdCBtdXRleCAqbXV0ZXgsIGJvb2wgbm9uYmxvY2spXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjY1Ni0vKlxuZnMvZXZlbnRwb2xsLmM6MjY1NzogKiBBY3F1aXJlIHRoZSBsb2NrcyByZXF1aXJlZCBmb3IgZG9fZXBvbGxfY3RsKCkgb24gQGVwIGZvciBAb3AuXG5mcy9ldmVudHBvbGwuYy0yNjU4LSAqXG4tLVxuZnMvZXZlbnRwb2xsLmM9MjcyND1zdGF0aWMgdm9pZCBlcF9jdGxfdW5sb2NrKHN0cnVjdCBlcF9jdGxfY3R4ICpjdHgsIHN0cnVjdCBldmVudHBvbGwgKmVwLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTI3MzQtXG5mcy9ldmVudHBvbGwuYzoyNzM1OmludCBkb19lcG9sbF9jdGxfZmlsZShzdHJ1Y3QgZmlsZSAqZiwgaW50IG9wLCBzdHJ1Y3QgZXBvbGxfa2V5ICp0ZixcbmZzL2V2ZW50cG9sbC5jLTI3MzYtXHRcdCAgICAgIHN0cnVjdCBlcG9sbF9ldmVudCAqZXBkcywgYm9vbCBub25ibG9jaylcbi0tXG5mcy9ldmVudHBvbGwuYy0yODIxLVxuZnMvZXZlbnRwb2xsLmM6MjgyMjppbnQgZG9fZXBvbGxfY3RsKGludCBlcGZkLCBpbnQgb3AsIGludCBmZCwgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLFxuZnMvZXZlbnRwb2xsLmMtMjgyMy1cdFx0IGJvb2wgbm9uYmxvY2spXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjgzNy1cdGVmZC5mZCA9IGZkO1xuZnMvZXZlbnRwb2xsLmM6MjgzODpcdHJldHVybiBkb19lcG9sbF9jdGxfZmlsZShmZF9maWxlKGYpLCBvcCwgXHUwMDI2ZWZkLCBlcGRzLCBub25ibG9jayk7XG5mcy9ldmVudHBvbGwuYy0yODM5LX1cbi0tXG5mcy9ldmVudHBvbGwuYz0yODQ2PVNZU0NBTExfREVGSU5FNChlcG9sbF9jdGwsIGludCwgZXBmZCwgaW50LCBvcCwgaW50LCBmZCxcbi0tXG5mcy9ldmVudHBvbGwuYy0yODU0LVxuZnMvZXZlbnRwb2xsLmM6Mjg1NTpcdHJldHVybiBkb19lcG9sbF9jdGwoZXBmZCwgb3AsIGZkLCBcdTAwMjZlcGRzLCBmYWxzZSk7XG5mcy9ldmVudHBvbGwuYy0yODU2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgYGVwb2xsYCBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYGVwb2xsYCBpbXBsZW1lbnRhdGlvbiBhZ2Fpbi4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBjb250cm9sIGFuZCB3YWl0IG9wZXJhdGlvbnMuIExldCBtZSBzZWUuLi4gSSBub3RpY2UgdGhhdCBib3RoIGBkb19lcG9sbF9jdGxgIGFuZCBgZG9fZXBvbGxfY3RsX2ZpbGVgIGFyZSBkZWZpbmVkIGFzIG5vbi1zdGF0aWMuIE1ha2VzIHNlbnNlLCB0aGV5JiMzOTtyZSBsaWtlbHkgZW50cnkgcG9pbnRzLiBCdXQgdGhhdCBicmluZ3MgdXAgdGhlIHF1ZXN0aW9uIG9mIGBlcG9sbF93YWl0YC4gSXTigJlzIGEgc3lzdGVtIGNhbGwsIG9idmlvdXNseS4gQnV0IGlzIHRoZXJlIHNvbWUgbm9uLXN0YXRpYyBoZWxwZXIgZnVuY3Rpb24sIHNvbWUgaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCB0byBoYW5kbGUgdGhlIHdhaXRpbmcgYXNwZWN0PyBJIGRvbiYjMzk7dCByZWNhbGwgb25lIG9mZiB0aGUgdG9wIG9mIG15IGhlYWQuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBub24tc3RhdGljIGZ1bmN0aW9uIGludm9sdmVkIGluIHdhaXRpbmcuIExldCYjMzk7cyBzZWUuLi4gTWF5YmUgYGVwb2xsX3NlbmRldmVudHNgPyBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhhdCBmdW5jdGlvbi4gSSBmZWVsIGxpa2UgaXQgbWlnaHQgYmUgc29tZWhvdyBpbnZvbHZlZCBpbiB0aGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXBvbGxfc2VuZGV2ZW50cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jPTI4NTg9c3RhdGljIGludCBlcF9jaGVja19wYXJhbXMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2cyxcbi0tXG5mcy9ldmVudHBvbGwuYy0yODc4LVxuZnMvZXZlbnRwb2xsLmM6Mjg3OTppbnQgZXBvbGxfc2VuZGV2ZW50cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuZnMvZXZlbnRwb2xsLmMtMjg4MC1cdFx0ICAgICBpbnQgbWF4ZXZlbnRzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAyOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBlcG9sbF9zZW5kZXZlbnRzYCYjMzk7cyBTY29wZSoqCgpSaWdodCwgc28gYGVwb2xsX3NlbmRldmVudHNgIGlzbiYjMzk7dCBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgdGhhdCBpdCYjMzk7cyBtZWFudCB0byBiZSBjYWxsYWJsZSBmcm9tIG91dHNpZGUgdGhlIGltbWVkaWF0ZSBtb2R1bGUgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZC4gTGV0JiMzOTtzIHNlZS4uLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqaG93KiBpdCYjMzk7cyBleHBvc2VkLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyB0aGUgaGVhZGVyIGZpbGUgd2hlcmUgdGhlIHJlbGV2YW50IHN0cnVjdHVyZXMgYW5kLCBob3BlZnVsbHksIHByb3RvdHlwZXMgYXJlIGRlY2xhcmVkLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgcGVlayBhdCBgaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaGAgYW5kIHNlZSB3aGF0IHdlJiMzOTtyZSBleHBvcnRpbmcgYW5kIGltcG9ydGluZyBmcm9tIHRoaXMgZmlsZS4gSXQmIzM5O2xsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlbmRlZCB1c2UsIGRlcGVuZGVuY2llcyBhbmQgd2hlcmUgaXQmIzM5O3MgY2FsbGVkLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBxdWljayB3YXkgb2YgdHJhY2luZyBkZXBlbmRlbmNpZXMgYW5kIGVudHJ5IHBvaW50cyBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vwb2xsXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9ldmVudHBvbGwuaD0xNj1zdHJ1Y3QgZmlsZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTIxLSNpZmRlZiBDT05GSUdfS0NNUFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDoyMjpzdHJ1Y3QgZmlsZSAqZ2V0X2Vwb2xsX3RmaWxlX3Jhd19wdHIoc3RydWN0IGZpbGUgKmZpbGUsIGludCB0ZmQsIHVuc2lnbmVkIGxvbmcgdG9mZik7XG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTIzLSNlbmRpZlxuLS1cbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg9MjY9dm9pZCBldmVudHBvbGxfcmVsZWFzZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTI4LS8qIENvcHkgcmVhZHkgZXZlbnRzIHRvIHVzZXJzcGFjZSAqL1xuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDoyOTppbnQgZXBvbGxfc2VuZGV2ZW50cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC0zMC1cdFx0ICAgICBpbnQgbWF4ZXZlbnRzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oPTM4PXN0YXRpYyBpbmxpbmUgdm9pZCBldmVudHBvbGxfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTYzLVxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo2NDpzdHJ1Y3QgZXBvbGxfa2V5IHtcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtNjUtXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTY4LVxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo2OTppbnQgZG9fZXBvbGxfY3RsX2ZpbGUoc3RydWN0IGZpbGUgKmYsIGludCBvcCwgc3RydWN0IGVwb2xsX2tleSAqdGYsXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oOjcwOlx0XHQgICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmVwZHMsIGJvb2wgbm9uYmxvY2spO1xuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo3MTppbnQgZG9fZXBvbGxfY3RsKGludCBlcGZkLCBpbnQgb3AsIGludCBmZCwgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC03Mi1cdFx0IGJvb2wgbm9uYmxvY2spO1xuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaD03Mz1ib29sIGlzX2ZpbGVfZXBvbGwoc3RydWN0IGZpbGUgKmYpO1xuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC03NC1cbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6NzU6LyogVGVsbHMgaWYgdGhlIGVwb2xsX2N0bCgyKSBvcGVyYXRpb24gbmVlZHMgYW4gZXZlbnQgY29weSBmcm9tIHVzZXJzcGFjZSAqL1xuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC03Ni1zdGF0aWMgaW5saW5lIGludCBlcF9vcF9oYXNfZXZlbnQoaW50IG9wKVxuLS1cbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg9ODM9c3RhdGljIGlubGluZSB2b2lkIGV2ZW50cG9sbF9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKSB7fVxuLS1cbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtODgtLyogQVJNIE9BQkkgaGFzIGFuIGluY29tcGF0aWJsZSBzdHJ1Y3QgbGF5b3V0IGFuZCBuZWVkcyBhIHNwZWNpYWwgaGFuZGxlciAqL1xuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo4OTpleHRlcm4gc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oOjkwOmVwb2xsX3B1dF91ZXZlbnQoX19wb2xsX3QgcmV2ZW50cywgX191NjQgZGF0YSxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6OTE6XHRcdCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICp1ZXZlbnQpO1xuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC05Mi0jZWxzZVxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo5MzpzdGF0aWMgaW5saW5lIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKlxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo5NDplcG9sbF9wdXRfdWV2ZW50KF9fcG9sbF90IHJldmVudHMsIF9fdTY0IGRhdGEsXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oOjk1Olx0XHQgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqdWV2ZW50KVxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC05Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDY3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXBvbGwgSW1wbGVtZW50YXRpb24gZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcgdGhlIGVwb2xsIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIGZyb20gd2hhdCBJIGNhbiB0ZWxsLCBgZG9fZXBvbGxfY3RsYCwgYGRvX2Vwb2xsX2N0bF9maWxlYCwgYW5kIGBlcG9sbF9zZW5kZXZlbnRzYCBhcmUgdGhlIHByaW1hcnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIEFuZCwgb2YgY291cnNlLCB0aGUgc3lzdGVtIGNhbGwgZGVmaW5pdGlvbnM6IGBzeXNfZXBvbGxfd2FpdGAsIGBzeXNfZXBvbGxfY3RsYCwgYW5kIGBzeXNfZXBvbGxfY3JlYXRlYCBhcmUgYWxzbyB0aGVyZSwgZGVmaW5lZCB1c2luZyBgU1lTQ0FMTF9ERUZJTkVgLiBTaW5jZSBTeXprYWxsZXIgY2FuIGZ1enogc3lzY2FsbHMgZGlyZWN0bHksIGhpdHRpbmcgdGhvc2Ugc3lzY2FsbCBlbnRyeSBwb2ludHMgZGlyZWN0bHkgbWFrZXMgc2Vuc2UuIFNvLCBmb2N1c2luZyBvbiBgZG9fZXBvbGxfY3RsYCBhbmQgYGVwb2xsX3NlbmRldmVudHNgIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKQnV0IHRoZW4gdGhlcmUmIzM5O3MgdGhpcyBgZXBfcG9sbF9jYWxsYmFja2AgZnVuY3Rpb24uIEl0JiMzOTtzIG1hcmtlZCBhcyBzdGF0aWMsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gSXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHByb3Bvc2VkIHBhdGNoLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdC4gV2FpdCBhIG1pbnV0ZS4uLiB0aGUgaW5zdHJ1Y3Rpb25zIGFsc28gbWVudGlvbiBhdm9pZGluZyBpbmxpbmVkIGhlbHBlciBmdW5jdGlvbnMuIEJ1dCwgYGVwX3BvbGxfY2FsbGJhY2tgIGlzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYGluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnlgLiBUaGF0IG1lYW5zIGl0ICpjYW4mIzM5O3QqIGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCByaWdodD8gVGhlIGNvbXBpbGVyIGhhcyB0byB0cmVhdCBpdCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGJlIGNhbGxhYmxlIHRocm91Z2ggdGhlIHBvaW50ZXIuIFNvLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIHN0aWxsIGFjY2Vzc2libGUgdGhyb3VnaCBhIHN5bWJvbC4gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoYXQgaXQmIzM5O3MgYWN0dWFsbHkgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkuKmVwX3BvbGxfY2FsbGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYz0xNjg3PXN0YXRpYyB2b2lkIGVwX3B0YWJsZV9xdWV1ZV9wcm9jKHN0cnVjdCBmaWxlICpmaWxlLCB3YWl0X3F1ZXVlX2hlYWRfdCAqd2hlYWQsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMTcwMi1cbmZzL2V2ZW50cG9sbC5jOjE3MDM6XHRpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KFx1MDAyNnB3cS1cdTAwM2V3YWl0LCBlcF9wb2xsX2NhbGxiYWNrKTtcbmZzL2V2ZW50cG9sbC5jLTE3MDQtXHRwd3EtXHUwMDNld2hlYWQgPSB3aGVhZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEVwb2xsIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBlcG9sbCwgYW5kIHRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgd2hldGhlciB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSBpbmxpbmVkIG9yIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhIGZ1bmN0aW9uIHBvaW50ZXIgbWVhbnMgaXQmIzM5O3MgKm5vdCogaW5saW5lZCwgd2hpY2ggaXMgYSBrZXkgZGlzdGluY3Rpb24uIE5vdywgdGhlIGluc3RydWN0aW9ucyBJJiMzOTttIHdvcmtpbmcgdW5kZXIgc2F5IEkgbmVlZCB0byBsaXN0IHRoZSBub24tc3RhdGljIEFQSSBlbnRyeSBwb2ludHMuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHRhc2suCgpJIGluaXRpYWxseSBsaXN0ZWQgYGRvX2Vwb2xsX2N0bGAsIGBkb19lcG9sbF9jdGxfZmlsZWAsIGBlcG9sbF9zZW5kZXZlbnRzYCwgYW5kIGBzeXNfZXBvbGxfd2FpdGAgYXMgbGlrZWx5IGNhbmRpZGF0ZXMuIEJ1dCB0aGVuIEkgc3RvcHBlZCB0byB0aGluayBhYm91dCBuYW1pbmcgY29udmVudGlvbnMuIFN5emthbGxlciB1c2VzIHN5c2NhbGwgbmFtZXMsIHdoaWxlIEZvY3VzU3ltYm9scyBhcmUgZm9yIGtlcm5lbCBzeW1ib2xzLiBTbywgaXMgaXQgYF9feDY0X3N5c19lcG9sbF93YWl0YCBvciBzb21ldGhpbmcgbGlrZSBgZG9fZXBvbGxfd2FpdGA/IEFoYSwgYGRvX2Vwb2xsX3dhaXRgIGlzIHN0YXRpYywgc28gdGhhdCYjMzk7cyBvdXQuIEtlZXBpbmcgaW4gbWluZCB0aGUgaW5zdHJ1Y3Rpb24sIGxldCYjMzk7cyBzdGljayB3aXRoIGBkb19lcG9sbF9jdGxgIGFuZCBgZXBvbGxfc2VuZGV2ZW50c2AgZm9yIG5vdyBhcyB0aGUgcmlnaHQgZW50cnkgcG9pbnRzLgoKQnV0LCBhIHN5c2NhbGwgaXMsIHdlbGwsIGEgc3lzY2FsbC4gSXRzIHN5bWJvbCBuYW1lIGRlcGVuZHMgb24gdGhlIGFyY2hpdGVjdHVyZSwgd2hpY2ggY29tcGxpY2F0ZXMgdGhpbmdzLiBJJiMzOTt2ZSBnb3QgdG8gZW5zdXJlIEkmIzM5O20gZ2V0dGluZyBldmVyeXRoaW5nLCBzbyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGVwb2xsLiBUaGUgc2FmZXN0IGFwcHJvYWNoIG5vdyBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQmIzM5O3MgZGlnIGludG8gYGZzL2V2ZW50cG9sbC5jYCBhbmQgaHVudCBmb3IgYW55IGBTWVNDQUxMX0RFRklORWAgbWFjcm9zLiBUaGF0IHNob3VsZCBiZSB0aGUgZGVmaW5pdGl2ZSB3YXkgdG8gaWRlbnRpZnkgYW55IG1pc3NlZCBBUEkgZW50cnlwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NZU0NBTExfREVGSU5FLiplcG9sbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jPTI1OTA9c3RhdGljIGludCBkb19lcG9sbF9jcmVhdGUoaW50IGZsYWdzKVxuLS1cbmZzL2V2ZW50cG9sbC5jLTI2MjAtXG5mcy9ldmVudHBvbGwuYzoyNjIxOlNZU0NBTExfREVGSU5FMShlcG9sbF9jcmVhdGUxLCBpbnQsIGZsYWdzKVxuZnMvZXZlbnRwb2xsLmMtMjYyMi17XG4tLVxuZnMvZXZlbnRwb2xsLmMtMjYyNS1cbmZzL2V2ZW50cG9sbC5jOjI2MjY6U1lTQ0FMTF9ERUZJTkUxKGVwb2xsX2NyZWF0ZSwgaW50LCBzaXplKVxuZnMvZXZlbnRwb2xsLmMtMjYyNy17XG4tLVxuZnMvZXZlbnRwb2xsLmM9MjgyMj1pbnQgZG9fZXBvbGxfY3RsKGludCBlcGZkLCBpbnQgb3AsIGludCBmZCwgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTI4NDUtICovXG5mcy9ldmVudHBvbGwuYzoyODQ2OlNZU0NBTExfREVGSU5FNChlcG9sbF9jdGwsIGludCwgZXBmZCwgaW50LCBvcCwgaW50LCBmZCxcbmZzL2V2ZW50cG9sbC5jLTI4NDctXHRcdHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKiwgZXZlbnQpXG4tLVxuZnMvZXZlbnRwb2xsLmM9MjkwMz1zdGF0aWMgaW50IGRvX2Vwb2xsX3dhaXQoaW50IGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcbi0tXG5mcy9ldmVudHBvbGwuYy0yOTI3LVxuZnMvZXZlbnRwb2xsLmM6MjkyODpTWVNDQUxMX0RFRklORTQoZXBvbGxfd2FpdCwgaW50LCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICosIGV2ZW50cyxcbmZzL2V2ZW50cG9sbC5jLTI5MjktXHRcdGludCwgbWF4ZXZlbnRzLCBpbnQsIHRpbWVvdXQpXG4tLVxuZnMvZXZlbnRwb2xsLmM9Mjk0MT1zdGF0aWMgaW50IGRvX2Vwb2xsX3B3YWl0KGludCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjk2MS1cbmZzL2V2ZW50cG9sbC5jOjI5NjI6U1lTQ0FMTF9ERUZJTkU2KGVwb2xsX3B3YWl0LCBpbnQsIGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKiwgZXZlbnRzLFxuZnMvZXZlbnRwb2xsLmMtMjk2My1cdFx0aW50LCBtYXhldmVudHMsIGludCwgdGltZW91dCwgY29uc3Qgc2lnc2V0X3QgX191c2VyICosIHNpZ21hc2ssXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjk3Mi1cbmZzL2V2ZW50cG9sbC5jOjI5NzM6U1lTQ0FMTF9ERUZJTkU2KGVwb2xsX3B3YWl0MiwgaW50LCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICosIGV2ZW50cyxcbmZzL2V2ZW50cG9sbC5jLTI5NzQtXHRcdGludCwgbWF4ZXZlbnRzLCBjb25zdCBzdHJ1Y3QgX19rZXJuZWxfdGltZXNwZWMgX191c2VyICosIHRpbWVvdXQsXG4tLVxuZnMvZXZlbnRwb2xsLmM9MzAzNj1zdGF0aWMgaW50IGRvX2NvbXBhdF9lcG9sbF9wd2FpdChpbnQgZXBmZCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTMwNTctXG5mcy9ldmVudHBvbGwuYzozMDU4OkNPTVBBVF9TWVNDQUxMX0RFRklORTYoZXBvbGxfcHdhaXQsIGludCwgZXBmZCxcbmZzL2V2ZW50cG9sbC5jLTMwNTktXHRcdCAgICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICosIGV2ZW50cyxcbi0tXG5mcy9ldmVudHBvbGwuYy0zMDcwLVxuZnMvZXZlbnRwb2xsLmM6MzA3MTpDT01QQVRfU1lTQ0FMTF9ERUZJTkU2KGVwb2xsX3B3YWl0MiwgaW50LCBlcGZkLFxuZnMvZXZlbnRwb2xsLmMtMzA3Mi1cdFx0ICAgICAgIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKiwgZXZlbnRzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIyNQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBFcG9sbCBFdmVudCBEaXNwYXRjaCBKb3VybmV5KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBlcG9sbGAgY29kZSBhZ2Fpbi4gTXkgcHJpbWFyeSBGb2N1c1N5bWJvbHMgZm9yIHRoaXMgZXhwbG9yYXRpb24gYXJlIGBkb19lcG9sbF9jdGxgIGFuZCBgZXBvbGxfc2VuZGV2ZW50c2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBldmVudHMgYXJlIG1hbmFnZWQgYW5kIGRlbGl2ZXJlZC4KCkhtbSwgd2FpdCBhIHNlY29uZC4uLiB0aGlzIGlzbiYjMzk7dCBhcyBzdHJhaWdodGZvcndhcmQgYXMgSSBpbml0aWFsbHkgdGhvdWdodC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgZXBvbGxfc2VuZGV2ZW50c2Agd2FzIGRpcmVjdGx5IGludm9rZWQgYnkgYGVwb2xsX3dhaXRgLCBidXQgc29tZXRoaW5nJiMzOTtzIG9mZi4gTGV0IG1lIHJldHJhY2UgbXkgc3RlcHMuLi4gYGVwb2xsX3dhaXRgIGRvZXNuJiMzOTt0IGNhbGwgaXQuIFJpZ2h0LCBgZG9fZXBvbGxfd2FpdGAgY2FsbHMgYGVwX3BvbGxgLCBhbmQgYGVwX3BvbGxgLCBpbiB0dXJuLCBpcyBjYWxsaW5nIHRoZSBzdGF0aWMgZnVuY3Rpb24gYGVwX3NlbmRfZXZlbnRzYC4KClNvLCB3aGVyZSBpcyB0aGlzIGBlcG9sbF9zZW5kZXZlbnRzYCBhY3R1YWxseSBiZWluZyB1c2VkPyBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgaXRzIGNhbGwgc2l0ZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgZXZlbnRzIGFyZSBwcm9wYWdhdGVkIGluIHRoaXMgc3lzdGVtLiBUaGlzIHdpbGwgcmVxdWlyZSBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vwb2xsX3NlbmRldmVudHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXZlbnRwb2xsLmM9Mjg1OD1zdGF0aWMgaW50IGVwX2NoZWNrX3BhcmFtcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZzLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTI4NzgtXG5mcy9ldmVudHBvbGwuYzoyODc5OmludCBlcG9sbF9zZW5kZXZlbnRzKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXG5mcy9ldmVudHBvbGwuYy0yODgwLVx0XHQgICAgIGludCBtYXhldmVudHMpXG4tLVxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaD0yNj12b2lkIGV2ZW50cG9sbF9yZWxlYXNlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpO1xuLS1cbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtMjgtLyogQ29weSByZWFkeSBldmVudHMgdG8gdXNlcnNwYWNlICovXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oOjI5OmludCBlcG9sbF9zZW5kZXZlbnRzKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTMwLVx0XHQgICAgIGludCBtYXhldmVudHMpO1xuLS1cbmlvX3VyaW5nL2Vwb2xsLmM9OTA9aW50IGlvX2Vwb2xsX3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9lcG9sbC5jLTk0LVxuaW9fdXJpbmcvZXBvbGwuYzo5NTpcdHJldCA9IGVwb2xsX3NlbmRldmVudHMocmVxLVx1MDAzZWZpbGUsIGlldy1cdTAwM2VldmVudHMsIGlldy1cdTAwM2VtYXhldmVudHMpO1xuaW9fdXJpbmcvZXBvbGwuYy05Ni1cdGlmIChyZXQgPT0gMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4OTYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipEaXZpbmcgaW50byB0aGUgaW9fdXJpbmcvZXBvbGwgaW50ZXJwbGF5KioKClJpZ2h0LCBzbyBgZXBvbGxfc2VuZGV2ZW50c2AuLi4gdGhhdCByaW5ncyBhIGJlbGwuIEFoLCB5ZXMsIGl0JiMzOTtzIGNhbGxlZCBieSBgaW9fdXJpbmcvZXBvbGwuY2AuIEdvb2QsIHRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSB0d28gYXJlIGNvbm5lY3RlZC4gTm93LCB3aGF0IGVsc2UgaXMgaW4gdGhhdCBhcmVhPyBMZXQmIzM5O3MgY2hlY2sgYGRvX2Vwb2xsX2N0bGAuIElzIHRoYXQgYWxzbyB1c2VkIGJ5IGBpb191cmluZy9lcG9sbC5jYD8gVGhhdCB3b3VsZCBkZWZpbml0ZWx5IGJlIHdvcnRoIGludmVzdGlnYXRpbmcgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fZXBvbGxfY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYz0yODM9YXNtbGlua2FnZSBsb25nIHN5c19vYWJpX2Vwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsXG4tLVxuYXJjaC9hcm0va2VybmVsL3N5c19vYWJpLWNvbXBhdC5jLTI5NS1cbmFyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYzoyOTY6XHRyZXR1cm4gZG9fZXBvbGxfY3RsKGVwZmQsIG9wLCBmZCwgXHUwMDI2a2VybmVsLCBmYWxzZSk7XG5hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMtMjk3LX1cbi0tXG5mcy9ldmVudHBvbGwuYz0zODU9c3RhdGljIGxvbmcgbWF4X3VzZXJfd2F0Y2hlcyBfX3JlYWRfbW9zdGx5O1xuLS1cbmZzL2V2ZW50cG9sbC5jLTQwMi0gKiBhbmQgY2FycmllcyBpdHMgc2NyYXRjaCBzdGF0ZSBvbiBhIHN0YWNrLWFsbG9jYXRlZCBzdHJ1Y3RcbmZzL2V2ZW50cG9sbC5jOjQwMzogKiBlcF9jdGxfY3R4IHNjb3BlZCB0byBvbmUgZG9fZXBvbGxfY3RsKCkgY2FsbC4gTm9uLW5lc3RlZCBpbnNlcnRzXG5mcy9ldmVudHBvbGwuYy00MDQtICogc2tpcCB0aGlzIG1hY2hpbmVyeSBlbnRpcmVseSBhbmQgdGFrZSBvbmx5IGVwLVx1MDAzZW10eC5cbi0tXG5mcy9ldmVudHBvbGwuYz00Mjc9c3RhdGljIHU2NCBsb29wX2NoZWNrX2dlbiA9IDA7XG4tLVxuZnMvZXZlbnRwb2xsLmMtNDMxLS8qXG5mcy9ldmVudHBvbGwuYzo0MzI6ICogUGVyLWRvX2Vwb2xsX2N0bCgpIHNjcmF0Y2ggZm9yIHRoZSBsb29wIC8gcGF0aCBjaGVja3MuIEFsbG9jYXRlZCBvblxuZnMvZXZlbnRwb2xsLmMtNDMzLSAqIHRoZSBjYWxsZXImIzM5O3Mgc3RhY2s7IHBvcHVsYXRlZCBieSBlcF9jdGxfbG9jaygpIGFuZCB0aGUgZG93bndhcmRcbi0tXG5mcy9ldmVudHBvbGwuYz0xNzY5PXN0YXRpYyBpbnQgcmV2ZXJzZV9wYXRoX2NoZWNrX3Byb2Moc3RydWN0IGVwX2N0bF9jdHggKmN0eCxcbi0tXG5mcy9ldmVudHBvbGwuYy0xNzk1LSAqICAgICAgICAgICAgICAgICAgICAgIG92ZXIgaXRzIGxpbWl0IGluIHBhdGhfbGltaXRzW10uXG5mcy9ldmVudHBvbGwuYzoxNzk2OiAqIEBjdHg6IFBlci1kb19lcG9sbF9jdGwoKSBzY3JhdGNoIGZvciB0aGUgbG9vcCAvIHBhdGggY2hlY2tzLlxuZnMvZXZlbnRwb2xsLmMtMTc5Ny0gKlxuLS1cbmZzL2V2ZW50cG9sbC5jPTIzNDY9c3RhdGljIGludCBlcF9wb2xsKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjQ3OC0gKlxuZnMvZXZlbnRwb2xsLmM6MjQ3OTogKiBAY3R4OiBQZXItZG9fZXBvbGxfY3RsKCkgc2NyYXRjaCBmb3IgdGhlIGxvb3AgLyBwYXRoIGNoZWNrcy5cbmZzL2V2ZW50cG9sbC5jLTI0ODAtICogQGVwOiB0aGUgXHUwMDI2c3RydWN0IGV2ZW50cG9sbCB0byBiZSBjdXJyZW50bHkgY2hlY2tlZC5cbi0tXG5mcy9ldmVudHBvbGwuYz0yNjQ3PXN0YXRpYyBpbmxpbmUgaW50IGVwb2xsX211dGV4X2xvY2soc3RydWN0IG11dGV4ICptdXRleCwgYm9vbCBub25ibG9jaylcbi0tXG5mcy9ldmVudHBvbGwuYy0yNjU2LS8qXG5mcy9ldmVudHBvbGwuYzoyNjU3OiAqIEFjcXVpcmUgdGhlIGxvY2tzIHJlcXVpcmVkIGZvciBkb19lcG9sbF9jdGwoKSBvbiBAZXAgZm9yIEBvcC5cbmZzL2V2ZW50cG9sbC5jLTI2NTgtICpcbi0tXG5mcy9ldmVudHBvbGwuYz0yNzI0PXN0YXRpYyB2b2lkIGVwX2N0bF91bmxvY2soc3RydWN0IGVwX2N0bF9jdHggKmN0eCwgc3RydWN0IGV2ZW50cG9sbCAqZXAsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjczNC1cbmZzL2V2ZW50cG9sbC5jOjI3MzU6aW50IGRvX2Vwb2xsX2N0bF9maWxlKHN0cnVjdCBmaWxlICpmLCBpbnQgb3AsIHN0cnVjdCBlcG9sbF9rZXkgKnRmLFxuZnMvZXZlbnRwb2xsLmMtMjczNi1cdFx0ICAgICAgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLCBib29sIG5vbmJsb2NrKVxuLS1cbmZzL2V2ZW50cG9sbC5jLTI4MjEtXG5mcy9ldmVudHBvbGwuYzoyODIyOmludCBkb19lcG9sbF9jdGwoaW50IGVwZmQsIGludCBvcCwgaW50IGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmVwZHMsXG5mcy9ldmVudHBvbGwuYy0yODIzLVx0XHQgYm9vbCBub25ibG9jaylcbi0tXG5mcy9ldmVudHBvbGwuYy0yODM3LVx0ZWZkLmZkID0gZmQ7XG5mcy9ldmVudHBvbGwuYzoyODM4Olx0cmV0dXJuIGRvX2Vwb2xsX2N0bF9maWxlKGZkX2ZpbGUoZiksIG9wLCBcdTAwMjZlZmQsIGVwZHMsIG5vbmJsb2NrKTtcbmZzL2V2ZW50cG9sbC5jLTI4MzktfVxuLS1cbmZzL2V2ZW50cG9sbC5jPTI4NDY9U1lTQ0FMTF9ERUZJTkU0KGVwb2xsX2N0bCwgaW50LCBlcGZkLCBpbnQsIG9wLCBpbnQsIGZkLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTI4NTQtXG5mcy9ldmVudHBvbGwuYzoyODU1Olx0cmV0dXJuIGRvX2Vwb2xsX2N0bChlcGZkLCBvcCwgZmQsIFx1MDAyNmVwZHMsIGZhbHNlKTtcbmZzL2V2ZW50cG9sbC5jLTI4NTYtfVxuLS1cbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg9NjQ9c3RydWN0IGVwb2xsX2tleSB7XG4tLVxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC02OC1cbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6Njk6aW50IGRvX2Vwb2xsX2N0bF9maWxlKHN0cnVjdCBmaWxlICpmLCBpbnQgb3AsIHN0cnVjdCBlcG9sbF9rZXkgKnRmLFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC03MC1cdFx0ICAgICAgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLCBib29sIG5vbmJsb2NrKTtcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6NzE6aW50IGRvX2Vwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXBkcyxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtNzItXHRcdCBib29sIG5vbmJsb2NrKTtcbi0tXG5pb191cmluZy9lcG9sbC5jPTUxPWludCBpb19lcG9sbF9jdGwoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9lcG9sbC5jLTY3LVx0a2V5LmZkID0gaWUtXHUwMDNlZmQ7XG5pb191cmluZy9lcG9sbC5jOjY4Olx0cmV0ID0gZG9fZXBvbGxfY3RsX2ZpbGUoZmRfZmlsZShmKSwgaWUtXHUwMDNlb3AsIFx1MDAyNmtleSwgXHUwMDI2aWUtXHUwMDNlZXZlbnQsIGZvcmNlX25vbmJsb2NrKTtcbmlvX3VyaW5nL2Vwb2xsLmMtNjktXHRpZiAoZm9yY2Vfbm9uYmxvY2sgXHUwMDI2XHUwMDI2IHJldCA9PSAtRUFHQUlOKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ1OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBPdXIgRXBvbGwgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGRvX2Vwb2xsX2N0bF9maWxlYCBpcyBpbmRlZWQgdXNlZCBieSBgaW9fdXJpbmcvZXBvbGwuY2AuIFRoaXMgaXMgZ29vZCwgaXQgaGVscHMgc29saWRpZnkgdGhlIGltcG9ydGFuY2Ugb2YgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGluIHRoZSBvdmVyYWxsIHBpY3R1cmUuIFNvLCB0aGF0LCBhbG9uZyB3aXRoIGBkb19lcG9sbF9jdGxgIGFuZCBgZXBvbGxfc2VuZGV2ZW50c2AgYXJlIGRlZmluaXRlbHkgZXhjZWxsZW50IEZvY3VzU3ltYm9scyBmb3IgdXMgdG8gcmVhbGx5IGRlbHZlIGludG8uIFdoaWxlIEkgY291bGQgYWxzbyBjb25zaWRlciB0aGUgc3lzY2FsbHMgdGhlbXNlbHZlcyBsaWtlIGBzeXNfZXBvbGxfd2FpdGAsIGBzeXNfZXBvbGxfY3RsYCwgYW5kIGBzeXNfZXBvbGxfcHdhaXRgIGFzIHBhcnQgb2YgdGhpcywgU3l6a2FsbGVyIGlzIHByZXR0eSBnb29kIGF0IGZ1enppbmcgdGhvc2UgZGlyZWN0bHksIHNvIHRoZXkgYXJlIGxvd2VyIG9uIHRoZSBwcmlvcml0eSBsaXN0LiBJJiMzOTttIGFkZGluZyBgZG9fZXBvbGxfY3RsYCwgYGRvX2Vwb2xsX2N0bF9maWxlYCwgYW5kIGBlcG9sbF9zZW5kZXZlbnRzYCB0byB0aGUgRm9jdXNTeW1ib2xzIGxpc3Q7IHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHdlIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSBhbGwgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbnMuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYENPTkZJR19gIG9wdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWNhbGx5IHJlcXVpcmVkIGZvciB0aGVzZSBmdW5jdGlvbnMgdG8gZXZlbiBiZSBjb21waWxlZC4gTG9va2luZyBhdCBgZnMvZXZlbnRwb2xsLmNgLCBpdCBzZWVtcyB0aGF0IGBDT05GSUdfRVBPTExgIGlzIHRoZSBrZXkuIEJ1dCBJIHNob3VsZCBkb3VibGUtY2hlY2sgYnkgbG9va2luZyBhdCBgZnMvTWFrZWZpbGVgIG9yIGBpbml0L0tjb25maWdgIGp1c3QgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVBPTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZT0yND1vYmoteVx0XHRcdFx0JiM0Mzs9IG5vdGlmeS9cbmZzL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19FUE9MTClcdFx0JiM0Mzs9IGV2ZW50cG9sbC5vXG5mcy9NYWtlZmlsZS0yNi1vYmoteVx0XHRcdFx0JiM0Mzs9IGFub25faW5vZGVzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMjcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgRVBPTEwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UmIzM5O3JlIG9uIHRoZSByaWdodCB0cmFjayBhbmQgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBlc3BlY2lhbGx5IHNvbWV0aGluZyBhcyBmdW5kYW1lbnRhbCBhcyBgRVBPTExgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBpcyBlbmFibGVkIG9yIGhhcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgZXhwZWN0LiBJdCYjMzk7cyBhIHF1aWNrIHdheSB0byBlbnN1cmUgSSYjMzk7bSBub3QgY2hhc2luZyBhIGdob3N0IGFuZCB0aGF0IHRoZSBncm91bmR3b3JrIGlzIHByb3Blcmx5IGxhaWQgb3V0LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVQT0xMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xODY4PWNvbmZpZyBGVVRFWF9ST0JVU1RfVU5MT0NLXG4tLVxuaW5pdC9LY29uZmlnLTE4NzAtXG5pbml0L0tjb25maWc6MTg3MTpjb25maWcgRVBPTExcbmluaXQvS2NvbmZpZy0xODcyLVx0Ym9vbCBcJiMzNDtFbmFibGUgZXZlbnRwb2xsIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzA2CgkJCQkJCQlvdXRwdXQ6IDEyOQoJCQkJCQkJdGhvdWdodHM6IDQ2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBFcG9sbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgYGZzL2V2ZW50cG9sbC5jYCB0aGF0IEkgbmVlZCB0byBldmFsdWF0ZSBmb3IgZnV6emluZyBwb3RlbnRpYWwuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGFkZGluZyBgRVBPTExgIHRvIGBFbmFibGVDb25maWdzYCBiZWNhdXNlLCB3ZWxsLCBgRVBPTExgIGlzIGEgY29yZSBmZWF0dXJlOyBpdCYjMzk7cyBwcmFjdGljYWxseSBhbHdheXMgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBvYnZpb3VzbHkgaXQgc2hvdWxkIGJlIGVuYWJsZWQgd2hlbiB0ZXN0aW5nIHRoaXMuCgpOb3csIGRpZ2dpbmcgaW50byB0aGUgcGF0Y2ggaXRzZWxmLCBJIGNhbiBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYSAqbG90KiBvZiBjb3JlIGBlcG9sbGAgZnVuY3Rpb25zLiAgV2UmIzM5O3JlIHRhbGtpbmcgZnVuZGFtZW50YWwgcGllY2VzIGhlcmU6IGBlcF9ldmVudHNfYXZhaWxhYmxlYCwgYGVwX3N0YXRlX3Rlc3RgLCBgZXBfcmVhZHlfZmFzdF9lbmFibGVkYCwgYGVwX3NldF9yZWFkeV9hY2NvdW50ZWRgLCBgZXBfcHJlcGFyZV9yZXBvbGxgLCBgZXBfY2FsbGJhY2tfY2FuX3NraXBgLCBgZXBfZG9uZV9zY2FuYCwgYF9fZXBfZXZlbnRwb2xsX3BvbGxgLCBgZXBfcG9sbF9jYWxsYmFja2AsIGBlcF9pbnNlcnRgLCBgZXBfbW9kaWZ5YCwgYGVwX2RlbGl2ZXJfZXZlbnRgLCBhbmQgYGVwX3BvbGxgLiAgQmFzaWNhbGx5IHRoZSB3aG9sZSBzaGViYW5nIQoKVGhlIGNydXggb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhIG5ldyBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIGBlcG9sbGAgY2FsbGJhY2tzLCB3aGljaCBtZWFucyBuZXcgc3RhdGUgYml0cyBsaWtlIGBFUF9TVEFURV9BQ0NPVU5URURgIGFuZCBgRVBfU1RBVEVfRkFTVGAsIGFuZCBjb3JyZXNwb25kaW5nIG1vZGlmaWNhdGlvbnMgdG8gZXZlbnQgZGVsaXZlcnkgYW5kIHBvbGxpbmcgbG9naWMuICBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGFsdGVyYXRpb24gdG8gY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gVGhpcyBraW5kIG9mIHBhdGNoLCBtb2RpZnlpbmcgdGhlIGZ1bmRhbWVudGFsIGV2ZW50IGhhbmRsaW5nIGluIGBlcG9sbGAgd2hpY2ggaXMgdXNlZCBleHRlbnNpdmVseSBieSBhbG1vc3QgYWxsIHNvZnR3YXJlIHJ1bm5pbmcgb24gdGhlIGtlcm5lbCwgaXMgKmRlZmluaXRlbHkqIGdvaW5nIHRvIGJlIHJlYWNoYWJsZSB0aHJvdWdoIGBlcG9sbF9jdGxgIHN5c2NhbGxzLCBgZXBvbGxfd2FpdGAgc3lzY2FsbHMsIGFuZCBldmVuIGlvX3VyaW5nLiBUaGlzIG1lYW5zIGEgZ29vZCBwb3RlbnRpYWwgZm9yIGZ1enppbmcuCgpNeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIG1vZGlmaWVzIHRoZXNlIGZ1bmN0aW9ucyBpbiBhICpmdW5jdGlvbmFsKiB3YXkuIFRoZSBmdW5jdGlvbnMgSSYjMzk7bSBzZWVpbmcgbW9kaWZpZWQgYXJlIGRlZmluaXRlbHkgaW4gdGhlIGZhc3QgcGF0aC4gVGhpcyBraW5kIG9mIGNvZGUgaXMgaGlnaC12YWx1ZSBmb3IgZnV6emluZy4gQWxzbywgYGVwX3BvbGxfY2FsbGJhY2tgIHdoaWNoIGlzIGNhbGxlZCBmcm9tIHdha2VfdXAgaXMgbW9kaWZpZWQuIFRoaXMgaXMgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIGFsc28gdG91Y2hpbmcgYGVwX2luc2VydGAsIGBlcF9tb2RpZnlgLCBgZXBfZGVsaXZlcl9ldmVudGAsIGFuZCBgZXBfcG9sbGAuIEFsbCBvZiB0aGVzZSBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGBlcG9sbF9jdGxgIGFuZCBgZXBvbGxfd2FpdGAuCgpUaGVyZWZvcmUsIEkmIzM5O20gbWFya2luZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc6IHRydWVgLiAgTXkgYEZvY3VzU3ltYm9sc2AgYXJlIGdvaW5nIHRvIGJlIGBkb19lcG9sbF9jdGxgLCBgZG9fZXBvbGxfY3RsX2ZpbGVgLCBhbmQgYGVwb2xsX3NlbmRldmVudHNgIHRvIGhlbHAgZ3VpZGUgdGhlIGZ1enppbmcgZWZmb3J0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VQT0xMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fZXBvbGxfY3RsJiMzNDssCiAgICAmIzM0O2RvX2Vwb2xsX2N0bF9maWxlJiMzNDssCiAgICAmIzM0O2Vwb2xsX3NlbmRldmVudHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgZXBvbGwgY2FsbGJhY2tzLCBhZGRpbmcgbmV3IHN0YXRlIGJpdHMgKEVQX1NUQVRFX0FDQ09VTlRFRCwgRVBfU1RBVEVfRkFTVCkgYW5kIG1vZGlmeWluZyB0aGUgY29yZSBldmVudCBkZWxpdmVyeSBhbmQgcG9sbGluZyBsb2dpYyBpbiBmcy9ldmVudHBvbGwuYy4gVGhpcyBhZmZlY3RzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIGhpZ2hseSByZWFjaGFibGUgdmlhIGVwb2xsIHN5c2NhbGxzIGFuZCBpb191cmluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVBPTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19lcG9sbF9jdGwmIzM0OywKICAgICYjMzQ7ZG9fZXBvbGxfY3RsX2ZpbGUmIzM0OywKICAgICYjMzQ7ZXBvbGxfc2VuZGV2ZW50cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciBlcG9sbCBjYWxsYmFja3MsIGFkZGluZyBuZXcgc3RhdGUgYml0cyAoRVBfU1RBVEVfQUNDT1VOVEVELCBFUF9TVEFURV9GQVNUKSBhbmQgbW9kaWZ5aW5nIHRoZSBjb3JlIGV2ZW50IGRlbGl2ZXJ5IGFuZCBwb2xsaW5nIGxvZ2ljIGluIGZzL2V2ZW50cG9sbC5jLiBUaGlzIGFmZmVjdHMgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSBhbmQgaXMgaGlnaGx5IHJlYWNoYWJsZSB2aWEgZXBvbGwgc3lzY2FsbHMgYW5kIGlvX3VyaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIGVwb2xsIHVzaW5nIGF0b21pYyBzdGF0ZSBiaXRzIGluIGBzdHJ1Y3QgZXBpdGVtYC4gSXQgbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGxvZ2ljLCBldmVudCBhY2NvdW50aW5nLCBhbmQgd2FrZXVwcy4gQWxsIG5ldyBmaWVsZHMgKGxpa2UgYGF0b21pY190IHN0YXRlYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuLCB2aWEgYGttZW1fY2FjaGVfemFsbG9jYCBhbmQgYGF0b21pY19zZXRgKSwgYW5kIG5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ODkyODY5YmQyMzYzNDdhMmZjOTIxZjczOWVmNjdjYzA2MTAxZTkwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMDI6NTA6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9ldmVudHBvbGwuYyBiL2ZzL2V2ZW50cG9sbC5jCmluZGV4IGUwYzRiZjg4YTgzODMuLjYwMGQzZDJkNDc2MzYgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50cG9sbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V2ZW50cG9sbC5jCkBAIC0yNDMsNiAmIzQzOzI0MywxNCBAQCBzdHJ1Y3QgZXBwb2xsX2VudHJ5IHsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAqd2hlYWQ7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBGQVNUIGlzIHNldCBmb3IgZWxpZ2libGUgaXRlbXMgYXQgaW5zZXJ0aW9uLiBBQ0NPVU5URUQgdHJhY2tzIEZBU1QgaXRlbXMKJiM0MzsgKiB3aGlsZSB0aGUgcmVhZHkgcGF0aCBvd25zIHRoZW0gYW5kIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHJlLXBvbGwuCiYjNDM7ICovCiYjNDM7ZW51bSB7CiYjNDM7CUVQX1NUQVRFX0FDQ09VTlRFRAk9IEJJVCgwKSwKJiM0MzsJRVBfU1RBVEVfRkFTVAkJPSBCSVQoMSksCiYjNDM7fTsKIC8qCiAgKiBFYWNoIGZpbGUgZGVzY3JpcHRvciBhZGRlZCB0byB0aGUgZXZlbnRwb2xsIGludGVyZmFjZSB3aWxsCiAgKiBoYXZlIGFuIGVudHJ5IG9mIHRoaXMgdHlwZSBsaW5rZWQgdG8gdGhlICYjMzQ7cmJyJiMzNDsgUkIgdHJlZS4KQEAgLTI3MSw2ICYjNDM7Mjc5LDkgQEAgc3RydWN0IGVwaXRlbSB7CiAJLyogVGhlIGZpbGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiB0aGlzIGl0ZW0gcmVmZXJzIHRvICovCiAJc3RydWN0IGVwb2xsX2tleSBmZmQ7CiAKJiM0MzsJLyogQXRvbWljIHN0YXRlIGJpdHMsIHNlZSB0aGUgRVBfU1RBVEVfKiBlbnVtIGFib3ZlLiAqLwomIzQzOwlhdG9taWNfdCBzdGF0ZTsKJiM0MzsKIAkvKiBMaXN0IGNvbnRhaW5pbmcgcG9sbCB3YWl0IHF1ZXVlcyAqLwogCXN0cnVjdCBlcHBvbGxfZW50cnkgKnB3cWxpc3Q7CiAKQEAgLTYyMCw2ICYjNDM7NjMxLDY1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlcF9ldmVudHNfYXZhaWxhYmxlKHN0cnVjdCBldmVudHBvbGwgKmVwKQogCQlyZWFkX3NlcWNvdW50X3JldHJ5KCZhbXA7ZXAtJmd0O3NlcSwgc2VxKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogTGV0IEEgYmUgQUNDT1VOVEVEIGFuZCBCIGJlIGZpbGUgcmVhZGluZXNzLiBGdWxseSBvcmRlcmVkIGF0b21pYyBSTVdzCiYjNDM7ICogcGFpciBXKEE9MCkgYmVmb3JlIFIoQikgd2l0aCBXKEIpIGJlZm9yZSBSKEEpLCBzbyBhIHNjYW5uZXIgY2Fubm90IG1pc3MKJiM0MzsgKiBCIHdoaWxlIGl0cyBjYWxsYmFjayBza2lwcyBhbiBhY2NvdW50ZWQgaXRlbS4gZXBfZG9uZV9zY2FuKCkgYW5kIHRoZQomIzQzOyAqIGZhdGFsLXNpZ25hbCBoYW5kb2ZmIHBhc3MgcXVldWVkIGV2ZW50cyBiZXR3ZWVuIGV4Y2x1c2l2ZSB3YWl0ZXJzLgomIzQzOyAqIHBvbGxfd2FpdCB1c2VycywgcHJpdmF0ZSBtb2RlcyBhbmQgc3BlY2lhbCBjYWxsYmFja3MgdGFrZSB0aGUgc2xvdyBwYXRoLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBlcF9zdGF0ZV90ZXN0KGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSwgdW5zaWduZWQgaW50IGJpdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhdG9taWNfcmVhZCgmYW1wO2VwaS0mZ3Q7c3RhdGUpICZhbXA7IGJpdDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgZXBpdGVtICplcGkpCiYjNDM7ewomIzQzOwlyZXR1cm4gZXBfc3RhdGVfdGVzdChlcGksIEVQX1NUQVRFX0ZBU1QpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZXBfc2V0X3JlYWR5X2FjY291bnRlZChzdHJ1Y3QgZXBpdGVtICplcGkpCiYjNDM7ewomIzQzOwlpZiAoZXBfcmVhZHlfZmFzdF9lbmFibGVkKGVwaSkpCiYjNDM7CQlhdG9taWNfb3IoRVBfU1RBVEVfQUNDT1VOVEVELCAmYW1wO2VwaS0mZ3Q7c3RhdGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZXBfcHJlcGFyZV9yZXBvbGwoc3RydWN0IGVwaXRlbSAqZXBpKQomIzQzO3sKJiM0MzsJaWYgKGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChlcGkpKQomIzQzOwkJYXRvbWljX2ZldGNoX2FuZG5vdChFUF9TVEFURV9BQ0NPVU5URUQsICZhbXA7ZXBpLSZndDtzdGF0ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGVwX2NhbGxiYWNrX2Nhbl9za2lwKHN0cnVjdCBlcGl0ZW0gKmVwaSwgX19wb2xsX3QgcG9sbGZsYWdzKQomIzQzO3sKJiM0MzsJX19wb2xsX3QgZXZlbnRzOwomIzQzOwomIzQzOwlldmVudHMgPSBSRUFEX09OQ0UoZXBpLSZndDtldmVudC5ldmVudHMpOwomIzQzOwkKJiM0MzsJLyogT25seSBpbnNlcnRpb24tdGltZSBjYW5kaWRhdGVzIG1heSB1c2UgdGhlIGxvY2tsZXNzIHBhdGguICovCiYjNDM7CWlmICghZXBfcmVhZHlfZmFzdF9lbmFibGVkKGVwaSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CQomIzQzOwkvKiBlcF9tb2RpZnkoKSBjYW4gc2VsZWN0IGEgcHJpdmF0ZSBtb2RlIHRoYXQgcmVxdWlyZXMgdGhlIHNsb3cgcGF0aC4gKi8KJiM0MzsJaWYgKGV2ZW50cyAmYW1wOyBFUF9QUklWQVRFX0JJVFMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIHBvbGxfd2FpdCB1c2VycyBtdXN0IGJlIHdva2VuIGJ5IHRoaXMgY2FsbGJhY2suICovCiYjNDM7CWlmICh3YWl0cXVldWVfYWN0aXZlKCZhbXA7ZXBpLSZndDtlcC0mZ3Q7cG9sbF93YWl0KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogUE9MTEZSRUUgdGVhcnMgZG93biB3YWl0IGVudHJpZXM7IFVSSU5HX1dBS0UgbXVzdCBwcm9wYWdhdGUuICovCiYjNDM7CWlmIChwb2xsZmxhZ3MgJmFtcDsgKFBPTExGUkVFIHwgRVBPTExfVVJJTkdfV0FLRSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIFVubWF0Y2hlZCB3YWtlIGtleXMgcmV0YWluIHRoZSBzbG93LXBhdGggY2FsbGJhY2sgc2VtYW50aWNzLiAqLwomIzQzOwlpZiAocG9sbGZsYWdzICZhbXA7JmFtcDsgIShwb2xsZmxhZ3MgJmFtcDsgZXZlbnRzKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogRnVsbHkgb3JkZXJlZCBSTVcgcGFpcnMgdGhlIEIgdXBkYXRlIHdpdGggdGhlIHNjYW5uZXImIzM5O3MgQSBjbGVhci4gKi8KJiM0MzsJcmV0dXJuIGF0b21pY19mZXRjaF9vcigwLCAmYW1wO2VwaS0mZ3Q7c3RhdGUpICZhbXA7IEVQX1NUQVRFX0FDQ09VTlRFRDsKJiM0Mzt9CiYjNDM7CiAjaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTEwKIC8qKgogICogYnVzeV9sb29wX2VwX3RpbWVvdXQgLSBjaGVjayBpZiBidXN5IHBvbGwgaGFzIHRpbWVkIG91dC4gVGhlIHRpbWVvdXQgdmFsdWUKQEAgLTEwMDcsNiAmIzQzOzEwNzcsNyBAQCBzdGF0aWMgdm9pZCBlcF9kb25lX3NjYW4oc3RydWN0IGV2ZW50cG9sbCAqZXAsCiAJCQkgKiByZXZlcnNlcyB0aGUgaXRlcmF0aW9uIG9yZGVyIGludG8gRklGTy4KIAkJCSAqLwogCQkJbGlzdF9hZGQoJmFtcDtlcGktJmd0O3JkbGxpbmssICZhbXA7ZXAtJmd0O3JkbGxpc3QpOwomIzQzOwkJCWVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTsKIAkJCWVwX3BtX3N0YXlfYXdha2UoZXBpKTsKIAkJfQogCX0KQEAgLTEzMDMsOCAmIzQzOzEzNzQsMTAgQEAgc3RhdGljIF9fcG9sbF90IF9fZXBfZXZlbnRwb2xsX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQsIGludCBkZXAKIAltdXRleF9sb2NrX25lc3RlZCgmYW1wO2VwLSZndDttdHgsIGRlcHRoKTsKIAllcF9zdGFydF9zY2FuKGVwLCAmYW1wO3NjYW5fYmF0Y2gpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlcGksIHRtcCwgJmFtcDtzY2FuX2JhdGNoLCByZGxsaW5rKSB7CiYjNDM7CQllcF9wcmVwYXJlX3JlcG9sbChlcGkpOwogCQlpZiAoZXBfaXRlbV9wb2xsKGVwaSwgJmFtcDtwdCwgZGVwdGggJiM0MzsgMSkpIHsKIAkJCXJlcyA9IEVQT0xMSU4gfCBFUE9MTFJETk9STTsKJiM0MzsJCQllcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7CiAJCQlicmVhazsKIAkJfSBlbHNlIHsKIAkJCS8qCkBAIC0xNDk3LDYgJiM0MzsxNTcwLDkgQEAgc3RhdGljIGludCBlcF9wb2xsX2NhbGxiYWNrKHdhaXRfcXVldWVfZW50cnlfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHYKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBld2FrZSA9IDA7CiAKJiM0MzsJaWYgKGVwX2NhbGxiYWNrX2Nhbl9za2lwKGVwaSwgcG9sbGZsYWdzKSkKJiM0MzsJCXJldHVybiAxOwomIzQzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZXAtJmd0O2xvY2ssIGZsYWdzKTsKIAogCWVwX3NldF9idXN5X3BvbGxfbmFwaV9pZChlcGkpOwpAQCAtMTUyOSwxMSAmIzQzOzE2MDUsMTMgQEAgc3RhdGljIGludCBlcF9wb2xsX2NhbGxiYWNrKHdhaXRfcXVldWVfZW50cnlfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHYKIAkJaWYgKCFlcGlfb25fb3ZmbGlzdChlcGkpKSB7CiAJCQllcGktJmd0O292Zmxpc3RfbmV4dCA9IFJFQURfT05DRShlcC0mZ3Q7b3ZmbGlzdCk7CiAJCQlXUklURV9PTkNFKGVwLSZndDtvdmZsaXN0LCBlcGkpOwomIzQzOwkJCWVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTsKIAkJCWVwX3BtX3N0YXlfYXdha2VfcmN1KGVwaSk7CiAJCX0KIAl9IGVsc2UgaWYgKCFlcF9pc19saW5rZWQoZXBpKSkgewogCQkvKiBJbiB0aGUgdXN1YWwgY2FzZSwgYWRkIGV2ZW50IHRvIHJlYWR5IGxpc3QuICovCiAJCWxpc3RfYWRkX3RhaWwoJmFtcDtlcGktJmd0O3JkbGxpbmssICZhbXA7ZXAtJmd0O3JkbGxpc3QpOwomIzQzOwkJZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpOwogCQllcF9wbV9zdGF5X2F3YWtlX3JjdShlcGkpOwogCX0KIApAQCAtMTkxMiw2ICYjNDM7MTk5MCwxMyBAQCBzdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCwKIAlpZiAoSVNfRVJSKGVwaSkpCiAJCXJldHVybiBQVFJfRVJSKGVwaSk7CiAKJiM0MzsJLyoKJiM0MzsJICogTG9ja2xlc3MgY2FuZGlkYXRlcyBhcmUgcGxhaW4gbGV2ZWwtdHJpZ2dlcmVkIGludGVyZXN0czsKJiM0MzsJICogcHJpdmF0ZSBtb2RlcyBhbmQgbmVzdGVkIGVwb2xsIGNoYW5nZSB0aGUgY2FsbGJhY2sgY29udHJhY3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXRlcCAmYW1wOyZhbXA7ICEoZXZlbnQtJmd0O2V2ZW50cyAmYW1wOyBFUF9QUklWQVRFX0JJVFMpKQomIzQzOwkJYXRvbWljX3NldCgmYW1wO2VwaS0mZ3Q7c3RhdGUsIEVQX1NUQVRFX0ZBU1QpOwomIzQzOwogCWVycm9yID0gZXBfcmVnaXN0ZXJfZXBpdGVtKGN0eCwgZXAsIGVwaSwgdGVwLCBmdWxsX2NoZWNrKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTE5NTYsNiAmIzQzOzIwNDEsNyBAQCBzdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCwKIAogCWlmIChyZXZlbnRzICZhbXA7JmFtcDsgIWVwX2lzX2xpbmtlZChlcGkpKSB7CiAJCWxpc3RfYWRkX3RhaWwoJmFtcDtlcGktJmd0O3JkbGxpbmssICZhbXA7ZXAtJmd0O3JkbGxpc3QpOwomIzQzOwkJZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpOwogCQllcF9wbV9zdGF5X2F3YWtlKGVwaSk7CiAKIAkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmFtcDtlcC0mZ3Q7d3EpKQpAQCAtMTk5Miw3ICYjNDM7MjA3OCw3IEBAIHN0YXRpYyBpbnQgZXBfbW9kaWZ5KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksCiAJICogb3RoZXJ3aXNlIHdlIG1pZ2h0IG1pc3MgYW4gZXZlbnQgdGhhdCBoYXBwZW5zIGJldHdlZW4gdGhlCiAJICogZl9vcC0mZ3Q7cG9sbCgpIGNhbGwgYW5kIHRoZSBuZXcgZXZlbnQgc2V0IHJlZ2lzdGVyaW5nLgogCSAqLwotCWVwaS0mZ3Q7ZXZlbnQuZXZlbnRzID0gZXZlbnQtJmd0O2V2ZW50czsgLyogbmVlZCBiYXJyaWVyIGJlbG93ICovCiYjNDM7CVdSSVRFX09OQ0UoZXBpLSZndDtldmVudC5ldmVudHMsIGV2ZW50LSZndDtldmVudHMpOyAvKiBuZWVkIGJhcnJpZXIgYmVsb3cgKi8KIAllcGktJmd0O2V2ZW50LmRhdGEgPSBldmVudC0mZ3Q7ZGF0YTsgLyogcHJvdGVjdGVkIGJ5IG10eCAqLwogCWlmIChlcGktJmd0O2V2ZW50LmV2ZW50cyAmYW1wOyBFUE9MTFdBS0VVUCkgewogCQlpZiAoIWVwX2hhc193YWtldXBfc291cmNlKGVwaSkpCkBAIC0yMDMxLDYgJiM0MzsyMTE3LDcgQEAgc3RhdGljIGludCBlcF9tb2RpZnkoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSwKIAkJc3Bpbl9sb2NrX2lycSgmYW1wO2VwLSZndDtsb2NrKTsKIAkJaWYgKCFlcF9pc19saW5rZWQoZXBpKSkgewogCQkJbGlzdF9hZGRfdGFpbCgmYW1wO2VwaS0mZ3Q7cmRsbGluaywgJmFtcDtlcC0mZ3Q7cmRsbGlzdCk7CiYjNDM7CQkJZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpOwogCQkJZXBfcG1fc3RheV9hd2FrZShlcGkpOwogCiAJCQkvKiBOb3RpZnkgd2FpdGluZyB0YXNrcyB0aGF0IGV2ZW50cyBhcmUgYXZhaWxhYmxlICovCkBAIC0yMDg0LDYgJiM0MzsyMTcxLDcgQEAgc3RhdGljIGludCBlcF9kZWxpdmVyX2V2ZW50KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksCiAJCV9fcG1fcmVsYXgod3MpOwogCX0KIAomIzQzOwllcF9wcmVwYXJlX3JlcG9sbChlcGkpOwogCWxpc3RfZGVsX2luaXQoJmFtcDtlcGktJmd0O3JkbGxpbmspOwogCiAJLyoKQEAgLTIxMDQsMTMgJiM0MzsyMTkyLDE1IEBAIHN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLAogCQkgKiBhdHRlbXB0LgogCQkgKi8KIAkJbGlzdF9hZGQoJmFtcDtlcGktJmd0O3JkbGxpbmssIHNjYW5fYmF0Y2gpOwomIzQzOwkJZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpOwogCQllcF9wbV9zdGF5X2F3YWtlKGVwaSk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAkqdWV2ZW50cyA9IG5leHQ7CiAKIAlpZiAoZXBpLSZndDtldmVudC5ldmVudHMgJmFtcDsgRVBPTExPTkVTSE9UKSB7Ci0JCWVwaS0mZ3Q7ZXZlbnQuZXZlbnRzICZhbXA7PSBFUF9QUklWQVRFX0JJVFM7CiYjNDM7CQlXUklURV9PTkNFKGVwaS0mZ3Q7ZXZlbnQuZXZlbnRzLAomIzQzOwkJCSAgIFJFQURfT05DRShlcGktJmd0O2V2ZW50LmV2ZW50cykgJmFtcDsgRVBfUFJJVkFURV9CSVRTKTsKIAl9IGVsc2UgaWYgKCEoZXBpLSZndDtldmVudC5ldmVudHMgJmFtcDsgRVBPTExFVCkpIHsKIAkJLyoKIAkJICogTGV2ZWwtdHJpZ2dlcmVkOiByZS1xdWV1ZSBzbyB0aGUgbmV4dCBlcG9sbF93YWl0KCkKQEAgLTIxMjAsNiAmIzQzOzIyMTAsNyBAQCBzdGF0aWMgaW50IGVwX2RlbGl2ZXJfZXZlbnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSwKIAkJICogZHVyaW5nIHNjYW5zLgogCQkgKi8KIAkJbGlzdF9hZGRfdGFpbCgmYW1wO2VwaS0mZ3Q7cmRsbGluaywgJmFtcDtlcC0mZ3Q7cmRsbGlzdCk7CiYjNDM7CQllcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7CiAJCWVwX3BtX3N0YXlfYXdha2UoZXBpKTsKIAl9CiAJcmV0dXJuIDE7CkBAIC0yMjg3LDYgJiM0MzsyMzc4LDExIEBAIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLAogCXdoaWxlICgxKSB7CiAJCWlmIChlYXZhaWwpIHsKIAkJCXJlcyA9IGVwX3RyeV9zZW5kX2V2ZW50cyhlcCwgZXZlbnRzLCBtYXhldmVudHMpOwomIzQzOwkJCWlmIChyZXMgPT0gLUVJTlRSKSB7CiYjNDM7CQkJCXNwaW5fbG9ja19pcnEoJmFtcDtlcC0mZ3Q7bG9jayk7CiYjNDM7CQkJCXdha2VfdXAoJmFtcDtlcC0mZ3Q7d3EpOwomIzQzOwkJCQlzcGluX3VubG9ja19pcnEoJmFtcDtlcC0mZ3Q7bG9jayk7CiYjNDM7CQkJfQogCQkJaWYgKHJlcykKIAkJCQlyZXR1cm4gcmVzOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjEyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXBvbGwgRmFzdCBQYXRoIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgZGVlcCBkaXZlIGludG8gYGZzL2V2ZW50cG9sbC5jYCwgc3BlY2lmaWNhbGx5IG9wdGltaXppbmcgYGVwb2xsYCB3aXRoIGEgbmV3ICYjMzQ7ZmFzdCBwYXRoLiYjMzQ7IE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoaXMgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCYjMzk7cyBicmVhayBpdCBkb3duLgoKRXNzZW50aWFsbHksIGl0JiMzOTtzIGFib3V0IGludHJvZHVjaW5nIHNvbWUgYXRvbWljIHN0YXRlIGJpdHMgKGBFUF9TVEFURV9BQ0NPVU5URURgLCBgRVBfU1RBVEVfRkFTVGApIHdpdGhpbiB0aGUgYHN0cnVjdCBlcGl0ZW1gLiBJIHNlZSBhIGJ1bmNoIG9mIG5ldyBoZWxwZXIgZnVuY3Rpb25zOiBgZXBfc3RhdGVfdGVzdGAsIGBlcF9yZWFkeV9mYXN0X2VuYWJsZWRgLCBgZXBfc2V0X3JlYWR5X2FjY291bnRlZGAsIGBlcF9wcmVwYXJlX3JlcG9sbGAsIGFuZCBgZXBfY2FsbGJhY2tfY2FuX3NraXBgLiBUaGUgYGVwX3BvbGxfY2FsbGJhY2tgIGdldHMgdHdlYWtlZCB0byBjb25kaXRpb25hbGx5IHNraXAgd29yaywgYW5kIHNldmVyYWwgY29yZSBmdW5jdGlvbnMsIGluY2x1ZGluZyBgZXBfaW5zZXJ0YCwgYGVwX21vZGlmeWAsIGBlcF9kZWxpdmVyX2V2ZW50YCwgYW5kIGBlcF9wb2xsYCwgYXJlIGFsbCBtb2RpZmllZC4gVGhleSYjMzk7cmUgYWxzbyB1c2luZyBgV1JJVEVfT05DRWAgYW5kIGBSRUFEX09OQ0VgIGZvciBgZXBpLSZndDtldmVudC5ldmVudHNgLCB3aGljaCBpcyBhIGdvb2Qgc2lnbiBmb3IgbWVtb3J5IG9yZGVyaW5nLiBBZGRpbmcgYSBjaGVjayBmb3IgYC1FSU5UUmAgd2l0aGluIGBlcF9wb2xsYCB0byB3YWtlIHVwIGBlcC0mZ3Q7d3FgIHNvdW5kcyByZWFzb25hYmxlLgoKVGhlIG1haW4gY29uY2VybiBpcywgb2YgY291cnNlLCBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgb3Bwb3J0dW5pdGllcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gbGVhaz8gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0LCBubywgaXQgc2hvdWxkbiYjMzk7dC4gVGhlIGNoYW5nZXMgc2VlbSBmb2N1c2VkIG9uIHRoZSBzdGF0ZSBtYWNoaW5lIGFuZCB0aG9zZSBhdG9taWMgZmxhZ3Mgd2l0aGluIGBlcGl0ZW1gLCB3aGljaCBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlLiBOb3RoaW5nIHVzZXItZmFjaW5nIGlzIGJlaW5nIGFsbG9jYXRlZCB3aXRoIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBgZXBfdHJ5X3NlbmRfZXZlbnRzYCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgcG9pbnQsIGFzIHRoYXQmIzM5O3MgaG93IGV2ZW50cyBnZXQgc2VudCB0byB1c2Vyc3BhY2UuIEJ1dCB0aGUgcGF0Y2ggKmRvZXNuJiMzOTt0KiBhcHBlYXIgdG8gY2hhbmdlICp3aGF0KiBpcyBzZW50LCBqdXN0IGhvdyBgZXBpdGVtYHMgYXJlIHF1ZXVlZCBhbmQgaGFuZGxlZC4KCldhaXQsIGBlcF90cnlfc2VuZF9ldmVudHNgIGNhbGxzIGBlcF9kZWxpdmVyX2V2ZW50YCwgd2hpY2ggZG9lcyBhIGBfX3B1dF91c2VyYCBvbiBgcmV2ZW50c2AgYW5kIGBlcGktJmd0O2V2ZW50LmRhdGFgLiBUaGF0JiMzOTtzIHRoZSByZWFsIHRlc3QuIFRoZSBjb2RlIGRvaW5nIHRoaXMgKmlzbiYjMzk7dCogdG91Y2hlZCBieSB0aGUgcGF0Y2g7IHdlJiMzOTtyZSBzdGlsbCBzYWZlLiBUaGUgcGF0Y2ggZG9lcyBtb2RpZnkgaG93IGBlcGktJmd0O2V2ZW50LmV2ZW50c2AgaXMgc2V0LCBidXQgaXQmIzM5O3Mgbm93IHVzaW5nIGBXUklURV9PTkNFYCwgd2hpY2ggc2hvdWxkbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBpc3N1ZXMgYW5kIGxvb2tzIHNhZmVyIHRoYW4gdGhlIHByZXZpb3VzIGFzc2lnbm1lbnQuIFNvLCBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgaGVyZS4KCkxldCYjMzk7cyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBUaGUgbmV3IGBhdG9taWNfdCBzdGF0ZWAgaW4gYHN0cnVjdCBlcGl0ZW1gIGxvb2tzIGludGVyZXN0aW5nLiBJdCYjMzk7cyBpbml0aWFsaXplZCBpbiBgZXBfaW5zZXJ0YC4gRWl0aGVyIGBhdG9taWNfc2V0KCZhbXA7ZXBpLSZndDtzdGF0ZSwgRVBfU1RBVEVfRkFTVClgIG9yIGxlZnQgYXMgMCwgd2hpY2ggc3VnZ2VzdHMgaXQgaXMgaW1wbGljaXRseSB6ZXJvZWQgYnkgYGttZW1fY2FjaGVfemFsbG9jYCBkdXJpbmcgYWxsb2NhdGlvbiBpbiBgZXBfaW5zZXJ0YC4gT2theSwgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUsIEkgbmVlZCB0byBjaGVjayB0aGUgYGVwX2luc2VydGAgYWxsb2NhdGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWVtX2NhY2hlX3phbGxvYy4qZXBpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXZlbnRwb2xsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXZlbnRwb2xsLmM9MTg5OT1zdGF0aWMgc3RydWN0IGVwaXRlbSAqZXBfYWxsb2NfZXBpdGVtKHN0cnVjdCBldmVudHBvbGwgKmVwLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTE5MDktXG5mcy9ldmVudHBvbGwuYzoxOTEwOlx0ZXBpID0ga21lbV9jYWNoZV96YWxsb2MoZXBpX2NhY2hlLCBHRlBfS0VSTkVMKTtcbmZzL2V2ZW50cG9sbC5jLTE5MTEtXHRpZiAodW5saWtlbHkoIWVwaSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg5NwoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiA3NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRXBvbGwgUGF0Y2ggYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGF0IHRoaXMgZXBvbGwgcGF0Y2guIFRoZSBjb2RlIGlzIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AsIHdoaWNoIG1lYW5zIHRoZSBgZXBpLSZndDtzdGF0ZWAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyBieSBkZWZhdWx0LiBUaGUgcGF0Y2ggdGhlbiBpbnRyb2R1Y2VzIGFuIGBhdG9taWNfc2V0YCB0byBgRVBfU1RBVEVfRkFTVGAgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucy4gU28sIGl0JiMzOTtzIGZ1bGx5IGluaXRpYWxpemVkLCBubyB3b3JyaWVzIHRoZXJlLgoKVGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzIHNlZW1zIHRvIGJlIGFib3V0IGNvbmN1cnJlbmN5IGFuZCBpbXBsZW1lbnRpbmcgbG9ja2xlc3MgZmFzdCBwYXRocy4gSSBzZWUgYWRkaXRpb25zIHRvIGBzdHJ1Y3QgZXBpdGVtYCB3aXRoIGF0b21pYyBzdGF0ZSBiaXRzLCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG9uIGBzdGF0ZWAsIGFuZCBsb2dpYyB0aGF0IG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBldmVudHMuIFRoZXkgYXJlIGFkZGluZyBgYXRvbWljX3Qgc3RhdGVgLiBUaGV5IGFyZSBtb2RpZnlpbmcgbG9naWMgb24gaG93IGV2ZW50cyBhcmUgaGFuZGxlZC4KClRoZSBtYWluIGNvbmNlcm4gaGVyZSB3b3VsZCBiZSByYWNlIGNvbmRpdGlvbnMsIG1pc3NlZCB3YWtldXBzLCBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3PigJRlc3NlbnRpYWxseSwgY2xhc3NpYyBjb25jdXJyZW5jeSBidWdzLiBUaGVzZSBhcmUgKmV4YWN0bHkqIHRoZSBraW5kcyBvZiBpc3N1ZXMgdGhhdCBLQVNBTiwgS0NTQU4sIGFuZCBMb2NrZGVwIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gS01TQU4sIGhvd2V2ZXIsIGlzIGRlc2lnbmVkIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBhbmQgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB0aGF0IGhlcmUuIFRoZSBuZXcgYGF0b21pY190IHN0YXRlYCBmaWVsZCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gSSBzZWUgbm8gc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSBlaXRoZXIsIHNvIHRoZXJlJiMzOTtzIG5vIHBvc3NpYmlsaXR5IG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBLTVNBTiBpc24mIzM5O3QgbmVjZXNzYXJ5IGZvciB0aGlzIHBhdGNoLiBUaGUgcmVsZXZhbnQgdG9vbHMgZm9yIHRoaXMga2luZCBvZiBjaGFuZ2UgYXJlIEtBU0FOLCBLQ1NBTiBhbmQgTG9ja2RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgZXBvbGwgdXNpbmcgYXRvbWljIHN0YXRlIGJpdHMgaW4gYHN0cnVjdCBlcGl0ZW1gLiBJdCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gbG9naWMsIGV2ZW50IGFjY291bnRpbmcsIGFuZCB3YWtldXBzLiBBbGwgbmV3IGZpZWxkcyAobGlrZSBgYXRvbWljX3Qgc3RhdGVgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSBga21lbV9jYWNoZV96YWxsb2NgIGFuZCBgYXRvbWljX3NldGApLCBhbmQgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciBlcG9sbCB1c2luZyBhdG9taWMgc3RhdGUgYml0cyBpbiBgc3RydWN0IGVwaXRlbWAuIEl0IG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBsb2dpYywgZXZlbnQgYWNjb3VudGluZywgYW5kIHdha2V1cHMuIEFsbCBuZXcgZmllbGRzIChsaWtlIGBhdG9taWNfdCBzdGF0ZWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAoZS5nLiwgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AgYW5kIGBhdG9taWNfc2V0YCksIGFuZCBubyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6NTA6MjQuODM1NjU3MjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQwNjA3MDQ1NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVQT0xMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fZXBvbGxfY3RsXCIsXG4gICAgXCJkb19lcG9sbF9jdGxfZmlsZVwiLFxuICAgIFwiZXBvbGxfc2VuZGV2ZW50c1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgZXBvbGwgdXNpbmcgYXRvbWljIHN0YXRlIGJpdHMgaW4gYHN0cnVjdCBlcGl0ZW1gLiBJdCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gbG9naWMsIGV2ZW50IGFjY291bnRpbmcsIGFuZCB3YWtldXBzLiBBbGwgbmV3IGZpZWxkcyAobGlrZSBgYXRvbWljX3Qgc3RhdGVgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSBga21lbV9jYWNoZV96YWxsb2NgIGFuZCBgYXRvbWljX3NldGApLCBhbmQgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgZXBvbGwgY2FsbGJhY2tzLCBhZGRpbmcgbmV3IHN0YXRlIGJpdHMgKEVQX1NUQVRFX0FDQ09VTlRFRCwgRVBfU1RBVEVfRkFTVCkgYW5kIG1vZGlmeWluZyB0aGUgY29yZSBldmVudCBkZWxpdmVyeSBhbmQgcG9sbGluZyBsb2dpYyBpbiBmcy9ldmVudHBvbGwuYy4gVGhpcyBhZmZlY3RzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIGhpZ2hseSByZWFjaGFibGUgdmlhIGVwb2xsIHN5c2NhbGxzIGFuZCBpb191cmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6NTA6MjQuODM1NjYyMDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MjUyMjIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg4OTI4NjliZDIzNjM0N2EyZmM5MjFmNzM5ZWY2N2NjMDYxMDFlOTBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMDI6NTA6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuY1xcbmluZGV4IGUwYzRiZjg4YTgzODMuLjYwMGQzZDJkNDc2MzYgMTAwNjQ0XFxuLS0tIGEvZnMvZXZlbnRwb2xsLmNcXG4rKysgYi9mcy9ldmVudHBvbGwuY1xcbkBAIC0yNDMsNiArMjQzLDE0IEBAIHN0cnVjdCBlcHBvbGxfZW50cnkge1xcbiBcXHR3YWl0X3F1ZXVlX2hlYWRfdCAqd2hlYWQ7XFxuIH07XFxuIFxcbisvKlxcbisgKiBGQVNUIGlzIHNldCBmb3IgZWxpZ2libGUgaXRlbXMgYXQgaW5zZXJ0aW9uLiBBQ0NPVU5URUQgdHJhY2tzIEZBU1QgaXRlbXNcXG4rICogd2hpbGUgdGhlIHJlYWR5IHBhdGggb3ducyB0aGVtIGFuZCBpcyBjbGVhcmVkIGltbWVkaWF0ZWx5IGJlZm9yZSByZS1wb2xsLlxcbisgKi9cXG4rZW51bSB7XFxuK1xcdEVQX1NUQVRFX0FDQ09VTlRFRFxcdD0gQklUKDApLFxcbitcXHRFUF9TVEFURV9GQVNUXFx0XFx0PSBCSVQoMSksXFxuK307XFxuIC8qXFxuICAqIEVhY2ggZmlsZSBkZXNjcmlwdG9yIGFkZGVkIHRvIHRoZSBldmVudHBvbGwgaW50ZXJmYWNlIHdpbGxcXG4gICogaGF2ZSBhbiBlbnRyeSBvZiB0aGlzIHR5cGUgbGlua2VkIHRvIHRoZSBcXFwicmJyXFxcIiBSQiB0cmVlLlxcbkBAIC0yNzEsNiArMjc5LDkgQEAgc3RydWN0IGVwaXRlbSB7XFxuIFxcdC8qIFRoZSBmaWxlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gdGhpcyBpdGVtIHJlZmVycyB0byAqL1xcbiBcXHRzdHJ1Y3QgZXBvbGxfa2V5IGZmZDtcXG4gXFxuK1xcdC8qIEF0b21pYyBzdGF0ZSBiaXRzLCBzZWUgdGhlIEVQX1NUQVRFXyogZW51bSBhYm92ZS4gKi9cXG4rXFx0YXRvbWljX3Qgc3RhdGU7XFxuK1xcbiBcXHQvKiBMaXN0IGNvbnRhaW5pbmcgcG9sbCB3YWl0IHF1ZXVlcyAqL1xcbiBcXHRzdHJ1Y3QgZXBwb2xsX2VudHJ5ICpwd3FsaXN0O1xcbiBcXG5AQCAtNjIwLDYgKzYzMSw2NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZXBfZXZlbnRzX2F2YWlsYWJsZShzdHJ1Y3QgZXZlbnRwb2xsICplcClcXG4gXFx0XFx0cmVhZF9zZXFjb3VudF9yZXRyeShcXHUwMDI2ZXAtXFx1MDAzZXNlcSwgc2VxKTtcXG4gfVxcbiBcXG4rLypcXG4rICogTGV0IEEgYmUgQUNDT1VOVEVEIGFuZCBCIGJlIGZpbGUgcmVhZGluZXNzLiBGdWxseSBvcmRlcmVkIGF0b21pYyBSTVdzXFxuKyAqIHBhaXIgVyhBPTApIGJlZm9yZSBSKEIpIHdpdGggVyhCKSBiZWZvcmUgUihBKSwgc28gYSBzY2FubmVyIGNhbm5vdCBtaXNzXFxuKyAqIEIgd2hpbGUgaXRzIGNhbGxiYWNrIHNraXBzIGFuIGFjY291bnRlZCBpdGVtLiBlcF9kb25lX3NjYW4oKSBhbmQgdGhlXFxuKyAqIGZhdGFsLXNpZ25hbCBoYW5kb2ZmIHBhc3MgcXVldWVkIGV2ZW50cyBiZXR3ZWVuIGV4Y2x1c2l2ZSB3YWl0ZXJzLlxcbisgKiBwb2xsX3dhaXQgdXNlcnMsIHByaXZhdGUgbW9kZXMgYW5kIHNwZWNpYWwgY2FsbGJhY2tzIHRha2UgdGhlIHNsb3cgcGF0aC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBlcF9zdGF0ZV90ZXN0KGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSwgdW5zaWduZWQgaW50IGJpdClcXG4re1xcbitcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNmVwaS1cXHUwMDNlc3RhdGUpIFxcdTAwMjYgYml0O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgZXBfcmVhZHlfZmFzdF9lbmFibGVkKGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSlcXG4re1xcbitcXHRyZXR1cm4gZXBfc3RhdGVfdGVzdChlcGksIEVQX1NUQVRFX0ZBU1QpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZXBfc2V0X3JlYWR5X2FjY291bnRlZChzdHJ1Y3QgZXBpdGVtICplcGkpXFxuK3tcXG4rXFx0aWYgKGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChlcGkpKVxcbitcXHRcXHRhdG9taWNfb3IoRVBfU1RBVEVfQUNDT1VOVEVELCBcXHUwMDI2ZXBpLVxcdTAwM2VzdGF0ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBlcF9wcmVwYXJlX3JlcG9sbChzdHJ1Y3QgZXBpdGVtICplcGkpXFxuK3tcXG4rXFx0aWYgKGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChlcGkpKVxcbitcXHRcXHRhdG9taWNfZmV0Y2hfYW5kbm90KEVQX1NUQVRFX0FDQ09VTlRFRCwgXFx1MDAyNmVwaS1cXHUwMDNlc3RhdGUpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBlcF9jYWxsYmFja19jYW5fc2tpcChzdHJ1Y3QgZXBpdGVtICplcGksIF9fcG9sbF90IHBvbGxmbGFncylcXG4re1xcbitcXHRfX3BvbGxfdCBldmVudHM7XFxuK1xcbitcXHRldmVudHMgPSBSRUFEX09OQ0UoZXBpLVxcdTAwM2VldmVudC5ldmVudHMpO1xcbitcXHRcXG4rXFx0LyogT25seSBpbnNlcnRpb24tdGltZSBjYW5kaWRhdGVzIG1heSB1c2UgdGhlIGxvY2tsZXNzIHBhdGguICovXFxuK1xcdGlmICghZXBfcmVhZHlfZmFzdF9lbmFibGVkKGVwaSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFxuK1xcdC8qIGVwX21vZGlmeSgpIGNhbiBzZWxlY3QgYSBwcml2YXRlIG1vZGUgdGhhdCByZXF1aXJlcyB0aGUgc2xvdyBwYXRoLiAqL1xcbitcXHRpZiAoZXZlbnRzIFxcdTAwMjYgRVBfUFJJVkFURV9CSVRTKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBwb2xsX3dhaXQgdXNlcnMgbXVzdCBiZSB3b2tlbiBieSB0aGlzIGNhbGxiYWNrLiAqL1xcbitcXHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2ZXBpLVxcdTAwM2VlcC1cXHUwMDNlcG9sbF93YWl0KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogUE9MTEZSRUUgdGVhcnMgZG93biB3YWl0IGVudHJpZXM7IFVSSU5HX1dBS0UgbXVzdCBwcm9wYWdhdGUuICovXFxuK1xcdGlmIChwb2xsZmxhZ3MgXFx1MDAyNiAoUE9MTEZSRUUgfCBFUE9MTF9VUklOR19XQUtFKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogVW5tYXRjaGVkIHdha2Uga2V5cyByZXRhaW4gdGhlIHNsb3ctcGF0aCBjYWxsYmFjayBzZW1hbnRpY3MuICovXFxuK1xcdGlmIChwb2xsZmxhZ3MgXFx1MDAyNlxcdTAwMjYgIShwb2xsZmxhZ3MgXFx1MDAyNiBldmVudHMpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBGdWxseSBvcmRlcmVkIFJNVyBwYWlycyB0aGUgQiB1cGRhdGUgd2l0aCB0aGUgc2Nhbm5lcidzIEEgY2xlYXIuICovXFxuK1xcdHJldHVybiBhdG9taWNfZmV0Y2hfb3IoMCwgXFx1MDAyNmVwaS1cXHUwMDNlc3RhdGUpIFxcdTAwMjYgRVBfU1RBVEVfQUNDT1VOVEVEO1xcbit9XFxuK1xcbiAjaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTExcXG4gLyoqXFxuICAqIGJ1c3lfbG9vcF9lcF90aW1lb3V0IC0gY2hlY2sgaWYgYnVzeSBwb2xsIGhhcyB0aW1lZCBvdXQuIFRoZSB0aW1lb3V0IHZhbHVlXFxuQEAgLTEwMDcsNiArMTA3Nyw3IEBAIHN0YXRpYyB2b2lkIGVwX2RvbmVfc2NhbihzdHJ1Y3QgZXZlbnRwb2xsICplcCxcXG4gXFx0XFx0XFx0ICogcmV2ZXJzZXMgdGhlIGl0ZXJhdGlvbiBvcmRlciBpbnRvIEZJRk8uXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2ZXBpLVxcdTAwM2VyZGxsaW5rLCBcXHUwMDI2ZXAtXFx1MDAzZXJkbGxpc3QpO1xcbitcXHRcXHRcXHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XFxuIFxcdFxcdFxcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTEzMDMsOCArMTM3NCwxMCBAQCBzdGF0aWMgX19wb2xsX3QgX19lcF9ldmVudHBvbGxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCwgaW50IGRlcFxcbiBcXHRtdXRleF9sb2NrX25lc3RlZChcXHUwMDI2ZXAtXFx1MDAzZW10eCwgZGVwdGgpO1xcbiBcXHRlcF9zdGFydF9zY2FuKGVwLCBcXHUwMDI2c2Nhbl9iYXRjaCk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlcGksIHRtcCwgXFx1MDAyNnNjYW5fYmF0Y2gsIHJkbGxpbmspIHtcXG4rXFx0XFx0ZXBfcHJlcGFyZV9yZXBvbGwoZXBpKTtcXG4gXFx0XFx0aWYgKGVwX2l0ZW1fcG9sbChlcGksIFxcdTAwMjZwdCwgZGVwdGggKyAxKSkge1xcbiBcXHRcXHRcXHRyZXMgPSBFUE9MTElOIHwgRVBPTExSRE5PUk07XFxuK1xcdFxcdFxcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdC8qXFxuQEAgLTE0OTcsNiArMTU3MCw5IEBAIHN0YXRpYyBpbnQgZXBfcG9sbF9jYWxsYmFjayh3YWl0X3F1ZXVlX2VudHJ5X3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGludCBld2FrZSA9IDA7XFxuIFxcbitcXHRpZiAoZXBfY2FsbGJhY2tfY2FuX3NraXAoZXBpLCBwb2xsZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZlcC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0ZXBfc2V0X2J1c3lfcG9sbF9uYXBpX2lkKGVwaSk7XFxuQEAgLTE1MjksMTEgKzE2MDUsMTMgQEAgc3RhdGljIGludCBlcF9wb2xsX2NhbGxiYWNrKHdhaXRfcXVldWVfZW50cnlfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZcXG4gXFx0XFx0aWYgKCFlcGlfb25fb3ZmbGlzdChlcGkpKSB7XFxuIFxcdFxcdFxcdGVwaS1cXHUwMDNlb3ZmbGlzdF9uZXh0ID0gUkVBRF9PTkNFKGVwLVxcdTAwM2VvdmZsaXN0KTtcXG4gXFx0XFx0XFx0V1JJVEVfT05DRShlcC1cXHUwMDNlb3ZmbGlzdCwgZXBpKTtcXG4rXFx0XFx0XFx0ZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpO1xcbiBcXHRcXHRcXHRlcF9wbV9zdGF5X2F3YWtlX3JjdShlcGkpO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSBpZiAoIWVwX2lzX2xpbmtlZChlcGkpKSB7XFxuIFxcdFxcdC8qIEluIHRoZSB1c3VhbCBjYXNlLCBhZGQgZXZlbnQgdG8gcmVhZHkgbGlzdC4gKi9cXG4gXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZXBpLVxcdTAwM2VyZGxsaW5rLCBcXHUwMDI2ZXAtXFx1MDAzZXJkbGxpc3QpO1xcbitcXHRcXHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XFxuIFxcdFxcdGVwX3BtX3N0YXlfYXdha2VfcmN1KGVwaSk7XFxuIFxcdH1cXG4gXFxuQEAgLTE5MTIsNiArMTk5MCwxMyBAQCBzdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCxcXG4gXFx0aWYgKElTX0VSUihlcGkpKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihlcGkpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogTG9ja2xlc3MgY2FuZGlkYXRlcyBhcmUgcGxhaW4gbGV2ZWwtdHJpZ2dlcmVkIGludGVyZXN0cztcXG4rXFx0ICogcHJpdmF0ZSBtb2RlcyBhbmQgbmVzdGVkIGVwb2xsIGNoYW5nZSB0aGUgY2FsbGJhY2sgY29udHJhY3QuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXRlcCBcXHUwMDI2XFx1MDAyNiAhKGV2ZW50LVxcdTAwM2VldmVudHMgXFx1MDAyNiBFUF9QUklWQVRFX0JJVFMpKVxcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZlcGktXFx1MDAzZXN0YXRlLCBFUF9TVEFURV9GQVNUKTtcXG4rXFxuIFxcdGVycm9yID0gZXBfcmVnaXN0ZXJfZXBpdGVtKGN0eCwgZXAsIGVwaSwgdGVwLCBmdWxsX2NoZWNrKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuQEAgLTE5NTYsNiArMjA0MSw3IEBAIHN0YXRpYyBpbnQgZXBfaW5zZXJ0KHN0cnVjdCBlcF9jdGxfY3R4ICpjdHgsIHN0cnVjdCBldmVudHBvbGwgKmVwLFxcbiBcXG4gXFx0aWYgKHJldmVudHMgXFx1MDAyNlxcdTAwMjYgIWVwX2lzX2xpbmtlZChlcGkpKSB7XFxuIFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmVwaS1cXHUwMDNlcmRsbGluaywgXFx1MDAyNmVwLVxcdTAwM2VyZGxsaXN0KTtcXG4rXFx0XFx0ZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpO1xcbiBcXHRcXHRlcF9wbV9zdGF5X2F3YWtlKGVwaSk7XFxuIFxcbiBcXHRcXHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2ZXAtXFx1MDAzZXdxKSlcXG5AQCAtMTk5Miw3ICsyMDc4LDcgQEAgc3RhdGljIGludCBlcF9tb2RpZnkoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcXG4gXFx0ICogb3RoZXJ3aXNlIHdlIG1pZ2h0IG1pc3MgYW4gZXZlbnQgdGhhdCBoYXBwZW5zIGJldHdlZW4gdGhlXFxuIFxcdCAqIGZfb3AtXFx1MDAzZXBvbGwoKSBjYWxsIGFuZCB0aGUgbmV3IGV2ZW50IHNldCByZWdpc3RlcmluZy5cXG4gXFx0ICovXFxuLVxcdGVwaS1cXHUwMDNlZXZlbnQuZXZlbnRzID0gZXZlbnQtXFx1MDAzZWV2ZW50czsgLyogbmVlZCBiYXJyaWVyIGJlbG93ICovXFxuK1xcdFdSSVRFX09OQ0UoZXBpLVxcdTAwM2VldmVudC5ldmVudHMsIGV2ZW50LVxcdTAwM2VldmVudHMpOyAvKiBuZWVkIGJhcnJpZXIgYmVsb3cgKi9cXG4gXFx0ZXBpLVxcdTAwM2VldmVudC5kYXRhID0gZXZlbnQtXFx1MDAzZWRhdGE7IC8qIHByb3RlY3RlZCBieSBtdHggKi9cXG4gXFx0aWYgKGVwaS1cXHUwMDNlZXZlbnQuZXZlbnRzIFxcdTAwMjYgRVBPTExXQUtFVVApIHtcXG4gXFx0XFx0aWYgKCFlcF9oYXNfd2FrZXVwX3NvdXJjZShlcGkpKVxcbkBAIC0yMDMxLDYgKzIxMTcsNyBAQCBzdGF0aWMgaW50IGVwX21vZGlmeShzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxcbiBcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZlcC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdGlmICghZXBfaXNfbGlua2VkKGVwaSkpIHtcXG4gXFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZXBpLVxcdTAwM2VyZGxsaW5rLCBcXHUwMDI2ZXAtXFx1MDAzZXJkbGxpc3QpO1xcbitcXHRcXHRcXHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XFxuIFxcdFxcdFxcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcXG4gXFxuIFxcdFxcdFxcdC8qIE5vdGlmeSB3YWl0aW5nIHRhc2tzIHRoYXQgZXZlbnRzIGFyZSBhdmFpbGFibGUgKi9cXG5AQCAtMjA4NCw2ICsyMTcxLDcgQEAgc3RhdGljIGludCBlcF9kZWxpdmVyX2V2ZW50KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksXFxuIFxcdFxcdF9fcG1fcmVsYXgod3MpO1xcbiBcXHR9XFxuIFxcbitcXHRlcF9wcmVwYXJlX3JlcG9sbChlcGkpO1xcbiBcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZlcGktXFx1MDAzZXJkbGxpbmspO1xcbiBcXG4gXFx0LypcXG5AQCAtMjEwNCwxMyArMjE5MiwxNSBAQCBzdGF0aWMgaW50IGVwX2RlbGl2ZXJfZXZlbnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcXG4gXFx0XFx0ICogYXR0ZW1wdC5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZlcGktXFx1MDAzZXJkbGxpbmssIHNjYW5fYmF0Y2gpO1xcbitcXHRcXHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XFxuIFxcdFxcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdH1cXG4gXFx0KnVldmVudHMgPSBuZXh0O1xcbiBcXG4gXFx0aWYgKGVwaS1cXHUwMDNlZXZlbnQuZXZlbnRzIFxcdTAwMjYgRVBPTExPTkVTSE9UKSB7XFxuLVxcdFxcdGVwaS1cXHUwMDNlZXZlbnQuZXZlbnRzIFxcdTAwMjY9IEVQX1BSSVZBVEVfQklUUztcXG4rXFx0XFx0V1JJVEVfT05DRShlcGktXFx1MDAzZWV2ZW50LmV2ZW50cyxcXG4rXFx0XFx0XFx0ICAgUkVBRF9PTkNFKGVwaS1cXHUwMDNlZXZlbnQuZXZlbnRzKSBcXHUwMDI2IEVQX1BSSVZBVEVfQklUUyk7XFxuIFxcdH0gZWxzZSBpZiAoIShlcGktXFx1MDAzZWV2ZW50LmV2ZW50cyBcXHUwMDI2IEVQT0xMRVQpKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIExldmVsLXRyaWdnZXJlZDogcmUtcXVldWUgc28gdGhlIG5leHQgZXBvbGxfd2FpdCgpXFxuQEAgLTIxMjAsNiArMjIxMCw3IEBAIHN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxcbiBcXHRcXHQgKiBkdXJpbmcgc2NhbnMuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZlcGktXFx1MDAzZXJkbGxpbmssIFxcdTAwMjZlcC1cXHUwMDNlcmRsbGlzdCk7XFxuK1xcdFxcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcXG4gXFx0XFx0ZXBfcG1fc3RheV9hd2FrZShlcGkpO1xcbiBcXHR9XFxuIFxcdHJldHVybiAxO1xcbkBAIC0yMjg3LDYgKzIzNzgsMTEgQEAgc3RhdGljIGludCBlcF9wb2xsKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXFxuIFxcdHdoaWxlICgxKSB7XFxuIFxcdFxcdGlmIChlYXZhaWwpIHtcXG4gXFx0XFx0XFx0cmVzID0gZXBfdHJ5X3NlbmRfZXZlbnRzKGVwLCBldmVudHMsIG1heGV2ZW50cyk7XFxuK1xcdFxcdFxcdGlmIChyZXMgPT0gLUVJTlRSKSB7XFxuK1xcdFxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmVwLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0XFx0d2FrZV91cChcXHUwMDI2ZXAtXFx1MDAzZXdxKTtcXG4rXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZlcC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKHJlcylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjo1MDoyNS4yMTg3NjMzOTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDIwNDg4NTA1NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVQT0xMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fZXBvbGxfY3RsXCIsXG4gICAgXCJkb19lcG9sbF9jdGxfZmlsZVwiLFxuICAgIFwiZXBvbGxfc2VuZGV2ZW50c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIGVwb2xsIGNhbGxiYWNrcywgYWRkaW5nIG5ldyBzdGF0ZSBiaXRzIChFUF9TVEFURV9BQ0NPVU5URUQsIEVQX1NUQVRFX0ZBU1QpIGFuZCBtb2RpZnlpbmcgdGhlIGNvcmUgZXZlbnQgZGVsaXZlcnkgYW5kIHBvbGxpbmcgbG9naWMgaW4gZnMvZXZlbnRwb2xsLmMuIFRoaXMgYWZmZWN0cyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGFuZCBpcyBoaWdobHkgcmVhY2hhYmxlIHZpYSBlcG9sbCBzeXNjYWxscyBhbmQgaW9fdXJpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg4OTI4NjliZDIzNjM0N2EyZmM5MjFmNzM5ZWY2N2NjMDYxMDFlOTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwMjo1MDoyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmNcbmluZGV4IGUwYzRiZjg4YTgzODMuLjYwMGQzZDJkNDc2MzYgMTAwNjQ0XG4tLS0gYS9mcy9ldmVudHBvbGwuY1xuKysrIGIvZnMvZXZlbnRwb2xsLmNcbkBAIC0yNDMsNiArMjQzLDE0IEBAIHN0cnVjdCBlcHBvbGxfZW50cnkge1xuIFx0d2FpdF9xdWV1ZV9oZWFkX3QgKndoZWFkO1xuIH07XG4gXG4rLypcbisgKiBGQVNUIGlzIHNldCBmb3IgZWxpZ2libGUgaXRlbXMgYXQgaW5zZXJ0aW9uLiBBQ0NPVU5URUQgdHJhY2tzIEZBU1QgaXRlbXNcbisgKiB3aGlsZSB0aGUgcmVhZHkgcGF0aCBvd25zIHRoZW0gYW5kIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHJlLXBvbGwuXG4rICovXG4rZW51bSB7XG4rXHRFUF9TVEFURV9BQ0NPVU5URURcdD0gQklUKDApLFxuK1x0RVBfU1RBVEVfRkFTVFx0XHQ9IEJJVCgxKSxcbit9O1xuIC8qXG4gICogRWFjaCBmaWxlIGRlc2NyaXB0b3IgYWRkZWQgdG8gdGhlIGV2ZW50cG9sbCBpbnRlcmZhY2Ugd2lsbFxuICAqIGhhdmUgYW4gZW50cnkgb2YgdGhpcyB0eXBlIGxpbmtlZCB0byB0aGUgXCJyYnJcIiBSQiB0cmVlLlxuQEAgLTI3MSw2ICsyNzksOSBAQCBzdHJ1Y3QgZXBpdGVtIHtcbiBcdC8qIFRoZSBmaWxlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gdGhpcyBpdGVtIHJlZmVycyB0byAqL1xuIFx0c3RydWN0IGVwb2xsX2tleSBmZmQ7XG4gXG4rXHQvKiBBdG9taWMgc3RhdGUgYml0cywgc2VlIHRoZSBFUF9TVEFURV8qIGVudW0gYWJvdmUuICovXG4rXHRhdG9taWNfdCBzdGF0ZTtcbitcbiBcdC8qIExpc3QgY29udGFpbmluZyBwb2xsIHdhaXQgcXVldWVzICovXG4gXHRzdHJ1Y3QgZXBwb2xsX2VudHJ5ICpwd3FsaXN0O1xuIFxuQEAgLTYyMCw2ICs2MzEsNjUgQEAgc3RhdGljIGlubGluZSBib29sIGVwX2V2ZW50c19hdmFpbGFibGUoc3RydWN0IGV2ZW50cG9sbCAqZXApXG4gXHRcdHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2ZXAtXHUwMDNlc2VxLCBzZXEpO1xuIH1cbiBcbisvKlxuKyAqIExldCBBIGJlIEFDQ09VTlRFRCBhbmQgQiBiZSBmaWxlIHJlYWRpbmVzcy4gRnVsbHkgb3JkZXJlZCBhdG9taWMgUk1Xc1xuKyAqIHBhaXIgVyhBPTApIGJlZm9yZSBSKEIpIHdpdGggVyhCKSBiZWZvcmUgUihBKSwgc28gYSBzY2FubmVyIGNhbm5vdCBtaXNzXG4rICogQiB3aGlsZSBpdHMgY2FsbGJhY2sgc2tpcHMgYW4gYWNjb3VudGVkIGl0ZW0uIGVwX2RvbmVfc2NhbigpIGFuZCB0aGVcbisgKiBmYXRhbC1zaWduYWwgaGFuZG9mZiBwYXNzIHF1ZXVlZCBldmVudHMgYmV0d2VlbiBleGNsdXNpdmUgd2FpdGVycy5cbisgKiBwb2xsX3dhaXQgdXNlcnMsIHByaXZhdGUgbW9kZXMgYW5kIHNwZWNpYWwgY2FsbGJhY2tzIHRha2UgdGhlIHNsb3cgcGF0aC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgZXBfc3RhdGVfdGVzdChjb25zdCBzdHJ1Y3QgZXBpdGVtICplcGksIHVuc2lnbmVkIGludCBiaXQpXG4re1xuK1x0cmV0dXJuIGF0b21pY19yZWFkKFx1MDAyNmVwaS1cdTAwM2VzdGF0ZSkgXHUwMDI2IGJpdDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sIGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgZXBpdGVtICplcGkpXG4re1xuK1x0cmV0dXJuIGVwX3N0YXRlX3Rlc3QoZXBpLCBFUF9TVEFURV9GQVNUKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoc3RydWN0IGVwaXRlbSAqZXBpKVxuK3tcbitcdGlmIChlcF9yZWFkeV9mYXN0X2VuYWJsZWQoZXBpKSlcbitcdFx0YXRvbWljX29yKEVQX1NUQVRFX0FDQ09VTlRFRCwgXHUwMDI2ZXBpLVx1MDAzZXN0YXRlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGVwX3ByZXBhcmVfcmVwb2xsKHN0cnVjdCBlcGl0ZW0gKmVwaSlcbit7XG4rXHRpZiAoZXBfcmVhZHlfZmFzdF9lbmFibGVkKGVwaSkpXG4rXHRcdGF0b21pY19mZXRjaF9hbmRub3QoRVBfU1RBVEVfQUNDT1VOVEVELCBcdTAwMjZlcGktXHUwMDNlc3RhdGUpO1xuK31cbitcbitzdGF0aWMgYm9vbCBlcF9jYWxsYmFja19jYW5fc2tpcChzdHJ1Y3QgZXBpdGVtICplcGksIF9fcG9sbF90IHBvbGxmbGFncylcbit7XG4rXHRfX3BvbGxfdCBldmVudHM7XG4rXG4rXHRldmVudHMgPSBSRUFEX09OQ0UoZXBpLVx1MDAzZWV2ZW50LmV2ZW50cyk7XG4rXHRcbitcdC8qIE9ubHkgaW5zZXJ0aW9uLXRpbWUgY2FuZGlkYXRlcyBtYXkgdXNlIHRoZSBsb2NrbGVzcyBwYXRoLiAqL1xuK1x0aWYgKCFlcF9yZWFkeV9mYXN0X2VuYWJsZWQoZXBpKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XG4rXHQvKiBlcF9tb2RpZnkoKSBjYW4gc2VsZWN0IGEgcHJpdmF0ZSBtb2RlIHRoYXQgcmVxdWlyZXMgdGhlIHNsb3cgcGF0aC4gKi9cbitcdGlmIChldmVudHMgXHUwMDI2IEVQX1BSSVZBVEVfQklUUylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogcG9sbF93YWl0IHVzZXJzIG11c3QgYmUgd29rZW4gYnkgdGhpcyBjYWxsYmFjay4gKi9cbitcdGlmICh3YWl0cXVldWVfYWN0aXZlKFx1MDAyNmVwaS1cdTAwM2VlcC1cdTAwM2Vwb2xsX3dhaXQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBQT0xMRlJFRSB0ZWFycyBkb3duIHdhaXQgZW50cmllczsgVVJJTkdfV0FLRSBtdXN0IHByb3BhZ2F0ZS4gKi9cbitcdGlmIChwb2xsZmxhZ3MgXHUwMDI2IChQT0xMRlJFRSB8IEVQT0xMX1VSSU5HX1dBS0UpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBVbm1hdGNoZWQgd2FrZSBrZXlzIHJldGFpbiB0aGUgc2xvdy1wYXRoIGNhbGxiYWNrIHNlbWFudGljcy4gKi9cbitcdGlmIChwb2xsZmxhZ3MgXHUwMDI2XHUwMDI2ICEocG9sbGZsYWdzIFx1MDAyNiBldmVudHMpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBGdWxseSBvcmRlcmVkIFJNVyBwYWlycyB0aGUgQiB1cGRhdGUgd2l0aCB0aGUgc2Nhbm5lcidzIEEgY2xlYXIuICovXG4rXHRyZXR1cm4gYXRvbWljX2ZldGNoX29yKDAsIFx1MDAyNmVwaS1cdTAwM2VzdGF0ZSkgXHUwMDI2IEVQX1NUQVRFX0FDQ09VTlRFRDtcbit9XG4rXG4gI2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMXG4gLyoqXG4gICogYnVzeV9sb29wX2VwX3RpbWVvdXQgLSBjaGVjayBpZiBidXN5IHBvbGwgaGFzIHRpbWVkIG91dC4gVGhlIHRpbWVvdXQgdmFsdWVcbkBAIC0xMDA3LDYgKzEwNzcsNyBAQCBzdGF0aWMgdm9pZCBlcF9kb25lX3NjYW4oc3RydWN0IGV2ZW50cG9sbCAqZXAsXG4gXHRcdFx0ICogcmV2ZXJzZXMgdGhlIGl0ZXJhdGlvbiBvcmRlciBpbnRvIEZJRk8uXG4gXHRcdFx0ICovXG4gXHRcdFx0bGlzdF9hZGQoXHUwMDI2ZXBpLVx1MDAzZXJkbGxpbmssIFx1MDAyNmVwLVx1MDAzZXJkbGxpc3QpO1xuK1x0XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0XHRlcF9wbV9zdGF5X2F3YWtlKGVwaSk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xMzAzLDggKzEzNzQsMTAgQEAgc3RhdGljIF9fcG9sbF90IF9fZXBfZXZlbnRwb2xsX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQsIGludCBkZXBcbiBcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNmVwLVx1MDAzZW10eCwgZGVwdGgpO1xuIFx0ZXBfc3RhcnRfc2NhbihlcCwgXHUwMDI2c2Nhbl9iYXRjaCk7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXBpLCB0bXAsIFx1MDAyNnNjYW5fYmF0Y2gsIHJkbGxpbmspIHtcbitcdFx0ZXBfcHJlcGFyZV9yZXBvbGwoZXBpKTtcbiBcdFx0aWYgKGVwX2l0ZW1fcG9sbChlcGksIFx1MDAyNnB0LCBkZXB0aCArIDEpKSB7XG4gXHRcdFx0cmVzID0gRVBPTExJTiB8IEVQT0xMUkROT1JNO1xuK1x0XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKlxuQEAgLTE0OTcsNiArMTU3MCw5IEBAIHN0YXRpYyBpbnQgZXBfcG9sbF9jYWxsYmFjayh3YWl0X3F1ZXVlX2VudHJ5X3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IGV3YWtlID0gMDtcbiBcbitcdGlmIChlcF9jYWxsYmFja19jYW5fc2tpcChlcGksIHBvbGxmbGFncykpXG4rXHRcdHJldHVybiAxO1xuK1xuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZXAtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuIFx0ZXBfc2V0X2J1c3lfcG9sbF9uYXBpX2lkKGVwaSk7XG5AQCAtMTUyOSwxMSArMTYwNSwxMyBAQCBzdGF0aWMgaW50IGVwX3BvbGxfY2FsbGJhY2sod2FpdF9xdWV1ZV9lbnRyeV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdlxuIFx0XHRpZiAoIWVwaV9vbl9vdmZsaXN0KGVwaSkpIHtcbiBcdFx0XHRlcGktXHUwMDNlb3ZmbGlzdF9uZXh0ID0gUkVBRF9PTkNFKGVwLVx1MDAzZW92Zmxpc3QpO1xuIFx0XHRcdFdSSVRFX09OQ0UoZXAtXHUwMDNlb3ZmbGlzdCwgZXBpKTtcbitcdFx0XHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XG4gXHRcdFx0ZXBfcG1fc3RheV9hd2FrZV9yY3UoZXBpKTtcbiBcdFx0fVxuIFx0fSBlbHNlIGlmICghZXBfaXNfbGlua2VkKGVwaSkpIHtcbiBcdFx0LyogSW4gdGhlIHVzdWFsIGNhc2UsIGFkZCBldmVudCB0byByZWFkeSBsaXN0LiAqL1xuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmVwaS1cdTAwM2VyZGxsaW5rLCBcdTAwMjZlcC1cdTAwM2VyZGxsaXN0KTtcbitcdFx0ZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpO1xuIFx0XHRlcF9wbV9zdGF5X2F3YWtlX3JjdShlcGkpO1xuIFx0fVxuIFxuQEAgLTE5MTIsNiArMTk5MCwxMyBAQCBzdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCxcbiBcdGlmIChJU19FUlIoZXBpKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZXBpKTtcbiBcbitcdC8qXG4rXHQgKiBMb2NrbGVzcyBjYW5kaWRhdGVzIGFyZSBwbGFpbiBsZXZlbC10cmlnZ2VyZWQgaW50ZXJlc3RzO1xuK1x0ICogcHJpdmF0ZSBtb2RlcyBhbmQgbmVzdGVkIGVwb2xsIGNoYW5nZSB0aGUgY2FsbGJhY2sgY29udHJhY3QuXG4rXHQgKi9cbitcdGlmICghdGVwIFx1MDAyNlx1MDAyNiAhKGV2ZW50LVx1MDAzZWV2ZW50cyBcdTAwMjYgRVBfUFJJVkFURV9CSVRTKSlcbitcdFx0YXRvbWljX3NldChcdTAwMjZlcGktXHUwMDNlc3RhdGUsIEVQX1NUQVRFX0ZBU1QpO1xuK1xuIFx0ZXJyb3IgPSBlcF9yZWdpc3Rlcl9lcGl0ZW0oY3R4LCBlcCwgZXBpLCB0ZXAsIGZ1bGxfY2hlY2spO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtMTk1Niw2ICsyMDQxLDcgQEAgc3RhdGljIGludCBlcF9pbnNlcnQoc3RydWN0IGVwX2N0bF9jdHggKmN0eCwgc3RydWN0IGV2ZW50cG9sbCAqZXAsXG4gXG4gXHRpZiAocmV2ZW50cyBcdTAwMjZcdTAwMjYgIWVwX2lzX2xpbmtlZChlcGkpKSB7XG4gXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZXBpLVx1MDAzZXJkbGxpbmssIFx1MDAyNmVwLVx1MDAzZXJkbGxpc3QpO1xuK1x0XHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XG4gXHRcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcbiBcbiBcdFx0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2ZXAtXHUwMDNld3EpKVxuQEAgLTE5OTIsNyArMjA3OCw3IEBAIHN0YXRpYyBpbnQgZXBfbW9kaWZ5KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksXG4gXHQgKiBvdGhlcndpc2Ugd2UgbWlnaHQgbWlzcyBhbiBldmVudCB0aGF0IGhhcHBlbnMgYmV0d2VlbiB0aGVcbiBcdCAqIGZfb3AtXHUwMDNlcG9sbCgpIGNhbGwgYW5kIHRoZSBuZXcgZXZlbnQgc2V0IHJlZ2lzdGVyaW5nLlxuIFx0ICovXG4tXHRlcGktXHUwMDNlZXZlbnQuZXZlbnRzID0gZXZlbnQtXHUwMDNlZXZlbnRzOyAvKiBuZWVkIGJhcnJpZXIgYmVsb3cgKi9cbitcdFdSSVRFX09OQ0UoZXBpLVx1MDAzZWV2ZW50LmV2ZW50cywgZXZlbnQtXHUwMDNlZXZlbnRzKTsgLyogbmVlZCBiYXJyaWVyIGJlbG93ICovXG4gXHRlcGktXHUwMDNlZXZlbnQuZGF0YSA9IGV2ZW50LVx1MDAzZWRhdGE7IC8qIHByb3RlY3RlZCBieSBtdHggKi9cbiBcdGlmIChlcGktXHUwMDNlZXZlbnQuZXZlbnRzIFx1MDAyNiBFUE9MTFdBS0VVUCkge1xuIFx0XHRpZiAoIWVwX2hhc193YWtldXBfc291cmNlKGVwaSkpXG5AQCAtMjAzMSw2ICsyMTE3LDcgQEAgc3RhdGljIGludCBlcF9tb2RpZnkoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZlcC1cdTAwM2Vsb2NrKTtcbiBcdFx0aWYgKCFlcF9pc19saW5rZWQoZXBpKSkge1xuIFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZXBpLVx1MDAzZXJkbGxpbmssIFx1MDAyNmVwLVx1MDAzZXJkbGxpc3QpO1xuK1x0XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0XHRlcF9wbV9zdGF5X2F3YWtlKGVwaSk7XG4gXG4gXHRcdFx0LyogTm90aWZ5IHdhaXRpbmcgdGFza3MgdGhhdCBldmVudHMgYXJlIGF2YWlsYWJsZSAqL1xuQEAgLTIwODQsNiArMjE3MSw3IEBAIHN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxuIFx0XHRfX3BtX3JlbGF4KHdzKTtcbiBcdH1cbiBcbitcdGVwX3ByZXBhcmVfcmVwb2xsKGVwaSk7XG4gXHRsaXN0X2RlbF9pbml0KFx1MDAyNmVwaS1cdTAwM2VyZGxsaW5rKTtcbiBcbiBcdC8qXG5AQCAtMjEwNCwxMyArMjE5MiwxNSBAQCBzdGF0aWMgaW50IGVwX2RlbGl2ZXJfZXZlbnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcbiBcdFx0ICogYXR0ZW1wdC5cbiBcdFx0ICovXG4gXHRcdGxpc3RfYWRkKFx1MDAyNmVwaS1cdTAwM2VyZGxsaW5rLCBzY2FuX2JhdGNoKTtcbitcdFx0ZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpO1xuIFx0XHRlcF9wbV9zdGF5X2F3YWtlKGVwaSk7XG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0fVxuIFx0KnVldmVudHMgPSBuZXh0O1xuIFxuIFx0aWYgKGVwaS1cdTAwM2VldmVudC5ldmVudHMgXHUwMDI2IEVQT0xMT05FU0hPVCkge1xuLVx0XHRlcGktXHUwMDNlZXZlbnQuZXZlbnRzIFx1MDAyNj0gRVBfUFJJVkFURV9CSVRTO1xuK1x0XHRXUklURV9PTkNFKGVwaS1cdTAwM2VldmVudC5ldmVudHMsXG4rXHRcdFx0ICAgUkVBRF9PTkNFKGVwaS1cdTAwM2VldmVudC5ldmVudHMpIFx1MDAyNiBFUF9QUklWQVRFX0JJVFMpO1xuIFx0fSBlbHNlIGlmICghKGVwaS1cdTAwM2VldmVudC5ldmVudHMgXHUwMDI2IEVQT0xMRVQpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIExldmVsLXRyaWdnZXJlZDogcmUtcXVldWUgc28gdGhlIG5leHQgZXBvbGxfd2FpdCgpXG5AQCAtMjEyMCw2ICsyMjEwLDcgQEAgc3RhdGljIGludCBlcF9kZWxpdmVyX2V2ZW50KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksXG4gXHRcdCAqIGR1cmluZyBzY2Fucy5cbiBcdFx0ICovXG4gXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZXBpLVx1MDAzZXJkbGxpbmssIFx1MDAyNmVwLVx1MDAzZXJkbGxpc3QpO1xuK1x0XHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XG4gXHRcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcbiBcdH1cbiBcdHJldHVybiAxO1xuQEAgLTIyODcsNiArMjM3OCwxMSBAQCBzdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcbiBcdHdoaWxlICgxKSB7XG4gXHRcdGlmIChlYXZhaWwpIHtcbiBcdFx0XHRyZXMgPSBlcF90cnlfc2VuZF9ldmVudHMoZXAsIGV2ZW50cywgbWF4ZXZlbnRzKTtcbitcdFx0XHRpZiAocmVzID09IC1FSU5UUikge1xuK1x0XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZlcC1cdTAwM2Vsb2NrKTtcbitcdFx0XHRcdHdha2VfdXAoXHUwMDI2ZXAtXHUwMDNld3EpO1xuK1x0XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmVwLVx1MDAzZWxvY2spO1xuK1x0XHRcdH1cbiBcdFx0XHRpZiAocmVzKVxuIFx0XHRcdFx0cmV0dXJuIHJlcztcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6NTA6MjUuMjE4NzY0NjE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4NzIwNzg2OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFcG9sbCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UndmUgZ290IGEgcGF0Y2ggdG91Y2hpbmcgYGZzL2V2ZW50cG9sbC5jYCwgd2hpY2ggaXMgYSBjb3JlIGtlcm5lbCBjb21wb25lbnQsIHNvIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBiZSBmdXp6aW5nLiBUaGlzIHBhdGNoIGlzIGFkZGluZyBhIGZhc3QgcGF0aCBmb3IgZXBvbGwgY2FsbGJhY2tzLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmcm9tIGEgcGVyZm9ybWFuY2UgYW5kLCBwb3RlbnRpYWxseSwgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGVwX2NhbGxiYWNrX2Nhbl9za2lwKClgIGlzIHRoZSBrZXkuIEl0J3MgZGVzaWduZWQgdG8gYnlwYXNzIHRoZSBzcGlubG9jayBpbiBgZXBfcG9sbF9jYWxsYmFja2AgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBhbmQgdGhhdCBraW5kIG9mIG9wdGltaXphdGlvbiBpcyBvZnRlbiBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGUgbmV3IHN0YXRlIGJpdHMsIGBFUF9TVEFURV9BQ0NPVU5URURgIGFuZCBgRVBfU1RBVEVfRkFTVGAgaW4gYHN0cnVjdCBlcGl0ZW1gLCBmdXJ0aGVyIGNlbWVudCB0aGlzIG5ldyBmYXN0IHBhdGguXG5cblNvLCBsZXQncyBpZGVudGlmeSB0aGUgbmV3IGFuZCBtb2RpZmllZCBmdW5jdGlvbnM6IGBlcF9jYWxsYmFja19jYW5fc2tpcGAsIGBlcF9wb2xsX2NhbGxiYWNrYCwgYGVwX2luc2VydGAsIGBlcF9tb2RpZnlgLCBgZXBfZGVsaXZlcl9ldmVudGAsIGBlcF9wb2xsYCwgYF9fZXBfZXZlbnRwb2xsX3BvbGxgLCBhbmQgYGVwX2RvbmVfc2NhbmAuIE5vdywgd2hpY2ggb25lcyBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIGZ1enppbmcgdGFyZ2V0cz8gRm9jdXNpbmcgb24gdGhlIG9uZXMgd2l0aCB0aGUgbW9zdCBwb3RlbnRpYWwgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgbmV3IGZhc3QgcGF0aDogYGVwX3BvbGxfY2FsbGJhY2tgLCBgZXBfaW5zZXJ0YCwgYGVwX21vZGlmeWAsIGBlcF9wb2xsYCwgYGVwX2RlbGl2ZXJfZXZlbnRgIGFuZCBgX19lcF9ldmVudHBvbGxfcG9sbGAgbG9vayBsaWtlIHRoZSBiZXN0IGNhbmRpZGF0ZXMuXG5cbmBlcF9kZWxpdmVyX2V2ZW50YCBpcyBtYXJrZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGNvdWxkIG1lYW4gaXQncyBpbmxpbmVkLiBMZXQncyBtYWtlIHN1cmUgaXTigJlzIG5vdCBpbmxpbmVkIHRvIHNlZSBpZiB3ZSBjYW4gdGFyZ2V0IGl0LiBXZeKAmWxsIHZlcmlmeSB0aGF0IGl04oCZcyBgc3RhdGljYCB3aXRoIGBncmVwcGVyYCwgYnV0IHdl4oCZbGwgYWxzbyBuZWVkIHRvIGNoZWNrIGBmcy9ldmVudHBvbGwuY2AgZGlyZWN0bHkgdG8gY29uZmlybSB3aGV0aGVyIGl0IGlzIGFjdHVhbGx5IGlubGluZWQgb3Igbm90IHRvIGRlY2lkZSBpZiB3ZSB3aWxsIGluY2x1ZGUgaXQgaW4gb3VyIGZ1enppbmcgdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYxNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjU1OjUzLjkzOTU1NTA2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTQ4ODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVwX2RlbGl2ZXJfZXZlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXZlbnRwb2xsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXZlbnRwb2xsLmM9MjA2Nj1zdGF0aWMgaW50IGVwX21vZGlmeShzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjE1MS0gKi9cXG5mcy9ldmVudHBvbGwuYzoyMTUyOnN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxcbmZzL2V2ZW50cG9sbC5jLTIxNTMtXFx0XFx0XFx0ICAgIHBvbGxfdGFibGUgKnB0LFxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MjIxOT1zdGF0aWMgaW50IGVwX3NlbmRfZXZlbnRzKHN0cnVjdCBldmVudHBvbGwgKmVwLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjI0OS1cXG5mcy9ldmVudHBvbGwuYzoyMjUwOlxcdFxcdGRlbGl2ZXJlZCA9IGVwX2RlbGl2ZXJfZXZlbnQoZXAsIGVwaSwgXFx1MDAyNnB0LCBcXHUwMDI2ZXZlbnRzLCBcXHUwMDI2c2Nhbl9iYXRjaCk7XFxuZnMvZXZlbnRwb2xsLmMtMjI1MS1cXHRcXHRpZiAoZGVsaXZlcmVkIFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjo1NTo1My45ODM1MDk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3MTAwMTA1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgRXZlbnQgRGVsaXZlcnkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZXBfZGVsaXZlcl9ldmVudGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCdzIHNjb3BlZCBwcmV0dHkgdGlnaHRseSwgc3BlY2lmaWNhbGx5IGNhbGxlZCBmcm9tIGBlcF9zZW5kX2V2ZW50c2AuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYGVwX3NlbmRfZXZlbnRzYCBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgaXQgY2FsbHMgYGVwX2RlbGl2ZXJfZXZlbnRgIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIG92ZXJhbGwgZXZlbnQgZGVsaXZlcnkgbWVjaGFuaXNtLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjYWxsIGFuZCBzZWUgaG93IGl0J3MgdHJpZ2dlcmVkLCB3aGF0IGRhdGEgaXQgcGFzc2VzLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBmbG93IGxvb2tzIGxpa2UuIFRoaXMgaW5pdGlhbCBvYnNlcnZhdGlvbiBwb2ludHMgdG93YXJkcyBhIHNwZWNpZmljIGludGVyYWN0aW9uIEkgbmVlZCB0byBhbmFseXplIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU5NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjU2OjA1LjY5MzUyMTk4NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjI2NDk1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXBfc2VuZF9ldmVudHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXZlbnRwb2xsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXZlbnRwb2xsLmM9MzA2PXN0cnVjdCBldmVudHBvbGwge1xcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMzM5LVxcbmZzL2V2ZW50cG9sbC5jOjM0MDpcXHQvKiB3YWtldXBfc291cmNlIHVzZWQgd2hlbiBlcF9zZW5kX2V2ZW50cyBvciBfX2VwX2V2ZW50cG9sbF9wb2xsIGlzIHJ1bm5pbmcgKi9cXG5mcy9ldmVudHBvbGwuYy0zNDEtXFx0c3RydWN0IHdha2V1cF9zb3VyY2UgKndzO1xcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MjE1Mj1zdGF0aWMgaW50IGVwX2RlbGl2ZXJfZXZlbnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTIyMTgtXFxuZnMvZXZlbnRwb2xsLmM6MjIxOTpzdGF0aWMgaW50IGVwX3NlbmRfZXZlbnRzKHN0cnVjdCBldmVudHBvbGwgKmVwLFxcbmZzL2V2ZW50cG9sbC5jLTIyMjAtXFx0XFx0XFx0ICBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsIGludCBtYXhldmVudHMpXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yMzA1PXN0YXRpYyBpbnQgZXBfdHJ5X3NlbmRfZXZlbnRzKHN0cnVjdCBldmVudHBvbGwgKmVwLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjMxNC1cXHQgKi9cXG5mcy9ldmVudHBvbGwuYzoyMzE1OlxcdHJlcyA9IGVwX3NlbmRfZXZlbnRzKGVwLCBldmVudHMsIG1heGV2ZW50cyk7XFxuZnMvZXZlbnRwb2xsLmMtMjMxNi1cXHRpZiAocmVzIFxcdTAwM2UgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6NTY6MDUuOTU2MTc2NTkyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwMjE2NjQyOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25zaWRlcmluZyBgZXBfc2VuZF9ldmVudHNgIGFuZCBgZXBfcG9sbGAgaW4gUmVsYXRpb24gdG8gRWFjaCBPdGhlcioqXG5cblJpZ2h0LCBzbyBgZXBfc2VuZF9ldmVudHNgIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBhIGdpdmVuLiBCdXQgdGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBpdHMgY291bnRlcnBhcnQgaW4gdGhpcyBjb250ZXh0OiBgZXBfcG9sbGAuIElzIGBlcF9wb2xsYCBhbHNvIHN0YXRpYz8gT3IgZG9lcyBpdHMgZGVmaW5pdGlvbiwgb3IgbGFjayB0aGVyZW9mLCBoYXZlIGltcGxpY2F0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBBcmUgdGhlcmUgYXNwZWN0cyBvZiB0aGVpciBpbXBsZW1lbnRhdGlvbiwgb3IgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGhpbiB0aGlzIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCB0aGF0IGFyZSBiZWluZyBzdWJ0bHkgaW5mbHVlbmNlZCBieSBvbmUgYmVpbmcgc3RhdGljIGFuZCB0aGUgb3RoZXIgbm90PyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhleSBpbnRlcmFjdCwgYW5kIHdoZXRoZXIgdGhlIHNjb3BlIG9mIGBlcF9wb2xsYCBpcyBwbGF5aW5nIGEgc2lnbmlmaWNhbnQgcm9sZSBoZXJlLCByZWxhdGl2ZSB0byBgZXBfc2VuZF9ldmVudHNgLiBQZXJoYXBzIHRoZXJlJ3MgYW4gb3B0aW1pemF0aW9uIGJlaW5nIG1hZGUsIG9yIGEgbGltaXRhdGlvbiB0aGF0IG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowMTowNi4xNzI4MjE4NTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNjM5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXBfcG9sbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9ldmVudHBvbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9ldmVudHBvbGwuYy01NC0gKiBldmVudHBvbGwgdmlhIHRoZSB3YXRjaGVkIGZpbGUncyBmX29wLVxcdTAwM2Vwb2xsKCkgd2FpdCBxdWV1ZShzKS4gV2hlblxcbmZzL2V2ZW50cG9sbC5jOjU1OiAqIHRoZSB3YXRjaGVkIGZpbGUgc2lnbmFscyByZWFkaW5lc3MsIGVwX3BvbGxfY2FsbGJhY2soKSBmaXJlcyBhbmRcXG5mcy9ldmVudHBvbGwuYy01Ni0gKiBtYXJrcyB0aGUgZXBpdGVtIHJlYWR5LiBlcG9sbF93YWl0KDIpIGRyYWlucyB0aGUgcmVhZHkgbGlzdCB1bmRlclxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtNzYtICogUmF0aW9uYWxlOlxcbmZzL2V2ZW50cG9sbC5jOjc3OiAqICAgLSBlcC1cXHUwMDNlbG9jayBpcyBhIHNwaW5sb2NrIGJlY2F1c2UgZXBfcG9sbF9jYWxsYmFjaygpIGlzIGNhbGxlZCBmcm9tXFxuZnMvZXZlbnRwb2xsLmMtNzgtICogICAgIHdha2VfdXAoKSB3aGljaCBtYXkgcnVuIGluIGhhcmQtSVJRIGNvbnRleHQuIEFsbCBlcC1cXHUwMDNlbG9ja1xcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMTI2LSAqICAgZXZlbnQgICAgICAgICAgICAtIGVwLVxcdTAwM2VtdHggZm9yIHdyaXRlczsgbG9ja2xlc3MgcmVhZCBpblxcbmZzL2V2ZW50cG9sbC5jOjEyNzogKiAgICAgICAgICAgICAgICAgICAgICBlcF9wb2xsX2NhbGxiYWNrIHBhaXJzIHdpdGggc21wX21iKCkgaW5cXG5mcy9ldmVudHBvbGwuYy0xMjgtICogICAgICAgICAgICAgICAgICAgICAgZXBfbW9kaWZ5KClcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTE4MC0gKiAgIGVwX3VucmVnaXN0ZXJfcG9sbHdhaXQoKSAgLSBkcmFpbiBwd3FsaXN0OyBzeW5jaHJvbml6ZXMgd2l0aCBhbnlcXG5mcy9ldmVudHBvbGwuYzoxODE6ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluLWZsaWdodCBlcF9wb2xsX2NhbGxiYWNrIHZpYSB0aGVcXG5mcy9ldmVudHBvbGwuYy0xODItICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhdGNoZWQgd2FpdC1xdWV1ZSBoZWFkJ3MgbG9jay5cXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTIwMS0gKlxcbmZzL2V2ZW50cG9sbC5jOjIwMjogKiAgIGVwX3BvbGxfY2FsbGJhY2soKSBQT0xMRlJFRSBicmFuY2g6XFxuZnMvZXZlbnRwb2xsLmMtMjAzLSAqICAgICBzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2cHdxLVxcdTAwM2V3aGVhZCwgTlVMTClcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTU5Nj1zdGF0aWMgaW5saW5lIGJvb2wgZXBfaXNfc2Nhbm5pbmcoc3RydWN0IGV2ZW50cG9sbCAqZXApXFxuLS1cXG5mcy9ldmVudHBvbGwuYy02MDAtXFxuZnMvZXZlbnRwb2xsLmM6NjAxOi8qIENhbGxlZCBieSBlcF9zdGFydF9zY2FuKCk6IGRpdmVydCBlcF9wb2xsX2NhbGxiYWNrKCkgdG8gb3ZmbGlzdC4gKi9cXG5mcy9ldmVudHBvbGwuYy02MDItc3RhdGljIGlubGluZSB2b2lkIGVwX2VudGVyX3NjYW4oc3RydWN0IGV2ZW50cG9sbCAqZXApXFxuLS1cXG5mcy9ldmVudHBvbGwuYy02MDYtXFxuZnMvZXZlbnRwb2xsLmM6NjA3Oi8qIENhbGxlZCBieSBlcF9kb25lX3NjYW4oKTogcmVkaXJlY3QgZXBfcG9sbF9jYWxsYmFjaygpIGJhY2sgdG8gcmRsbGlzdC4gKi9cXG5mcy9ldmVudHBvbGwuYy02MDgtc3RhdGljIGlubGluZSB2b2lkIGVwX2V4aXRfc2NhbihzdHJ1Y3QgZXZlbnRwb2xsICplcClcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTg4MD1zdGF0aWMgdm9pZCBlcF9yZXN1bWVfbmFwaV9pcnFzKHN0cnVjdCBldmVudHBvbGwgKmVwKVxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtOTAwLSAqIGNhbGxiYWNrIHdha2V1cCBlbnRyeSBvbiB0aGF0IHF1ZXVlLCBhbmQgdGhlIHdha2VfdXAoKSBwZXJmb3JtZWQgYnkgdGhlXFxuZnMvZXZlbnRwb2xsLmM6OTAxOiAqIFxcXCJkZmRcXFwiIG5ldCBjb2RlIHdpbGwgZW5kIHVwIGluIGVwX3BvbGxfY2FsbGJhY2soKS4gQXQgdGhpcyBwb2ludCBlcG9sbFxcbmZzL2V2ZW50cG9sbC5jLTkwMi0gKiAoZWZkMSkgbm90aWNlcyB0aGF0IGl0IG1heSBoYXZlIHNvbWUgZXZlbnQgcmVhZHksIHNvIGl0IG5lZWRzIHRvIHdha2UgdXBcXG5mcy9ldmVudHBvbGwuYzo5MDM6ICogdGhlIHdhaXRlcnMgb24gaXRzIHBvbGwgd2FpdCBsaXN0IChlZmQyKS4gU28gaXQgY2FsbHMgZXBfcG9sbF9zYWZld2FrZSgpXFxuZnMvZXZlbnRwb2xsLmMtOTA0LSAqIHRoYXQgZW5kcyB1cCBpbiBhbm90aGVyIHdha2VfdXAoKSwgYWZ0ZXIgaGF2aW5nIGNoZWNrZWQgYWJvdXQgdGhlXFxuLS1cXG5mcy9ldmVudHBvbGwuYy05MTItXFxuZnMvZXZlbnRwb2xsLmM6OTEzOnN0YXRpYyB2b2lkIGVwX3BvbGxfc2FmZXdha2Uoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcXG5mcy9ldmVudHBvbGwuYy05MTQtXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBwb2xsZmxhZ3MpXFxuLS1cXG5mcy9ldmVudHBvbGwuYy05MjUtXFx0ICogcHJvdGVjdGVkLiBUaHVzLCB3ZSBhcmUgaW50cm9kdWNpbmcgYSBwZXIgZXZlbnRwb2xsIG5lc3QgZmllbGQuXFxuZnMvZXZlbnRwb2xsLmM6OTI2OlxcdCAqIElmIHdlIGFyZSBub3QgYmVpbmcgY2FsbCBmcm9tIGVwX3BvbGxfY2FsbGJhY2soKSwgZXBpIGlzIE5VTEwgYW5kXFxuZnMvZXZlbnRwb2xsLmMtOTI3LVxcdCAqIHdlIGFyZSBhdCB0aGUgZmlyc3QgbGV2ZWwgb2YgbmVzdGluZywgMC4gT3RoZXJ3aXNlLCB3ZSBhcmUgYmVpbmdcXG5mcy9ldmVudHBvbGwuYzo5Mjg6XFx0ICogY2FsbGVkIGZyb20gZXBfcG9sbF9jYWxsYmFjaygpIGFuZCBpZiBhIHByZXZpb3VzIHdha2V1cCBzb3VyY2UgaXNcXG5mcy9ldmVudHBvbGwuYy05MjktXFx0ICogbm90IGFuIGVwb2xsIGZpbGUgaXRzZWxmLCB3ZSBhcmUgYXQgZGVwdGggMSBzaW5jZSB0aGUgd2FrZXVwIHNvdXJjZVxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtOTUxLVxcbmZzL2V2ZW50cG9sbC5jOjk1MjpzdGF0aWMgdm9pZCBlcF9wb2xsX3NhZmV3YWtlKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksXFxuZnMvZXZlbnRwb2xsLmMtOTUzLVxcdFxcdFxcdCAgICAgX19wb2xsX3QgcG9sbGZsYWdzKVxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9OTYwPXN0YXRpYyB2b2lkIGVwX3JlbW92ZV93YWl0X3F1ZXVlKHN0cnVjdCBlcHBvbGxfZW50cnkgKnB3cSlcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTk2OS1cXHQgKiBBIE5VTEwgbG9hZCBpcyBwYWlyZWQgd2l0aCB0aGUgc21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNndoZWFkLCBOVUxMKVxcbmZzL2V2ZW50cG9sbC5jOjk3MDpcXHQgKiBpbiBlcF9wb2xsX2NhbGxiYWNrKCkncyBQT0xMRlJFRSBicmFuY2g6IHRoZSB0ZWFyZG93biBpc1xcbmZzL2V2ZW50cG9sbC5jLTk3MS1cXHQgKiBjb21wbGV0ZSBhbmQgd2UgbXVzdCBub3QgdG91Y2ggd2hlYWQgYWdhaW4uIE9uIGEgbm9uLU5VTEwgbG9hZFxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MTAxMz1zdGF0aWMgaW5saW5lIGJvb2wgZXBfaGFzX3dha2V1cF9zb3VyY2Uoc3RydWN0IGVwaXRlbSAqZXBpKVxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMTAxNy1cXG5mcy9ldmVudHBvbGwuYzoxMDE4Oi8qIGNhbGwgd2hlbiBlcC1cXHUwMDNlbXR4IGNhbm5vdCBiZSBoZWxkIChlcF9wb2xsX2NhbGxiYWNrKSAqL1xcbmZzL2V2ZW50cG9sbC5jLTEwMTktc3RhdGljIGlubGluZSB2b2lkIGVwX3BtX3N0YXlfYXdha2VfcmN1KHN0cnVjdCBlcGl0ZW0gKmVwaSlcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTEyMjU9c3RhdGljIHZvaWQgZXBfcmVtb3ZlKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGkpXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0xMjUwLSAqIGVwX3VucmVnaXN0ZXJfcG9sbHdhaXQoKSB0YWtlcyBlYWNoIHdhdGNoZWQgd2FpdC1xdWV1ZSBoZWFkJ3MgbG9jayxcXG5mcy9ldmVudHBvbGwuYzoxMjUxOiAqIHdoaWNoIHN5bmNocm9uaXplcyB3aXRoIGFueSBpbi1mbGlnaHQgZXBfcG9sbF9jYWxsYmFjaygpOyBhZnRlclxcbmZzL2V2ZW50cG9sbC5jLTEyNTItICogdGhpcyByZXR1cm5zIG5vIGNhbGxiYWNrIGNhbiBzdGlsbCBiZSBhYm91dCB0byBkZXJlZmVyZW5jZSBhbiBlcGlcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTEzMDk9c3RhdGljIHZvaWQgZXBfY2xlYXJfYW5kX3B1dChzdHJ1Y3QgZXZlbnRwb2xsICplcClcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTEzMTItXFx0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXFx1MDAyNmVwLVxcdTAwM2Vwb2xsX3dhaXQpKVxcbmZzL2V2ZW50cG9sbC5jOjEzMTM6XFx0XFx0ZXBfcG9sbF9zYWZld2FrZShlcCwgTlVMTCwgMCk7XFxuZnMvZXZlbnRwb2xsLmMtMTMxNC1cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTE1Mzc9c3RhdGljIHN0cnVjdCBlcGl0ZW0gKmVwX2ZpbmQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9rZXkgKnRmKVxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMTU2My0gKi9cXG5mcy9ldmVudHBvbGwuYzoxNTY0OnN0YXRpYyBpbnQgZXBfcG9sbF9jYWxsYmFjayh3YWl0X3F1ZXVlX2VudHJ5X3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICprZXkpXFxuZnMvZXZlbnRwb2xsLmMtMTU2NS17XFxuLS1cXG5mcy9ldmVudHBvbGwuYy0xNjUxLVxcdGlmIChwd2FrZSlcXG5mcy9ldmVudHBvbGwuYzoxNjUyOlxcdFxcdGVwX3BvbGxfc2FmZXdha2UoZXAsIGVwaSwgcG9sbGZsYWdzIFxcdTAwMjYgRVBPTExfVVJJTkdfV0FLRSk7XFxuZnMvZXZlbnRwb2xsLmMtMTY1My1cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTE2ODc9c3RhdGljIHZvaWQgZXBfcHRhYmxlX3F1ZXVlX3Byb2Moc3RydWN0IGZpbGUgKmZpbGUsIHdhaXRfcXVldWVfaGVhZF90ICp3aGVhZCxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTE3MDItXFxuZnMvZXZlbnRwb2xsLmM6MTcwMzpcXHRpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KFxcdTAwMjZwd3EtXFx1MDAzZXdhaXQsIGVwX3BvbGxfY2FsbGJhY2spO1xcbmZzL2V2ZW50cG9sbC5jLTE3MDQtXFx0cHdxLVxcdTAwM2V3aGVhZCA9IHdoZWFkO1xcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MTk3ND1zdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTIwNTYtXFx0aWYgKHB3YWtlKVxcbmZzL2V2ZW50cG9sbC5jOjIwNTc6XFx0XFx0ZXBfcG9sbF9zYWZld2FrZShlcCwgTlVMTCwgMCk7XFxuZnMvZXZlbnRwb2xsLmMtMjA1OC1cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTIwNjY9c3RhdGljIGludCBlcF9tb2RpZnkoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTIwOTMtXFx0ICogMSkgRmx1c2ggZXBpIGNoYW5nZXMgYWJvdmUgdG8gb3RoZXIgQ1BVcy4gIFRoaXMgZW5zdXJlc1xcbmZzL2V2ZW50cG9sbC5jOjIwOTQ6XFx0ICogICAgd2UgZG8gbm90IG1pc3MgZXZlbnRzIGZyb20gZXBfcG9sbF9jYWxsYmFjayBpZiBhblxcbmZzL2V2ZW50cG9sbC5jLTIwOTUtXFx0ICogICAgZXZlbnQgb2NjdXJzIGltbWVkaWF0ZWx5IGFmdGVyIHdlIGNhbGwgZl9vcC1cXHUwMDNlcG9sbCgpLlxcbmZzL2V2ZW50cG9sbC5jLTIwOTYtXFx0ICogICAgV2UgbmVlZCB0aGlzIGJlY2F1c2Ugd2UgZGlkIG5vdCB0YWtlIGVwLVxcdTAwM2Vsb2NrIHdoaWxlXFxuZnMvZXZlbnRwb2xsLmM6MjA5NzpcXHQgKiAgICBjaGFuZ2luZyBlcGkgYWJvdmUgKGJ1dCBlcF9wb2xsX2NhbGxiYWNrIGRvZXMgdGFrZVxcbmZzL2V2ZW50cG9sbC5jLTIwOTgtXFx0ICogICAgZXAtXFx1MDAzZWxvY2spLlxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjEwNC1cXHQgKlxcbmZzL2V2ZW50cG9sbC5jOjIxMDU6XFx0ICogVGhpcyBiYXJyaWVyIHdpbGwgbm93IGd1YXJhbnRlZSBlcF9wb2xsX2NhbGxiYWNrIG9yIGZfb3AtXFx1MDAzZXBvbGxcXG5mcy9ldmVudHBvbGwuYy0yMTA2LVxcdCAqIChvciBib3RoKSB3aWxsIG5vdGljZSB0aGUgcmVhZGluZXNzIG9mIGFuIGl0ZW0uXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yMTMzLVxcdGlmIChwd2FrZSlcXG5mcy9ldmVudHBvbGwuYzoyMTM0OlxcdFxcdGVwX3BvbGxfc2FmZXdha2UoZXAsIE5VTEwsIDApO1xcbmZzL2V2ZW50cG9sbC5jLTIxMzUtXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yMjY1PXN0YXRpYyBzdHJ1Y3QgdGltZXNwZWM2NCAqZXBfdGltZW91dF90b190aW1lc3BlYyhzdHJ1Y3QgdGltZXNwZWM2NCAqdG8sIGxvbmcgbXMpXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yMjg4LSAqIGtub3cgdGhhdCBkZWZhdWx0X3dha2VfZnVuY3Rpb24vdHR3dSB3aWxsIG9ubHkgZmFpbCBpZiB0aGUgdGhyZWFkIGlzIGFscmVhZHlcXG5mcy9ldmVudHBvbGwuYzoyMjg5OiAqIHdva2VuLCBhbmQgaW4gdGhhdCBjYXNlIHRoZSBlcF9wb2xsIGxvb3Agd2lsbCByZW1vdmUgdGhlIGVudHJ5IGFueXdheXMsIG5vdFxcbmZzL2V2ZW50cG9sbC5jLTIyOTAtICogdHJ5IHRvIHJldXNlIGl0Llxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MjI5Mj1zdGF0aWMgaW50IGVwX2F1dG9yZW1vdmVfd2FrZV9mdW5jdGlvbihzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FfZW50cnksXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yMjk3LVxcdC8qXFxuZnMvZXZlbnRwb2xsLmM6MjI5ODpcXHQgKiBQYWlycyB3aXRoIGxpc3RfZW1wdHlfY2FyZWZ1bCBpbiBlcF9wb2xsLCBhbmQgZW5zdXJlcyBmdXR1cmUgbG9vcFxcbmZzL2V2ZW50cG9sbC5jLTIyOTktXFx0ICogaXRlcmF0aW9ucyBzZWUgdGhlIGNhdXNlIG9mIHRoaXMgd2FrZXVwLlxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MjMyMT1zdGF0aWMgaW50IGVwX3NjaGVkdWxlX3RpbWVvdXQoa3RpbWVfdCAqdG8pXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yMzI5LS8qKlxcbmZzL2V2ZW50cG9sbC5jOjIzMzA6ICogZXBfcG9sbCAtIFJldHJpZXZlcyByZWFkeSBldmVudHMsIGFuZCBkZWxpdmVycyB0aGVtIHRvIHRoZSBjYWxsZXItc3VwcGxpZWRcXG5mcy9ldmVudHBvbGwuYy0yMzMxLSAqICAgICAgICAgICBldmVudCBidWZmZXIuXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yMzQ1LSAqL1xcbmZzL2V2ZW50cG9sbC5jOjIzNDY6c3RhdGljIGludCBlcF9wb2xsKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXFxuZnMvZXZlbnRwb2xsLmMtMjM0Ny1cXHRcXHQgICBpbnQgbWF4ZXZlbnRzLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdGltZW91dClcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI0MjItXFx0XFx0ICogQmFycmllcmxlc3MgdmFyaWFudCwgd2FpdHF1ZXVlX2FjdGl2ZSgpIGlzIGNhbGxlZCB1bmRlclxcbmZzL2V2ZW50cG9sbC5jOjI0MjM6XFx0XFx0ICogdGhlIHNhbWUgbG9jayBvbiB3YWtldXAgZXBfcG9sbF9jYWxsYmFjaygpIHNpZGUsIHNvIGl0XFxuZnMvZXZlbnRwb2xsLmMtMjQyNC1cXHRcXHQgKiBpcyBzYWZlIHRvIGF2b2lkIGFuIGV4cGxpY2l0IGJhcnJpZXIuXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yOTAzPXN0YXRpYyBpbnQgZG9fZXBvbGxfd2FpdChpbnQgZXBmZCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjkyNC1cXHQvKiBUaW1lIHRvIGZpc2ggZm9yIGV2ZW50cyAuLi4gKi9cXG5mcy9ldmVudHBvbGwuYzoyOTI1OlxcdHJldHVybiBlcF9wb2xsKGVwLCBldmVudHMsIG1heGV2ZW50cywgdG8pO1xcbmZzL2V2ZW50cG9sbC5jLTI5MjYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowMTowNi4yMTcxOTA4NzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjYxODkzNDMzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFdmVudHBvbGwgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIE15IGZvY3VzIHNob3VsZCBiZSBvbiBgZXBfcG9sbF9jYWxsYmFja2AsIGBlcF9pbnNlcnRgLCBgZXBfbW9kaWZ5YCwgYGVwX3BvbGxgLCBgX19lcF9ldmVudHBvbGxfcG9sbGAsIGFuZCBgZXBfZG9uZV9zY2FuYC4gTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gc29tZXRoaW5nIOKAkyB5ZXMsIGBfX2VwX2V2ZW50cG9sbF9wb2xsYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb24uIEFuZCBgZXBfZG9uZV9zY2FuYD8gWWVwLCBhbHNvIHN0YXRpYy4gSW50ZXJlc3RpbmcuIExldCdzIHNlZSwgYGVwX2luc2VydGAgaXMgc3RhdGljIHRvby4gSHVoLCBpdCBsb29rcyBsaWtlIGFsbCB0aGVzZSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHdpdGhpbiBgZnMvZXZlbnRwb2xsLmNgIGFyZSBkZWZpbmVkIGFzIHN0YXRpYy4gVGhhdCBoZWxwcyB3aXRoIGVuY2Fwc3VsYXRpb24sIEkgc3VwcG9zZS4gVGhlIHRydWUgZW50cnkgcG9pbnRzIHRvIHRoaXMgd2hvbGUgZXZlbnRwb2xsIG1lY2hhbmlzbSBhcmUgYGRvX2Vwb2xsX3dhaXRgLCBgZG9fZXBvbGxfY3RsYCwgYW5kIGBkb19lcG9sbF9jcmVhdGVgLiBBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBkb19lcG9sbF9jdGxgIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTk1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjAzOjEyLjQwNjUzNjY3OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1NTM1MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fZXBvbGxfY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V2ZW50cG9sbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V2ZW50cG9sbC5jPTM4NT1zdGF0aWMgbG9uZyBtYXhfdXNlcl93YXRjaGVzIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5mcy9ldmVudHBvbGwuYy00MDItICogYW5kIGNhcnJpZXMgaXRzIHNjcmF0Y2ggc3RhdGUgb24gYSBzdGFjay1hbGxvY2F0ZWQgc3RydWN0XFxuZnMvZXZlbnRwb2xsLmM6NDAzOiAqIGVwX2N0bF9jdHggc2NvcGVkIHRvIG9uZSBkb19lcG9sbF9jdGwoKSBjYWxsLiBOb24tbmVzdGVkIGluc2VydHNcXG5mcy9ldmVudHBvbGwuYy00MDQtICogc2tpcCB0aGlzIG1hY2hpbmVyeSBlbnRpcmVseSBhbmQgdGFrZSBvbmx5IGVwLVxcdTAwM2VtdHguXFxuLS1cXG5mcy9ldmVudHBvbGwuYz00Mjc9c3RhdGljIHU2NCBsb29wX2NoZWNrX2dlbiA9IDA7XFxuLS1cXG5mcy9ldmVudHBvbGwuYy00MzEtLypcXG5mcy9ldmVudHBvbGwuYzo0MzI6ICogUGVyLWRvX2Vwb2xsX2N0bCgpIHNjcmF0Y2ggZm9yIHRoZSBsb29wIC8gcGF0aCBjaGVja3MuIEFsbG9jYXRlZCBvblxcbmZzL2V2ZW50cG9sbC5jLTQzMy0gKiB0aGUgY2FsbGVyJ3Mgc3RhY2s7IHBvcHVsYXRlZCBieSBlcF9jdGxfbG9jaygpIGFuZCB0aGUgZG93bndhcmRcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTE3Njk9c3RhdGljIGludCByZXZlcnNlX3BhdGhfY2hlY2tfcHJvYyhzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMTc5NS0gKiAgICAgICAgICAgICAgICAgICAgICBvdmVyIGl0cyBsaW1pdCBpbiBwYXRoX2xpbWl0c1tdLlxcbmZzL2V2ZW50cG9sbC5jOjE3OTY6ICogQGN0eDogUGVyLWRvX2Vwb2xsX2N0bCgpIHNjcmF0Y2ggZm9yIHRoZSBsb29wIC8gcGF0aCBjaGVja3MuXFxuZnMvZXZlbnRwb2xsLmMtMTc5Ny0gKlxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MjM0Nj1zdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI0NzgtICpcXG5mcy9ldmVudHBvbGwuYzoyNDc5OiAqIEBjdHg6IFBlci1kb19lcG9sbF9jdGwoKSBzY3JhdGNoIGZvciB0aGUgbG9vcCAvIHBhdGggY2hlY2tzLlxcbmZzL2V2ZW50cG9sbC5jLTI0ODAtICogQGVwOiB0aGUgXFx1MDAyNnN0cnVjdCBldmVudHBvbGwgdG8gYmUgY3VycmVudGx5IGNoZWNrZWQuXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yNjQ3PXN0YXRpYyBpbmxpbmUgaW50IGVwb2xsX211dGV4X2xvY2soc3RydWN0IG11dGV4ICptdXRleCwgYm9vbCBub25ibG9jaylcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI2NTYtLypcXG5mcy9ldmVudHBvbGwuYzoyNjU3OiAqIEFjcXVpcmUgdGhlIGxvY2tzIHJlcXVpcmVkIGZvciBkb19lcG9sbF9jdGwoKSBvbiBAZXAgZm9yIEBvcC5cXG5mcy9ldmVudHBvbGwuYy0yNjU4LSAqXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yNzI0PXN0YXRpYyB2b2lkIGVwX2N0bF91bmxvY2soc3RydWN0IGVwX2N0bF9jdHggKmN0eCwgc3RydWN0IGV2ZW50cG9sbCAqZXAsXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yNzM0LVxcbmZzL2V2ZW50cG9sbC5jOjI3MzU6aW50IGRvX2Vwb2xsX2N0bF9maWxlKHN0cnVjdCBmaWxlICpmLCBpbnQgb3AsIHN0cnVjdCBlcG9sbF9rZXkgKnRmLFxcbmZzL2V2ZW50cG9sbC5jLTI3MzYtXFx0XFx0ICAgICAgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLCBib29sIG5vbmJsb2NrKVxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjgyMS1cXG5mcy9ldmVudHBvbGwuYzoyODIyOmludCBkb19lcG9sbF9jdGwoaW50IGVwZmQsIGludCBvcCwgaW50IGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmVwZHMsXFxuZnMvZXZlbnRwb2xsLmMtMjgyMy1cXHRcXHQgYm9vbCBub25ibG9jaylcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI4MzctXFx0ZWZkLmZkID0gZmQ7XFxuZnMvZXZlbnRwb2xsLmM6MjgzODpcXHRyZXR1cm4gZG9fZXBvbGxfY3RsX2ZpbGUoZmRfZmlsZShmKSwgb3AsIFxcdTAwMjZlZmQsIGVwZHMsIG5vbmJsb2NrKTtcXG5mcy9ldmVudHBvbGwuYy0yODM5LX1cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTI4NDY9U1lTQ0FMTF9ERUZJTkU0KGVwb2xsX2N0bCwgaW50LCBlcGZkLCBpbnQsIG9wLCBpbnQsIGZkLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjg1NC1cXG5mcy9ldmVudHBvbGwuYzoyODU1OlxcdHJldHVybiBkb19lcG9sbF9jdGwoZXBmZCwgb3AsIGZkLCBcXHUwMDI2ZXBkcywgZmFsc2UpO1xcbmZzL2V2ZW50cG9sbC5jLTI4NTYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowMzoxMi40NTEwOTcwOTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2NTg5MjcwMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEVwb2xsIEVudHJ5IFBvaW50IEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBlcG9sbCBlbnRyeSBwb2ludHMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgdXNlcnNwYWNlIHJlcXVlc3RzLiBGcm9tIHdoYXQgSSBzZWUsIHRoZXJlIGFyZSBhIGZldyBwcmltYXJ5IGZ1bmN0aW9uczogYGRvX2Vwb2xsX2N0bGAsIGBkb19lcG9sbF93YWl0YCwgYW5kIGBkb19lcG9sbF9jcmVhdGVgLiBUaG9zZSBhcmUgdGhlIG9idmlvdXMgc3VzcGVjdHMgZm9yIGhhbmRsaW5nIHVzZXItc3BhY2UgcmVxdWVzdHMgZGlyZWN0bHkuIFRoZW4gdGhlcmUncyBgZXBfcG9sbF9jYWxsYmFja2AuIE5vdywgdGhhdCBvbmUgaXMgaW50ZXJlc3Rpbmc7IGl0J3MgYSBjYWxsYmFjayBmdW5jdGlvbiwgdHlwaWNhbGx5IHRyaWdnZXJlZCBieSB3YWl0cXVldWVzLCBidXQgaXQncyAqc3RhdGljKi5cblxuV2FpdCwgbGV0IG1lIHBhcnNlIHRoYXQuIFRoZSBmYWN0IHRoYXQgYGVwX3BvbGxfY2FsbGJhY2tgIGlzIHN0YXRpYyBtZWFucyBpdCdzIG5vdCBkaXJlY3RseSBleHBvc2VkIGFzIGEgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnQuIEl0J3MgY2FsbGVkIGluZGlyZWN0bHksIGxpa2VseSBmcm9tIHdpdGhpbiB0aGUga2VybmVsLiBJdCdzIHRoZSB3b3JrZXIgaW4gdGhlIHNoYWRvd3MsIG5vdCB0aGUgZnJvbnQgZG9vci4gSSBuZWVkIHRvIGtlZXAgdGhhdCBkaXN0aW5jdGlvbiBjbGVhciBpbiBteSBoZWFkLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBlcF9wb2xsX2NhbGxiYWNrYCBpcyBpbmRlZWQgc3RhdGljLiBBaCwgeWVzLCBpdCBpcy4gVGhlIHNpZ25hdHVyZSBjb25maXJtczogYHN0YXRpYyBpbnQgZXBfcG9sbF9jYWxsYmFjayh3YWl0X3F1ZXVlX2VudHJ5X3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICprZXkpYC5cblxuTXkgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGFuZCBpZiBzbywgaG93IHRoZXkgZml0IGludG8gdGhlIHBpY3R1cmUuIGBkb19lcG9sbF9jdGxgIGxvb2tzIG5vbi1zdGF0aWMgdG8gbWUuIE9rYXksIGxldCdzIGFzc3VtZSBgZG9fZXBvbGxfd2FpdGAgaXMgc3RhdGljLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDU6MTkuMDQwMzY5NzM4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM4MTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19lcG9sbF93YWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V2ZW50cG9sbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V2ZW50cG9sbC5jPTI4Nzk9aW50IGVwb2xsX3NlbmRldmVudHMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI5MDItICovXFxuZnMvZXZlbnRwb2xsLmM6MjkwMzpzdGF0aWMgaW50IGRvX2Vwb2xsX3dhaXQoaW50IGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcXG5mcy9ldmVudHBvbGwuYy0yOTA0LVxcdFxcdFxcdCBpbnQgbWF4ZXZlbnRzLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdG8pXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yOTI4PVNZU0NBTExfREVGSU5FNChlcG9sbF93YWl0LCBpbnQsIGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKiwgZXZlbnRzLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjkzMi1cXG5mcy9ldmVudHBvbGwuYzoyOTMzOlxcdHJldHVybiBkb19lcG9sbF93YWl0KGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLFxcbmZzL2V2ZW50cG9sbC5jLTI5MzQtXFx0XFx0XFx0ICAgICBlcF90aW1lb3V0X3RvX3RpbWVzcGVjKFxcdTAwMjZ0bywgdGltZW91dCkpO1xcbi0tXFxuZnMvZXZlbnRwb2xsLmM9Mjk0MT1zdGF0aWMgaW50IGRvX2Vwb2xsX3B3YWl0KGludCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yOTU0LVxcbmZzL2V2ZW50cG9sbC5jOjI5NTU6XFx0ZXJyb3IgPSBkb19lcG9sbF93YWl0KGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLCB0byk7XFxuZnMvZXZlbnRwb2xsLmMtMjk1Ni1cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTMwMzY9c3RhdGljIGludCBkb19jb21wYXRfZXBvbGxfcHdhaXQoaW50IGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTMwNTAtXFxuZnMvZXZlbnRwb2xsLmM6MzA1MTpcXHRlcnIgPSBkb19lcG9sbF93YWl0KGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLCB0aW1lb3V0KTtcXG5mcy9ldmVudHBvbGwuYy0zMDUyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowNToxOS4wODU3NTYzNzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4MzY5MTMwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEVwb2xsIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGVwb2xsIGNvZGUsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gY2FsbCBoaWVyYXJjaHkuIGBkb19lcG9sbF93YWl0YCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0J3Mgbm90IGRpcmVjdGx5IGV4cG9zZWQgYXMgYSBzeXN0ZW0gY2FsbC4gVGhhdCBuYXJyb3dzIG15IGZvY3VzIHRvIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50czogYHN5c19lcG9sbF93YWl0YCwgYHN5c19lcG9sbF9jdGxgLCBgc3lzX2Vwb2xsX3B3YWl0YCwgYW5kIGBzeXNfZXBvbGxfcHdhaXQyYC4gVGhvc2UgYXJlIHRoZSBzeXNjYWxscy4gUGx1cyBgZG9fZXBvbGxfY3RsYCwgYGRvX2Vwb2xsX2N0bF9maWxlYCB3aGljaCBhcmUgaW50ZXJuYWwuXG5cbk5vdywgZ2xhbmNpbmcgYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgSSBzZWUgYSBtaXggb2YgaW5saW5lIGFuZCBzdGF0aWMgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBoYXMgdG91Y2hlZCBgZXBfZXZlbnRzX2F2YWlsYWJsZWAsIGBlcF9zdGF0ZV90ZXN0YCwgYGVwX3JlYWR5X2Zhc3RfZW5hYmxlZGAsIGBlcF9zZXRfcmVhZHlfYWNjb3VudGVkYCwgYGVwX3ByZXBhcmVfcmVwb2xsYCwgd2hpY2ggYXJlIGFsbCBpbmxpbmUsIHBsdXMgYGVwX2NhbGxiYWNrX2Nhbl9za2lwYCwgYGVwX2RvbmVfc2NhbmAsIGBfX2VwX2V2ZW50cG9sbF9wb2xsYCwgYGVwX3BvbGxfY2FsbGJhY2tgLCBgZXBfaW5zZXJ0YCwgYGVwX21vZGlmeWAsIGBlcF9kZWxpdmVyX2V2ZW50YCwgYW5kIGBlcF9wb2xsYCBhcmUgYWxsIHN0YXRpYy4gR2l2ZW4gdGhhdCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBtb3N0bHkgc3RhdGljIG9yIGlubGluZSwgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzIGxpa2VseSBsaWVzIGluIGhvdyB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHRoZSBzeXNjYWxscyBhbmQgYGRvX2Vwb2xsX2N0bGAgb3IgYGRvX2Vwb2xsX2N0bF9maWxlYCwgaW50ZXJhY3Qgd2l0aCB0aGVtLlxuXG5TbywgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgZG9fZXBvbGxfY3RsYCBhbmQgYGRvX2Vwb2xsX2N0bF9maWxlYCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIGNvbnRyb2wgb3BlcmF0aW9ucyBhbmQgdGhleSBjYWxsIGBlcF9pbnNlcnRgIGFuZCBgZXBfbW9kaWZ5YC4gYGRvX2Vwb2xsX3dhaXRgICh0aGUgc3RhdGljIG9uZSkgaXMgY2FsbGVkIGJ5IHRoZSBgc3lzX2Vwb2xsXypgIHN5c2NhbGxzLCBsaWtlIGBzeXNfZXBvbGxfd2FpdGAsIGBzeXNfZXBvbGxfcHdhaXRgLCBhbmQgYHN5c19lcG9sbF9wd2FpdDJgLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5gX19lcF9ldmVudHBvbGxfcG9sbGAgaXMgYWxzbyBrZXkgYmVjYXVzZSBpdCdzIGNhbGxlZCBieSBgZXBfZXZlbnRwb2xsX3BvbGxgLCB3aGljaCBpcyB0aGUgYC5wb2xsYCBjYWxsYmFjayBmb3IgZXBvbGwgZmlsZXMuIEZpbmFsbHksIGBlcF9wb2xsX2NhbGxiYWNrYCBpcyBjYWxsZWQgYnkgd2FpdHF1ZXVlcy4gU28sIG15IHByaW1hcnkgYXJlYXMgb2YgY29uY2VybiBmb3IgYW55IGRlZXBlciBpbXBhY3QgYW5hbHlzaXMgYXJlOlxuXG4qICAgYGRvX2Vwb2xsX2N0bGAgYW5kIGBkb19lcG9sbF9jdGxfZmlsZWBcbiogICBgc3lzX2Vwb2xsX3dhaXRgLCBgc3lzX2Vwb2xsX3B3YWl0YCwgYHN5c19lcG9sbF9wd2FpdDJgIChhbmQgYnkgaW1wbGljYXRpb24gYGRvX2Vwb2xsX3dhaXRgKVxuKiAgIGBlcF9ldmVudHBvbGxfcG9sbGAgKHdhaXQsIGlzICp0aGF0KiBzdGF0aWM/KS4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTIzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjA1OjQ5LjkyMjY3MjAzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3Mzk5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXBfZXZlbnRwb2xsX3BvbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXZlbnRwb2xsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXZlbnRwb2xsLmM9MzA2PXN0cnVjdCBldmVudHBvbGwge1xcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMzM5LVxcbmZzL2V2ZW50cG9sbC5jOjM0MDpcXHQvKiB3YWtldXBfc291cmNlIHVzZWQgd2hlbiBlcF9zZW5kX2V2ZW50cyBvciBfX2VwX2V2ZW50cG9sbF9wb2xsIGlzIHJ1bm5pbmcgKi9cXG5mcy9ldmVudHBvbGwuYy0zNDEtXFx0c3RydWN0IHdha2V1cF9zb3VyY2UgKndzO1xcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MTM1NT1zdGF0aWMgX19wb2xsX3QgZXBfaXRlbV9wb2xsKGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSwgcG9sbF90YWJsZSAqcHQsIGludCBkZXB0aCk7XFxuZnMvZXZlbnRwb2xsLmMtMTM1Ni1cXG5mcy9ldmVudHBvbGwuYzoxMzU3OnN0YXRpYyBfX3BvbGxfdCBfX2VwX2V2ZW50cG9sbF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0LCBpbnQgZGVwdGgpXFxuZnMvZXZlbnRwb2xsLmMtMTM1OC17XFxuLS1cXG5mcy9ldmVudHBvbGwuYy0xMzk3LS8qXFxuZnMvZXZlbnRwb2xsLmM6MTM5ODogKiBEaWZmZXJzIGZyb20gZXBfZXZlbnRwb2xsX3BvbGwoKSBpbiB0aGF0IGludGVybmFsIGNhbGxlcnMgYWxyZWFkeSBoYXZlXFxuZnMvZXZlbnRwb2xsLmMtMTM5OS0gKiB0aGUgZXAtXFx1MDAzZW10eCBzbyB3ZSBuZWVkIHRvIHN0YXJ0IGZyb20gZGVwdGg9MSwgc3VjaCB0aGF0IG11dGV4X2xvY2tfbmVzdGVkKClcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTE0MDI9c3RhdGljIF9fcG9sbF90IGVwX2l0ZW1fcG9sbChjb25zdCBzdHJ1Y3QgZXBpdGVtICplcGksIHBvbGxfdGFibGUgKnB0LFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMTQxOC1cXHRlbHNlXFxuZnMvZXZlbnRwb2xsLmM6MTQxOTpcXHRcXHRyZXMgPSBfX2VwX2V2ZW50cG9sbF9wb2xsKGZpbGUsIHB0LCBkZXB0aCk7XFxuZnMvZXZlbnRwb2xsLmMtMTQyMC1cXHRmcHV0KGZpbGUpO1xcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMTQyMy1cXG5mcy9ldmVudHBvbGwuYzoxNDI0OnN0YXRpYyBfX3BvbGxfdCBlcF9ldmVudHBvbGxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcXG5mcy9ldmVudHBvbGwuYy0xNDI1LXtcXG5mcy9ldmVudHBvbGwuYzoxNDI2OlxcdHJldHVybiBfX2VwX2V2ZW50cG9sbF9wb2xsKGZpbGUsIHdhaXQsIDApO1xcbmZzL2V2ZW50cG9sbC5jLTE0MjctfVxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MTQ1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBldmVudHBvbGxfZm9wcyA9IHtcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTE0NTgtXFx0LnJlbGVhc2VcXHQ9IGVwX2V2ZW50cG9sbF9yZWxlYXNlLFxcbmZzL2V2ZW50cG9sbC5jOjE0NTk6XFx0LnBvbGxcXHRcXHQ9IGVwX2V2ZW50cG9sbF9wb2xsLFxcbmZzL2V2ZW50cG9sbC5jLTE0NjAtXFx0Lmxsc2Vla1xcdFxcdD0gbm9vcF9sbHNlZWssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjA1OjQ5Ljk2NjQxNTI2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODUzNTEyNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEVwb2xsIEZ1bmN0aW9uIEh1bnQqKlxuXG5Pa2F5LCBzbyBgZXBfZXZlbnRwb2xsX3BvbGxgIGlzIGRlZmluaXRlbHkgc3RhdGljLCB0aGF0J3Mgbm90IGdvaW5nIHRvIGdldCBtZSBhbnl3aGVyZS4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGVwb2xsLiBGcm9tIG15IG5vdGVzLCBpdCBsb29rcyBsaWtlIGBkb19lcG9sbF9jdGxgLCBgZG9fZXBvbGxfY3RsX2ZpbGVgLCBhbmQgYHN5c19lcG9sbF93YWl0YCBhcmUgdGhlIG9uZXMgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gV2FpdCwgaGFuZyBvbi4uLiBgc3lzX2Vwb2xsX3dhaXRgIGlzIGFjdHVhbGx5IGRlZmluZWQgdXNpbmcgYFNZU0NBTExfREVGSU5FNGAsIHNvIHRoZSBzeXN0ZW0gY2FsbCBuYW1lIGlzIGBzeXNfZXBvbGxfd2FpdGAgb3IgYF9feDY0X3N5c19lcG9sbF93YWl0YC4gSSBjYW4gcHJvYmFibHkganVzdCBzdGljayB3aXRoIGBlcG9sbF93YWl0YCwgdGhvdWdoLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBjYW4gSSBhY3R1YWxseSAqdXNlKiBhbnkgb2YgdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnM/IExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgc2lnbmF0dXJlIGFuZCBiZWhhdmlvciBvZiBgZG9fZXBvbGxfY3RsYCB0byBtYWtlIHN1cmUgaXQgaXMgaW5kZWVkIHRoZSBiZXN0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyODEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDY6MDEuODE5OTMwMTI0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA4OTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19lcG9sbF9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXZlbnRwb2xsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXZlbnRwb2xsLmM9Mzg1PXN0YXRpYyBsb25nIG1heF91c2VyX3dhdGNoZXMgX19yZWFkX21vc3RseTtcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTQwMi0gKiBhbmQgY2FycmllcyBpdHMgc2NyYXRjaCBzdGF0ZSBvbiBhIHN0YWNrLWFsbG9jYXRlZCBzdHJ1Y3RcXG5mcy9ldmVudHBvbGwuYzo0MDM6ICogZXBfY3RsX2N0eCBzY29wZWQgdG8gb25lIGRvX2Vwb2xsX2N0bCgpIGNhbGwuIE5vbi1uZXN0ZWQgaW5zZXJ0c1xcbmZzL2V2ZW50cG9sbC5jLTQwNC0gKiBza2lwIHRoaXMgbWFjaGluZXJ5IGVudGlyZWx5IGFuZCB0YWtlIG9ubHkgZXAtXFx1MDAzZW10eC5cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTQyNz1zdGF0aWMgdTY0IGxvb3BfY2hlY2tfZ2VuID0gMDtcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTQzMS0vKlxcbmZzL2V2ZW50cG9sbC5jOjQzMjogKiBQZXItZG9fZXBvbGxfY3RsKCkgc2NyYXRjaCBmb3IgdGhlIGxvb3AgLyBwYXRoIGNoZWNrcy4gQWxsb2NhdGVkIG9uXFxuZnMvZXZlbnRwb2xsLmMtNDMzLSAqIHRoZSBjYWxsZXIncyBzdGFjazsgcG9wdWxhdGVkIGJ5IGVwX2N0bF9sb2NrKCkgYW5kIHRoZSBkb3dud2FyZFxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MTc2OT1zdGF0aWMgaW50IHJldmVyc2VfcGF0aF9jaGVja19wcm9jKHN0cnVjdCBlcF9jdGxfY3R4ICpjdHgsXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0xNzk1LSAqICAgICAgICAgICAgICAgICAgICAgIG92ZXIgaXRzIGxpbWl0IGluIHBhdGhfbGltaXRzW10uXFxuZnMvZXZlbnRwb2xsLmM6MTc5NjogKiBAY3R4OiBQZXItZG9fZXBvbGxfY3RsKCkgc2NyYXRjaCBmb3IgdGhlIGxvb3AgLyBwYXRoIGNoZWNrcy5cXG5mcy9ldmVudHBvbGwuYy0xNzk3LSAqXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yMzQ2PXN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjQ3OC0gKlxcbmZzL2V2ZW50cG9sbC5jOjI0Nzk6ICogQGN0eDogUGVyLWRvX2Vwb2xsX2N0bCgpIHNjcmF0Y2ggZm9yIHRoZSBsb29wIC8gcGF0aCBjaGVja3MuXFxuZnMvZXZlbnRwb2xsLmMtMjQ4MC0gKiBAZXA6IHRoZSBcXHUwMDI2c3RydWN0IGV2ZW50cG9sbCB0byBiZSBjdXJyZW50bHkgY2hlY2tlZC5cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTI2NDc9c3RhdGljIGlubGluZSBpbnQgZXBvbGxfbXV0ZXhfbG9jayhzdHJ1Y3QgbXV0ZXggKm11dGV4LCBib29sIG5vbmJsb2NrKVxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjY1Ni0vKlxcbmZzL2V2ZW50cG9sbC5jOjI2NTc6ICogQWNxdWlyZSB0aGUgbG9ja3MgcmVxdWlyZWQgZm9yIGRvX2Vwb2xsX2N0bCgpIG9uIEBlcCBmb3IgQG9wLlxcbmZzL2V2ZW50cG9sbC5jLTI2NTgtICpcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTI3MjQ9c3RhdGljIHZvaWQgZXBfY3RsX3VubG9jayhzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI3MzQtXFxuZnMvZXZlbnRwb2xsLmM6MjczNTppbnQgZG9fZXBvbGxfY3RsX2ZpbGUoc3RydWN0IGZpbGUgKmYsIGludCBvcCwgc3RydWN0IGVwb2xsX2tleSAqdGYsXFxuZnMvZXZlbnRwb2xsLmMtMjczNi1cXHRcXHQgICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmVwZHMsIGJvb2wgbm9uYmxvY2spXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yODIxLVxcbmZzL2V2ZW50cG9sbC5jOjI4MjI6aW50IGRvX2Vwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXBkcyxcXG5mcy9ldmVudHBvbGwuYy0yODIzLVxcdFxcdCBib29sIG5vbmJsb2NrKVxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjgzNy1cXHRlZmQuZmQgPSBmZDtcXG5mcy9ldmVudHBvbGwuYzoyODM4OlxcdHJldHVybiBkb19lcG9sbF9jdGxfZmlsZShmZF9maWxlKGYpLCBvcCwgXFx1MDAyNmVmZCwgZXBkcywgbm9uYmxvY2spO1xcbmZzL2V2ZW50cG9sbC5jLTI4MzktfVxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9Mjg0Nj1TWVNDQUxMX0RFRklORTQoZXBvbGxfY3RsLCBpbnQsIGVwZmQsIGludCwgb3AsIGludCwgZmQsXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yODU0LVxcbmZzL2V2ZW50cG9sbC5jOjI4NTU6XFx0cmV0dXJuIGRvX2Vwb2xsX2N0bChlcGZkLCBvcCwgZmQsIFxcdTAwMjZlcGRzLCBmYWxzZSk7XFxuZnMvZXZlbnRwb2xsLmMtMjg1Ni19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjA2OjAxLjg2NjAyMzQ4NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjU3MjY4NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgYGVwb2xsYCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBlcG9sbGAgaW1wbGVtZW50YXRpb24gYWdhaW4uIEknbSBmb2N1c2luZyBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBjb250cm9sIGFuZCB3YWl0IG9wZXJhdGlvbnMuIExldCBtZSBzZWUuLi4gSSBub3RpY2UgdGhhdCBib3RoIGBkb19lcG9sbF9jdGxgIGFuZCBgZG9fZXBvbGxfY3RsX2ZpbGVgIGFyZSBkZWZpbmVkIGFzIG5vbi1zdGF0aWMuIE1ha2VzIHNlbnNlLCB0aGV5J3JlIGxpa2VseSBlbnRyeSBwb2ludHMuIEJ1dCB0aGF0IGJyaW5ncyB1cCB0aGUgcXVlc3Rpb24gb2YgYGVwb2xsX3dhaXRgLiBJdOKAmXMgYSBzeXN0ZW0gY2FsbCwgb2J2aW91c2x5LiBCdXQgaXMgdGhlcmUgc29tZSBub24tc3RhdGljIGhlbHBlciBmdW5jdGlvbiwgc29tZSBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIHRvIGhhbmRsZSB0aGUgd2FpdGluZyBhc3BlY3Q/IEkgZG9uJ3QgcmVjYWxsIG9uZSBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLiBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSdzIGFueSBub24tc3RhdGljIGZ1bmN0aW9uIGludm9sdmVkIGluIHdhaXRpbmcuIExldCdzIHNlZS4uLiBNYXliZSBgZXBvbGxfc2VuZGV2ZW50c2A/IEknbGwgbmVlZCB0byBleGFtaW5lIHRoYXQgZnVuY3Rpb24uIEkgZmVlbCBsaWtlIGl0IG1pZ2h0IGJlIHNvbWVob3cgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjEwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDY6MDcuMTIzMjkzOTI0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYzOTcyMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXBvbGxfc2VuZGV2ZW50c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9ldmVudHBvbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9ldmVudHBvbGwuYz0yODU4PXN0YXRpYyBpbnQgZXBfY2hlY2tfcGFyYW1zKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldnMsXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yODc4LVxcbmZzL2V2ZW50cG9sbC5jOjI4Nzk6aW50IGVwb2xsX3NlbmRldmVudHMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcXG5mcy9ldmVudHBvbGwuYy0yODgwLVxcdFxcdCAgICAgaW50IG1heGV2ZW50cylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDY6MDcuMjg5Njk1NTgyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDg2OTE5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGVwb2xsX3NlbmRldmVudHNgJ3MgU2NvcGUqKlxuXG5SaWdodCwgc28gYGVwb2xsX3NlbmRldmVudHNgIGlzbid0IGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyB0aGF0IGl0J3MgbWVhbnQgdG8gYmUgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBpbW1lZGlhdGUgbW9kdWxlIHdoZXJlIGl0J3MgZGVmaW5lZC4gTGV0J3Mgc2VlLi4uIEkgbmVlZCB0byBmaWd1cmUgb3V0ICpob3cqIGl0J3MgZXhwb3NlZC4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGhlYWRlciBmaWxlIHdoZXJlIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIGFuZCwgaG9wZWZ1bGx5LCBwcm90b3R5cGVzIGFyZSBkZWNsYXJlZC4gSSdsbCB0YWtlIGEgcXVpY2sgcGVlayBhdCBgaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaGAgYW5kIHNlZSB3aGF0IHdlJ3JlIGV4cG9ydGluZyBhbmQgaW1wb3J0aW5nIGZyb20gdGhpcyBmaWxlLiBJdCdsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW50ZW5kZWQgdXNlLCBkZXBlbmRlbmNpZXMgYW5kIHdoZXJlIGl0J3MgY2FsbGVkLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBxdWljayB3YXkgb2YgdHJhY2luZyBkZXBlbmRlbmNpZXMgYW5kIGVudHJ5IHBvaW50cyBpbiB0aGUga2VybmVsLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMjgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowNjoxMS42OTgzOTA2OTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzYyMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVwb2xsX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg9MTY9c3RydWN0IGZpbGU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTIxLSNpZmRlZiBDT05GSUdfS0NNUFxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6MjI6c3RydWN0IGZpbGUgKmdldF9lcG9sbF90ZmlsZV9yYXdfcHRyKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgdGZkLCB1bnNpZ25lZCBsb25nIHRvZmYpO1xcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtMjMtI2VuZGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oPTI2PXZvaWQgZXZlbnRwb2xsX3JlbGVhc2VfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTI4LS8qIENvcHkgcmVhZHkgZXZlbnRzIHRvIHVzZXJzcGFjZSAqL1xcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6Mjk6aW50IGVwb2xsX3NlbmRldmVudHMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTMwLVxcdFxcdCAgICAgaW50IG1heGV2ZW50cyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oPTM4PXN0YXRpYyBpbmxpbmUgdm9pZCBldmVudHBvbGxfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtNjMtXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo2NDpzdHJ1Y3QgZXBvbGxfa2V5IHtcXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTY1LVxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC02OC1cXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oOjY5OmludCBkb19lcG9sbF9jdGxfZmlsZShzdHJ1Y3QgZmlsZSAqZiwgaW50IG9wLCBzdHJ1Y3QgZXBvbGxfa2V5ICp0ZixcXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oOjcwOlxcdFxcdCAgICAgIHN0cnVjdCBlcG9sbF9ldmVudCAqZXBkcywgYm9vbCBub25ibG9jayk7XFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo3MTppbnQgZG9fZXBvbGxfY3RsKGludCBlcGZkLCBpbnQgb3AsIGludCBmZCwgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLFxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtNzItXFx0XFx0IGJvb2wgbm9uYmxvY2spO1xcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg9NzM9Ym9vbCBpc19maWxlX2Vwb2xsKHN0cnVjdCBmaWxlICpmKTtcXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTc0LVxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6NzU6LyogVGVsbHMgaWYgdGhlIGVwb2xsX2N0bCgyKSBvcGVyYXRpb24gbmVlZHMgYW4gZXZlbnQgY29weSBmcm9tIHVzZXJzcGFjZSAqL1xcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtNzYtc3RhdGljIGlubGluZSBpbnQgZXBfb3BfaGFzX2V2ZW50KGludCBvcClcXG4tLVxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg9ODM9c3RhdGljIGlubGluZSB2b2lkIGV2ZW50cG9sbF9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKSB7fVxcbi0tXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC04OC0vKiBBUk0gT0FCSSBoYXMgYW4gaW5jb21wYXRpYmxlIHN0cnVjdCBsYXlvdXQgYW5kIG5lZWRzIGEgc3BlY2lhbCBoYW5kbGVyICovXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo4OTpleHRlcm4gc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo5MDplcG9sbF9wdXRfdWV2ZW50KF9fcG9sbF90IHJldmVudHMsIF9fdTY0IGRhdGEsXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo5MTpcXHRcXHQgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqdWV2ZW50KTtcXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTkyLSNlbHNlXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo5MzpzdGF0aWMgaW5saW5lIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKlxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6OTQ6ZXBvbGxfcHV0X3VldmVudChfX3BvbGxfdCByZXZlbnRzLCBfX3U2NCBkYXRhLFxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6OTU6XFx0XFx0IHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKnVldmVudClcXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTk2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDY6MTEuNzQxMTU3MDYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzQ4MTczMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFcG9sbCBJbXBsZW1lbnRhdGlvbiBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcgdGhlIGVwb2xsIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUuLi4gZnJvbSB3aGF0IEkgY2FuIHRlbGwsIGBkb19lcG9sbF9jdGxgLCBgZG9fZXBvbGxfY3RsX2ZpbGVgLCBhbmQgYGVwb2xsX3NlbmRldmVudHNgIGFyZSB0aGUgcHJpbWFyeSBub24tc3RhdGljIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBzeXN0ZW0gY2FsbCBkZWZpbml0aW9uczogYHN5c19lcG9sbF93YWl0YCwgYHN5c19lcG9sbF9jdGxgLCBhbmQgYHN5c19lcG9sbF9jcmVhdGVgIGFyZSBhbHNvIHRoZXJlLCBkZWZpbmVkIHVzaW5nIGBTWVNDQUxMX0RFRklORWAuIFNpbmNlIFN5emthbGxlciBjYW4gZnV6eiBzeXNjYWxscyBkaXJlY3RseSwgaGl0dGluZyB0aG9zZSBzeXNjYWxsIGVudHJ5IHBvaW50cyBkaXJlY3RseSBtYWtlcyBzZW5zZS4gU28sIGZvY3VzaW5nIG9uIGBkb19lcG9sbF9jdGxgIGFuZCBgZXBvbGxfc2VuZGV2ZW50c2Agc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbkJ1dCB0aGVuIHRoZXJlJ3MgdGhpcyBgZXBfcG9sbF9jYWxsYmFja2AgZnVuY3Rpb24uIEl0J3MgbWFya2VkIGFzIHN0YXRpYywgYW5kIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBJdCdzIHRoZSBjb3JlIG9mIHRoZSBwcm9wb3NlZCBwYXRjaCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQuIFdhaXQgYSBtaW51dGUuLi4gdGhlIGluc3RydWN0aW9ucyBhbHNvIG1lbnRpb24gYXZvaWRpbmcgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zLiBCdXQsIGBlcF9wb2xsX2NhbGxiYWNrYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGBpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5YC4gVGhhdCBtZWFucyBpdCAqY2FuJ3QqIGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCByaWdodD8gVGhlIGNvbXBpbGVyIGhhcyB0byB0cmVhdCBpdCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGJlIGNhbGxhYmxlIHRocm91Z2ggdGhlIHBvaW50ZXIuIFNvLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYywgaXQncyBzdGlsbCBhY2Nlc3NpYmxlIHRocm91Z2ggYSBzeW1ib2wuIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoYXQgaXQncyBhY3R1YWxseSBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDY6MTcuNTc1OTc2OTA2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQyNjIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5LiplcF9wb2xsX2NhbGxiYWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V2ZW50cG9sbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V2ZW50cG9sbC5jPTE2ODc9c3RhdGljIHZvaWQgZXBfcHRhYmxlX3F1ZXVlX3Byb2Moc3RydWN0IGZpbGUgKmZpbGUsIHdhaXRfcXVldWVfaGVhZF90ICp3aGVhZCxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTE3MDItXFxuZnMvZXZlbnRwb2xsLmM6MTcwMzpcXHRpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KFxcdTAwMjZwd3EtXFx1MDAzZXdhaXQsIGVwX3BvbGxfY2FsbGJhY2spO1xcbmZzL2V2ZW50cG9sbC5jLTE3MDQtXFx0cHdxLVxcdTAwM2V3aGVhZCA9IHdoZWFkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowNjoxNy42MjA0MDgwNDZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQxODE1MDk3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEVwb2xsIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggZXBvbGwsIGFuZCB0aGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHdoZXRoZXIgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBhcmUgaW5saW5lZCBvciBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMuIFRoZSBmYWN0IHRoYXQgaXQncyBhIGZ1bmN0aW9uIHBvaW50ZXIgbWVhbnMgaXQncyAqbm90KiBpbmxpbmVkLCB3aGljaCBpcyBhIGtleSBkaXN0aW5jdGlvbi4gTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIEknbSB3b3JraW5nIHVuZGVyIHNheSBJIG5lZWQgdG8gbGlzdCB0aGUgbm9uLXN0YXRpYyBBUEkgZW50cnkgcG9pbnRzLiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIHRhc2suXG5cbkkgaW5pdGlhbGx5IGxpc3RlZCBgZG9fZXBvbGxfY3RsYCwgYGRvX2Vwb2xsX2N0bF9maWxlYCwgYGVwb2xsX3NlbmRldmVudHNgLCBhbmQgYHN5c19lcG9sbF93YWl0YCBhcyBsaWtlbHkgY2FuZGlkYXRlcy4gQnV0IHRoZW4gSSBzdG9wcGVkIHRvIHRoaW5rIGFib3V0IG5hbWluZyBjb252ZW50aW9ucy4gU3l6a2FsbGVyIHVzZXMgc3lzY2FsbCBuYW1lcywgd2hpbGUgRm9jdXNTeW1ib2xzIGFyZSBmb3Iga2VybmVsIHN5bWJvbHMuIFNvLCBpcyBpdCBgX194NjRfc3lzX2Vwb2xsX3dhaXRgIG9yIHNvbWV0aGluZyBsaWtlIGBkb19lcG9sbF93YWl0YD8gQWhhLCBgZG9fZXBvbGxfd2FpdGAgaXMgc3RhdGljLCBzbyB0aGF0J3Mgb3V0LiBLZWVwaW5nIGluIG1pbmQgdGhlIGluc3RydWN0aW9uLCBsZXQncyBzdGljayB3aXRoIGBkb19lcG9sbF9jdGxgIGFuZCBgZXBvbGxfc2VuZGV2ZW50c2AgZm9yIG5vdyBhcyB0aGUgcmlnaHQgZW50cnkgcG9pbnRzLlxuXG5CdXQsIGEgc3lzY2FsbCBpcywgd2VsbCwgYSBzeXNjYWxsLiBJdHMgc3ltYm9sIG5hbWUgZGVwZW5kcyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCB3aGljaCBjb21wbGljYXRlcyB0aGluZ3MuIEkndmUgZ290IHRvIGVuc3VyZSBJJ20gZ2V0dGluZyBldmVyeXRoaW5nLCBzbyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGVwb2xsLiBUaGUgc2FmZXN0IGFwcHJvYWNoIG5vdyBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBkaWcgaW50byBgZnMvZXZlbnRwb2xsLmNgIGFuZCBodW50IGZvciBhbnkgYFNZU0NBTExfREVGSU5FYCBtYWNyb3MuIFRoYXQgc2hvdWxkIGJlIHRoZSBkZWZpbml0aXZlIHdheSB0byBpZGVudGlmeSBhbnkgbWlzc2VkIEFQSSBlbnRyeXBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDY6MzEuODAxOTIwMDk4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM1NzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTWVNDQUxMX0RFRklORS4qZXBvbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXZlbnRwb2xsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXZlbnRwb2xsLmM9MjU5MD1zdGF0aWMgaW50IGRvX2Vwb2xsX2NyZWF0ZShpbnQgZmxhZ3MpXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yNjIwLVxcbmZzL2V2ZW50cG9sbC5jOjI2MjE6U1lTQ0FMTF9ERUZJTkUxKGVwb2xsX2NyZWF0ZTEsIGludCwgZmxhZ3MpXFxuZnMvZXZlbnRwb2xsLmMtMjYyMi17XFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yNjI1LVxcbmZzL2V2ZW50cG9sbC5jOjI2MjY6U1lTQ0FMTF9ERUZJTkUxKGVwb2xsX2NyZWF0ZSwgaW50LCBzaXplKVxcbmZzL2V2ZW50cG9sbC5jLTI2Mjcte1xcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MjgyMj1pbnQgZG9fZXBvbGxfY3RsKGludCBlcGZkLCBpbnQgb3AsIGludCBmZCwgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjg0NS0gKi9cXG5mcy9ldmVudHBvbGwuYzoyODQ2OlNZU0NBTExfREVGSU5FNChlcG9sbF9jdGwsIGludCwgZXBmZCwgaW50LCBvcCwgaW50LCBmZCxcXG5mcy9ldmVudHBvbGwuYy0yODQ3LVxcdFxcdHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKiwgZXZlbnQpXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yOTAzPXN0YXRpYyBpbnQgZG9fZXBvbGxfd2FpdChpbnQgZXBmZCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjkyNy1cXG5mcy9ldmVudHBvbGwuYzoyOTI4OlNZU0NBTExfREVGSU5FNChlcG9sbF93YWl0LCBpbnQsIGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKiwgZXZlbnRzLFxcbmZzL2V2ZW50cG9sbC5jLTI5MjktXFx0XFx0aW50LCBtYXhldmVudHMsIGludCwgdGltZW91dClcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTI5NDE9c3RhdGljIGludCBkb19lcG9sbF9wd2FpdChpbnQgZXBmZCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjk2MS1cXG5mcy9ldmVudHBvbGwuYzoyOTYyOlNZU0NBTExfREVGSU5FNihlcG9sbF9wd2FpdCwgaW50LCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICosIGV2ZW50cyxcXG5mcy9ldmVudHBvbGwuYy0yOTYzLVxcdFxcdGludCwgbWF4ZXZlbnRzLCBpbnQsIHRpbWVvdXQsIGNvbnN0IHNpZ3NldF90IF9fdXNlciAqLCBzaWdtYXNrLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjk3Mi1cXG5mcy9ldmVudHBvbGwuYzoyOTczOlNZU0NBTExfREVGSU5FNihlcG9sbF9wd2FpdDIsIGludCwgZXBmZCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqLCBldmVudHMsXFxuZnMvZXZlbnRwb2xsLmMtMjk3NC1cXHRcXHRpbnQsIG1heGV2ZW50cywgY29uc3Qgc3RydWN0IF9fa2VybmVsX3RpbWVzcGVjIF9fdXNlciAqLCB0aW1lb3V0LFxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MzAzNj1zdGF0aWMgaW50IGRvX2NvbXBhdF9lcG9sbF9wd2FpdChpbnQgZXBmZCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMzA1Ny1cXG5mcy9ldmVudHBvbGwuYzozMDU4OkNPTVBBVF9TWVNDQUxMX0RFRklORTYoZXBvbGxfcHdhaXQsIGludCwgZXBmZCxcXG5mcy9ldmVudHBvbGwuYy0zMDU5LVxcdFxcdCAgICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICosIGV2ZW50cyxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTMwNzAtXFxuZnMvZXZlbnRwb2xsLmM6MzA3MTpDT01QQVRfU1lTQ0FMTF9ERUZJTkU2KGVwb2xsX3B3YWl0MiwgaW50LCBlcGZkLFxcbmZzL2V2ZW50cG9sbC5jLTMwNzItXFx0XFx0ICAgICAgIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKiwgZXZlbnRzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowNjozMS44NTAyODIyOThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMwODI2NDEyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRXBvbGwgRXZlbnQgRGlzcGF0Y2ggSm91cm5leSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYGVwb2xsYCBjb2RlIGFnYWluLiBNeSBwcmltYXJ5IEZvY3VzU3ltYm9scyBmb3IgdGhpcyBleHBsb3JhdGlvbiBhcmUgYGRvX2Vwb2xsX2N0bGAgYW5kIGBlcG9sbF9zZW5kZXZlbnRzYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGV2ZW50cyBhcmUgbWFuYWdlZCBhbmQgZGVsaXZlcmVkLlxuXG5IbW0sIHdhaXQgYSBzZWNvbmQuLi4gdGhpcyBpc24ndCBhcyBzdHJhaWdodGZvcndhcmQgYXMgSSBpbml0aWFsbHkgdGhvdWdodC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgZXBvbGxfc2VuZGV2ZW50c2Agd2FzIGRpcmVjdGx5IGludm9rZWQgYnkgYGVwb2xsX3dhaXRgLCBidXQgc29tZXRoaW5nJ3Mgb2ZmLiBMZXQgbWUgcmV0cmFjZSBteSBzdGVwcy4uLiBgZXBvbGxfd2FpdGAgZG9lc24ndCBjYWxsIGl0LiBSaWdodCwgYGRvX2Vwb2xsX3dhaXRgIGNhbGxzIGBlcF9wb2xsYCwgYW5kIGBlcF9wb2xsYCwgaW4gdHVybiwgaXMgY2FsbGluZyB0aGUgc3RhdGljIGZ1bmN0aW9uIGBlcF9zZW5kX2V2ZW50c2AuXG5cblNvLCB3aGVyZSBpcyB0aGlzIGBlcG9sbF9zZW5kZXZlbnRzYCBhY3R1YWxseSBiZWluZyB1c2VkPyBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgaXRzIGNhbGwgc2l0ZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgZXZlbnRzIGFyZSBwcm9wYWdhdGVkIGluIHRoaXMgc3lzdGVtLiBUaGlzIHdpbGwgcmVxdWlyZSBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjI1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjA2OjU0LjkzMjkyNjkxM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MDkyNTQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlcG9sbF9zZW5kZXZlbnRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9ldmVudHBvbGwuYz0yODU4PXN0YXRpYyBpbnQgZXBfY2hlY2tfcGFyYW1zKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldnMsXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yODc4LVxcbmZzL2V2ZW50cG9sbC5jOjI4Nzk6aW50IGVwb2xsX3NlbmRldmVudHMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcXG5mcy9ldmVudHBvbGwuYy0yODgwLVxcdFxcdCAgICAgaW50IG1heGV2ZW50cylcXG4tLVxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg9MjY9dm9pZCBldmVudHBvbGxfcmVsZWFzZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtMjgtLyogQ29weSByZWFkeSBldmVudHMgdG8gdXNlcnNwYWNlICovXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDoyOTppbnQgZXBvbGxfc2VuZGV2ZW50cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtMzAtXFx0XFx0ICAgICBpbnQgbWF4ZXZlbnRzKTtcXG4tLVxcbmlvX3VyaW5nL2Vwb2xsLmM9OTA9aW50IGlvX2Vwb2xsX3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2Vwb2xsLmMtOTQtXFxuaW9fdXJpbmcvZXBvbGwuYzo5NTpcXHRyZXQgPSBlcG9sbF9zZW5kZXZlbnRzKHJlcS1cXHUwMDNlZmlsZSwgaWV3LVxcdTAwM2VldmVudHMsIGlldy1cXHUwMDNlbWF4ZXZlbnRzKTtcXG5pb191cmluZy9lcG9sbC5jLTk2LVxcdGlmIChyZXQgPT0gMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDY6NTYuNjAzODU2NDEyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNTMxNzE5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBpb191cmluZy9lcG9sbCBpbnRlcnBsYXkqKlxuXG5SaWdodCwgc28gYGVwb2xsX3NlbmRldmVudHNgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBBaCwgeWVzLCBpdCdzIGNhbGxlZCBieSBgaW9fdXJpbmcvZXBvbGwuY2AuIEdvb2QsIHRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSB0d28gYXJlIGNvbm5lY3RlZC4gTm93LCB3aGF0IGVsc2UgaXMgaW4gdGhhdCBhcmVhPyBMZXQncyBjaGVjayBgZG9fZXBvbGxfY3RsYC4gSXMgdGhhdCBhbHNvIHVzZWQgYnkgYGlvX3VyaW5nL2Vwb2xsLmNgPyBUaGF0IHdvdWxkIGRlZmluaXRlbHkgYmUgd29ydGggaW52ZXN0aWdhdGluZyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg5NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjA3OjA0Ljg1NzAzMTI2M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NzU0NzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19lcG9sbF9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYz0yODM9YXNtbGlua2FnZSBsb25nIHN5c19vYWJpX2Vwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMtMjk1LVxcbmFyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYzoyOTY6XFx0cmV0dXJuIGRvX2Vwb2xsX2N0bChlcGZkLCBvcCwgZmQsIFxcdTAwMjZrZXJuZWwsIGZhbHNlKTtcXG5hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMtMjk3LX1cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTM4NT1zdGF0aWMgbG9uZyBtYXhfdXNlcl93YXRjaGVzIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5mcy9ldmVudHBvbGwuYy00MDItICogYW5kIGNhcnJpZXMgaXRzIHNjcmF0Y2ggc3RhdGUgb24gYSBzdGFjay1hbGxvY2F0ZWQgc3RydWN0XFxuZnMvZXZlbnRwb2xsLmM6NDAzOiAqIGVwX2N0bF9jdHggc2NvcGVkIHRvIG9uZSBkb19lcG9sbF9jdGwoKSBjYWxsLiBOb24tbmVzdGVkIGluc2VydHNcXG5mcy9ldmVudHBvbGwuYy00MDQtICogc2tpcCB0aGlzIG1hY2hpbmVyeSBlbnRpcmVseSBhbmQgdGFrZSBvbmx5IGVwLVxcdTAwM2VtdHguXFxuLS1cXG5mcy9ldmVudHBvbGwuYz00Mjc9c3RhdGljIHU2NCBsb29wX2NoZWNrX2dlbiA9IDA7XFxuLS1cXG5mcy9ldmVudHBvbGwuYy00MzEtLypcXG5mcy9ldmVudHBvbGwuYzo0MzI6ICogUGVyLWRvX2Vwb2xsX2N0bCgpIHNjcmF0Y2ggZm9yIHRoZSBsb29wIC8gcGF0aCBjaGVja3MuIEFsbG9jYXRlZCBvblxcbmZzL2V2ZW50cG9sbC5jLTQzMy0gKiB0aGUgY2FsbGVyJ3Mgc3RhY2s7IHBvcHVsYXRlZCBieSBlcF9jdGxfbG9jaygpIGFuZCB0aGUgZG93bndhcmRcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTE3Njk9c3RhdGljIGludCByZXZlcnNlX3BhdGhfY2hlY2tfcHJvYyhzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMTc5NS0gKiAgICAgICAgICAgICAgICAgICAgICBvdmVyIGl0cyBsaW1pdCBpbiBwYXRoX2xpbWl0c1tdLlxcbmZzL2V2ZW50cG9sbC5jOjE3OTY6ICogQGN0eDogUGVyLWRvX2Vwb2xsX2N0bCgpIHNjcmF0Y2ggZm9yIHRoZSBsb29wIC8gcGF0aCBjaGVja3MuXFxuZnMvZXZlbnRwb2xsLmMtMTc5Ny0gKlxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MjM0Nj1zdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI0NzgtICpcXG5mcy9ldmVudHBvbGwuYzoyNDc5OiAqIEBjdHg6IFBlci1kb19lcG9sbF9jdGwoKSBzY3JhdGNoIGZvciB0aGUgbG9vcCAvIHBhdGggY2hlY2tzLlxcbmZzL2V2ZW50cG9sbC5jLTI0ODAtICogQGVwOiB0aGUgXFx1MDAyNnN0cnVjdCBldmVudHBvbGwgdG8gYmUgY3VycmVudGx5IGNoZWNrZWQuXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yNjQ3PXN0YXRpYyBpbmxpbmUgaW50IGVwb2xsX211dGV4X2xvY2soc3RydWN0IG11dGV4ICptdXRleCwgYm9vbCBub25ibG9jaylcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI2NTYtLypcXG5mcy9ldmVudHBvbGwuYzoyNjU3OiAqIEFjcXVpcmUgdGhlIGxvY2tzIHJlcXVpcmVkIGZvciBkb19lcG9sbF9jdGwoKSBvbiBAZXAgZm9yIEBvcC5cXG5mcy9ldmVudHBvbGwuYy0yNjU4LSAqXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yNzI0PXN0YXRpYyB2b2lkIGVwX2N0bF91bmxvY2soc3RydWN0IGVwX2N0bF9jdHggKmN0eCwgc3RydWN0IGV2ZW50cG9sbCAqZXAsXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yNzM0LVxcbmZzL2V2ZW50cG9sbC5jOjI3MzU6aW50IGRvX2Vwb2xsX2N0bF9maWxlKHN0cnVjdCBmaWxlICpmLCBpbnQgb3AsIHN0cnVjdCBlcG9sbF9rZXkgKnRmLFxcbmZzL2V2ZW50cG9sbC5jLTI3MzYtXFx0XFx0ICAgICAgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLCBib29sIG5vbmJsb2NrKVxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjgyMS1cXG5mcy9ldmVudHBvbGwuYzoyODIyOmludCBkb19lcG9sbF9jdGwoaW50IGVwZmQsIGludCBvcCwgaW50IGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmVwZHMsXFxuZnMvZXZlbnRwb2xsLmMtMjgyMy1cXHRcXHQgYm9vbCBub25ibG9jaylcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI4MzctXFx0ZWZkLmZkID0gZmQ7XFxuZnMvZXZlbnRwb2xsLmM6MjgzODpcXHRyZXR1cm4gZG9fZXBvbGxfY3RsX2ZpbGUoZmRfZmlsZShmKSwgb3AsIFxcdTAwMjZlZmQsIGVwZHMsIG5vbmJsb2NrKTtcXG5mcy9ldmVudHBvbGwuYy0yODM5LX1cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTI4NDY9U1lTQ0FMTF9ERUZJTkU0KGVwb2xsX2N0bCwgaW50LCBlcGZkLCBpbnQsIG9wLCBpbnQsIGZkLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjg1NC1cXG5mcy9ldmVudHBvbGwuYzoyODU1OlxcdHJldHVybiBkb19lcG9sbF9jdGwoZXBmZCwgb3AsIGZkLCBcXHUwMDI2ZXBkcywgZmFsc2UpO1xcbmZzL2V2ZW50cG9sbC5jLTI4NTYtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaD02ND1zdHJ1Y3QgZXBvbGxfa2V5IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtNjgtXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo2OTppbnQgZG9fZXBvbGxfY3RsX2ZpbGUoc3RydWN0IGZpbGUgKmYsIGludCBvcCwgc3RydWN0IGVwb2xsX2tleSAqdGYsXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC03MC1cXHRcXHQgICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmVwZHMsIGJvb2wgbm9uYmxvY2spO1xcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6NzE6aW50IGRvX2Vwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXBkcyxcXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTcyLVxcdFxcdCBib29sIG5vbmJsb2NrKTtcXG4tLVxcbmlvX3VyaW5nL2Vwb2xsLmM9NTE9aW50IGlvX2Vwb2xsX2N0bChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvZXBvbGwuYy02Ny1cXHRrZXkuZmQgPSBpZS1cXHUwMDNlZmQ7XFxuaW9fdXJpbmcvZXBvbGwuYzo2ODpcXHRyZXQgPSBkb19lcG9sbF9jdGxfZmlsZShmZF9maWxlKGYpLCBpZS1cXHUwMDNlb3AsIFxcdTAwMjZrZXksIFxcdTAwMjZpZS1cXHUwMDNlZXZlbnQsIGZvcmNlX25vbmJsb2NrKTtcXG5pb191cmluZy9lcG9sbC5jLTY5LVxcdGlmIChmb3JjZV9ub25ibG9jayBcXHUwMDI2XFx1MDAyNiByZXQgPT0gLUVBR0FJTilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDc6MDYuNTA0NTgyNzcxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4ODQ4OTAwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgT3VyIEVwb2xsIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgZG9fZXBvbGxfY3RsX2ZpbGVgIGlzIGluZGVlZCB1c2VkIGJ5IGBpb191cmluZy9lcG9sbC5jYC4gVGhpcyBpcyBnb29kLCBpdCBoZWxwcyBzb2xpZGlmeSB0aGUgaW1wb3J0YW5jZSBvZiB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gaW4gdGhlIG92ZXJhbGwgcGljdHVyZS4gU28sIHRoYXQsIGFsb25nIHdpdGggYGRvX2Vwb2xsX2N0bGAgYW5kIGBlcG9sbF9zZW5kZXZlbnRzYCBhcmUgZGVmaW5pdGVseSBleGNlbGxlbnQgRm9jdXNTeW1ib2xzIGZvciB1cyB0byByZWFsbHkgZGVsdmUgaW50by4gV2hpbGUgSSBjb3VsZCBhbHNvIGNvbnNpZGVyIHRoZSBzeXNjYWxscyB0aGVtc2VsdmVzIGxpa2UgYHN5c19lcG9sbF93YWl0YCwgYHN5c19lcG9sbF9jdGxgLCBhbmQgYHN5c19lcG9sbF9wd2FpdGAgYXMgcGFydCBvZiB0aGlzLCBTeXprYWxsZXIgaXMgcHJldHR5IGdvb2QgYXQgZnV6emluZyB0aG9zZSBkaXJlY3RseSwgc28gdGhleSBhcmUgbG93ZXIgb24gdGhlIHByaW9yaXR5IGxpc3QuIEknbSBhZGRpbmcgYGRvX2Vwb2xsX2N0bGAsIGBkb19lcG9sbF9jdGxfZmlsZWAsIGFuZCBgZXBvbGxfc2VuZGV2ZW50c2AgdG8gdGhlIEZvY3VzU3ltYm9scyBsaXN0OyB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9ucy4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBgQ09ORklHX2Agb3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgcmVxdWlyZWQgZm9yIHRoZXNlIGZ1bmN0aW9ucyB0byBldmVuIGJlIGNvbXBpbGVkLiBMb29raW5nIGF0IGBmcy9ldmVudHBvbGwuY2AsIGl0IHNlZW1zIHRoYXQgYENPTkZJR19FUE9MTGAgaXMgdGhlIGtleS4gQnV0IEkgc2hvdWxkIGRvdWJsZS1jaGVjayBieSBsb29raW5nIGF0IGBmcy9NYWtlZmlsZWAgb3IgYGluaXQvS2NvbmZpZ2AganVzdCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ1OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowNzoxMy4zODk0NzQ5OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNjI1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVBPTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MjQ9b2JqLXlcXHRcXHRcXHRcXHQrPSBub3RpZnkvXFxuZnMvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0VQT0xMKVxcdFxcdCs9IGV2ZW50cG9sbC5vXFxuZnMvTWFrZWZpbGUtMjYtb2JqLXlcXHRcXHRcXHRcXHQrPSBhbm9uX2lub2Rlcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjA3OjEzLjQzMzU0MDM5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTkwNTQ0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEVQT0xMIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2sgYW5kIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEknbGwgcXVpY2tseSBjaGVjayB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHVzdWFsbHkgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2sgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZXNwZWNpYWxseSBzb21ldGhpbmcgYXMgZnVuZGFtZW50YWwgYXMgYEVQT0xMYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgaXMgZW5hYmxlZCBvciBoYXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIGV4cGVjdC4gSXQncyBhIHF1aWNrIHdheSB0byBlbnN1cmUgSSdtIG5vdCBjaGFzaW5nIGEgZ2hvc3QgYW5kIHRoYXQgdGhlIGdyb3VuZHdvcmsgaXMgcHJvcGVybHkgbGFpZCBvdXQuIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMjcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowNzoxNi42OTI1OTcxMzdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDA0MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFUE9MTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4Njg9Y29uZmlnIEZVVEVYX1JPQlVTVF9VTkxPQ0tcXG4tLVxcbmluaXQvS2NvbmZpZy0xODcwLVxcbmluaXQvS2NvbmZpZzoxODcxOmNvbmZpZyBFUE9MTFxcbmluaXQvS2NvbmZpZy0xODcyLVxcdGJvb2wgXFxcIkVuYWJsZSBldmVudHBvbGwgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjA3OjE2LjczNjYyNDUyNloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODk1MjUwMzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEVwb2xsIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgYGZzL2V2ZW50cG9sbC5jYCB0aGF0IEkgbmVlZCB0byBldmFsdWF0ZSBmb3IgZnV6emluZyBwb3RlbnRpYWwuIFRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgYWRkaW5nIGBFUE9MTGAgdG8gYEVuYWJsZUNvbmZpZ3NgIGJlY2F1c2UsIHdlbGwsIGBFUE9MTGAgaXMgYSBjb3JlIGZlYXR1cmU7IGl0J3MgcHJhY3RpY2FsbHkgYWx3YXlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gb2J2aW91c2x5IGl0IHNob3VsZCBiZSBlbmFibGVkIHdoZW4gdGVzdGluZyB0aGlzLlxuXG5Ob3csIGRpZ2dpbmcgaW50byB0aGUgcGF0Y2ggaXRzZWxmLCBJIGNhbiBzZWUgaXQncyB0b3VjaGluZyBhICpsb3QqIG9mIGNvcmUgYGVwb2xsYCBmdW5jdGlvbnMuICBXZSdyZSB0YWxraW5nIGZ1bmRhbWVudGFsIHBpZWNlcyBoZXJlOiBgZXBfZXZlbnRzX2F2YWlsYWJsZWAsIGBlcF9zdGF0ZV90ZXN0YCwgYGVwX3JlYWR5X2Zhc3RfZW5hYmxlZGAsIGBlcF9zZXRfcmVhZHlfYWNjb3VudGVkYCwgYGVwX3ByZXBhcmVfcmVwb2xsYCwgYGVwX2NhbGxiYWNrX2Nhbl9za2lwYCwgYGVwX2RvbmVfc2NhbmAsIGBfX2VwX2V2ZW50cG9sbF9wb2xsYCwgYGVwX3BvbGxfY2FsbGJhY2tgLCBgZXBfaW5zZXJ0YCwgYGVwX21vZGlmeWAsIGBlcF9kZWxpdmVyX2V2ZW50YCwgYW5kIGBlcF9wb2xsYC4gIEJhc2ljYWxseSB0aGUgd2hvbGUgc2hlYmFuZyFcblxuVGhlIGNydXggb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhIG5ldyBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIGBlcG9sbGAgY2FsbGJhY2tzLCB3aGljaCBtZWFucyBuZXcgc3RhdGUgYml0cyBsaWtlIGBFUF9TVEFURV9BQ0NPVU5URURgIGFuZCBgRVBfU1RBVEVfRkFTVGAsIGFuZCBjb3JyZXNwb25kaW5nIG1vZGlmaWNhdGlvbnMgdG8gZXZlbnQgZGVsaXZlcnkgYW5kIHBvbGxpbmcgbG9naWMuICBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGFsdGVyYXRpb24gdG8gY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gVGhpcyBraW5kIG9mIHBhdGNoLCBtb2RpZnlpbmcgdGhlIGZ1bmRhbWVudGFsIGV2ZW50IGhhbmRsaW5nIGluIGBlcG9sbGAgd2hpY2ggaXMgdXNlZCBleHRlbnNpdmVseSBieSBhbG1vc3QgYWxsIHNvZnR3YXJlIHJ1bm5pbmcgb24gdGhlIGtlcm5lbCwgaXMgKmRlZmluaXRlbHkqIGdvaW5nIHRvIGJlIHJlYWNoYWJsZSB0aHJvdWdoIGBlcG9sbF9jdGxgIHN5c2NhbGxzLCBgZXBvbGxfd2FpdGAgc3lzY2FsbHMsIGFuZCBldmVuIGlvX3VyaW5nLiBUaGlzIG1lYW5zIGEgZ29vZCBwb3RlbnRpYWwgZm9yIGZ1enppbmcuXG5cbk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlc2UgZnVuY3Rpb25zIGluIGEgKmZ1bmN0aW9uYWwqIHdheS4gVGhlIGZ1bmN0aW9ucyBJJ20gc2VlaW5nIG1vZGlmaWVkIGFyZSBkZWZpbml0ZWx5IGluIHRoZSBmYXN0IHBhdGguIFRoaXMga2luZCBvZiBjb2RlIGlzIGhpZ2gtdmFsdWUgZm9yIGZ1enppbmcuIEFsc28sIGBlcF9wb2xsX2NhbGxiYWNrYCB3aGljaCBpcyBjYWxsZWQgZnJvbSB3YWtlX3VwIGlzIG1vZGlmaWVkLiBUaGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBhbHNvIHRvdWNoaW5nIGBlcF9pbnNlcnRgLCBgZXBfbW9kaWZ5YCwgYGVwX2RlbGl2ZXJfZXZlbnRgLCBhbmQgYGVwX3BvbGxgLiBBbGwgb2YgdGhlc2UgYXJlIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBgZXBvbGxfY3RsYCBhbmQgYGVwb2xsX3dhaXRgLlxuXG5UaGVyZWZvcmUsIEknbSBtYXJraW5nIHRoaXMgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAuICBNeSBgRm9jdXNTeW1ib2xzYCBhcmUgZ29pbmcgdG8gYmUgYGRvX2Vwb2xsX2N0bGAsIGBkb19lcG9sbF9jdGxfZmlsZWAsIGFuZCBgZXBvbGxfc2VuZGV2ZW50c2AgdG8gaGVscCBndWlkZSB0aGUgZnV6emluZyBlZmZvcnQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMwNiwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDc6MjUuNjMxODc4MDg5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUzODcxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVQT0xMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fZXBvbGxfY3RsXCIsXG4gICAgXCJkb19lcG9sbF9jdGxfZmlsZVwiLFxuICAgIFwiZXBvbGxfc2VuZGV2ZW50c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIGVwb2xsIGNhbGxiYWNrcywgYWRkaW5nIG5ldyBzdGF0ZSBiaXRzIChFUF9TVEFURV9BQ0NPVU5URUQsIEVQX1NUQVRFX0ZBU1QpIGFuZCBtb2RpZnlpbmcgdGhlIGNvcmUgZXZlbnQgZGVsaXZlcnkgYW5kIHBvbGxpbmcgbG9naWMgaW4gZnMvZXZlbnRwb2xsLmMuIFRoaXMgYWZmZWN0cyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGFuZCBpcyBoaWdobHkgcmVhY2hhYmxlIHZpYSBlcG9sbCBzeXNjYWxscyBhbmQgaW9fdXJpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVBPTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19lcG9sbF9jdGxcIixcbiAgICBcImRvX2Vwb2xsX2N0bF9maWxlXCIsXG4gICAgXCJlcG9sbF9zZW5kZXZlbnRzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgZXBvbGwgY2FsbGJhY2tzLCBhZGRpbmcgbmV3IHN0YXRlIGJpdHMgKEVQX1NUQVRFX0FDQ09VTlRFRCwgRVBfU1RBVEVfRkFTVCkgYW5kIG1vZGlmeWluZyB0aGUgY29yZSBldmVudCBkZWxpdmVyeSBhbmQgcG9sbGluZyBsb2dpYyBpbiBmcy9ldmVudHBvbGwuYy4gVGhpcyBhZmZlY3RzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIGhpZ2hseSByZWFjaGFibGUgdmlhIGVwb2xsIHN5c2NhbGxzIGFuZCBpb191cmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDc6MjUuNzA3MjcyNzU4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTczNTQxOTczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjA3OjI1LjcwNzY5ODE3OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTczNDk5MDg4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgZXBvbGwgdXNpbmcgYXRvbWljIHN0YXRlIGJpdHMgaW4gYHN0cnVjdCBlcGl0ZW1gLiBJdCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gbG9naWMsIGV2ZW50IGFjY291bnRpbmcsIGFuZCB3YWtldXBzLiBBbGwgbmV3IGZpZWxkcyAobGlrZSBgYXRvbWljX3Qgc3RhdGVgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSBga21lbV9jYWNoZV96YWxsb2NgIGFuZCBgYXRvbWljX3NldGApLCBhbmQgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODg5Mjg2OWJkMjM2MzQ3YTJmYzkyMWY3MzllZjY3Y2MwNjEwMWU5MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDAyOjUwOjI0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuY1xuaW5kZXggZTBjNGJmODhhODM4My4uNjAwZDNkMmQ0NzYzNiAxMDA2NDRcbi0tLSBhL2ZzL2V2ZW50cG9sbC5jXG4rKysgYi9mcy9ldmVudHBvbGwuY1xuQEAgLTI0Myw2ICsyNDMsMTQgQEAgc3RydWN0IGVwcG9sbF9lbnRyeSB7XG4gXHR3YWl0X3F1ZXVlX2hlYWRfdCAqd2hlYWQ7XG4gfTtcbiBcbisvKlxuKyAqIEZBU1QgaXMgc2V0IGZvciBlbGlnaWJsZSBpdGVtcyBhdCBpbnNlcnRpb24uIEFDQ09VTlRFRCB0cmFja3MgRkFTVCBpdGVtc1xuKyAqIHdoaWxlIHRoZSByZWFkeSBwYXRoIG93bnMgdGhlbSBhbmQgaXMgY2xlYXJlZCBpbW1lZGlhdGVseSBiZWZvcmUgcmUtcG9sbC5cbisgKi9cbitlbnVtIHtcbitcdEVQX1NUQVRFX0FDQ09VTlRFRFx0PSBCSVQoMCksXG4rXHRFUF9TVEFURV9GQVNUXHRcdD0gQklUKDEpLFxuK307XG4gLypcbiAgKiBFYWNoIGZpbGUgZGVzY3JpcHRvciBhZGRlZCB0byB0aGUgZXZlbnRwb2xsIGludGVyZmFjZSB3aWxsXG4gICogaGF2ZSBhbiBlbnRyeSBvZiB0aGlzIHR5cGUgbGlua2VkIHRvIHRoZSBcInJiclwiIFJCIHRyZWUuXG5AQCAtMjcxLDYgKzI3OSw5IEBAIHN0cnVjdCBlcGl0ZW0ge1xuIFx0LyogVGhlIGZpbGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiB0aGlzIGl0ZW0gcmVmZXJzIHRvICovXG4gXHRzdHJ1Y3QgZXBvbGxfa2V5IGZmZDtcbiBcbitcdC8qIEF0b21pYyBzdGF0ZSBiaXRzLCBzZWUgdGhlIEVQX1NUQVRFXyogZW51bSBhYm92ZS4gKi9cbitcdGF0b21pY190IHN0YXRlO1xuK1xuIFx0LyogTGlzdCBjb250YWluaW5nIHBvbGwgd2FpdCBxdWV1ZXMgKi9cbiBcdHN0cnVjdCBlcHBvbGxfZW50cnkgKnB3cWxpc3Q7XG4gXG5AQCAtNjIwLDYgKzYzMSw2NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZXBfZXZlbnRzX2F2YWlsYWJsZShzdHJ1Y3QgZXZlbnRwb2xsICplcClcbiBcdFx0cmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZlcC1cdTAwM2VzZXEsIHNlcSk7XG4gfVxuIFxuKy8qXG4rICogTGV0IEEgYmUgQUNDT1VOVEVEIGFuZCBCIGJlIGZpbGUgcmVhZGluZXNzLiBGdWxseSBvcmRlcmVkIGF0b21pYyBSTVdzXG4rICogcGFpciBXKEE9MCkgYmVmb3JlIFIoQikgd2l0aCBXKEIpIGJlZm9yZSBSKEEpLCBzbyBhIHNjYW5uZXIgY2Fubm90IG1pc3NcbisgKiBCIHdoaWxlIGl0cyBjYWxsYmFjayBza2lwcyBhbiBhY2NvdW50ZWQgaXRlbS4gZXBfZG9uZV9zY2FuKCkgYW5kIHRoZVxuKyAqIGZhdGFsLXNpZ25hbCBoYW5kb2ZmIHBhc3MgcXVldWVkIGV2ZW50cyBiZXR3ZWVuIGV4Y2x1c2l2ZSB3YWl0ZXJzLlxuKyAqIHBvbGxfd2FpdCB1c2VycywgcHJpdmF0ZSBtb2RlcyBhbmQgc3BlY2lhbCBjYWxsYmFja3MgdGFrZSB0aGUgc2xvdyBwYXRoLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBlcF9zdGF0ZV90ZXN0KGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSwgdW5zaWduZWQgaW50IGJpdClcbit7XG4rXHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2ZXBpLVx1MDAzZXN0YXRlKSBcdTAwMjYgYml0O1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgZXBfcmVhZHlfZmFzdF9lbmFibGVkKGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSlcbit7XG4rXHRyZXR1cm4gZXBfc3RhdGVfdGVzdChlcGksIEVQX1NUQVRFX0ZBU1QpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgZXBfc2V0X3JlYWR5X2FjY291bnRlZChzdHJ1Y3QgZXBpdGVtICplcGkpXG4re1xuK1x0aWYgKGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChlcGkpKVxuK1x0XHRhdG9taWNfb3IoRVBfU1RBVEVfQUNDT1VOVEVELCBcdTAwMjZlcGktXHUwMDNlc3RhdGUpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgZXBfcHJlcGFyZV9yZXBvbGwoc3RydWN0IGVwaXRlbSAqZXBpKVxuK3tcbitcdGlmIChlcF9yZWFkeV9mYXN0X2VuYWJsZWQoZXBpKSlcbitcdFx0YXRvbWljX2ZldGNoX2FuZG5vdChFUF9TVEFURV9BQ0NPVU5URUQsIFx1MDAyNmVwaS1cdTAwM2VzdGF0ZSk7XG4rfVxuK1xuK3N0YXRpYyBib29sIGVwX2NhbGxiYWNrX2Nhbl9za2lwKHN0cnVjdCBlcGl0ZW0gKmVwaSwgX19wb2xsX3QgcG9sbGZsYWdzKVxuK3tcbitcdF9fcG9sbF90IGV2ZW50cztcbitcbitcdGV2ZW50cyA9IFJFQURfT05DRShlcGktXHUwMDNlZXZlbnQuZXZlbnRzKTtcbitcdFxuK1x0LyogT25seSBpbnNlcnRpb24tdGltZSBjYW5kaWRhdGVzIG1heSB1c2UgdGhlIGxvY2tsZXNzIHBhdGguICovXG4rXHRpZiAoIWVwX3JlYWR5X2Zhc3RfZW5hYmxlZChlcGkpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRcbitcdC8qIGVwX21vZGlmeSgpIGNhbiBzZWxlY3QgYSBwcml2YXRlIG1vZGUgdGhhdCByZXF1aXJlcyB0aGUgc2xvdyBwYXRoLiAqL1xuK1x0aWYgKGV2ZW50cyBcdTAwMjYgRVBfUFJJVkFURV9CSVRTKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBwb2xsX3dhaXQgdXNlcnMgbXVzdCBiZSB3b2tlbiBieSB0aGlzIGNhbGxiYWNrLiAqL1xuK1x0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2ZXBpLVx1MDAzZWVwLVx1MDAzZXBvbGxfd2FpdCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIFBPTExGUkVFIHRlYXJzIGRvd24gd2FpdCBlbnRyaWVzOyBVUklOR19XQUtFIG11c3QgcHJvcGFnYXRlLiAqL1xuK1x0aWYgKHBvbGxmbGFncyBcdTAwMjYgKFBPTExGUkVFIHwgRVBPTExfVVJJTkdfV0FLRSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIFVubWF0Y2hlZCB3YWtlIGtleXMgcmV0YWluIHRoZSBzbG93LXBhdGggY2FsbGJhY2sgc2VtYW50aWNzLiAqL1xuK1x0aWYgKHBvbGxmbGFncyBcdTAwMjZcdTAwMjYgIShwb2xsZmxhZ3MgXHUwMDI2IGV2ZW50cykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIEZ1bGx5IG9yZGVyZWQgUk1XIHBhaXJzIHRoZSBCIHVwZGF0ZSB3aXRoIHRoZSBzY2FubmVyJ3MgQSBjbGVhci4gKi9cbitcdHJldHVybiBhdG9taWNfZmV0Y2hfb3IoMCwgXHUwMDI2ZXBpLVx1MDAzZXN0YXRlKSBcdTAwMjYgRVBfU1RBVEVfQUNDT1VOVEVEO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTExcbiAvKipcbiAgKiBidXN5X2xvb3BfZXBfdGltZW91dCAtIGNoZWNrIGlmIGJ1c3kgcG9sbCBoYXMgdGltZWQgb3V0LiBUaGUgdGltZW91dCB2YWx1ZVxuQEAgLTEwMDcsNiArMTA3Nyw3IEBAIHN0YXRpYyB2b2lkIGVwX2RvbmVfc2NhbihzdHJ1Y3QgZXZlbnRwb2xsICplcCxcbiBcdFx0XHQgKiByZXZlcnNlcyB0aGUgaXRlcmF0aW9uIG9yZGVyIGludG8gRklGTy5cbiBcdFx0XHQgKi9cbiBcdFx0XHRsaXN0X2FkZChcdTAwMjZlcGktXHUwMDNlcmRsbGluaywgXHUwMDI2ZXAtXHUwMDNlcmRsbGlzdCk7XG4rXHRcdFx0ZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpO1xuIFx0XHRcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTEzMDMsOCArMTM3NCwxMCBAQCBzdGF0aWMgX19wb2xsX3QgX19lcF9ldmVudHBvbGxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCwgaW50IGRlcFxuIFx0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2ZXAtXHUwMDNlbXR4LCBkZXB0aCk7XG4gXHRlcF9zdGFydF9zY2FuKGVwLCBcdTAwMjZzY2FuX2JhdGNoKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlcGksIHRtcCwgXHUwMDI2c2Nhbl9iYXRjaCwgcmRsbGluaykge1xuK1x0XHRlcF9wcmVwYXJlX3JlcG9sbChlcGkpO1xuIFx0XHRpZiAoZXBfaXRlbV9wb2xsKGVwaSwgXHUwMDI2cHQsIGRlcHRoICsgMSkpIHtcbiBcdFx0XHRyZXMgPSBFUE9MTElOIHwgRVBPTExSRE5PUk07XG4rXHRcdFx0ZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qXG5AQCAtMTQ5Nyw2ICsxNTcwLDkgQEAgc3RhdGljIGludCBlcF9wb2xsX2NhbGxiYWNrKHdhaXRfcXVldWVfZW50cnlfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgZXdha2UgPSAwO1xuIFxuK1x0aWYgKGVwX2NhbGxiYWNrX2Nhbl9za2lwKGVwaSwgcG9sbGZsYWdzKSlcbitcdFx0cmV0dXJuIDE7XG4rXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZlcC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4gXHRlcF9zZXRfYnVzeV9wb2xsX25hcGlfaWQoZXBpKTtcbkBAIC0xNTI5LDExICsxNjA1LDEzIEBAIHN0YXRpYyBpbnQgZXBfcG9sbF9jYWxsYmFjayh3YWl0X3F1ZXVlX2VudHJ5X3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2XG4gXHRcdGlmICghZXBpX29uX292Zmxpc3QoZXBpKSkge1xuIFx0XHRcdGVwaS1cdTAwM2VvdmZsaXN0X25leHQgPSBSRUFEX09OQ0UoZXAtXHUwMDNlb3ZmbGlzdCk7XG4gXHRcdFx0V1JJVEVfT05DRShlcC1cdTAwM2VvdmZsaXN0LCBlcGkpO1xuK1x0XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0XHRlcF9wbV9zdGF5X2F3YWtlX3JjdShlcGkpO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKCFlcF9pc19saW5rZWQoZXBpKSkge1xuIFx0XHQvKiBJbiB0aGUgdXN1YWwgY2FzZSwgYWRkIGV2ZW50IHRvIHJlYWR5IGxpc3QuICovXG4gXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZXBpLVx1MDAzZXJkbGxpbmssIFx1MDAyNmVwLVx1MDAzZXJkbGxpc3QpO1xuK1x0XHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XG4gXHRcdGVwX3BtX3N0YXlfYXdha2VfcmN1KGVwaSk7XG4gXHR9XG4gXG5AQCAtMTkxMiw2ICsxOTkwLDEzIEBAIHN0YXRpYyBpbnQgZXBfaW5zZXJ0KHN0cnVjdCBlcF9jdGxfY3R4ICpjdHgsIHN0cnVjdCBldmVudHBvbGwgKmVwLFxuIFx0aWYgKElTX0VSUihlcGkpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihlcGkpO1xuIFxuK1x0LypcbitcdCAqIExvY2tsZXNzIGNhbmRpZGF0ZXMgYXJlIHBsYWluIGxldmVsLXRyaWdnZXJlZCBpbnRlcmVzdHM7XG4rXHQgKiBwcml2YXRlIG1vZGVzIGFuZCBuZXN0ZWQgZXBvbGwgY2hhbmdlIHRoZSBjYWxsYmFjayBjb250cmFjdC5cbitcdCAqL1xuK1x0aWYgKCF0ZXAgXHUwMDI2XHUwMDI2ICEoZXZlbnQtXHUwMDNlZXZlbnRzIFx1MDAyNiBFUF9QUklWQVRFX0JJVFMpKVxuK1x0XHRhdG9taWNfc2V0KFx1MDAyNmVwaS1cdTAwM2VzdGF0ZSwgRVBfU1RBVEVfRkFTVCk7XG4rXG4gXHRlcnJvciA9IGVwX3JlZ2lzdGVyX2VwaXRlbShjdHgsIGVwLCBlcGksIHRlcCwgZnVsbF9jaGVjayk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbkBAIC0xOTU2LDYgKzIwNDEsNyBAQCBzdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCxcbiBcbiBcdGlmIChyZXZlbnRzIFx1MDAyNlx1MDAyNiAhZXBfaXNfbGlua2VkKGVwaSkpIHtcbiBcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZlcGktXHUwMDNlcmRsbGluaywgXHUwMDI2ZXAtXHUwMDNlcmRsbGlzdCk7XG4rXHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0ZXBfcG1fc3RheV9hd2FrZShlcGkpO1xuIFxuIFx0XHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcdTAwMjZlcC1cdTAwM2V3cSkpXG5AQCAtMTk5Miw3ICsyMDc4LDcgQEAgc3RhdGljIGludCBlcF9tb2RpZnkoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcbiBcdCAqIG90aGVyd2lzZSB3ZSBtaWdodCBtaXNzIGFuIGV2ZW50IHRoYXQgaGFwcGVucyBiZXR3ZWVuIHRoZVxuIFx0ICogZl9vcC1cdTAwM2Vwb2xsKCkgY2FsbCBhbmQgdGhlIG5ldyBldmVudCBzZXQgcmVnaXN0ZXJpbmcuXG4gXHQgKi9cbi1cdGVwaS1cdTAwM2VldmVudC5ldmVudHMgPSBldmVudC1cdTAwM2VldmVudHM7IC8qIG5lZWQgYmFycmllciBiZWxvdyAqL1xuK1x0V1JJVEVfT05DRShlcGktXHUwMDNlZXZlbnQuZXZlbnRzLCBldmVudC1cdTAwM2VldmVudHMpOyAvKiBuZWVkIGJhcnJpZXIgYmVsb3cgKi9cbiBcdGVwaS1cdTAwM2VldmVudC5kYXRhID0gZXZlbnQtXHUwMDNlZGF0YTsgLyogcHJvdGVjdGVkIGJ5IG10eCAqL1xuIFx0aWYgKGVwaS1cdTAwM2VldmVudC5ldmVudHMgXHUwMDI2IEVQT0xMV0FLRVVQKSB7XG4gXHRcdGlmICghZXBfaGFzX3dha2V1cF9zb3VyY2UoZXBpKSlcbkBAIC0yMDMxLDYgKzIxMTcsNyBAQCBzdGF0aWMgaW50IGVwX21vZGlmeShzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmVwLVx1MDAzZWxvY2spO1xuIFx0XHRpZiAoIWVwX2lzX2xpbmtlZChlcGkpKSB7XG4gXHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZlcGktXHUwMDNlcmRsbGluaywgXHUwMDI2ZXAtXHUwMDNlcmRsbGlzdCk7XG4rXHRcdFx0ZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpO1xuIFx0XHRcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcbiBcbiBcdFx0XHQvKiBOb3RpZnkgd2FpdGluZyB0YXNrcyB0aGF0IGV2ZW50cyBhcmUgYXZhaWxhYmxlICovXG5AQCAtMjA4NCw2ICsyMTcxLDcgQEAgc3RhdGljIGludCBlcF9kZWxpdmVyX2V2ZW50KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksXG4gXHRcdF9fcG1fcmVsYXgod3MpO1xuIFx0fVxuIFxuK1x0ZXBfcHJlcGFyZV9yZXBvbGwoZXBpKTtcbiBcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZXBpLVx1MDAzZXJkbGxpbmspO1xuIFxuIFx0LypcbkBAIC0yMTA0LDEzICsyMTkyLDE1IEBAIHN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxuIFx0XHQgKiBhdHRlbXB0LlxuIFx0XHQgKi9cbiBcdFx0bGlzdF9hZGQoXHUwMDI2ZXBpLVx1MDAzZXJkbGxpbmssIHNjYW5fYmF0Y2gpO1xuK1x0XHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XG4gXHRcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9XG4gXHQqdWV2ZW50cyA9IG5leHQ7XG4gXG4gXHRpZiAoZXBpLVx1MDAzZWV2ZW50LmV2ZW50cyBcdTAwMjYgRVBPTExPTkVTSE9UKSB7XG4tXHRcdGVwaS1cdTAwM2VldmVudC5ldmVudHMgXHUwMDI2PSBFUF9QUklWQVRFX0JJVFM7XG4rXHRcdFdSSVRFX09OQ0UoZXBpLVx1MDAzZWV2ZW50LmV2ZW50cyxcbitcdFx0XHQgICBSRUFEX09OQ0UoZXBpLVx1MDAzZWV2ZW50LmV2ZW50cykgXHUwMDI2IEVQX1BSSVZBVEVfQklUUyk7XG4gXHR9IGVsc2UgaWYgKCEoZXBpLVx1MDAzZWV2ZW50LmV2ZW50cyBcdTAwMjYgRVBPTExFVCkpIHtcbiBcdFx0LypcbiBcdFx0ICogTGV2ZWwtdHJpZ2dlcmVkOiByZS1xdWV1ZSBzbyB0aGUgbmV4dCBlcG9sbF93YWl0KClcbkBAIC0yMTIwLDYgKzIyMTAsNyBAQCBzdGF0aWMgaW50IGVwX2RlbGl2ZXJfZXZlbnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcbiBcdFx0ICogZHVyaW5nIHNjYW5zLlxuIFx0XHQgKi9cbiBcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZlcGktXHUwMDNlcmRsbGluaywgXHUwMDI2ZXAtXHUwMDNlcmRsbGlzdCk7XG4rXHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0ZXBfcG1fc3RheV9hd2FrZShlcGkpO1xuIFx0fVxuIFx0cmV0dXJuIDE7XG5AQCAtMjI4Nyw2ICsyMzc4LDExIEBAIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuIFx0d2hpbGUgKDEpIHtcbiBcdFx0aWYgKGVhdmFpbCkge1xuIFx0XHRcdHJlcyA9IGVwX3RyeV9zZW5kX2V2ZW50cyhlcCwgZXZlbnRzLCBtYXhldmVudHMpO1xuK1x0XHRcdGlmIChyZXMgPT0gLUVJTlRSKSB7XG4rXHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmVwLVx1MDAzZWxvY2spO1xuK1x0XHRcdFx0d2FrZV91cChcdTAwMjZlcC1cdTAwM2V3cSk7XG4rXHRcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2ZXAtXHUwMDNlbG9jayk7XG4rXHRcdFx0fVxuIFx0XHRcdGlmIChyZXMpXG4gXHRcdFx0XHRyZXR1cm4gcmVzO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowNzoyNS43MDc2OTkxNDhaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE5Mzg2MjIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEVwb2xsIEZhc3QgUGF0aCBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgZGVlcCBkaXZlIGludG8gYGZzL2V2ZW50cG9sbC5jYCwgc3BlY2lmaWNhbGx5IG9wdGltaXppbmcgYGVwb2xsYCB3aXRoIGEgbmV3IFwiZmFzdCBwYXRoLlwiIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoaXMgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIGJyZWFrIGl0IGRvd24uXG5cbkVzc2VudGlhbGx5LCBpdCdzIGFib3V0IGludHJvZHVjaW5nIHNvbWUgYXRvbWljIHN0YXRlIGJpdHMgKGBFUF9TVEFURV9BQ0NPVU5URURgLCBgRVBfU1RBVEVfRkFTVGApIHdpdGhpbiB0aGUgYHN0cnVjdCBlcGl0ZW1gLiBJIHNlZSBhIGJ1bmNoIG9mIG5ldyBoZWxwZXIgZnVuY3Rpb25zOiBgZXBfc3RhdGVfdGVzdGAsIGBlcF9yZWFkeV9mYXN0X2VuYWJsZWRgLCBgZXBfc2V0X3JlYWR5X2FjY291bnRlZGAsIGBlcF9wcmVwYXJlX3JlcG9sbGAsIGFuZCBgZXBfY2FsbGJhY2tfY2FuX3NraXBgLiBUaGUgYGVwX3BvbGxfY2FsbGJhY2tgIGdldHMgdHdlYWtlZCB0byBjb25kaXRpb25hbGx5IHNraXAgd29yaywgYW5kIHNldmVyYWwgY29yZSBmdW5jdGlvbnMsIGluY2x1ZGluZyBgZXBfaW5zZXJ0YCwgYGVwX21vZGlmeWAsIGBlcF9kZWxpdmVyX2V2ZW50YCwgYW5kIGBlcF9wb2xsYCwgYXJlIGFsbCBtb2RpZmllZC4gVGhleSdyZSBhbHNvIHVzaW5nIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAgZm9yIGBlcGktXHUwMDNlZXZlbnQuZXZlbnRzYCwgd2hpY2ggaXMgYSBnb29kIHNpZ24gZm9yIG1lbW9yeSBvcmRlcmluZy4gQWRkaW5nIGEgY2hlY2sgZm9yIGAtRUlOVFJgIHdpdGhpbiBgZXBfcG9sbGAgdG8gd2FrZSB1cCBgZXAtXHUwMDNld3FgIHNvdW5kcyByZWFzb25hYmxlLlxuXG5UaGUgbWFpbiBjb25jZXJuIGlzLCBvZiBjb3Vyc2UsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyBvcHBvcnR1bml0aWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBsZWFrPyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQsIG5vLCBpdCBzaG91bGRuJ3QuIFRoZSBjaGFuZ2VzIHNlZW0gZm9jdXNlZCBvbiB0aGUgc3RhdGUgbWFjaGluZSBhbmQgdGhvc2UgYXRvbWljIGZsYWdzIHdpdGhpbiBgZXBpdGVtYCwgd2hpY2ggaXMgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZS4gTm90aGluZyB1c2VyLWZhY2luZyBpcyBiZWluZyBhbGxvY2F0ZWQgd2l0aCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcy4gYGVwX3RyeV9zZW5kX2V2ZW50c2Agc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIHBvaW50LCBhcyB0aGF0J3MgaG93IGV2ZW50cyBnZXQgc2VudCB0byB1c2Vyc3BhY2UuIEJ1dCB0aGUgcGF0Y2ggKmRvZXNuJ3QqIGFwcGVhciB0byBjaGFuZ2UgKndoYXQqIGlzIHNlbnQsIGp1c3QgaG93IGBlcGl0ZW1gcyBhcmUgcXVldWVkIGFuZCBoYW5kbGVkLlxuXG5XYWl0LCBgZXBfdHJ5X3NlbmRfZXZlbnRzYCBjYWxscyBgZXBfZGVsaXZlcl9ldmVudGAsIHdoaWNoIGRvZXMgYSBgX19wdXRfdXNlcmAgb24gYHJldmVudHNgIGFuZCBgZXBpLVx1MDAzZWV2ZW50LmRhdGFgLiBUaGF0J3MgdGhlIHJlYWwgdGVzdC4gVGhlIGNvZGUgZG9pbmcgdGhpcyAqaXNuJ3QqIHRvdWNoZWQgYnkgdGhlIHBhdGNoOyB3ZSdyZSBzdGlsbCBzYWZlLiBUaGUgcGF0Y2ggZG9lcyBtb2RpZnkgaG93IGBlcGktXHUwMDNlZXZlbnQuZXZlbnRzYCBpcyBzZXQsIGJ1dCBpdCdzIG5vdyB1c2luZyBgV1JJVEVfT05DRWAsIHdoaWNoIHNob3VsZG4ndCBpbnRyb2R1Y2UgYW55IG5ldyBpc3N1ZXMgYW5kIGxvb2tzIHNhZmVyIHRoYW4gdGhlIHByZXZpb3VzIGFzc2lnbm1lbnQuIFNvLCBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyBoZXJlLlxuXG5MZXQncyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBUaGUgbmV3IGBhdG9taWNfdCBzdGF0ZWAgaW4gYHN0cnVjdCBlcGl0ZW1gIGxvb2tzIGludGVyZXN0aW5nLiBJdCdzIGluaXRpYWxpemVkIGluIGBlcF9pbnNlcnRgLiBFaXRoZXIgYGF0b21pY19zZXQoXHUwMDI2ZXBpLVx1MDAzZXN0YXRlLCBFUF9TVEFURV9GQVNUKWAgb3IgbGVmdCBhcyAwLCB3aGljaCBzdWdnZXN0cyBpdCBpcyBpbXBsaWNpdGx5IHplcm9lZCBieSBga21lbV9jYWNoZV96YWxsb2NgIGR1cmluZyBhbGxvY2F0aW9uIGluIGBlcF9pbnNlcnRgLiBPa2F5LCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBgZXBfaW5zZXJ0YCBhbGxvY2F0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowNzozNC45MDE1NjQ4NzdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTYxOTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fY2FjaGVfemFsbG9jLiplcGlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXZlbnRwb2xsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXZlbnRwb2xsLmM9MTg5OT1zdGF0aWMgc3RydWN0IGVwaXRlbSAqZXBfYWxsb2NfZXBpdGVtKHN0cnVjdCBldmVudHBvbGwgKmVwLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMTkwOS1cXG5mcy9ldmVudHBvbGwuYzoxOTEwOlxcdGVwaSA9IGttZW1fY2FjaGVfemFsbG9jKGVwaV9jYWNoZSwgR0ZQX0tFUk5FTCk7XFxuZnMvZXZlbnRwb2xsLmMtMTkxMS1cXHRpZiAodW5saWtlbHkoIWVwaSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDc6MzQuOTQ1MTM0NjE2WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDk3NTM1MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEVwb2xsIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhpcyBlcG9sbCBwYXRjaC4gVGhlIGNvZGUgaXMgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCwgd2hpY2ggbWVhbnMgdGhlIGBlcGktXHUwMDNlc3RhdGVgIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYnkgZGVmYXVsdC4gVGhlIHBhdGNoIHRoZW4gaW50cm9kdWNlcyBhbiBgYXRvbWljX3NldGAgdG8gYEVQX1NUQVRFX0ZBU1RgIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMuIFNvLCBpdCdzIGZ1bGx5IGluaXRpYWxpemVkLCBubyB3b3JyaWVzIHRoZXJlLlxuXG5UaGUgaGVhcnQgb2YgdGhlIGNoYW5nZXMgc2VlbXMgdG8gYmUgYWJvdXQgY29uY3VycmVuY3kgYW5kIGltcGxlbWVudGluZyBsb2NrbGVzcyBmYXN0IHBhdGhzLiBJIHNlZSBhZGRpdGlvbnMgdG8gYHN0cnVjdCBlcGl0ZW1gIHdpdGggYXRvbWljIHN0YXRlIGJpdHMsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb24gYHN0YXRlYCwgYW5kIGxvZ2ljIHRoYXQgbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGV2ZW50cy4gVGhleSBhcmUgYWRkaW5nIGBhdG9taWNfdCBzdGF0ZWAuIFRoZXkgYXJlIG1vZGlmeWluZyBsb2dpYyBvbiBob3cgZXZlbnRzIGFyZSBoYW5kbGVkLlxuXG5UaGUgbWFpbiBjb25jZXJuIGhlcmUgd291bGQgYmUgcmFjZSBjb25kaXRpb25zLCBtaXNzZWQgd2FrZXVwcywgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9z4oCUZXNzZW50aWFsbHksIGNsYXNzaWMgY29uY3VycmVuY3kgYnVncy4gVGhlc2UgYXJlICpleGFjdGx5KiB0aGUga2luZHMgb2YgaXNzdWVzIHRoYXQgS0FTQU4sIEtDU0FOLCBhbmQgTG9ja2RlcCBhcmUgZGVzaWduZWQgdG8gY2F0Y2guIEtNU0FOLCBob3dldmVyLCBpcyBkZXNpZ25lZCB0byBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYW5kIHRoZXJlJ3Mgbm8gcmlzayBvZiB0aGF0IGhlcmUuIFRoZSBuZXcgYGF0b21pY190IHN0YXRlYCBmaWVsZCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gSSBzZWUgbm8gc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSBlaXRoZXIsIHNvIHRoZXJlJ3Mgbm8gcG9zc2liaWxpdHkgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgS01TQU4gaXNuJ3QgbmVjZXNzYXJ5IGZvciB0aGlzIHBhdGNoLiBUaGUgcmVsZXZhbnQgdG9vbHMgZm9yIHRoaXMga2luZCBvZiBjaGFuZ2UgYXJlIEtBU0FOLCBLQ1NBTiBhbmQgTG9ja2RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg5NywiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDc6NDUuNDQyNjcyMTI4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciBlcG9sbCB1c2luZyBhdG9taWMgc3RhdGUgYml0cyBpbiBgc3RydWN0IGVwaXRlbWAuIEl0IG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBsb2dpYywgZXZlbnQgYWNjb3VudGluZywgYW5kIHdha2V1cHMuIEFsbCBuZXcgZmllbGRzIChsaWtlIGBhdG9taWNfdCBzdGF0ZWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAoZS5nLiwgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AgYW5kIGBhdG9taWNfc2V0YCksIGFuZCBubyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciBlcG9sbCB1c2luZyBhdG9taWMgc3RhdGUgYml0cyBpbiBgc3RydWN0IGVwaXRlbWAuIEl0IG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBsb2dpYywgZXZlbnQgYWNjb3VudGluZywgYW5kIHdha2V1cHMuIEFsbCBuZXcgZmllbGRzIChsaWtlIGBhdG9taWNfdCBzdGF0ZWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAoZS5nLiwgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AgYW5kIGBhdG9taWNfc2V0YCksIGFuZCBubyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowg97pg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 02:36:00 +0000 UTC FinishedAt: 2026-08-24 03:07:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4352b8aee98005853aa63f57d6377282de17a33f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EPOLL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4352b8aee98005853aa63f57d6377282de17a33f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EPOLL" ], "series_id": "0a2de8be-5ebb-487f-9df0-eb4ac5e24bca" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "do_epoll_ctl", "do_epoll_ctl_file", "epoll_sendevents" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFUE9MTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX2Vwb2xsX2N0bCYjMzQ7LAogICAgJiMzNDtkb19lcG9sbF9jdGxfZmlsZSYjMzQ7LAogICAgJiMzNDtlcG9sbF9zZW5kZXZlbnRzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgZXBvbGwgdXNpbmcgYXRvbWljIHN0YXRlIGJpdHMgaW4gYHN0cnVjdCBlcGl0ZW1gLiBJdCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gbG9naWMsIGV2ZW50IGFjY291bnRpbmcsIGFuZCB3YWtldXBzLiBBbGwgbmV3IGZpZWxkcyAobGlrZSBgYXRvbWljX3Qgc3RhdGVgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSBga21lbV9jYWNoZV96YWxsb2NgIGFuZCBgYXRvbWljX3NldGApLCBhbmQgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIGVwb2xsIGNhbGxiYWNrcywgYWRkaW5nIG5ldyBzdGF0ZSBiaXRzIChFUF9TVEFURV9BQ0NPVU5URUQsIEVQX1NUQVRFX0ZBU1QpIGFuZCBtb2RpZnlpbmcgdGhlIGNvcmUgZXZlbnQgZGVsaXZlcnkgYW5kIHBvbGxpbmcgbG9naWMgaW4gZnMvZXZlbnRwb2xsLmMuIFRoaXMgYWZmZWN0cyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGFuZCBpcyBoaWdobHkgcmVhY2hhYmxlIHZpYSBlcG9sbCBzeXNjYWxscyBhbmQgaW9fdXJpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ODkyODY5YmQyMzYzNDdhMmZjOTIxZjczOWVmNjdjYzA2MTAxZTkwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMDI6NTA6MjQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuY1xuaW5kZXggZTBjNGJmODhhODM4My4uNjAwZDNkMmQ0NzYzNiAxMDA2NDRcbi0tLSBhL2ZzL2V2ZW50cG9sbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9ldmVudHBvbGwuY1xuQEAgLTI0Myw2ICYjNDM7MjQzLDE0IEBAIHN0cnVjdCBlcHBvbGxfZW50cnkge1xuIFx0d2FpdF9xdWV1ZV9oZWFkX3QgKndoZWFkO1xuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEZBU1QgaXMgc2V0IGZvciBlbGlnaWJsZSBpdGVtcyBhdCBpbnNlcnRpb24uIEFDQ09VTlRFRCB0cmFja3MgRkFTVCBpdGVtc1xuJiM0MzsgKiB3aGlsZSB0aGUgcmVhZHkgcGF0aCBvd25zIHRoZW0gYW5kIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHJlLXBvbGwuXG4mIzQzOyAqL1xuJiM0MztlbnVtIHtcbiYjNDM7XHRFUF9TVEFURV9BQ0NPVU5URURcdD0gQklUKDApLFxuJiM0MztcdEVQX1NUQVRFX0ZBU1RcdFx0PSBCSVQoMSksXG4mIzQzO307XG4gLypcbiAgKiBFYWNoIGZpbGUgZGVzY3JpcHRvciBhZGRlZCB0byB0aGUgZXZlbnRwb2xsIGludGVyZmFjZSB3aWxsXG4gICogaGF2ZSBhbiBlbnRyeSBvZiB0aGlzIHR5cGUgbGlua2VkIHRvIHRoZSBcJiMzNDtyYnJcJiMzNDsgUkIgdHJlZS5cbkBAIC0yNzEsNiAmIzQzOzI3OSw5IEBAIHN0cnVjdCBlcGl0ZW0ge1xuIFx0LyogVGhlIGZpbGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiB0aGlzIGl0ZW0gcmVmZXJzIHRvICovXG4gXHRzdHJ1Y3QgZXBvbGxfa2V5IGZmZDtcbiBcbiYjNDM7XHQvKiBBdG9taWMgc3RhdGUgYml0cywgc2VlIHRoZSBFUF9TVEFURV8qIGVudW0gYWJvdmUuICovXG4mIzQzO1x0YXRvbWljX3Qgc3RhdGU7XG4mIzQzO1xuIFx0LyogTGlzdCBjb250YWluaW5nIHBvbGwgd2FpdCBxdWV1ZXMgKi9cbiBcdHN0cnVjdCBlcHBvbGxfZW50cnkgKnB3cWxpc3Q7XG4gXG5AQCAtNjIwLDYgJiM0Mzs2MzEsNjUgQEAgc3RhdGljIGlubGluZSBib29sIGVwX2V2ZW50c19hdmFpbGFibGUoc3RydWN0IGV2ZW50cG9sbCAqZXApXG4gXHRcdHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2ZXAtXHUwMDNlc2VxLCBzZXEpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogTGV0IEEgYmUgQUNDT1VOVEVEIGFuZCBCIGJlIGZpbGUgcmVhZGluZXNzLiBGdWxseSBvcmRlcmVkIGF0b21pYyBSTVdzXG4mIzQzOyAqIHBhaXIgVyhBPTApIGJlZm9yZSBSKEIpIHdpdGggVyhCKSBiZWZvcmUgUihBKSwgc28gYSBzY2FubmVyIGNhbm5vdCBtaXNzXG4mIzQzOyAqIEIgd2hpbGUgaXRzIGNhbGxiYWNrIHNraXBzIGFuIGFjY291bnRlZCBpdGVtLiBlcF9kb25lX3NjYW4oKSBhbmQgdGhlXG4mIzQzOyAqIGZhdGFsLXNpZ25hbCBoYW5kb2ZmIHBhc3MgcXVldWVkIGV2ZW50cyBiZXR3ZWVuIGV4Y2x1c2l2ZSB3YWl0ZXJzLlxuJiM0MzsgKiBwb2xsX3dhaXQgdXNlcnMsIHByaXZhdGUgbW9kZXMgYW5kIHNwZWNpYWwgY2FsbGJhY2tzIHRha2UgdGhlIHNsb3cgcGF0aC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBlcF9zdGF0ZV90ZXN0KGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSwgdW5zaWduZWQgaW50IGJpdClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZlcGktXHUwMDNlc3RhdGUpIFx1MDAyNiBiaXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBlcF9yZWFkeV9mYXN0X2VuYWJsZWQoY29uc3Qgc3RydWN0IGVwaXRlbSAqZXBpKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGVwX3N0YXRlX3Rlc3QoZXBpLCBFUF9TVEFURV9GQVNUKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoc3RydWN0IGVwaXRlbSAqZXBpKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChlcGkpKVxuJiM0MztcdFx0YXRvbWljX29yKEVQX1NUQVRFX0FDQ09VTlRFRCwgXHUwMDI2ZXBpLVx1MDAzZXN0YXRlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVwX3ByZXBhcmVfcmVwb2xsKHN0cnVjdCBlcGl0ZW0gKmVwaSlcbiYjNDM7e1xuJiM0MztcdGlmIChlcF9yZWFkeV9mYXN0X2VuYWJsZWQoZXBpKSlcbiYjNDM7XHRcdGF0b21pY19mZXRjaF9hbmRub3QoRVBfU1RBVEVfQUNDT1VOVEVELCBcdTAwMjZlcGktXHUwMDNlc3RhdGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBlcF9jYWxsYmFja19jYW5fc2tpcChzdHJ1Y3QgZXBpdGVtICplcGksIF9fcG9sbF90IHBvbGxmbGFncylcbiYjNDM7e1xuJiM0MztcdF9fcG9sbF90IGV2ZW50cztcbiYjNDM7XG4mIzQzO1x0ZXZlbnRzID0gUkVBRF9PTkNFKGVwaS1cdTAwM2VldmVudC5ldmVudHMpO1xuJiM0MztcdFxuJiM0MztcdC8qIE9ubHkgaW5zZXJ0aW9uLXRpbWUgY2FuZGlkYXRlcyBtYXkgdXNlIHRoZSBsb2NrbGVzcyBwYXRoLiAqL1xuJiM0MztcdGlmICghZXBfcmVhZHlfZmFzdF9lbmFibGVkKGVwaSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XG4mIzQzO1x0LyogZXBfbW9kaWZ5KCkgY2FuIHNlbGVjdCBhIHByaXZhdGUgbW9kZSB0aGF0IHJlcXVpcmVzIHRoZSBzbG93IHBhdGguICovXG4mIzQzO1x0aWYgKGV2ZW50cyBcdTAwMjYgRVBfUFJJVkFURV9CSVRTKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBwb2xsX3dhaXQgdXNlcnMgbXVzdCBiZSB3b2tlbiBieSB0aGlzIGNhbGxiYWNrLiAqL1xuJiM0MztcdGlmICh3YWl0cXVldWVfYWN0aXZlKFx1MDAyNmVwaS1cdTAwM2VlcC1cdTAwM2Vwb2xsX3dhaXQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBQT0xMRlJFRSB0ZWFycyBkb3duIHdhaXQgZW50cmllczsgVVJJTkdfV0FLRSBtdXN0IHByb3BhZ2F0ZS4gKi9cbiYjNDM7XHRpZiAocG9sbGZsYWdzIFx1MDAyNiAoUE9MTEZSRUUgfCBFUE9MTF9VUklOR19XQUtFKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogVW5tYXRjaGVkIHdha2Uga2V5cyByZXRhaW4gdGhlIHNsb3ctcGF0aCBjYWxsYmFjayBzZW1hbnRpY3MuICovXG4mIzQzO1x0aWYgKHBvbGxmbGFncyBcdTAwMjZcdTAwMjYgIShwb2xsZmxhZ3MgXHUwMDI2IGV2ZW50cykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIEZ1bGx5IG9yZGVyZWQgUk1XIHBhaXJzIHRoZSBCIHVwZGF0ZSB3aXRoIHRoZSBzY2FubmVyJiMzOTtzIEEgY2xlYXIuICovXG4mIzQzO1x0cmV0dXJuIGF0b21pY19mZXRjaF9vcigwLCBcdTAwMjZlcGktXHUwMDNlc3RhdGUpIFx1MDAyNiBFUF9TVEFURV9BQ0NPVU5URUQ7XG4mIzQzO31cbiYjNDM7XG4gI2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMXG4gLyoqXG4gICogYnVzeV9sb29wX2VwX3RpbWVvdXQgLSBjaGVjayBpZiBidXN5IHBvbGwgaGFzIHRpbWVkIG91dC4gVGhlIHRpbWVvdXQgdmFsdWVcbkBAIC0xMDA3LDYgJiM0MzsxMDc3LDcgQEAgc3RhdGljIHZvaWQgZXBfZG9uZV9zY2FuKHN0cnVjdCBldmVudHBvbGwgKmVwLFxuIFx0XHRcdCAqIHJldmVyc2VzIHRoZSBpdGVyYXRpb24gb3JkZXIgaW50byBGSUZPLlxuIFx0XHRcdCAqL1xuIFx0XHRcdGxpc3RfYWRkKFx1MDAyNmVwaS1cdTAwM2VyZGxsaW5rLCBcdTAwMjZlcC1cdTAwM2VyZGxsaXN0KTtcbiYjNDM7XHRcdFx0ZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpO1xuIFx0XHRcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTEzMDMsOCAmIzQzOzEzNzQsMTAgQEAgc3RhdGljIF9fcG9sbF90IF9fZXBfZXZlbnRwb2xsX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQsIGludCBkZXBcbiBcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNmVwLVx1MDAzZW10eCwgZGVwdGgpO1xuIFx0ZXBfc3RhcnRfc2NhbihlcCwgXHUwMDI2c2Nhbl9iYXRjaCk7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXBpLCB0bXAsIFx1MDAyNnNjYW5fYmF0Y2gsIHJkbGxpbmspIHtcbiYjNDM7XHRcdGVwX3ByZXBhcmVfcmVwb2xsKGVwaSk7XG4gXHRcdGlmIChlcF9pdGVtX3BvbGwoZXBpLCBcdTAwMjZwdCwgZGVwdGggJiM0MzsgMSkpIHtcbiBcdFx0XHRyZXMgPSBFUE9MTElOIHwgRVBPTExSRE5PUk07XG4mIzQzO1x0XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKlxuQEAgLTE0OTcsNiAmIzQzOzE1NzAsOSBAQCBzdGF0aWMgaW50IGVwX3BvbGxfY2FsbGJhY2sod2FpdF9xdWV1ZV9lbnRyeV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdlxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBld2FrZSA9IDA7XG4gXG4mIzQzO1x0aWYgKGVwX2NhbGxiYWNrX2Nhbl9za2lwKGVwaSwgcG9sbGZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmVwLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdGVwX3NldF9idXN5X3BvbGxfbmFwaV9pZChlcGkpO1xuQEAgLTE1MjksMTEgJiM0MzsxNjA1LDEzIEBAIHN0YXRpYyBpbnQgZXBfcG9sbF9jYWxsYmFjayh3YWl0X3F1ZXVlX2VudHJ5X3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2XG4gXHRcdGlmICghZXBpX29uX292Zmxpc3QoZXBpKSkge1xuIFx0XHRcdGVwaS1cdTAwM2VvdmZsaXN0X25leHQgPSBSRUFEX09OQ0UoZXAtXHUwMDNlb3ZmbGlzdCk7XG4gXHRcdFx0V1JJVEVfT05DRShlcC1cdTAwM2VvdmZsaXN0LCBlcGkpO1xuJiM0MztcdFx0XHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XG4gXHRcdFx0ZXBfcG1fc3RheV9hd2FrZV9yY3UoZXBpKTtcbiBcdFx0fVxuIFx0fSBlbHNlIGlmICghZXBfaXNfbGlua2VkKGVwaSkpIHtcbiBcdFx0LyogSW4gdGhlIHVzdWFsIGNhc2UsIGFkZCBldmVudCB0byByZWFkeSBsaXN0LiAqL1xuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmVwaS1cdTAwM2VyZGxsaW5rLCBcdTAwMjZlcC1cdTAwM2VyZGxsaXN0KTtcbiYjNDM7XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0ZXBfcG1fc3RheV9hd2FrZV9yY3UoZXBpKTtcbiBcdH1cbiBcbkBAIC0xOTEyLDYgJiM0MzsxOTkwLDEzIEBAIHN0YXRpYyBpbnQgZXBfaW5zZXJ0KHN0cnVjdCBlcF9jdGxfY3R4ICpjdHgsIHN0cnVjdCBldmVudHBvbGwgKmVwLFxuIFx0aWYgKElTX0VSUihlcGkpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihlcGkpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogTG9ja2xlc3MgY2FuZGlkYXRlcyBhcmUgcGxhaW4gbGV2ZWwtdHJpZ2dlcmVkIGludGVyZXN0cztcbiYjNDM7XHQgKiBwcml2YXRlIG1vZGVzIGFuZCBuZXN0ZWQgZXBvbGwgY2hhbmdlIHRoZSBjYWxsYmFjayBjb250cmFjdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXRlcCBcdTAwMjZcdTAwMjYgIShldmVudC1cdTAwM2VldmVudHMgXHUwMDI2IEVQX1BSSVZBVEVfQklUUykpXG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNmVwaS1cdTAwM2VzdGF0ZSwgRVBfU1RBVEVfRkFTVCk7XG4mIzQzO1xuIFx0ZXJyb3IgPSBlcF9yZWdpc3Rlcl9lcGl0ZW0oY3R4LCBlcCwgZXBpLCB0ZXAsIGZ1bGxfY2hlY2spO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtMTk1Niw2ICYjNDM7MjA0MSw3IEBAIHN0YXRpYyBpbnQgZXBfaW5zZXJ0KHN0cnVjdCBlcF9jdGxfY3R4ICpjdHgsIHN0cnVjdCBldmVudHBvbGwgKmVwLFxuIFxuIFx0aWYgKHJldmVudHMgXHUwMDI2XHUwMDI2ICFlcF9pc19saW5rZWQoZXBpKSkge1xuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmVwaS1cdTAwM2VyZGxsaW5rLCBcdTAwMjZlcC1cdTAwM2VyZGxsaXN0KTtcbiYjNDM7XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0ZXBfcG1fc3RheV9hd2FrZShlcGkpO1xuIFxuIFx0XHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcdTAwMjZlcC1cdTAwM2V3cSkpXG5AQCAtMTk5Miw3ICYjNDM7MjA3OCw3IEBAIHN0YXRpYyBpbnQgZXBfbW9kaWZ5KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksXG4gXHQgKiBvdGhlcndpc2Ugd2UgbWlnaHQgbWlzcyBhbiBldmVudCB0aGF0IGhhcHBlbnMgYmV0d2VlbiB0aGVcbiBcdCAqIGZfb3AtXHUwMDNlcG9sbCgpIGNhbGwgYW5kIHRoZSBuZXcgZXZlbnQgc2V0IHJlZ2lzdGVyaW5nLlxuIFx0ICovXG4tXHRlcGktXHUwMDNlZXZlbnQuZXZlbnRzID0gZXZlbnQtXHUwMDNlZXZlbnRzOyAvKiBuZWVkIGJhcnJpZXIgYmVsb3cgKi9cbiYjNDM7XHRXUklURV9PTkNFKGVwaS1cdTAwM2VldmVudC5ldmVudHMsIGV2ZW50LVx1MDAzZWV2ZW50cyk7IC8qIG5lZWQgYmFycmllciBiZWxvdyAqL1xuIFx0ZXBpLVx1MDAzZWV2ZW50LmRhdGEgPSBldmVudC1cdTAwM2VkYXRhOyAvKiBwcm90ZWN0ZWQgYnkgbXR4ICovXG4gXHRpZiAoZXBpLVx1MDAzZWV2ZW50LmV2ZW50cyBcdTAwMjYgRVBPTExXQUtFVVApIHtcbiBcdFx0aWYgKCFlcF9oYXNfd2FrZXVwX3NvdXJjZShlcGkpKVxuQEAgLTIwMzEsNiAmIzQzOzIxMTcsNyBAQCBzdGF0aWMgaW50IGVwX21vZGlmeShzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmVwLVx1MDAzZWxvY2spO1xuIFx0XHRpZiAoIWVwX2lzX2xpbmtlZChlcGkpKSB7XG4gXHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZlcGktXHUwMDNlcmRsbGluaywgXHUwMDI2ZXAtXHUwMDNlcmRsbGlzdCk7XG4mIzQzO1x0XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0XHRlcF9wbV9zdGF5X2F3YWtlKGVwaSk7XG4gXG4gXHRcdFx0LyogTm90aWZ5IHdhaXRpbmcgdGFza3MgdGhhdCBldmVudHMgYXJlIGF2YWlsYWJsZSAqL1xuQEAgLTIwODQsNiAmIzQzOzIxNzEsNyBAQCBzdGF0aWMgaW50IGVwX2RlbGl2ZXJfZXZlbnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcbiBcdFx0X19wbV9yZWxheCh3cyk7XG4gXHR9XG4gXG4mIzQzO1x0ZXBfcHJlcGFyZV9yZXBvbGwoZXBpKTtcbiBcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZXBpLVx1MDAzZXJkbGxpbmspO1xuIFxuIFx0LypcbkBAIC0yMTA0LDEzICYjNDM7MjE5MiwxNSBAQCBzdGF0aWMgaW50IGVwX2RlbGl2ZXJfZXZlbnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcbiBcdFx0ICogYXR0ZW1wdC5cbiBcdFx0ICovXG4gXHRcdGxpc3RfYWRkKFx1MDAyNmVwaS1cdTAwM2VyZGxsaW5rLCBzY2FuX2JhdGNoKTtcbiYjNDM7XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0ZXBfcG1fc3RheV9hd2FrZShlcGkpO1xuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdH1cbiBcdCp1ZXZlbnRzID0gbmV4dDtcbiBcbiBcdGlmIChlcGktXHUwMDNlZXZlbnQuZXZlbnRzIFx1MDAyNiBFUE9MTE9ORVNIT1QpIHtcbi1cdFx0ZXBpLVx1MDAzZWV2ZW50LmV2ZW50cyBcdTAwMjY9IEVQX1BSSVZBVEVfQklUUztcbiYjNDM7XHRcdFdSSVRFX09OQ0UoZXBpLVx1MDAzZWV2ZW50LmV2ZW50cyxcbiYjNDM7XHRcdFx0ICAgUkVBRF9PTkNFKGVwaS1cdTAwM2VldmVudC5ldmVudHMpIFx1MDAyNiBFUF9QUklWQVRFX0JJVFMpO1xuIFx0fSBlbHNlIGlmICghKGVwaS1cdTAwM2VldmVudC5ldmVudHMgXHUwMDI2IEVQT0xMRVQpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIExldmVsLXRyaWdnZXJlZDogcmUtcXVldWUgc28gdGhlIG5leHQgZXBvbGxfd2FpdCgpXG5AQCAtMjEyMCw2ICYjNDM7MjIxMCw3IEBAIHN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxuIFx0XHQgKiBkdXJpbmcgc2NhbnMuXG4gXHRcdCAqL1xuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmVwaS1cdTAwM2VyZGxsaW5rLCBcdTAwMjZlcC1cdTAwM2VyZGxsaXN0KTtcbiYjNDM7XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0ZXBfcG1fc3RheV9hd2FrZShlcGkpO1xuIFx0fVxuIFx0cmV0dXJuIDE7XG5AQCAtMjI4Nyw2ICYjNDM7MjM3OCwxMSBAQCBzdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcbiBcdHdoaWxlICgxKSB7XG4gXHRcdGlmIChlYXZhaWwpIHtcbiBcdFx0XHRyZXMgPSBlcF90cnlfc2VuZF9ldmVudHMoZXAsIGV2ZW50cywgbWF4ZXZlbnRzKTtcbiYjNDM7XHRcdFx0aWYgKHJlcyA9PSAtRUlOVFIpIHtcbiYjNDM7XHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmVwLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHRcdHdha2VfdXAoXHUwMDI2ZXAtXHUwMDNld3EpO1xuJiM0MztcdFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZlcC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdGlmIChyZXMpXG4gXHRcdFx0XHRyZXR1cm4gcmVzO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDI6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFUE9MTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX2Vwb2xsX2N0bCYjMzQ7LAogICAgJiMzNDtkb19lcG9sbF9jdGxfZmlsZSYjMzQ7LAogICAgJiMzNDtlcG9sbF9zZW5kZXZlbnRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIGVwb2xsIGNhbGxiYWNrcywgYWRkaW5nIG5ldyBzdGF0ZSBiaXRzIChFUF9TVEFURV9BQ0NPVU5URUQsIEVQX1NUQVRFX0ZBU1QpIGFuZCBtb2RpZnlpbmcgdGhlIGNvcmUgZXZlbnQgZGVsaXZlcnkgYW5kIHBvbGxpbmcgbG9naWMgaW4gZnMvZXZlbnRwb2xsLmMuIFRoaXMgYWZmZWN0cyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGFuZCBpcyBoaWdobHkgcmVhY2hhYmxlIHZpYSBlcG9sbCBzeXNjYWxscyBhbmQgaW9fdXJpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ODkyODY5YmQyMzYzNDdhMmZjOTIxZjczOWVmNjdjYzA2MTAxZTkwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMDI6NTA6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9ldmVudHBvbGwuYyBiL2ZzL2V2ZW50cG9sbC5jCmluZGV4IGUwYzRiZjg4YTgzODMuLjYwMGQzZDJkNDc2MzYgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50cG9sbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V2ZW50cG9sbC5jCkBAIC0yNDMsNiAmIzQzOzI0MywxNCBAQCBzdHJ1Y3QgZXBwb2xsX2VudHJ5IHsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAqd2hlYWQ7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBGQVNUIGlzIHNldCBmb3IgZWxpZ2libGUgaXRlbXMgYXQgaW5zZXJ0aW9uLiBBQ0NPVU5URUQgdHJhY2tzIEZBU1QgaXRlbXMKJiM0MzsgKiB3aGlsZSB0aGUgcmVhZHkgcGF0aCBvd25zIHRoZW0gYW5kIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHJlLXBvbGwuCiYjNDM7ICovCiYjNDM7ZW51bSB7CiYjNDM7CUVQX1NUQVRFX0FDQ09VTlRFRAk9IEJJVCgwKSwKJiM0MzsJRVBfU1RBVEVfRkFTVAkJPSBCSVQoMSksCiYjNDM7fTsKIC8qCiAgKiBFYWNoIGZpbGUgZGVzY3JpcHRvciBhZGRlZCB0byB0aGUgZXZlbnRwb2xsIGludGVyZmFjZSB3aWxsCiAgKiBoYXZlIGFuIGVudHJ5IG9mIHRoaXMgdHlwZSBsaW5rZWQgdG8gdGhlICYjMzQ7cmJyJiMzNDsgUkIgdHJlZS4KQEAgLTI3MSw2ICYjNDM7Mjc5LDkgQEAgc3RydWN0IGVwaXRlbSB7CiAJLyogVGhlIGZpbGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiB0aGlzIGl0ZW0gcmVmZXJzIHRvICovCiAJc3RydWN0IGVwb2xsX2tleSBmZmQ7CiAKJiM0MzsJLyogQXRvbWljIHN0YXRlIGJpdHMsIHNlZSB0aGUgRVBfU1RBVEVfKiBlbnVtIGFib3ZlLiAqLwomIzQzOwlhdG9taWNfdCBzdGF0ZTsKJiM0MzsKIAkvKiBMaXN0IGNvbnRhaW5pbmcgcG9sbCB3YWl0IHF1ZXVlcyAqLwogCXN0cnVjdCBlcHBvbGxfZW50cnkgKnB3cWxpc3Q7CiAKQEAgLTYyMCw2ICYjNDM7NjMxLDY1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlcF9ldmVudHNfYXZhaWxhYmxlKHN0cnVjdCBldmVudHBvbGwgKmVwKQogCQlyZWFkX3NlcWNvdW50X3JldHJ5KCZhbXA7ZXAtJmd0O3NlcSwgc2VxKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogTGV0IEEgYmUgQUNDT1VOVEVEIGFuZCBCIGJlIGZpbGUgcmVhZGluZXNzLiBGdWxseSBvcmRlcmVkIGF0b21pYyBSTVdzCiYjNDM7ICogcGFpciBXKEE9MCkgYmVmb3JlIFIoQikgd2l0aCBXKEIpIGJlZm9yZSBSKEEpLCBzbyBhIHNjYW5uZXIgY2Fubm90IG1pc3MKJiM0MzsgKiBCIHdoaWxlIGl0cyBjYWxsYmFjayBza2lwcyBhbiBhY2NvdW50ZWQgaXRlbS4gZXBfZG9uZV9zY2FuKCkgYW5kIHRoZQomIzQzOyAqIGZhdGFsLXNpZ25hbCBoYW5kb2ZmIHBhc3MgcXVldWVkIGV2ZW50cyBiZXR3ZWVuIGV4Y2x1c2l2ZSB3YWl0ZXJzLgomIzQzOyAqIHBvbGxfd2FpdCB1c2VycywgcHJpdmF0ZSBtb2RlcyBhbmQgc3BlY2lhbCBjYWxsYmFja3MgdGFrZSB0aGUgc2xvdyBwYXRoLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBlcF9zdGF0ZV90ZXN0KGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSwgdW5zaWduZWQgaW50IGJpdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhdG9taWNfcmVhZCgmYW1wO2VwaS0mZ3Q7c3RhdGUpICZhbXA7IGJpdDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgZXBpdGVtICplcGkpCiYjNDM7ewomIzQzOwlyZXR1cm4gZXBfc3RhdGVfdGVzdChlcGksIEVQX1NUQVRFX0ZBU1QpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZXBfc2V0X3JlYWR5X2FjY291bnRlZChzdHJ1Y3QgZXBpdGVtICplcGkpCiYjNDM7ewomIzQzOwlpZiAoZXBfcmVhZHlfZmFzdF9lbmFibGVkKGVwaSkpCiYjNDM7CQlhdG9taWNfb3IoRVBfU1RBVEVfQUNDT1VOVEVELCAmYW1wO2VwaS0mZ3Q7c3RhdGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZXBfcHJlcGFyZV9yZXBvbGwoc3RydWN0IGVwaXRlbSAqZXBpKQomIzQzO3sKJiM0MzsJaWYgKGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChlcGkpKQomIzQzOwkJYXRvbWljX2ZldGNoX2FuZG5vdChFUF9TVEFURV9BQ0NPVU5URUQsICZhbXA7ZXBpLSZndDtzdGF0ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGVwX2NhbGxiYWNrX2Nhbl9za2lwKHN0cnVjdCBlcGl0ZW0gKmVwaSwgX19wb2xsX3QgcG9sbGZsYWdzKQomIzQzO3sKJiM0MzsJX19wb2xsX3QgZXZlbnRzOwomIzQzOwomIzQzOwlldmVudHMgPSBSRUFEX09OQ0UoZXBpLSZndDtldmVudC5ldmVudHMpOwomIzQzOwkKJiM0MzsJLyogT25seSBpbnNlcnRpb24tdGltZSBjYW5kaWRhdGVzIG1heSB1c2UgdGhlIGxvY2tsZXNzIHBhdGguICovCiYjNDM7CWlmICghZXBfcmVhZHlfZmFzdF9lbmFibGVkKGVwaSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CQomIzQzOwkvKiBlcF9tb2RpZnkoKSBjYW4gc2VsZWN0IGEgcHJpdmF0ZSBtb2RlIHRoYXQgcmVxdWlyZXMgdGhlIHNsb3cgcGF0aC4gKi8KJiM0MzsJaWYgKGV2ZW50cyAmYW1wOyBFUF9QUklWQVRFX0JJVFMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIHBvbGxfd2FpdCB1c2VycyBtdXN0IGJlIHdva2VuIGJ5IHRoaXMgY2FsbGJhY2suICovCiYjNDM7CWlmICh3YWl0cXVldWVfYWN0aXZlKCZhbXA7ZXBpLSZndDtlcC0mZ3Q7cG9sbF93YWl0KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogUE9MTEZSRUUgdGVhcnMgZG93biB3YWl0IGVudHJpZXM7IFVSSU5HX1dBS0UgbXVzdCBwcm9wYWdhdGUuICovCiYjNDM7CWlmIChwb2xsZmxhZ3MgJmFtcDsgKFBPTExGUkVFIHwgRVBPTExfVVJJTkdfV0FLRSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIFVubWF0Y2hlZCB3YWtlIGtleXMgcmV0YWluIHRoZSBzbG93LXBhdGggY2FsbGJhY2sgc2VtYW50aWNzLiAqLwomIzQzOwlpZiAocG9sbGZsYWdzICZhbXA7JmFtcDsgIShwb2xsZmxhZ3MgJmFtcDsgZXZlbnRzKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogRnVsbHkgb3JkZXJlZCBSTVcgcGFpcnMgdGhlIEIgdXBkYXRlIHdpdGggdGhlIHNjYW5uZXImIzM5O3MgQSBjbGVhci4gKi8KJiM0MzsJcmV0dXJuIGF0b21pY19mZXRjaF9vcigwLCAmYW1wO2VwaS0mZ3Q7c3RhdGUpICZhbXA7IEVQX1NUQVRFX0FDQ09VTlRFRDsKJiM0Mzt9CiYjNDM7CiAjaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTEwKIC8qKgogICogYnVzeV9sb29wX2VwX3RpbWVvdXQgLSBjaGVjayBpZiBidXN5IHBvbGwgaGFzIHRpbWVkIG91dC4gVGhlIHRpbWVvdXQgdmFsdWUKQEAgLTEwMDcsNiAmIzQzOzEwNzcsNyBAQCBzdGF0aWMgdm9pZCBlcF9kb25lX3NjYW4oc3RydWN0IGV2ZW50cG9sbCAqZXAsCiAJCQkgKiByZXZlcnNlcyB0aGUgaXRlcmF0aW9uIG9yZGVyIGludG8gRklGTy4KIAkJCSAqLwogCQkJbGlzdF9hZGQoJmFtcDtlcGktJmd0O3JkbGxpbmssICZhbXA7ZXAtJmd0O3JkbGxpc3QpOwomIzQzOwkJCWVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTsKIAkJCWVwX3BtX3N0YXlfYXdha2UoZXBpKTsKIAkJfQogCX0KQEAgLTEzMDMsOCAmIzQzOzEzNzQsMTAgQEAgc3RhdGljIF9fcG9sbF90IF9fZXBfZXZlbnRwb2xsX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQsIGludCBkZXAKIAltdXRleF9sb2NrX25lc3RlZCgmYW1wO2VwLSZndDttdHgsIGRlcHRoKTsKIAllcF9zdGFydF9zY2FuKGVwLCAmYW1wO3NjYW5fYmF0Y2gpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlcGksIHRtcCwgJmFtcDtzY2FuX2JhdGNoLCByZGxsaW5rKSB7CiYjNDM7CQllcF9wcmVwYXJlX3JlcG9sbChlcGkpOwogCQlpZiAoZXBfaXRlbV9wb2xsKGVwaSwgJmFtcDtwdCwgZGVwdGggJiM0MzsgMSkpIHsKIAkJCXJlcyA9IEVQT0xMSU4gfCBFUE9MTFJETk9STTsKJiM0MzsJCQllcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7CiAJCQlicmVhazsKIAkJfSBlbHNlIHsKIAkJCS8qCkBAIC0xNDk3LDYgJiM0MzsxNTcwLDkgQEAgc3RhdGljIGludCBlcF9wb2xsX2NhbGxiYWNrKHdhaXRfcXVldWVfZW50cnlfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHYKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBld2FrZSA9IDA7CiAKJiM0MzsJaWYgKGVwX2NhbGxiYWNrX2Nhbl9za2lwKGVwaSwgcG9sbGZsYWdzKSkKJiM0MzsJCXJldHVybiAxOwomIzQzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZXAtJmd0O2xvY2ssIGZsYWdzKTsKIAogCWVwX3NldF9idXN5X3BvbGxfbmFwaV9pZChlcGkpOwpAQCAtMTUyOSwxMSAmIzQzOzE2MDUsMTMgQEAgc3RhdGljIGludCBlcF9wb2xsX2NhbGxiYWNrKHdhaXRfcXVldWVfZW50cnlfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHYKIAkJaWYgKCFlcGlfb25fb3ZmbGlzdChlcGkpKSB7CiAJCQllcGktJmd0O292Zmxpc3RfbmV4dCA9IFJFQURfT05DRShlcC0mZ3Q7b3ZmbGlzdCk7CiAJCQlXUklURV9PTkNFKGVwLSZndDtvdmZsaXN0LCBlcGkpOwomIzQzOwkJCWVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTsKIAkJCWVwX3BtX3N0YXlfYXdha2VfcmN1KGVwaSk7CiAJCX0KIAl9IGVsc2UgaWYgKCFlcF9pc19saW5rZWQoZXBpKSkgewogCQkvKiBJbiB0aGUgdXN1YWwgY2FzZSwgYWRkIGV2ZW50IHRvIHJlYWR5IGxpc3QuICovCiAJCWxpc3RfYWRkX3RhaWwoJmFtcDtlcGktJmd0O3JkbGxpbmssICZhbXA7ZXAtJmd0O3JkbGxpc3QpOwomIzQzOwkJZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpOwogCQllcF9wbV9zdGF5X2F3YWtlX3JjdShlcGkpOwogCX0KIApAQCAtMTkxMiw2ICYjNDM7MTk5MCwxMyBAQCBzdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCwKIAlpZiAoSVNfRVJSKGVwaSkpCiAJCXJldHVybiBQVFJfRVJSKGVwaSk7CiAKJiM0MzsJLyoKJiM0MzsJICogTG9ja2xlc3MgY2FuZGlkYXRlcyBhcmUgcGxhaW4gbGV2ZWwtdHJpZ2dlcmVkIGludGVyZXN0czsKJiM0MzsJICogcHJpdmF0ZSBtb2RlcyBhbmQgbmVzdGVkIGVwb2xsIGNoYW5nZSB0aGUgY2FsbGJhY2sgY29udHJhY3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXRlcCAmYW1wOyZhbXA7ICEoZXZlbnQtJmd0O2V2ZW50cyAmYW1wOyBFUF9QUklWQVRFX0JJVFMpKQomIzQzOwkJYXRvbWljX3NldCgmYW1wO2VwaS0mZ3Q7c3RhdGUsIEVQX1NUQVRFX0ZBU1QpOwomIzQzOwogCWVycm9yID0gZXBfcmVnaXN0ZXJfZXBpdGVtKGN0eCwgZXAsIGVwaSwgdGVwLCBmdWxsX2NoZWNrKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTE5NTYsNiAmIzQzOzIwNDEsNyBAQCBzdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCwKIAogCWlmIChyZXZlbnRzICZhbXA7JmFtcDsgIWVwX2lzX2xpbmtlZChlcGkpKSB7CiAJCWxpc3RfYWRkX3RhaWwoJmFtcDtlcGktJmd0O3JkbGxpbmssICZhbXA7ZXAtJmd0O3JkbGxpc3QpOwomIzQzOwkJZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpOwogCQllcF9wbV9zdGF5X2F3YWtlKGVwaSk7CiAKIAkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmFtcDtlcC0mZ3Q7d3EpKQpAQCAtMTk5Miw3ICYjNDM7MjA3OCw3IEBAIHN0YXRpYyBpbnQgZXBfbW9kaWZ5KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksCiAJICogb3RoZXJ3aXNlIHdlIG1pZ2h0IG1pc3MgYW4gZXZlbnQgdGhhdCBoYXBwZW5zIGJldHdlZW4gdGhlCiAJICogZl9vcC0mZ3Q7cG9sbCgpIGNhbGwgYW5kIHRoZSBuZXcgZXZlbnQgc2V0IHJlZ2lzdGVyaW5nLgogCSAqLwotCWVwaS0mZ3Q7ZXZlbnQuZXZlbnRzID0gZXZlbnQtJmd0O2V2ZW50czsgLyogbmVlZCBiYXJyaWVyIGJlbG93ICovCiYjNDM7CVdSSVRFX09OQ0UoZXBpLSZndDtldmVudC5ldmVudHMsIGV2ZW50LSZndDtldmVudHMpOyAvKiBuZWVkIGJhcnJpZXIgYmVsb3cgKi8KIAllcGktJmd0O2V2ZW50LmRhdGEgPSBldmVudC0mZ3Q7ZGF0YTsgLyogcHJvdGVjdGVkIGJ5IG10eCAqLwogCWlmIChlcGktJmd0O2V2ZW50LmV2ZW50cyAmYW1wOyBFUE9MTFdBS0VVUCkgewogCQlpZiAoIWVwX2hhc193YWtldXBfc291cmNlKGVwaSkpCkBAIC0yMDMxLDYgJiM0MzsyMTE3LDcgQEAgc3RhdGljIGludCBlcF9tb2RpZnkoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSwKIAkJc3Bpbl9sb2NrX2lycSgmYW1wO2VwLSZndDtsb2NrKTsKIAkJaWYgKCFlcF9pc19saW5rZWQoZXBpKSkgewogCQkJbGlzdF9hZGRfdGFpbCgmYW1wO2VwaS0mZ3Q7cmRsbGluaywgJmFtcDtlcC0mZ3Q7cmRsbGlzdCk7CiYjNDM7CQkJZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpOwogCQkJZXBfcG1fc3RheV9hd2FrZShlcGkpOwogCiAJCQkvKiBOb3RpZnkgd2FpdGluZyB0YXNrcyB0aGF0IGV2ZW50cyBhcmUgYXZhaWxhYmxlICovCkBAIC0yMDg0LDYgJiM0MzsyMTcxLDcgQEAgc3RhdGljIGludCBlcF9kZWxpdmVyX2V2ZW50KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksCiAJCV9fcG1fcmVsYXgod3MpOwogCX0KIAomIzQzOwllcF9wcmVwYXJlX3JlcG9sbChlcGkpOwogCWxpc3RfZGVsX2luaXQoJmFtcDtlcGktJmd0O3JkbGxpbmspOwogCiAJLyoKQEAgLTIxMDQsMTMgJiM0MzsyMTkyLDE1IEBAIHN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLAogCQkgKiBhdHRlbXB0LgogCQkgKi8KIAkJbGlzdF9hZGQoJmFtcDtlcGktJmd0O3JkbGxpbmssIHNjYW5fYmF0Y2gpOwomIzQzOwkJZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpOwogCQllcF9wbV9zdGF5X2F3YWtlKGVwaSk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAkqdWV2ZW50cyA9IG5leHQ7CiAKIAlpZiAoZXBpLSZndDtldmVudC5ldmVudHMgJmFtcDsgRVBPTExPTkVTSE9UKSB7Ci0JCWVwaS0mZ3Q7ZXZlbnQuZXZlbnRzICZhbXA7PSBFUF9QUklWQVRFX0JJVFM7CiYjNDM7CQlXUklURV9PTkNFKGVwaS0mZ3Q7ZXZlbnQuZXZlbnRzLAomIzQzOwkJCSAgIFJFQURfT05DRShlcGktJmd0O2V2ZW50LmV2ZW50cykgJmFtcDsgRVBfUFJJVkFURV9CSVRTKTsKIAl9IGVsc2UgaWYgKCEoZXBpLSZndDtldmVudC5ldmVudHMgJmFtcDsgRVBPTExFVCkpIHsKIAkJLyoKIAkJICogTGV2ZWwtdHJpZ2dlcmVkOiByZS1xdWV1ZSBzbyB0aGUgbmV4dCBlcG9sbF93YWl0KCkKQEAgLTIxMjAsNiAmIzQzOzIyMTAsNyBAQCBzdGF0aWMgaW50IGVwX2RlbGl2ZXJfZXZlbnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSwKIAkJICogZHVyaW5nIHNjYW5zLgogCQkgKi8KIAkJbGlzdF9hZGRfdGFpbCgmYW1wO2VwaS0mZ3Q7cmRsbGluaywgJmFtcDtlcC0mZ3Q7cmRsbGlzdCk7CiYjNDM7CQllcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7CiAJCWVwX3BtX3N0YXlfYXdha2UoZXBpKTsKIAl9CiAJcmV0dXJuIDE7CkBAIC0yMjg3LDYgJiM0MzsyMzc4LDExIEBAIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLAogCXdoaWxlICgxKSB7CiAJCWlmIChlYXZhaWwpIHsKIAkJCXJlcyA9IGVwX3RyeV9zZW5kX2V2ZW50cyhlcCwgZXZlbnRzLCBtYXhldmVudHMpOwomIzQzOwkJCWlmIChyZXMgPT0gLUVJTlRSKSB7CiYjNDM7CQkJCXNwaW5fbG9ja19pcnEoJmFtcDtlcC0mZ3Q7bG9jayk7CiYjNDM7CQkJCXdha2VfdXAoJmFtcDtlcC0mZ3Q7d3EpOwomIzQzOwkJCQlzcGluX3VubG9ja19pcnEoJmFtcDtlcC0mZ3Q7bG9jayk7CiYjNDM7CQkJfQogCQkJaWYgKHJlcykKIAkJCQlyZXR1cm4gcmVzOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEVwb2xsIFBhdGNoIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTt2ZSBnb3QgYSBwYXRjaCB0b3VjaGluZyBgZnMvZXZlbnRwb2xsLmNgLCB3aGljaCBpcyBhIGNvcmUga2VybmVsIGNvbXBvbmVudCwgc28gaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBiZSBmdXp6aW5nLiBUaGlzIHBhdGNoIGlzIGFkZGluZyBhIGZhc3QgcGF0aCBmb3IgZXBvbGwgY2FsbGJhY2tzLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmcm9tIGEgcGVyZm9ybWFuY2UgYW5kLCBwb3RlbnRpYWxseSwgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGVwX2NhbGxiYWNrX2Nhbl9za2lwKClgIGlzIHRoZSBrZXkuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIGJ5cGFzcyB0aGUgc3BpbmxvY2sgaW4gYGVwX3BvbGxfY2FsbGJhY2tgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgYW5kIHRoYXQga2luZCBvZiBvcHRpbWl6YXRpb24gaXMgb2Z0ZW4gYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gVGhlIG5ldyBzdGF0ZSBiaXRzLCBgRVBfU1RBVEVfQUNDT1VOVEVEYCBhbmQgYEVQX1NUQVRFX0ZBU1RgIGluIGBzdHJ1Y3QgZXBpdGVtYCwgZnVydGhlciBjZW1lbnQgdGhpcyBuZXcgZmFzdCBwYXRoLgoKU28sIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgbmV3IGFuZCBtb2RpZmllZCBmdW5jdGlvbnM6IGBlcF9jYWxsYmFja19jYW5fc2tpcGAsIGBlcF9wb2xsX2NhbGxiYWNrYCwgYGVwX2luc2VydGAsIGBlcF9tb2RpZnlgLCBgZXBfZGVsaXZlcl9ldmVudGAsIGBlcF9wb2xsYCwgYF9fZXBfZXZlbnRwb2xsX3BvbGxgLCBhbmQgYGVwX2RvbmVfc2NhbmAuIE5vdywgd2hpY2ggb25lcyBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIGZ1enppbmcgdGFyZ2V0cz8gRm9jdXNpbmcgb24gdGhlIG9uZXMgd2l0aCB0aGUgbW9zdCBwb3RlbnRpYWwgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgbmV3IGZhc3QgcGF0aDogYGVwX3BvbGxfY2FsbGJhY2tgLCBgZXBfaW5zZXJ0YCwgYGVwX21vZGlmeWAsIGBlcF9wb2xsYCwgYGVwX2RlbGl2ZXJfZXZlbnRgIGFuZCBgX19lcF9ldmVudHBvbGxfcG9sbGAgbG9vayBsaWtlIHRoZSBiZXN0IGNhbmRpZGF0ZXMuCgpgZXBfZGVsaXZlcl9ldmVudGAgaXMgbWFya2VkIGFzIGBzdGF0aWNgLCB3aGljaCBjb3VsZCBtZWFuIGl0JiMzOTtzIGlubGluZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgaXTigJlzIG5vdCBpbmxpbmVkIHRvIHNlZSBpZiB3ZSBjYW4gdGFyZ2V0IGl0LiBXZeKAmWxsIHZlcmlmeSB0aGF0IGl04oCZcyBgc3RhdGljYCB3aXRoIGBncmVwcGVyYCwgYnV0IHdl4oCZbGwgYWxzbyBuZWVkIHRvIGNoZWNrIGBmcy9ldmVudHBvbGwuY2AgZGlyZWN0bHkgdG8gY29uZmlybSB3aGV0aGVyIGl0IGlzIGFjdHVhbGx5IGlubGluZWQgb3Igbm90IHRvIGRlY2lkZSBpZiB3ZSB3aWxsIGluY2x1ZGUgaXQgaW4gb3VyIGZ1enppbmcgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlcF9kZWxpdmVyX2V2ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXZlbnRwb2xsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXZlbnRwb2xsLmM9MjA2Nj1zdGF0aWMgaW50IGVwX21vZGlmeShzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTIxNTEtICovXG5mcy9ldmVudHBvbGwuYzoyMTUyOnN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxuZnMvZXZlbnRwb2xsLmMtMjE1My1cdFx0XHQgICAgcG9sbF90YWJsZSAqcHQsXG4tLVxuZnMvZXZlbnRwb2xsLmM9MjIxOT1zdGF0aWMgaW50IGVwX3NlbmRfZXZlbnRzKHN0cnVjdCBldmVudHBvbGwgKmVwLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTIyNDktXG5mcy9ldmVudHBvbGwuYzoyMjUwOlx0XHRkZWxpdmVyZWQgPSBlcF9kZWxpdmVyX2V2ZW50KGVwLCBlcGksIFx1MDAyNnB0LCBcdTAwMjZldmVudHMsIFx1MDAyNnNjYW5fYmF0Y2gpO1xuZnMvZXZlbnRwb2xsLmMtMjI1MS1cdFx0aWYgKGRlbGl2ZXJlZCBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAyOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1OTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIEV2ZW50IERlbGl2ZXJ5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZXBfZGVsaXZlcl9ldmVudGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3Mgc2NvcGVkIHByZXR0eSB0aWdodGx5LCBzcGVjaWZpY2FsbHkgY2FsbGVkIGZyb20gYGVwX3NlbmRfZXZlbnRzYC4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBgZXBfc2VuZF9ldmVudHNgIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIGhvdyBpdCBjYWxscyBgZXBfZGVsaXZlcl9ldmVudGAgaXMga2V5IHRvIGZpZ3VyaW5nIG91dCB0aGUgb3ZlcmFsbCBldmVudCBkZWxpdmVyeSBtZWNoYW5pc20uIEkgbmVlZCB0byB0cmFjZSB0aGlzIGNhbGwgYW5kIHNlZSBob3cgaXQmIzM5O3MgdHJpZ2dlcmVkLCB3aGF0IGRhdGEgaXQgcGFzc2VzLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBmbG93IGxvb2tzIGxpa2UuIFRoaXMgaW5pdGlhbCBvYnNlcnZhdGlvbiBwb2ludHMgdG93YXJkcyBhIHNwZWNpZmljIGludGVyYWN0aW9uIEkgbmVlZCB0byBhbmFseXplIGluIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlcF9zZW5kX2V2ZW50cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jPTMwNj1zdHJ1Y3QgZXZlbnRwb2xsIHtcbi0tXG5mcy9ldmVudHBvbGwuYy0zMzktXG5mcy9ldmVudHBvbGwuYzozNDA6XHQvKiB3YWtldXBfc291cmNlIHVzZWQgd2hlbiBlcF9zZW5kX2V2ZW50cyBvciBfX2VwX2V2ZW50cG9sbF9wb2xsIGlzIHJ1bm5pbmcgKi9cbmZzL2V2ZW50cG9sbC5jLTM0MS1cdHN0cnVjdCB3YWtldXBfc291cmNlICp3cztcbi0tXG5mcy9ldmVudHBvbGwuYz0yMTUyPXN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTIyMTgtXG5mcy9ldmVudHBvbGwuYzoyMjE5OnN0YXRpYyBpbnQgZXBfc2VuZF9ldmVudHMoc3RydWN0IGV2ZW50cG9sbCAqZXAsXG5mcy9ldmVudHBvbGwuYy0yMjIwLVx0XHRcdCAgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLCBpbnQgbWF4ZXZlbnRzKVxuLS1cbmZzL2V2ZW50cG9sbC5jPTIzMDU9c3RhdGljIGludCBlcF90cnlfc2VuZF9ldmVudHMoc3RydWN0IGV2ZW50cG9sbCAqZXAsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjMxNC1cdCAqL1xuZnMvZXZlbnRwb2xsLmM6MjMxNTpcdHJlcyA9IGVwX3NlbmRfZXZlbnRzKGVwLCBldmVudHMsIG1heGV2ZW50cyk7XG5mcy9ldmVudHBvbGwuYy0yMzE2LVx0aWYgKHJlcyBcdTAwM2UgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTExCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29uc2lkZXJpbmcgYGVwX3NlbmRfZXZlbnRzYCBhbmQgYGVwX3BvbGxgIGluIFJlbGF0aW9uIHRvIEVhY2ggT3RoZXIqKgoKUmlnaHQsIHNvIGBlcF9zZW5kX2V2ZW50c2AgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGdpdmVuLiBCdXQgdGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBpdHMgY291bnRlcnBhcnQgaW4gdGhpcyBjb250ZXh0OiBgZXBfcG9sbGAuIElzIGBlcF9wb2xsYCBhbHNvIHN0YXRpYz8gT3IgZG9lcyBpdHMgZGVmaW5pdGlvbiwgb3IgbGFjayB0aGVyZW9mLCBoYXZlIGltcGxpY2F0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBBcmUgdGhlcmUgYXNwZWN0cyBvZiB0aGVpciBpbXBsZW1lbnRhdGlvbiwgb3IgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGhpbiB0aGlzIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCB0aGF0IGFyZSBiZWluZyBzdWJ0bHkgaW5mbHVlbmNlZCBieSBvbmUgYmVpbmcgc3RhdGljIGFuZCB0aGUgb3RoZXIgbm90PyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhleSBpbnRlcmFjdCwgYW5kIHdoZXRoZXIgdGhlIHNjb3BlIG9mIGBlcF9wb2xsYCBpcyBwbGF5aW5nIGEgc2lnbmlmaWNhbnQgcm9sZSBoZXJlLCByZWxhdGl2ZSB0byBgZXBfc2VuZF9ldmVudHNgLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIG9wdGltaXphdGlvbiBiZWluZyBtYWRlLCBvciBhIGxpbWl0YXRpb24gdGhhdCBuZWVkcyB0byBiZSB1bmRlcnN0b29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VwX3BvbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYy01NC0gKiBldmVudHBvbGwgdmlhIHRoZSB3YXRjaGVkIGZpbGUmIzM5O3MgZl9vcC1cdTAwM2Vwb2xsKCkgd2FpdCBxdWV1ZShzKS4gV2hlblxuZnMvZXZlbnRwb2xsLmM6NTU6ICogdGhlIHdhdGNoZWQgZmlsZSBzaWduYWxzIHJlYWRpbmVzcywgZXBfcG9sbF9jYWxsYmFjaygpIGZpcmVzIGFuZFxuZnMvZXZlbnRwb2xsLmMtNTYtICogbWFya3MgdGhlIGVwaXRlbSByZWFkeS4gZXBvbGxfd2FpdCgyKSBkcmFpbnMgdGhlIHJlYWR5IGxpc3QgdW5kZXJcbi0tXG5mcy9ldmVudHBvbGwuYy03Ni0gKiBSYXRpb25hbGU6XG5mcy9ldmVudHBvbGwuYzo3NzogKiAgIC0gZXAtXHUwMDNlbG9jayBpcyBhIHNwaW5sb2NrIGJlY2F1c2UgZXBfcG9sbF9jYWxsYmFjaygpIGlzIGNhbGxlZCBmcm9tXG5mcy9ldmVudHBvbGwuYy03OC0gKiAgICAgd2FrZV91cCgpIHdoaWNoIG1heSBydW4gaW4gaGFyZC1JUlEgY29udGV4dC4gQWxsIGVwLVx1MDAzZWxvY2tcbi0tXG5mcy9ldmVudHBvbGwuYy0xMjYtICogICBldmVudCAgICAgICAgICAgIC0gZXAtXHUwMDNlbXR4IGZvciB3cml0ZXM7IGxvY2tsZXNzIHJlYWQgaW5cbmZzL2V2ZW50cG9sbC5jOjEyNzogKiAgICAgICAgICAgICAgICAgICAgICBlcF9wb2xsX2NhbGxiYWNrIHBhaXJzIHdpdGggc21wX21iKCkgaW5cbmZzL2V2ZW50cG9sbC5jLTEyOC0gKiAgICAgICAgICAgICAgICAgICAgICBlcF9tb2RpZnkoKVxuLS1cbmZzL2V2ZW50cG9sbC5jLTE4MC0gKiAgIGVwX3VucmVnaXN0ZXJfcG9sbHdhaXQoKSAgLSBkcmFpbiBwd3FsaXN0OyBzeW5jaHJvbml6ZXMgd2l0aCBhbnlcbmZzL2V2ZW50cG9sbC5jOjE4MTogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4tZmxpZ2h0IGVwX3BvbGxfY2FsbGJhY2sgdmlhIHRoZVxuZnMvZXZlbnRwb2xsLmMtMTgyLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXRjaGVkIHdhaXQtcXVldWUgaGVhZCYjMzk7cyBsb2NrLlxuLS1cbmZzL2V2ZW50cG9sbC5jLTIwMS0gKlxuZnMvZXZlbnRwb2xsLmM6MjAyOiAqICAgZXBfcG9sbF9jYWxsYmFjaygpIFBPTExGUkVFIGJyYW5jaDpcbmZzL2V2ZW50cG9sbC5jLTIwMy0gKiAgICAgc21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2cHdxLVx1MDAzZXdoZWFkLCBOVUxMKVxuLS1cbmZzL2V2ZW50cG9sbC5jPTU5Nj1zdGF0aWMgaW5saW5lIGJvb2wgZXBfaXNfc2Nhbm5pbmcoc3RydWN0IGV2ZW50cG9sbCAqZXApXG4tLVxuZnMvZXZlbnRwb2xsLmMtNjAwLVxuZnMvZXZlbnRwb2xsLmM6NjAxOi8qIENhbGxlZCBieSBlcF9zdGFydF9zY2FuKCk6IGRpdmVydCBlcF9wb2xsX2NhbGxiYWNrKCkgdG8gb3ZmbGlzdC4gKi9cbmZzL2V2ZW50cG9sbC5jLTYwMi1zdGF0aWMgaW5saW5lIHZvaWQgZXBfZW50ZXJfc2NhbihzdHJ1Y3QgZXZlbnRwb2xsICplcClcbi0tXG5mcy9ldmVudHBvbGwuYy02MDYtXG5mcy9ldmVudHBvbGwuYzo2MDc6LyogQ2FsbGVkIGJ5IGVwX2RvbmVfc2NhbigpOiByZWRpcmVjdCBlcF9wb2xsX2NhbGxiYWNrKCkgYmFjayB0byByZGxsaXN0LiAqL1xuZnMvZXZlbnRwb2xsLmMtNjA4LXN0YXRpYyBpbmxpbmUgdm9pZCBlcF9leGl0X3NjYW4oc3RydWN0IGV2ZW50cG9sbCAqZXApXG4tLVxuZnMvZXZlbnRwb2xsLmM9ODgwPXN0YXRpYyB2b2lkIGVwX3Jlc3VtZV9uYXBpX2lycXMoc3RydWN0IGV2ZW50cG9sbCAqZXApXG4tLVxuZnMvZXZlbnRwb2xsLmMtOTAwLSAqIGNhbGxiYWNrIHdha2V1cCBlbnRyeSBvbiB0aGF0IHF1ZXVlLCBhbmQgdGhlIHdha2VfdXAoKSBwZXJmb3JtZWQgYnkgdGhlXG5mcy9ldmVudHBvbGwuYzo5MDE6ICogXCYjMzQ7ZGZkXCYjMzQ7IG5ldCBjb2RlIHdpbGwgZW5kIHVwIGluIGVwX3BvbGxfY2FsbGJhY2soKS4gQXQgdGhpcyBwb2ludCBlcG9sbFxuZnMvZXZlbnRwb2xsLmMtOTAyLSAqIChlZmQxKSBub3RpY2VzIHRoYXQgaXQgbWF5IGhhdmUgc29tZSBldmVudCByZWFkeSwgc28gaXQgbmVlZHMgdG8gd2FrZSB1cFxuZnMvZXZlbnRwb2xsLmM6OTAzOiAqIHRoZSB3YWl0ZXJzIG9uIGl0cyBwb2xsIHdhaXQgbGlzdCAoZWZkMikuIFNvIGl0IGNhbGxzIGVwX3BvbGxfc2FmZXdha2UoKVxuZnMvZXZlbnRwb2xsLmMtOTA0LSAqIHRoYXQgZW5kcyB1cCBpbiBhbm90aGVyIHdha2VfdXAoKSwgYWZ0ZXIgaGF2aW5nIGNoZWNrZWQgYWJvdXQgdGhlXG4tLVxuZnMvZXZlbnRwb2xsLmMtOTEyLVxuZnMvZXZlbnRwb2xsLmM6OTEzOnN0YXRpYyB2b2lkIGVwX3BvbGxfc2FmZXdha2Uoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcbmZzL2V2ZW50cG9sbC5jLTkxNC1cdFx0XHQgICAgIHVuc2lnbmVkIHBvbGxmbGFncylcbi0tXG5mcy9ldmVudHBvbGwuYy05MjUtXHQgKiBwcm90ZWN0ZWQuIFRodXMsIHdlIGFyZSBpbnRyb2R1Y2luZyBhIHBlciBldmVudHBvbGwgbmVzdCBmaWVsZC5cbmZzL2V2ZW50cG9sbC5jOjkyNjpcdCAqIElmIHdlIGFyZSBub3QgYmVpbmcgY2FsbCBmcm9tIGVwX3BvbGxfY2FsbGJhY2soKSwgZXBpIGlzIE5VTEwgYW5kXG5mcy9ldmVudHBvbGwuYy05MjctXHQgKiB3ZSBhcmUgYXQgdGhlIGZpcnN0IGxldmVsIG9mIG5lc3RpbmcsIDAuIE90aGVyd2lzZSwgd2UgYXJlIGJlaW5nXG5mcy9ldmVudHBvbGwuYzo5Mjg6XHQgKiBjYWxsZWQgZnJvbSBlcF9wb2xsX2NhbGxiYWNrKCkgYW5kIGlmIGEgcHJldmlvdXMgd2FrZXVwIHNvdXJjZSBpc1xuZnMvZXZlbnRwb2xsLmMtOTI5LVx0ICogbm90IGFuIGVwb2xsIGZpbGUgaXRzZWxmLCB3ZSBhcmUgYXQgZGVwdGggMSBzaW5jZSB0aGUgd2FrZXVwIHNvdXJjZVxuLS1cbmZzL2V2ZW50cG9sbC5jLTk1MS1cbmZzL2V2ZW50cG9sbC5jOjk1MjpzdGF0aWMgdm9pZCBlcF9wb2xsX3NhZmV3YWtlKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksXG5mcy9ldmVudHBvbGwuYy05NTMtXHRcdFx0ICAgICBfX3BvbGxfdCBwb2xsZmxhZ3MpXG4tLVxuZnMvZXZlbnRwb2xsLmM9OTYwPXN0YXRpYyB2b2lkIGVwX3JlbW92ZV93YWl0X3F1ZXVlKHN0cnVjdCBlcHBvbGxfZW50cnkgKnB3cSlcbi0tXG5mcy9ldmVudHBvbGwuYy05NjktXHQgKiBBIE5VTEwgbG9hZCBpcyBwYWlyZWQgd2l0aCB0aGUgc21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2d2hlYWQsIE5VTEwpXG5mcy9ldmVudHBvbGwuYzo5NzA6XHQgKiBpbiBlcF9wb2xsX2NhbGxiYWNrKCkmIzM5O3MgUE9MTEZSRUUgYnJhbmNoOiB0aGUgdGVhcmRvd24gaXNcbmZzL2V2ZW50cG9sbC5jLTk3MS1cdCAqIGNvbXBsZXRlIGFuZCB3ZSBtdXN0IG5vdCB0b3VjaCB3aGVhZCBhZ2Fpbi4gT24gYSBub24tTlVMTCBsb2FkXG4tLVxuZnMvZXZlbnRwb2xsLmM9MTAxMz1zdGF0aWMgaW5saW5lIGJvb2wgZXBfaGFzX3dha2V1cF9zb3VyY2Uoc3RydWN0IGVwaXRlbSAqZXBpKVxuLS1cbmZzL2V2ZW50cG9sbC5jLTEwMTctXG5mcy9ldmVudHBvbGwuYzoxMDE4Oi8qIGNhbGwgd2hlbiBlcC1cdTAwM2VtdHggY2Fubm90IGJlIGhlbGQgKGVwX3BvbGxfY2FsbGJhY2spICovXG5mcy9ldmVudHBvbGwuYy0xMDE5LXN0YXRpYyBpbmxpbmUgdm9pZCBlcF9wbV9zdGF5X2F3YWtlX3JjdShzdHJ1Y3QgZXBpdGVtICplcGkpXG4tLVxuZnMvZXZlbnRwb2xsLmM9MTIyNT1zdGF0aWMgdm9pZCBlcF9yZW1vdmUoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSlcbi0tXG5mcy9ldmVudHBvbGwuYy0xMjUwLSAqIGVwX3VucmVnaXN0ZXJfcG9sbHdhaXQoKSB0YWtlcyBlYWNoIHdhdGNoZWQgd2FpdC1xdWV1ZSBoZWFkJiMzOTtzIGxvY2ssXG5mcy9ldmVudHBvbGwuYzoxMjUxOiAqIHdoaWNoIHN5bmNocm9uaXplcyB3aXRoIGFueSBpbi1mbGlnaHQgZXBfcG9sbF9jYWxsYmFjaygpOyBhZnRlclxuZnMvZXZlbnRwb2xsLmMtMTI1Mi0gKiB0aGlzIHJldHVybnMgbm8gY2FsbGJhY2sgY2FuIHN0aWxsIGJlIGFib3V0IHRvIGRlcmVmZXJlbmNlIGFuIGVwaVxuLS1cbmZzL2V2ZW50cG9sbC5jPTEzMDk9c3RhdGljIHZvaWQgZXBfY2xlYXJfYW5kX3B1dChzdHJ1Y3QgZXZlbnRwb2xsICplcClcbi0tXG5mcy9ldmVudHBvbGwuYy0xMzEyLVx0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2ZXAtXHUwMDNlcG9sbF93YWl0KSlcbmZzL2V2ZW50cG9sbC5jOjEzMTM6XHRcdGVwX3BvbGxfc2FmZXdha2UoZXAsIE5VTEwsIDApO1xuZnMvZXZlbnRwb2xsLmMtMTMxNC1cbi0tXG5mcy9ldmVudHBvbGwuYz0xNTM3PXN0YXRpYyBzdHJ1Y3QgZXBpdGVtICplcF9maW5kKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfa2V5ICp0Zilcbi0tXG5mcy9ldmVudHBvbGwuYy0xNTYzLSAqL1xuZnMvZXZlbnRwb2xsLmM6MTU2NDpzdGF0aWMgaW50IGVwX3BvbGxfY2FsbGJhY2sod2FpdF9xdWV1ZV9lbnRyeV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqa2V5KVxuZnMvZXZlbnRwb2xsLmMtMTU2NS17XG4tLVxuZnMvZXZlbnRwb2xsLmMtMTY1MS1cdGlmIChwd2FrZSlcbmZzL2V2ZW50cG9sbC5jOjE2NTI6XHRcdGVwX3BvbGxfc2FmZXdha2UoZXAsIGVwaSwgcG9sbGZsYWdzIFx1MDAyNiBFUE9MTF9VUklOR19XQUtFKTtcbmZzL2V2ZW50cG9sbC5jLTE2NTMtXG4tLVxuZnMvZXZlbnRwb2xsLmM9MTY4Nz1zdGF0aWMgdm9pZCBlcF9wdGFibGVfcXVldWVfcHJvYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgd2FpdF9xdWV1ZV9oZWFkX3QgKndoZWFkLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTE3MDItXG5mcy9ldmVudHBvbGwuYzoxNzAzOlx0aW5pdF93YWl0cXVldWVfZnVuY19lbnRyeShcdTAwMjZwd3EtXHUwMDNld2FpdCwgZXBfcG9sbF9jYWxsYmFjayk7XG5mcy9ldmVudHBvbGwuYy0xNzA0LVx0cHdxLVx1MDAzZXdoZWFkID0gd2hlYWQ7XG4tLVxuZnMvZXZlbnRwb2xsLmM9MTk3ND1zdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCxcbi0tXG5mcy9ldmVudHBvbGwuYy0yMDU2LVx0aWYgKHB3YWtlKVxuZnMvZXZlbnRwb2xsLmM6MjA1NzpcdFx0ZXBfcG9sbF9zYWZld2FrZShlcCwgTlVMTCwgMCk7XG5mcy9ldmVudHBvbGwuYy0yMDU4LVxuLS1cbmZzL2V2ZW50cG9sbC5jPTIwNjY9c3RhdGljIGludCBlcF9tb2RpZnkoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcbi0tXG5mcy9ldmVudHBvbGwuYy0yMDkzLVx0ICogMSkgRmx1c2ggZXBpIGNoYW5nZXMgYWJvdmUgdG8gb3RoZXIgQ1BVcy4gIFRoaXMgZW5zdXJlc1xuZnMvZXZlbnRwb2xsLmM6MjA5NDpcdCAqICAgIHdlIGRvIG5vdCBtaXNzIGV2ZW50cyBmcm9tIGVwX3BvbGxfY2FsbGJhY2sgaWYgYW5cbmZzL2V2ZW50cG9sbC5jLTIwOTUtXHQgKiAgICBldmVudCBvY2N1cnMgaW1tZWRpYXRlbHkgYWZ0ZXIgd2UgY2FsbCBmX29wLVx1MDAzZXBvbGwoKS5cbmZzL2V2ZW50cG9sbC5jLTIwOTYtXHQgKiAgICBXZSBuZWVkIHRoaXMgYmVjYXVzZSB3ZSBkaWQgbm90IHRha2UgZXAtXHUwMDNlbG9jayB3aGlsZVxuZnMvZXZlbnRwb2xsLmM6MjA5NzpcdCAqICAgIGNoYW5naW5nIGVwaSBhYm92ZSAoYnV0IGVwX3BvbGxfY2FsbGJhY2sgZG9lcyB0YWtlXG5mcy9ldmVudHBvbGwuYy0yMDk4LVx0ICogICAgZXAtXHUwMDNlbG9jaykuXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjEwNC1cdCAqXG5mcy9ldmVudHBvbGwuYzoyMTA1Olx0ICogVGhpcyBiYXJyaWVyIHdpbGwgbm93IGd1YXJhbnRlZSBlcF9wb2xsX2NhbGxiYWNrIG9yIGZfb3AtXHUwMDNlcG9sbFxuZnMvZXZlbnRwb2xsLmMtMjEwNi1cdCAqIChvciBib3RoKSB3aWxsIG5vdGljZSB0aGUgcmVhZGluZXNzIG9mIGFuIGl0ZW0uXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjEzMy1cdGlmIChwd2FrZSlcbmZzL2V2ZW50cG9sbC5jOjIxMzQ6XHRcdGVwX3BvbGxfc2FmZXdha2UoZXAsIE5VTEwsIDApO1xuZnMvZXZlbnRwb2xsLmMtMjEzNS1cbi0tXG5mcy9ldmVudHBvbGwuYz0yMjY1PXN0YXRpYyBzdHJ1Y3QgdGltZXNwZWM2NCAqZXBfdGltZW91dF90b190aW1lc3BlYyhzdHJ1Y3QgdGltZXNwZWM2NCAqdG8sIGxvbmcgbXMpXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjI4OC0gKiBrbm93IHRoYXQgZGVmYXVsdF93YWtlX2Z1bmN0aW9uL3R0d3Ugd2lsbCBvbmx5IGZhaWwgaWYgdGhlIHRocmVhZCBpcyBhbHJlYWR5XG5mcy9ldmVudHBvbGwuYzoyMjg5OiAqIHdva2VuLCBhbmQgaW4gdGhhdCBjYXNlIHRoZSBlcF9wb2xsIGxvb3Agd2lsbCByZW1vdmUgdGhlIGVudHJ5IGFueXdheXMsIG5vdFxuZnMvZXZlbnRwb2xsLmMtMjI5MC0gKiB0cnkgdG8gcmV1c2UgaXQuXG4tLVxuZnMvZXZlbnRwb2xsLmM9MjI5Mj1zdGF0aWMgaW50IGVwX2F1dG9yZW1vdmVfd2FrZV9mdW5jdGlvbihzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FfZW50cnksXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjI5Ny1cdC8qXG5mcy9ldmVudHBvbGwuYzoyMjk4Olx0ICogUGFpcnMgd2l0aCBsaXN0X2VtcHR5X2NhcmVmdWwgaW4gZXBfcG9sbCwgYW5kIGVuc3VyZXMgZnV0dXJlIGxvb3BcbmZzL2V2ZW50cG9sbC5jLTIyOTktXHQgKiBpdGVyYXRpb25zIHNlZSB0aGUgY2F1c2Ugb2YgdGhpcyB3YWtldXAuXG4tLVxuZnMvZXZlbnRwb2xsLmM9MjMyMT1zdGF0aWMgaW50IGVwX3NjaGVkdWxlX3RpbWVvdXQoa3RpbWVfdCAqdG8pXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjMyOS0vKipcbmZzL2V2ZW50cG9sbC5jOjIzMzA6ICogZXBfcG9sbCAtIFJldHJpZXZlcyByZWFkeSBldmVudHMsIGFuZCBkZWxpdmVycyB0aGVtIHRvIHRoZSBjYWxsZXItc3VwcGxpZWRcbmZzL2V2ZW50cG9sbC5jLTIzMzEtICogICAgICAgICAgIGV2ZW50IGJ1ZmZlci5cbi0tXG5mcy9ldmVudHBvbGwuYy0yMzQ1LSAqL1xuZnMvZXZlbnRwb2xsLmM6MjM0NjpzdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcbmZzL2V2ZW50cG9sbC5jLTIzNDctXHRcdCAgIGludCBtYXhldmVudHMsIHN0cnVjdCB0aW1lc3BlYzY0ICp0aW1lb3V0KVxuLS1cbmZzL2V2ZW50cG9sbC5jLTI0MjItXHRcdCAqIEJhcnJpZXJsZXNzIHZhcmlhbnQsIHdhaXRxdWV1ZV9hY3RpdmUoKSBpcyBjYWxsZWQgdW5kZXJcbmZzL2V2ZW50cG9sbC5jOjI0MjM6XHRcdCAqIHRoZSBzYW1lIGxvY2sgb24gd2FrZXVwIGVwX3BvbGxfY2FsbGJhY2soKSBzaWRlLCBzbyBpdFxuZnMvZXZlbnRwb2xsLmMtMjQyNC1cdFx0ICogaXMgc2FmZSB0byBhdm9pZCBhbiBleHBsaWNpdCBiYXJyaWVyLlxuLS1cbmZzL2V2ZW50cG9sbC5jPTI5MDM9c3RhdGljIGludCBkb19lcG9sbF93YWl0KGludCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjkyNC1cdC8qIFRpbWUgdG8gZmlzaCBmb3IgZXZlbnRzIC4uLiAqL1xuZnMvZXZlbnRwb2xsLmM6MjkyNTpcdHJldHVybiBlcF9wb2xsKGVwLCBldmVudHMsIG1heGV2ZW50cywgdG8pO1xuZnMvZXZlbnRwb2xsLmMtMjkyNi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE5NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV2ZW50cG9sbCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIE15IGZvY3VzIHNob3VsZCBiZSBvbiBgZXBfcG9sbF9jYWxsYmFja2AsIGBlcF9pbnNlcnRgLCBgZXBfbW9kaWZ5YCwgYGVwX3BvbGxgLCBgX19lcF9ldmVudHBvbGxfcG9sbGAsIGFuZCBgZXBfZG9uZV9zY2FuYC4gTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gc29tZXRoaW5nIOKAkyB5ZXMsIGBfX2VwX2V2ZW50cG9sbF9wb2xsYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb24uIEFuZCBgZXBfZG9uZV9zY2FuYD8gWWVwLCBhbHNvIHN0YXRpYy4gSW50ZXJlc3RpbmcuIExldCYjMzk7cyBzZWUsIGBlcF9pbnNlcnRgIGlzIHN0YXRpYyB0b28uIEh1aCwgaXQgbG9va3MgbGlrZSBhbGwgdGhlc2UgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyB3aXRoaW4gYGZzL2V2ZW50cG9sbC5jYCBhcmUgZGVmaW5lZCBhcyBzdGF0aWMuIFRoYXQgaGVscHMgd2l0aCBlbmNhcHN1bGF0aW9uLCBJIHN1cHBvc2UuIFRoZSB0cnVlIGVudHJ5IHBvaW50cyB0byB0aGlzIHdob2xlIGV2ZW50cG9sbCBtZWNoYW5pc20gYXJlIGBkb19lcG9sbF93YWl0YCwgYGRvX2Vwb2xsX2N0bGAsIGFuZCBgZG9fZXBvbGxfY3JlYXRlYC4gQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgZG9fZXBvbGxfY3RsYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2Vwb2xsX2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jPTM4NT1zdGF0aWMgbG9uZyBtYXhfdXNlcl93YXRjaGVzIF9fcmVhZF9tb3N0bHk7XG4tLVxuZnMvZXZlbnRwb2xsLmMtNDAyLSAqIGFuZCBjYXJyaWVzIGl0cyBzY3JhdGNoIHN0YXRlIG9uIGEgc3RhY2stYWxsb2NhdGVkIHN0cnVjdFxuZnMvZXZlbnRwb2xsLmM6NDAzOiAqIGVwX2N0bF9jdHggc2NvcGVkIHRvIG9uZSBkb19lcG9sbF9jdGwoKSBjYWxsLiBOb24tbmVzdGVkIGluc2VydHNcbmZzL2V2ZW50cG9sbC5jLTQwNC0gKiBza2lwIHRoaXMgbWFjaGluZXJ5IGVudGlyZWx5IGFuZCB0YWtlIG9ubHkgZXAtXHUwMDNlbXR4LlxuLS1cbmZzL2V2ZW50cG9sbC5jPTQyNz1zdGF0aWMgdTY0IGxvb3BfY2hlY2tfZ2VuID0gMDtcbi0tXG5mcy9ldmVudHBvbGwuYy00MzEtLypcbmZzL2V2ZW50cG9sbC5jOjQzMjogKiBQZXItZG9fZXBvbGxfY3RsKCkgc2NyYXRjaCBmb3IgdGhlIGxvb3AgLyBwYXRoIGNoZWNrcy4gQWxsb2NhdGVkIG9uXG5mcy9ldmVudHBvbGwuYy00MzMtICogdGhlIGNhbGxlciYjMzk7cyBzdGFjazsgcG9wdWxhdGVkIGJ5IGVwX2N0bF9sb2NrKCkgYW5kIHRoZSBkb3dud2FyZFxuLS1cbmZzL2V2ZW50cG9sbC5jPTE3Njk9c3RhdGljIGludCByZXZlcnNlX3BhdGhfY2hlY2tfcHJvYyhzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LFxuLS1cbmZzL2V2ZW50cG9sbC5jLTE3OTUtICogICAgICAgICAgICAgICAgICAgICAgb3ZlciBpdHMgbGltaXQgaW4gcGF0aF9saW1pdHNbXS5cbmZzL2V2ZW50cG9sbC5jOjE3OTY6ICogQGN0eDogUGVyLWRvX2Vwb2xsX2N0bCgpIHNjcmF0Y2ggZm9yIHRoZSBsb29wIC8gcGF0aCBjaGVja3MuXG5mcy9ldmVudHBvbGwuYy0xNzk3LSAqXG4tLVxuZnMvZXZlbnRwb2xsLmM9MjM0Nj1zdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcbi0tXG5mcy9ldmVudHBvbGwuYy0yNDc4LSAqXG5mcy9ldmVudHBvbGwuYzoyNDc5OiAqIEBjdHg6IFBlci1kb19lcG9sbF9jdGwoKSBzY3JhdGNoIGZvciB0aGUgbG9vcCAvIHBhdGggY2hlY2tzLlxuZnMvZXZlbnRwb2xsLmMtMjQ4MC0gKiBAZXA6IHRoZSBcdTAwMjZzdHJ1Y3QgZXZlbnRwb2xsIHRvIGJlIGN1cnJlbnRseSBjaGVja2VkLlxuLS1cbmZzL2V2ZW50cG9sbC5jPTI2NDc9c3RhdGljIGlubGluZSBpbnQgZXBvbGxfbXV0ZXhfbG9jayhzdHJ1Y3QgbXV0ZXggKm11dGV4LCBib29sIG5vbmJsb2NrKVxuLS1cbmZzL2V2ZW50cG9sbC5jLTI2NTYtLypcbmZzL2V2ZW50cG9sbC5jOjI2NTc6ICogQWNxdWlyZSB0aGUgbG9ja3MgcmVxdWlyZWQgZm9yIGRvX2Vwb2xsX2N0bCgpIG9uIEBlcCBmb3IgQG9wLlxuZnMvZXZlbnRwb2xsLmMtMjY1OC0gKlxuLS1cbmZzL2V2ZW50cG9sbC5jPTI3MjQ9c3RhdGljIHZvaWQgZXBfY3RsX3VubG9jayhzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCxcbi0tXG5mcy9ldmVudHBvbGwuYy0yNzM0LVxuZnMvZXZlbnRwb2xsLmM6MjczNTppbnQgZG9fZXBvbGxfY3RsX2ZpbGUoc3RydWN0IGZpbGUgKmYsIGludCBvcCwgc3RydWN0IGVwb2xsX2tleSAqdGYsXG5mcy9ldmVudHBvbGwuYy0yNzM2LVx0XHQgICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmVwZHMsIGJvb2wgbm9uYmxvY2spXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjgyMS1cbmZzL2V2ZW50cG9sbC5jOjI4MjI6aW50IGRvX2Vwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXBkcyxcbmZzL2V2ZW50cG9sbC5jLTI4MjMtXHRcdCBib29sIG5vbmJsb2NrKVxuLS1cbmZzL2V2ZW50cG9sbC5jLTI4MzctXHRlZmQuZmQgPSBmZDtcbmZzL2V2ZW50cG9sbC5jOjI4Mzg6XHRyZXR1cm4gZG9fZXBvbGxfY3RsX2ZpbGUoZmRfZmlsZShmKSwgb3AsIFx1MDAyNmVmZCwgZXBkcywgbm9uYmxvY2spO1xuZnMvZXZlbnRwb2xsLmMtMjgzOS19XG4tLVxuZnMvZXZlbnRwb2xsLmM9Mjg0Nj1TWVNDQUxMX0RFRklORTQoZXBvbGxfY3RsLCBpbnQsIGVwZmQsIGludCwgb3AsIGludCwgZmQsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjg1NC1cbmZzL2V2ZW50cG9sbC5jOjI4NTU6XHRyZXR1cm4gZG9fZXBvbGxfY3RsKGVwZmQsIG9wLCBmZCwgXHUwMDI2ZXBkcywgZmFsc2UpO1xuZnMvZXZlbnRwb2xsLmMtMjg1Ni19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTM5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEVwb2xsIEVudHJ5IFBvaW50IEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGVwb2xsIGVudHJ5IHBvaW50cy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyB0aGUga2VybmVsIGludGVyYWN0cyB3aXRoIHRoZSB1c2Vyc3BhY2UgcmVxdWVzdHMuIEZyb20gd2hhdCBJIHNlZSwgdGhlcmUgYXJlIGEgZmV3IHByaW1hcnkgZnVuY3Rpb25zOiBgZG9fZXBvbGxfY3RsYCwgYGRvX2Vwb2xsX3dhaXRgLCBhbmQgYGRvX2Vwb2xsX2NyZWF0ZWAuIFRob3NlIGFyZSB0aGUgb2J2aW91cyBzdXNwZWN0cyBmb3IgaGFuZGxpbmcgdXNlci1zcGFjZSByZXF1ZXN0cyBkaXJlY3RseS4gVGhlbiB0aGVyZSYjMzk7cyBgZXBfcG9sbF9jYWxsYmFja2AuIE5vdywgdGhhdCBvbmUgaXMgaW50ZXJlc3Rpbmc7IGl0JiMzOTtzIGEgY2FsbGJhY2sgZnVuY3Rpb24sIHR5cGljYWxseSB0cmlnZ2VyZWQgYnkgd2FpdHF1ZXVlcywgYnV0IGl0JiMzOTtzICpzdGF0aWMqLgoKV2FpdCwgbGV0IG1lIHBhcnNlIHRoYXQuIFRoZSBmYWN0IHRoYXQgYGVwX3BvbGxfY2FsbGJhY2tgIGlzIHN0YXRpYyBtZWFucyBpdCYjMzk7cyBub3QgZGlyZWN0bHkgZXhwb3NlZCBhcyBhIHN5c3RlbSBjYWxsIGVudHJ5IHBvaW50LiBJdCYjMzk7cyBjYWxsZWQgaW5kaXJlY3RseSwgbGlrZWx5IGZyb20gd2l0aGluIHRoZSBrZXJuZWwuIEl0JiMzOTtzIHRoZSB3b3JrZXIgaW4gdGhlIHNoYWRvd3MsIG5vdCB0aGUgZnJvbnQgZG9vci4gSSBuZWVkIHRvIGtlZXAgdGhhdCBkaXN0aW5jdGlvbiBjbGVhciBpbiBteSBoZWFkLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgZXBfcG9sbF9jYWxsYmFja2AgaXMgaW5kZWVkIHN0YXRpYy4gQWgsIHllcywgaXQgaXMuIFRoZSBzaWduYXR1cmUgY29uZmlybXM6IGBzdGF0aWMgaW50IGVwX3BvbGxfY2FsbGJhY2sod2FpdF9xdWV1ZV9lbnRyeV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqa2V5KWAuCgpNeSBuZXh0IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucywgYW5kIGlmIHNvLCBob3cgdGhleSBmaXQgaW50byB0aGUgcGljdHVyZS4gYGRvX2Vwb2xsX2N0bGAgbG9va3Mgbm9uLXN0YXRpYyB0byBtZS4gT2theSwgbGV0JiMzOTtzIGFzc3VtZSBgZG9fZXBvbGxfd2FpdGAgaXMgc3RhdGljLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2Vwb2xsX3dhaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYz0yODc5PWludCBlcG9sbF9zZW5kZXZlbnRzKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjkwMi0gKi9cbmZzL2V2ZW50cG9sbC5jOjI5MDM6c3RhdGljIGludCBkb19lcG9sbF93YWl0KGludCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXG5mcy9ldmVudHBvbGwuYy0yOTA0LVx0XHRcdCBpbnQgbWF4ZXZlbnRzLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdG8pXG4tLVxuZnMvZXZlbnRwb2xsLmM9MjkyOD1TWVNDQUxMX0RFRklORTQoZXBvbGxfd2FpdCwgaW50LCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICosIGV2ZW50cyxcbi0tXG5mcy9ldmVudHBvbGwuYy0yOTMyLVxuZnMvZXZlbnRwb2xsLmM6MjkzMzpcdHJldHVybiBkb19lcG9sbF93YWl0KGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLFxuZnMvZXZlbnRwb2xsLmMtMjkzNC1cdFx0XHQgICAgIGVwX3RpbWVvdXRfdG9fdGltZXNwZWMoXHUwMDI2dG8sIHRpbWVvdXQpKTtcbi0tXG5mcy9ldmVudHBvbGwuYz0yOTQxPXN0YXRpYyBpbnQgZG9fZXBvbGxfcHdhaXQoaW50IGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcbi0tXG5mcy9ldmVudHBvbGwuYy0yOTU0LVxuZnMvZXZlbnRwb2xsLmM6Mjk1NTpcdGVycm9yID0gZG9fZXBvbGxfd2FpdChlcGZkLCBldmVudHMsIG1heGV2ZW50cywgdG8pO1xuZnMvZXZlbnRwb2xsLmMtMjk1Ni1cbi0tXG5mcy9ldmVudHBvbGwuYz0zMDM2PXN0YXRpYyBpbnQgZG9fY29tcGF0X2Vwb2xsX3B3YWl0KGludCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMzA1MC1cbmZzL2V2ZW50cG9sbC5jOjMwNTE6XHRlcnIgPSBkb19lcG9sbF93YWl0KGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLCB0aW1lb3V0KTtcbmZzL2V2ZW50cG9sbC5jLTMwNTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTIzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFcG9sbCBGdW5jdGlvbiBDYWxscyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGVwb2xsIGNvZGUsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gY2FsbCBoaWVyYXJjaHkuIGBkb19lcG9sbF93YWl0YCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBleHBvc2VkIGFzIGEgc3lzdGVtIGNhbGwuIFRoYXQgbmFycm93cyBteSBmb2N1cyB0byB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHM6IGBzeXNfZXBvbGxfd2FpdGAsIGBzeXNfZXBvbGxfY3RsYCwgYHN5c19lcG9sbF9wd2FpdGAsIGFuZCBgc3lzX2Vwb2xsX3B3YWl0MmAuIFRob3NlIGFyZSB0aGUgc3lzY2FsbHMuIFBsdXMgYGRvX2Vwb2xsX2N0bGAsIGBkb19lcG9sbF9jdGxfZmlsZWAgd2hpY2ggYXJlIGludGVybmFsLgoKTm93LCBnbGFuY2luZyBhdCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCBJIHNlZSBhIG1peCBvZiBpbmxpbmUgYW5kIHN0YXRpYyBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGhhcyB0b3VjaGVkIGBlcF9ldmVudHNfYXZhaWxhYmxlYCwgYGVwX3N0YXRlX3Rlc3RgLCBgZXBfcmVhZHlfZmFzdF9lbmFibGVkYCwgYGVwX3NldF9yZWFkeV9hY2NvdW50ZWRgLCBgZXBfcHJlcGFyZV9yZXBvbGxgLCB3aGljaCBhcmUgYWxsIGlubGluZSwgcGx1cyBgZXBfY2FsbGJhY2tfY2FuX3NraXBgLCBgZXBfZG9uZV9zY2FuYCwgYF9fZXBfZXZlbnRwb2xsX3BvbGxgLCBgZXBfcG9sbF9jYWxsYmFja2AsIGBlcF9pbnNlcnRgLCBgZXBfbW9kaWZ5YCwgYGVwX2RlbGl2ZXJfZXZlbnRgLCBhbmQgYGVwX3BvbGxgIGFyZSBhbGwgc3RhdGljLiBHaXZlbiB0aGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIG1vc3RseSBzdGF0aWMgb3IgaW5saW5lLCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMgbGlrZWx5IGxpZXMgaW4gaG93IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlIHN5c2NhbGxzIGFuZCBgZG9fZXBvbGxfY3RsYCBvciBgZG9fZXBvbGxfY3RsX2ZpbGVgLCBpbnRlcmFjdCB3aXRoIHRoZW0uCgpTbywgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYGRvX2Vwb2xsX2N0bGAgYW5kIGBkb19lcG9sbF9jdGxfZmlsZWAgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBjb250cm9sIG9wZXJhdGlvbnMgYW5kIHRoZXkgY2FsbCBgZXBfaW5zZXJ0YCBhbmQgYGVwX21vZGlmeWAuIGBkb19lcG9sbF93YWl0YCAodGhlIHN0YXRpYyBvbmUpIGlzIGNhbGxlZCBieSB0aGUgYHN5c19lcG9sbF8qYCBzeXNjYWxscywgbGlrZSBgc3lzX2Vwb2xsX3dhaXRgLCBgc3lzX2Vwb2xsX3B3YWl0YCwgYW5kIGBzeXNfZXBvbGxfcHdhaXQyYC4gVGhhdCBtYWtlcyBzZW5zZS4KCmBfX2VwX2V2ZW50cG9sbF9wb2xsYCBpcyBhbHNvIGtleSBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBieSBgZXBfZXZlbnRwb2xsX3BvbGxgLCB3aGljaCBpcyB0aGUgYC5wb2xsYCBjYWxsYmFjayBmb3IgZXBvbGwgZmlsZXMuIEZpbmFsbHksIGBlcF9wb2xsX2NhbGxiYWNrYCBpcyBjYWxsZWQgYnkgd2FpdHF1ZXVlcy4gU28sIG15IHByaW1hcnkgYXJlYXMgb2YgY29uY2VybiBmb3IgYW55IGRlZXBlciBpbXBhY3QgYW5hbHlzaXMgYXJlOgoKKiAgIGBkb19lcG9sbF9jdGxgIGFuZCBgZG9fZXBvbGxfY3RsX2ZpbGVgCiogICBgc3lzX2Vwb2xsX3dhaXRgLCBgc3lzX2Vwb2xsX3B3YWl0YCwgYHN5c19lcG9sbF9wd2FpdDJgIChhbmQgYnkgaW1wbGljYXRpb24gYGRvX2Vwb2xsX3dhaXRgKQoqICAgYGVwX2V2ZW50cG9sbF9wb2xsYCAod2FpdCwgaXMgKnRoYXQqIHN0YXRpYz8pLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXBfZXZlbnRwb2xsX3BvbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYz0zMDY9c3RydWN0IGV2ZW50cG9sbCB7XG4tLVxuZnMvZXZlbnRwb2xsLmMtMzM5LVxuZnMvZXZlbnRwb2xsLmM6MzQwOlx0Lyogd2FrZXVwX3NvdXJjZSB1c2VkIHdoZW4gZXBfc2VuZF9ldmVudHMgb3IgX19lcF9ldmVudHBvbGxfcG9sbCBpcyBydW5uaW5nICovXG5mcy9ldmVudHBvbGwuYy0zNDEtXHRzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd3M7XG4tLVxuZnMvZXZlbnRwb2xsLmM9MTM1NT1zdGF0aWMgX19wb2xsX3QgZXBfaXRlbV9wb2xsKGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSwgcG9sbF90YWJsZSAqcHQsIGludCBkZXB0aCk7XG5mcy9ldmVudHBvbGwuYy0xMzU2LVxuZnMvZXZlbnRwb2xsLmM6MTM1NzpzdGF0aWMgX19wb2xsX3QgX19lcF9ldmVudHBvbGxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCwgaW50IGRlcHRoKVxuZnMvZXZlbnRwb2xsLmMtMTM1OC17XG4tLVxuZnMvZXZlbnRwb2xsLmMtMTM5Ny0vKlxuZnMvZXZlbnRwb2xsLmM6MTM5ODogKiBEaWZmZXJzIGZyb20gZXBfZXZlbnRwb2xsX3BvbGwoKSBpbiB0aGF0IGludGVybmFsIGNhbGxlcnMgYWxyZWFkeSBoYXZlXG5mcy9ldmVudHBvbGwuYy0xMzk5LSAqIHRoZSBlcC1cdTAwM2VtdHggc28gd2UgbmVlZCB0byBzdGFydCBmcm9tIGRlcHRoPTEsIHN1Y2ggdGhhdCBtdXRleF9sb2NrX25lc3RlZCgpXG4tLVxuZnMvZXZlbnRwb2xsLmM9MTQwMj1zdGF0aWMgX19wb2xsX3QgZXBfaXRlbV9wb2xsKGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSwgcG9sbF90YWJsZSAqcHQsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMTQxOC1cdGVsc2VcbmZzL2V2ZW50cG9sbC5jOjE0MTk6XHRcdHJlcyA9IF9fZXBfZXZlbnRwb2xsX3BvbGwoZmlsZSwgcHQsIGRlcHRoKTtcbmZzL2V2ZW50cG9sbC5jLTE0MjAtXHRmcHV0KGZpbGUpO1xuLS1cbmZzL2V2ZW50cG9sbC5jLTE0MjMtXG5mcy9ldmVudHBvbGwuYzoxNDI0OnN0YXRpYyBfX3BvbGxfdCBlcF9ldmVudHBvbGxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcbmZzL2V2ZW50cG9sbC5jLTE0MjUte1xuZnMvZXZlbnRwb2xsLmM6MTQyNjpcdHJldHVybiBfX2VwX2V2ZW50cG9sbF9wb2xsKGZpbGUsIHdhaXQsIDApO1xuZnMvZXZlbnRwb2xsLmMtMTQyNy19XG4tLVxuZnMvZXZlbnRwb2xsLmM9MTQ1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBldmVudHBvbGxfZm9wcyA9IHtcbi0tXG5mcy9ldmVudHBvbGwuYy0xNDU4LVx0LnJlbGVhc2VcdD0gZXBfZXZlbnRwb2xsX3JlbGVhc2UsXG5mcy9ldmVudHBvbGwuYzoxNDU5Olx0LnBvbGxcdFx0PSBlcF9ldmVudHBvbGxfcG9sbCxcbmZzL2V2ZW50cG9sbC5jLTE0NjAtXHQubGxzZWVrXHRcdD0gbm9vcF9sbHNlZWssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjgxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEVwb2xsIEZ1bmN0aW9uIEh1bnQqKgoKT2theSwgc28gYGVwX2V2ZW50cG9sbF9wb2xsYCBpcyBkZWZpbml0ZWx5IHN0YXRpYywgdGhhdCYjMzk7cyBub3QgZ29pbmcgdG8gZ2V0IG1lIGFueXdoZXJlLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZXBvbGwuIEZyb20gbXkgbm90ZXMsIGl0IGxvb2tzIGxpa2UgYGRvX2Vwb2xsX2N0bGAsIGBkb19lcG9sbF9jdGxfZmlsZWAsIGFuZCBgc3lzX2Vwb2xsX3dhaXRgIGFyZSB0aGUgb25lcyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBXYWl0LCBoYW5nIG9uLi4uIGBzeXNfZXBvbGxfd2FpdGAgaXMgYWN0dWFsbHkgZGVmaW5lZCB1c2luZyBgU1lTQ0FMTF9ERUZJTkU0YCwgc28gdGhlIHN5c3RlbSBjYWxsIG5hbWUgaXMgYHN5c19lcG9sbF93YWl0YCBvciBgX194NjRfc3lzX2Vwb2xsX3dhaXRgLiBJIGNhbiBwcm9iYWJseSBqdXN0IHN0aWNrIHdpdGggYGVwb2xsX3dhaXRgLCB0aG91Z2guCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBjYW4gSSBhY3R1YWxseSAqdXNlKiBhbnkgb2YgdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnM/IExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgc2lnbmF0dXJlIGFuZCBiZWhhdmlvciBvZiBgZG9fZXBvbGxfY3RsYCB0byBtYWtlIHN1cmUgaXQgaXMgaW5kZWVkIHRoZSBiZXN0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fZXBvbGxfY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXZlbnRwb2xsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXZlbnRwb2xsLmM9Mzg1PXN0YXRpYyBsb25nIG1heF91c2VyX3dhdGNoZXMgX19yZWFkX21vc3RseTtcbi0tXG5mcy9ldmVudHBvbGwuYy00MDItICogYW5kIGNhcnJpZXMgaXRzIHNjcmF0Y2ggc3RhdGUgb24gYSBzdGFjay1hbGxvY2F0ZWQgc3RydWN0XG5mcy9ldmVudHBvbGwuYzo0MDM6ICogZXBfY3RsX2N0eCBzY29wZWQgdG8gb25lIGRvX2Vwb2xsX2N0bCgpIGNhbGwuIE5vbi1uZXN0ZWQgaW5zZXJ0c1xuZnMvZXZlbnRwb2xsLmMtNDA0LSAqIHNraXAgdGhpcyBtYWNoaW5lcnkgZW50aXJlbHkgYW5kIHRha2Ugb25seSBlcC1cdTAwM2VtdHguXG4tLVxuZnMvZXZlbnRwb2xsLmM9NDI3PXN0YXRpYyB1NjQgbG9vcF9jaGVja19nZW4gPSAwO1xuLS1cbmZzL2V2ZW50cG9sbC5jLTQzMS0vKlxuZnMvZXZlbnRwb2xsLmM6NDMyOiAqIFBlci1kb19lcG9sbF9jdGwoKSBzY3JhdGNoIGZvciB0aGUgbG9vcCAvIHBhdGggY2hlY2tzLiBBbGxvY2F0ZWQgb25cbmZzL2V2ZW50cG9sbC5jLTQzMy0gKiB0aGUgY2FsbGVyJiMzOTtzIHN0YWNrOyBwb3B1bGF0ZWQgYnkgZXBfY3RsX2xvY2soKSBhbmQgdGhlIGRvd253YXJkXG4tLVxuZnMvZXZlbnRwb2xsLmM9MTc2OT1zdGF0aWMgaW50IHJldmVyc2VfcGF0aF9jaGVja19wcm9jKHN0cnVjdCBlcF9jdGxfY3R4ICpjdHgsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMTc5NS0gKiAgICAgICAgICAgICAgICAgICAgICBvdmVyIGl0cyBsaW1pdCBpbiBwYXRoX2xpbWl0c1tdLlxuZnMvZXZlbnRwb2xsLmM6MTc5NjogKiBAY3R4OiBQZXItZG9fZXBvbGxfY3RsKCkgc2NyYXRjaCBmb3IgdGhlIGxvb3AgLyBwYXRoIGNoZWNrcy5cbmZzL2V2ZW50cG9sbC5jLTE3OTctICpcbi0tXG5mcy9ldmVudHBvbGwuYz0yMzQ2PXN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTI0NzgtICpcbmZzL2V2ZW50cG9sbC5jOjI0Nzk6ICogQGN0eDogUGVyLWRvX2Vwb2xsX2N0bCgpIHNjcmF0Y2ggZm9yIHRoZSBsb29wIC8gcGF0aCBjaGVja3MuXG5mcy9ldmVudHBvbGwuYy0yNDgwLSAqIEBlcDogdGhlIFx1MDAyNnN0cnVjdCBldmVudHBvbGwgdG8gYmUgY3VycmVudGx5IGNoZWNrZWQuXG4tLVxuZnMvZXZlbnRwb2xsLmM9MjY0Nz1zdGF0aWMgaW5saW5lIGludCBlcG9sbF9tdXRleF9sb2NrKHN0cnVjdCBtdXRleCAqbXV0ZXgsIGJvb2wgbm9uYmxvY2spXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjY1Ni0vKlxuZnMvZXZlbnRwb2xsLmM6MjY1NzogKiBBY3F1aXJlIHRoZSBsb2NrcyByZXF1aXJlZCBmb3IgZG9fZXBvbGxfY3RsKCkgb24gQGVwIGZvciBAb3AuXG5mcy9ldmVudHBvbGwuYy0yNjU4LSAqXG4tLVxuZnMvZXZlbnRwb2xsLmM9MjcyND1zdGF0aWMgdm9pZCBlcF9jdGxfdW5sb2NrKHN0cnVjdCBlcF9jdGxfY3R4ICpjdHgsIHN0cnVjdCBldmVudHBvbGwgKmVwLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTI3MzQtXG5mcy9ldmVudHBvbGwuYzoyNzM1OmludCBkb19lcG9sbF9jdGxfZmlsZShzdHJ1Y3QgZmlsZSAqZiwgaW50IG9wLCBzdHJ1Y3QgZXBvbGxfa2V5ICp0ZixcbmZzL2V2ZW50cG9sbC5jLTI3MzYtXHRcdCAgICAgIHN0cnVjdCBlcG9sbF9ldmVudCAqZXBkcywgYm9vbCBub25ibG9jaylcbi0tXG5mcy9ldmVudHBvbGwuYy0yODIxLVxuZnMvZXZlbnRwb2xsLmM6MjgyMjppbnQgZG9fZXBvbGxfY3RsKGludCBlcGZkLCBpbnQgb3AsIGludCBmZCwgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLFxuZnMvZXZlbnRwb2xsLmMtMjgyMy1cdFx0IGJvb2wgbm9uYmxvY2spXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjgzNy1cdGVmZC5mZCA9IGZkO1xuZnMvZXZlbnRwb2xsLmM6MjgzODpcdHJldHVybiBkb19lcG9sbF9jdGxfZmlsZShmZF9maWxlKGYpLCBvcCwgXHUwMDI2ZWZkLCBlcGRzLCBub25ibG9jayk7XG5mcy9ldmVudHBvbGwuYy0yODM5LX1cbi0tXG5mcy9ldmVudHBvbGwuYz0yODQ2PVNZU0NBTExfREVGSU5FNChlcG9sbF9jdGwsIGludCwgZXBmZCwgaW50LCBvcCwgaW50LCBmZCxcbi0tXG5mcy9ldmVudHBvbGwuYy0yODU0LVxuZnMvZXZlbnRwb2xsLmM6Mjg1NTpcdHJldHVybiBkb19lcG9sbF9jdGwoZXBmZCwgb3AsIGZkLCBcdTAwMjZlcGRzLCBmYWxzZSk7XG5mcy9ldmVudHBvbGwuYy0yODU2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgYGVwb2xsYCBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYGVwb2xsYCBpbXBsZW1lbnRhdGlvbiBhZ2Fpbi4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBjb250cm9sIGFuZCB3YWl0IG9wZXJhdGlvbnMuIExldCBtZSBzZWUuLi4gSSBub3RpY2UgdGhhdCBib3RoIGBkb19lcG9sbF9jdGxgIGFuZCBgZG9fZXBvbGxfY3RsX2ZpbGVgIGFyZSBkZWZpbmVkIGFzIG5vbi1zdGF0aWMuIE1ha2VzIHNlbnNlLCB0aGV5JiMzOTtyZSBsaWtlbHkgZW50cnkgcG9pbnRzLiBCdXQgdGhhdCBicmluZ3MgdXAgdGhlIHF1ZXN0aW9uIG9mIGBlcG9sbF93YWl0YC4gSXTigJlzIGEgc3lzdGVtIGNhbGwsIG9idmlvdXNseS4gQnV0IGlzIHRoZXJlIHNvbWUgbm9uLXN0YXRpYyBoZWxwZXIgZnVuY3Rpb24sIHNvbWUgaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCB0byBoYW5kbGUgdGhlIHdhaXRpbmcgYXNwZWN0PyBJIGRvbiYjMzk7dCByZWNhbGwgb25lIG9mZiB0aGUgdG9wIG9mIG15IGhlYWQuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBub24tc3RhdGljIGZ1bmN0aW9uIGludm9sdmVkIGluIHdhaXRpbmcuIExldCYjMzk7cyBzZWUuLi4gTWF5YmUgYGVwb2xsX3NlbmRldmVudHNgPyBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhhdCBmdW5jdGlvbi4gSSBmZWVsIGxpa2UgaXQgbWlnaHQgYmUgc29tZWhvdyBpbnZvbHZlZCBpbiB0aGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXBvbGxfc2VuZGV2ZW50cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jPTI4NTg9c3RhdGljIGludCBlcF9jaGVja19wYXJhbXMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2cyxcbi0tXG5mcy9ldmVudHBvbGwuYy0yODc4LVxuZnMvZXZlbnRwb2xsLmM6Mjg3OTppbnQgZXBvbGxfc2VuZGV2ZW50cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuZnMvZXZlbnRwb2xsLmMtMjg4MC1cdFx0ICAgICBpbnQgbWF4ZXZlbnRzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAyOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBlcG9sbF9zZW5kZXZlbnRzYCYjMzk7cyBTY29wZSoqCgpSaWdodCwgc28gYGVwb2xsX3NlbmRldmVudHNgIGlzbiYjMzk7dCBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgdGhhdCBpdCYjMzk7cyBtZWFudCB0byBiZSBjYWxsYWJsZSBmcm9tIG91dHNpZGUgdGhlIGltbWVkaWF0ZSBtb2R1bGUgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZC4gTGV0JiMzOTtzIHNlZS4uLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqaG93KiBpdCYjMzk7cyBleHBvc2VkLiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyB0aGUgaGVhZGVyIGZpbGUgd2hlcmUgdGhlIHJlbGV2YW50IHN0cnVjdHVyZXMgYW5kLCBob3BlZnVsbHksIHByb3RvdHlwZXMgYXJlIGRlY2xhcmVkLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgcGVlayBhdCBgaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaGAgYW5kIHNlZSB3aGF0IHdlJiMzOTtyZSBleHBvcnRpbmcgYW5kIGltcG9ydGluZyBmcm9tIHRoaXMgZmlsZS4gSXQmIzM5O2xsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbnRlbmRlZCB1c2UsIGRlcGVuZGVuY2llcyBhbmQgd2hlcmUgaXQmIzM5O3MgY2FsbGVkLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBxdWljayB3YXkgb2YgdHJhY2luZyBkZXBlbmRlbmNpZXMgYW5kIGVudHJ5IHBvaW50cyBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vwb2xsXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9ldmVudHBvbGwuaD0xNj1zdHJ1Y3QgZmlsZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTIxLSNpZmRlZiBDT05GSUdfS0NNUFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDoyMjpzdHJ1Y3QgZmlsZSAqZ2V0X2Vwb2xsX3RmaWxlX3Jhd19wdHIoc3RydWN0IGZpbGUgKmZpbGUsIGludCB0ZmQsIHVuc2lnbmVkIGxvbmcgdG9mZik7XG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTIzLSNlbmRpZlxuLS1cbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg9MjY9dm9pZCBldmVudHBvbGxfcmVsZWFzZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTI4LS8qIENvcHkgcmVhZHkgZXZlbnRzIHRvIHVzZXJzcGFjZSAqL1xuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDoyOTppbnQgZXBvbGxfc2VuZGV2ZW50cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC0zMC1cdFx0ICAgICBpbnQgbWF4ZXZlbnRzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oPTM4PXN0YXRpYyBpbmxpbmUgdm9pZCBldmVudHBvbGxfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTYzLVxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo2NDpzdHJ1Y3QgZXBvbGxfa2V5IHtcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtNjUtXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTY4LVxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo2OTppbnQgZG9fZXBvbGxfY3RsX2ZpbGUoc3RydWN0IGZpbGUgKmYsIGludCBvcCwgc3RydWN0IGVwb2xsX2tleSAqdGYsXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oOjcwOlx0XHQgICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmVwZHMsIGJvb2wgbm9uYmxvY2spO1xuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo3MTppbnQgZG9fZXBvbGxfY3RsKGludCBlcGZkLCBpbnQgb3AsIGludCBmZCwgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC03Mi1cdFx0IGJvb2wgbm9uYmxvY2spO1xuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaD03Mz1ib29sIGlzX2ZpbGVfZXBvbGwoc3RydWN0IGZpbGUgKmYpO1xuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC03NC1cbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6NzU6LyogVGVsbHMgaWYgdGhlIGVwb2xsX2N0bCgyKSBvcGVyYXRpb24gbmVlZHMgYW4gZXZlbnQgY29weSBmcm9tIHVzZXJzcGFjZSAqL1xuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC03Ni1zdGF0aWMgaW5saW5lIGludCBlcF9vcF9oYXNfZXZlbnQoaW50IG9wKVxuLS1cbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg9ODM9c3RhdGljIGlubGluZSB2b2lkIGV2ZW50cG9sbF9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKSB7fVxuLS1cbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtODgtLyogQVJNIE9BQkkgaGFzIGFuIGluY29tcGF0aWJsZSBzdHJ1Y3QgbGF5b3V0IGFuZCBuZWVkcyBhIHNwZWNpYWwgaGFuZGxlciAqL1xuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo4OTpleHRlcm4gc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oOjkwOmVwb2xsX3B1dF91ZXZlbnQoX19wb2xsX3QgcmV2ZW50cywgX191NjQgZGF0YSxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6OTE6XHRcdCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICp1ZXZlbnQpO1xuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC05Mi0jZWxzZVxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo5MzpzdGF0aWMgaW5saW5lIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKlxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo5NDplcG9sbF9wdXRfdWV2ZW50KF9fcG9sbF90IHJldmVudHMsIF9fdTY0IGRhdGEsXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oOjk1Olx0XHQgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqdWV2ZW50KVxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC05Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDY3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXBvbGwgSW1wbGVtZW50YXRpb24gZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcgdGhlIGVwb2xsIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIGZyb20gd2hhdCBJIGNhbiB0ZWxsLCBgZG9fZXBvbGxfY3RsYCwgYGRvX2Vwb2xsX2N0bF9maWxlYCwgYW5kIGBlcG9sbF9zZW5kZXZlbnRzYCBhcmUgdGhlIHByaW1hcnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuIEFuZCwgb2YgY291cnNlLCB0aGUgc3lzdGVtIGNhbGwgZGVmaW5pdGlvbnM6IGBzeXNfZXBvbGxfd2FpdGAsIGBzeXNfZXBvbGxfY3RsYCwgYW5kIGBzeXNfZXBvbGxfY3JlYXRlYCBhcmUgYWxzbyB0aGVyZSwgZGVmaW5lZCB1c2luZyBgU1lTQ0FMTF9ERUZJTkVgLiBTaW5jZSBTeXprYWxsZXIgY2FuIGZ1enogc3lzY2FsbHMgZGlyZWN0bHksIGhpdHRpbmcgdGhvc2Ugc3lzY2FsbCBlbnRyeSBwb2ludHMgZGlyZWN0bHkgbWFrZXMgc2Vuc2UuIFNvLCBmb2N1c2luZyBvbiBgZG9fZXBvbGxfY3RsYCBhbmQgYGVwb2xsX3NlbmRldmVudHNgIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKQnV0IHRoZW4gdGhlcmUmIzM5O3MgdGhpcyBgZXBfcG9sbF9jYWxsYmFja2AgZnVuY3Rpb24uIEl0JiMzOTtzIG1hcmtlZCBhcyBzdGF0aWMsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gSXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHByb3Bvc2VkIHBhdGNoLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdC4gV2FpdCBhIG1pbnV0ZS4uLiB0aGUgaW5zdHJ1Y3Rpb25zIGFsc28gbWVudGlvbiBhdm9pZGluZyBpbmxpbmVkIGhlbHBlciBmdW5jdGlvbnMuIEJ1dCwgYGVwX3BvbGxfY2FsbGJhY2tgIGlzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYGluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnlgLiBUaGF0IG1lYW5zIGl0ICpjYW4mIzM5O3QqIGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCByaWdodD8gVGhlIGNvbXBpbGVyIGhhcyB0byB0cmVhdCBpdCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGJlIGNhbGxhYmxlIHRocm91Z2ggdGhlIHBvaW50ZXIuIFNvLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIHN0aWxsIGFjY2Vzc2libGUgdGhyb3VnaCBhIHN5bWJvbC4gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoYXQgaXQmIzM5O3MgYWN0dWFsbHkgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkuKmVwX3BvbGxfY2FsbGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYz0xNjg3PXN0YXRpYyB2b2lkIGVwX3B0YWJsZV9xdWV1ZV9wcm9jKHN0cnVjdCBmaWxlICpmaWxlLCB3YWl0X3F1ZXVlX2hlYWRfdCAqd2hlYWQsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMTcwMi1cbmZzL2V2ZW50cG9sbC5jOjE3MDM6XHRpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KFx1MDAyNnB3cS1cdTAwM2V3YWl0LCBlcF9wb2xsX2NhbGxiYWNrKTtcbmZzL2V2ZW50cG9sbC5jLTE3MDQtXHRwd3EtXHUwMDNld2hlYWQgPSB3aGVhZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEVwb2xsIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBlcG9sbCwgYW5kIHRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgd2hldGhlciB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFyZSBpbmxpbmVkIG9yIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhIGZ1bmN0aW9uIHBvaW50ZXIgbWVhbnMgaXQmIzM5O3MgKm5vdCogaW5saW5lZCwgd2hpY2ggaXMgYSBrZXkgZGlzdGluY3Rpb24uIE5vdywgdGhlIGluc3RydWN0aW9ucyBJJiMzOTttIHdvcmtpbmcgdW5kZXIgc2F5IEkgbmVlZCB0byBsaXN0IHRoZSBub24tc3RhdGljIEFQSSBlbnRyeSBwb2ludHMuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHRhc2suCgpJIGluaXRpYWxseSBsaXN0ZWQgYGRvX2Vwb2xsX2N0bGAsIGBkb19lcG9sbF9jdGxfZmlsZWAsIGBlcG9sbF9zZW5kZXZlbnRzYCwgYW5kIGBzeXNfZXBvbGxfd2FpdGAgYXMgbGlrZWx5IGNhbmRpZGF0ZXMuIEJ1dCB0aGVuIEkgc3RvcHBlZCB0byB0aGluayBhYm91dCBuYW1pbmcgY29udmVudGlvbnMuIFN5emthbGxlciB1c2VzIHN5c2NhbGwgbmFtZXMsIHdoaWxlIEZvY3VzU3ltYm9scyBhcmUgZm9yIGtlcm5lbCBzeW1ib2xzLiBTbywgaXMgaXQgYF9feDY0X3N5c19lcG9sbF93YWl0YCBvciBzb21ldGhpbmcgbGlrZSBgZG9fZXBvbGxfd2FpdGA/IEFoYSwgYGRvX2Vwb2xsX3dhaXRgIGlzIHN0YXRpYywgc28gdGhhdCYjMzk7cyBvdXQuIEtlZXBpbmcgaW4gbWluZCB0aGUgaW5zdHJ1Y3Rpb24sIGxldCYjMzk7cyBzdGljayB3aXRoIGBkb19lcG9sbF9jdGxgIGFuZCBgZXBvbGxfc2VuZGV2ZW50c2AgZm9yIG5vdyBhcyB0aGUgcmlnaHQgZW50cnkgcG9pbnRzLgoKQnV0LCBhIHN5c2NhbGwgaXMsIHdlbGwsIGEgc3lzY2FsbC4gSXRzIHN5bWJvbCBuYW1lIGRlcGVuZHMgb24gdGhlIGFyY2hpdGVjdHVyZSwgd2hpY2ggY29tcGxpY2F0ZXMgdGhpbmdzLiBJJiMzOTt2ZSBnb3QgdG8gZW5zdXJlIEkmIzM5O20gZ2V0dGluZyBldmVyeXRoaW5nLCBzbyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGVwb2xsLiBUaGUgc2FmZXN0IGFwcHJvYWNoIG5vdyBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQmIzM5O3MgZGlnIGludG8gYGZzL2V2ZW50cG9sbC5jYCBhbmQgaHVudCBmb3IgYW55IGBTWVNDQUxMX0RFRklORWAgbWFjcm9zLiBUaGF0IHNob3VsZCBiZSB0aGUgZGVmaW5pdGl2ZSB3YXkgdG8gaWRlbnRpZnkgYW55IG1pc3NlZCBBUEkgZW50cnlwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NZU0NBTExfREVGSU5FLiplcG9sbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jPTI1OTA9c3RhdGljIGludCBkb19lcG9sbF9jcmVhdGUoaW50IGZsYWdzKVxuLS1cbmZzL2V2ZW50cG9sbC5jLTI2MjAtXG5mcy9ldmVudHBvbGwuYzoyNjIxOlNZU0NBTExfREVGSU5FMShlcG9sbF9jcmVhdGUxLCBpbnQsIGZsYWdzKVxuZnMvZXZlbnRwb2xsLmMtMjYyMi17XG4tLVxuZnMvZXZlbnRwb2xsLmMtMjYyNS1cbmZzL2V2ZW50cG9sbC5jOjI2MjY6U1lTQ0FMTF9ERUZJTkUxKGVwb2xsX2NyZWF0ZSwgaW50LCBzaXplKVxuZnMvZXZlbnRwb2xsLmMtMjYyNy17XG4tLVxuZnMvZXZlbnRwb2xsLmM9MjgyMj1pbnQgZG9fZXBvbGxfY3RsKGludCBlcGZkLCBpbnQgb3AsIGludCBmZCwgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTI4NDUtICovXG5mcy9ldmVudHBvbGwuYzoyODQ2OlNZU0NBTExfREVGSU5FNChlcG9sbF9jdGwsIGludCwgZXBmZCwgaW50LCBvcCwgaW50LCBmZCxcbmZzL2V2ZW50cG9sbC5jLTI4NDctXHRcdHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKiwgZXZlbnQpXG4tLVxuZnMvZXZlbnRwb2xsLmM9MjkwMz1zdGF0aWMgaW50IGRvX2Vwb2xsX3dhaXQoaW50IGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcbi0tXG5mcy9ldmVudHBvbGwuYy0yOTI3LVxuZnMvZXZlbnRwb2xsLmM6MjkyODpTWVNDQUxMX0RFRklORTQoZXBvbGxfd2FpdCwgaW50LCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICosIGV2ZW50cyxcbmZzL2V2ZW50cG9sbC5jLTI5MjktXHRcdGludCwgbWF4ZXZlbnRzLCBpbnQsIHRpbWVvdXQpXG4tLVxuZnMvZXZlbnRwb2xsLmM9Mjk0MT1zdGF0aWMgaW50IGRvX2Vwb2xsX3B3YWl0KGludCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjk2MS1cbmZzL2V2ZW50cG9sbC5jOjI5NjI6U1lTQ0FMTF9ERUZJTkU2KGVwb2xsX3B3YWl0LCBpbnQsIGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKiwgZXZlbnRzLFxuZnMvZXZlbnRwb2xsLmMtMjk2My1cdFx0aW50LCBtYXhldmVudHMsIGludCwgdGltZW91dCwgY29uc3Qgc2lnc2V0X3QgX191c2VyICosIHNpZ21hc2ssXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjk3Mi1cbmZzL2V2ZW50cG9sbC5jOjI5NzM6U1lTQ0FMTF9ERUZJTkU2KGVwb2xsX3B3YWl0MiwgaW50LCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICosIGV2ZW50cyxcbmZzL2V2ZW50cG9sbC5jLTI5NzQtXHRcdGludCwgbWF4ZXZlbnRzLCBjb25zdCBzdHJ1Y3QgX19rZXJuZWxfdGltZXNwZWMgX191c2VyICosIHRpbWVvdXQsXG4tLVxuZnMvZXZlbnRwb2xsLmM9MzAzNj1zdGF0aWMgaW50IGRvX2NvbXBhdF9lcG9sbF9wd2FpdChpbnQgZXBmZCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTMwNTctXG5mcy9ldmVudHBvbGwuYzozMDU4OkNPTVBBVF9TWVNDQUxMX0RFRklORTYoZXBvbGxfcHdhaXQsIGludCwgZXBmZCxcbmZzL2V2ZW50cG9sbC5jLTMwNTktXHRcdCAgICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICosIGV2ZW50cyxcbi0tXG5mcy9ldmVudHBvbGwuYy0zMDcwLVxuZnMvZXZlbnRwb2xsLmM6MzA3MTpDT01QQVRfU1lTQ0FMTF9ERUZJTkU2KGVwb2xsX3B3YWl0MiwgaW50LCBlcGZkLFxuZnMvZXZlbnRwb2xsLmMtMzA3Mi1cdFx0ICAgICAgIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKiwgZXZlbnRzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIyNQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBFcG9sbCBFdmVudCBEaXNwYXRjaCBKb3VybmV5KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBlcG9sbGAgY29kZSBhZ2Fpbi4gTXkgcHJpbWFyeSBGb2N1c1N5bWJvbHMgZm9yIHRoaXMgZXhwbG9yYXRpb24gYXJlIGBkb19lcG9sbF9jdGxgIGFuZCBgZXBvbGxfc2VuZGV2ZW50c2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBldmVudHMgYXJlIG1hbmFnZWQgYW5kIGRlbGl2ZXJlZC4KCkhtbSwgd2FpdCBhIHNlY29uZC4uLiB0aGlzIGlzbiYjMzk7dCBhcyBzdHJhaWdodGZvcndhcmQgYXMgSSBpbml0aWFsbHkgdGhvdWdodC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgZXBvbGxfc2VuZGV2ZW50c2Agd2FzIGRpcmVjdGx5IGludm9rZWQgYnkgYGVwb2xsX3dhaXRgLCBidXQgc29tZXRoaW5nJiMzOTtzIG9mZi4gTGV0IG1lIHJldHJhY2UgbXkgc3RlcHMuLi4gYGVwb2xsX3dhaXRgIGRvZXNuJiMzOTt0IGNhbGwgaXQuIFJpZ2h0LCBgZG9fZXBvbGxfd2FpdGAgY2FsbHMgYGVwX3BvbGxgLCBhbmQgYGVwX3BvbGxgLCBpbiB0dXJuLCBpcyBjYWxsaW5nIHRoZSBzdGF0aWMgZnVuY3Rpb24gYGVwX3NlbmRfZXZlbnRzYC4KClNvLCB3aGVyZSBpcyB0aGlzIGBlcG9sbF9zZW5kZXZlbnRzYCBhY3R1YWxseSBiZWluZyB1c2VkPyBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgaXRzIGNhbGwgc2l0ZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgZXZlbnRzIGFyZSBwcm9wYWdhdGVkIGluIHRoaXMgc3lzdGVtLiBUaGlzIHdpbGwgcmVxdWlyZSBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vwb2xsX3NlbmRldmVudHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXZlbnRwb2xsLmM9Mjg1OD1zdGF0aWMgaW50IGVwX2NoZWNrX3BhcmFtcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZzLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTI4NzgtXG5mcy9ldmVudHBvbGwuYzoyODc5OmludCBlcG9sbF9zZW5kZXZlbnRzKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXG5mcy9ldmVudHBvbGwuYy0yODgwLVx0XHQgICAgIGludCBtYXhldmVudHMpXG4tLVxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaD0yNj12b2lkIGV2ZW50cG9sbF9yZWxlYXNlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpO1xuLS1cbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtMjgtLyogQ29weSByZWFkeSBldmVudHMgdG8gdXNlcnNwYWNlICovXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oOjI5OmludCBlcG9sbF9zZW5kZXZlbnRzKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTMwLVx0XHQgICAgIGludCBtYXhldmVudHMpO1xuLS1cbmlvX3VyaW5nL2Vwb2xsLmM9OTA9aW50IGlvX2Vwb2xsX3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9lcG9sbC5jLTk0LVxuaW9fdXJpbmcvZXBvbGwuYzo5NTpcdHJldCA9IGVwb2xsX3NlbmRldmVudHMocmVxLVx1MDAzZWZpbGUsIGlldy1cdTAwM2VldmVudHMsIGlldy1cdTAwM2VtYXhldmVudHMpO1xuaW9fdXJpbmcvZXBvbGwuYy05Ni1cdGlmIChyZXQgPT0gMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4OTYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipEaXZpbmcgaW50byB0aGUgaW9fdXJpbmcvZXBvbGwgaW50ZXJwbGF5KioKClJpZ2h0LCBzbyBgZXBvbGxfc2VuZGV2ZW50c2AuLi4gdGhhdCByaW5ncyBhIGJlbGwuIEFoLCB5ZXMsIGl0JiMzOTtzIGNhbGxlZCBieSBgaW9fdXJpbmcvZXBvbGwuY2AuIEdvb2QsIHRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSB0d28gYXJlIGNvbm5lY3RlZC4gTm93LCB3aGF0IGVsc2UgaXMgaW4gdGhhdCBhcmVhPyBMZXQmIzM5O3MgY2hlY2sgYGRvX2Vwb2xsX2N0bGAuIElzIHRoYXQgYWxzbyB1c2VkIGJ5IGBpb191cmluZy9lcG9sbC5jYD8gVGhhdCB3b3VsZCBkZWZpbml0ZWx5IGJlIHdvcnRoIGludmVzdGlnYXRpbmcgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fZXBvbGxfY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYz0yODM9YXNtbGlua2FnZSBsb25nIHN5c19vYWJpX2Vwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsXG4tLVxuYXJjaC9hcm0va2VybmVsL3N5c19vYWJpLWNvbXBhdC5jLTI5NS1cbmFyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYzoyOTY6XHRyZXR1cm4gZG9fZXBvbGxfY3RsKGVwZmQsIG9wLCBmZCwgXHUwMDI2a2VybmVsLCBmYWxzZSk7XG5hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMtMjk3LX1cbi0tXG5mcy9ldmVudHBvbGwuYz0zODU9c3RhdGljIGxvbmcgbWF4X3VzZXJfd2F0Y2hlcyBfX3JlYWRfbW9zdGx5O1xuLS1cbmZzL2V2ZW50cG9sbC5jLTQwMi0gKiBhbmQgY2FycmllcyBpdHMgc2NyYXRjaCBzdGF0ZSBvbiBhIHN0YWNrLWFsbG9jYXRlZCBzdHJ1Y3RcbmZzL2V2ZW50cG9sbC5jOjQwMzogKiBlcF9jdGxfY3R4IHNjb3BlZCB0byBvbmUgZG9fZXBvbGxfY3RsKCkgY2FsbC4gTm9uLW5lc3RlZCBpbnNlcnRzXG5mcy9ldmVudHBvbGwuYy00MDQtICogc2tpcCB0aGlzIG1hY2hpbmVyeSBlbnRpcmVseSBhbmQgdGFrZSBvbmx5IGVwLVx1MDAzZW10eC5cbi0tXG5mcy9ldmVudHBvbGwuYz00Mjc9c3RhdGljIHU2NCBsb29wX2NoZWNrX2dlbiA9IDA7XG4tLVxuZnMvZXZlbnRwb2xsLmMtNDMxLS8qXG5mcy9ldmVudHBvbGwuYzo0MzI6ICogUGVyLWRvX2Vwb2xsX2N0bCgpIHNjcmF0Y2ggZm9yIHRoZSBsb29wIC8gcGF0aCBjaGVja3MuIEFsbG9jYXRlZCBvblxuZnMvZXZlbnRwb2xsLmMtNDMzLSAqIHRoZSBjYWxsZXImIzM5O3Mgc3RhY2s7IHBvcHVsYXRlZCBieSBlcF9jdGxfbG9jaygpIGFuZCB0aGUgZG93bndhcmRcbi0tXG5mcy9ldmVudHBvbGwuYz0xNzY5PXN0YXRpYyBpbnQgcmV2ZXJzZV9wYXRoX2NoZWNrX3Byb2Moc3RydWN0IGVwX2N0bF9jdHggKmN0eCxcbi0tXG5mcy9ldmVudHBvbGwuYy0xNzk1LSAqICAgICAgICAgICAgICAgICAgICAgIG92ZXIgaXRzIGxpbWl0IGluIHBhdGhfbGltaXRzW10uXG5mcy9ldmVudHBvbGwuYzoxNzk2OiAqIEBjdHg6IFBlci1kb19lcG9sbF9jdGwoKSBzY3JhdGNoIGZvciB0aGUgbG9vcCAvIHBhdGggY2hlY2tzLlxuZnMvZXZlbnRwb2xsLmMtMTc5Ny0gKlxuLS1cbmZzL2V2ZW50cG9sbC5jPTIzNDY9c3RhdGljIGludCBlcF9wb2xsKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjQ3OC0gKlxuZnMvZXZlbnRwb2xsLmM6MjQ3OTogKiBAY3R4OiBQZXItZG9fZXBvbGxfY3RsKCkgc2NyYXRjaCBmb3IgdGhlIGxvb3AgLyBwYXRoIGNoZWNrcy5cbmZzL2V2ZW50cG9sbC5jLTI0ODAtICogQGVwOiB0aGUgXHUwMDI2c3RydWN0IGV2ZW50cG9sbCB0byBiZSBjdXJyZW50bHkgY2hlY2tlZC5cbi0tXG5mcy9ldmVudHBvbGwuYz0yNjQ3PXN0YXRpYyBpbmxpbmUgaW50IGVwb2xsX211dGV4X2xvY2soc3RydWN0IG11dGV4ICptdXRleCwgYm9vbCBub25ibG9jaylcbi0tXG5mcy9ldmVudHBvbGwuYy0yNjU2LS8qXG5mcy9ldmVudHBvbGwuYzoyNjU3OiAqIEFjcXVpcmUgdGhlIGxvY2tzIHJlcXVpcmVkIGZvciBkb19lcG9sbF9jdGwoKSBvbiBAZXAgZm9yIEBvcC5cbmZzL2V2ZW50cG9sbC5jLTI2NTgtICpcbi0tXG5mcy9ldmVudHBvbGwuYz0yNzI0PXN0YXRpYyB2b2lkIGVwX2N0bF91bmxvY2soc3RydWN0IGVwX2N0bF9jdHggKmN0eCwgc3RydWN0IGV2ZW50cG9sbCAqZXAsXG4tLVxuZnMvZXZlbnRwb2xsLmMtMjczNC1cbmZzL2V2ZW50cG9sbC5jOjI3MzU6aW50IGRvX2Vwb2xsX2N0bF9maWxlKHN0cnVjdCBmaWxlICpmLCBpbnQgb3AsIHN0cnVjdCBlcG9sbF9rZXkgKnRmLFxuZnMvZXZlbnRwb2xsLmMtMjczNi1cdFx0ICAgICAgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLCBib29sIG5vbmJsb2NrKVxuLS1cbmZzL2V2ZW50cG9sbC5jLTI4MjEtXG5mcy9ldmVudHBvbGwuYzoyODIyOmludCBkb19lcG9sbF9jdGwoaW50IGVwZmQsIGludCBvcCwgaW50IGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmVwZHMsXG5mcy9ldmVudHBvbGwuYy0yODIzLVx0XHQgYm9vbCBub25ibG9jaylcbi0tXG5mcy9ldmVudHBvbGwuYy0yODM3LVx0ZWZkLmZkID0gZmQ7XG5mcy9ldmVudHBvbGwuYzoyODM4Olx0cmV0dXJuIGRvX2Vwb2xsX2N0bF9maWxlKGZkX2ZpbGUoZiksIG9wLCBcdTAwMjZlZmQsIGVwZHMsIG5vbmJsb2NrKTtcbmZzL2V2ZW50cG9sbC5jLTI4MzktfVxuLS1cbmZzL2V2ZW50cG9sbC5jPTI4NDY9U1lTQ0FMTF9ERUZJTkU0KGVwb2xsX2N0bCwgaW50LCBlcGZkLCBpbnQsIG9wLCBpbnQsIGZkLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTI4NTQtXG5mcy9ldmVudHBvbGwuYzoyODU1Olx0cmV0dXJuIGRvX2Vwb2xsX2N0bChlcGZkLCBvcCwgZmQsIFx1MDAyNmVwZHMsIGZhbHNlKTtcbmZzL2V2ZW50cG9sbC5jLTI4NTYtfVxuLS1cbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg9NjQ9c3RydWN0IGVwb2xsX2tleSB7XG4tLVxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC02OC1cbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6Njk6aW50IGRvX2Vwb2xsX2N0bF9maWxlKHN0cnVjdCBmaWxlICpmLCBpbnQgb3AsIHN0cnVjdCBlcG9sbF9rZXkgKnRmLFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC03MC1cdFx0ICAgICAgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLCBib29sIG5vbmJsb2NrKTtcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6NzE6aW50IGRvX2Vwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXBkcyxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtNzItXHRcdCBib29sIG5vbmJsb2NrKTtcbi0tXG5pb191cmluZy9lcG9sbC5jPTUxPWludCBpb19lcG9sbF9jdGwoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5pb191cmluZy9lcG9sbC5jLTY3LVx0a2V5LmZkID0gaWUtXHUwMDNlZmQ7XG5pb191cmluZy9lcG9sbC5jOjY4Olx0cmV0ID0gZG9fZXBvbGxfY3RsX2ZpbGUoZmRfZmlsZShmKSwgaWUtXHUwMDNlb3AsIFx1MDAyNmtleSwgXHUwMDI2aWUtXHUwMDNlZXZlbnQsIGZvcmNlX25vbmJsb2NrKTtcbmlvX3VyaW5nL2Vwb2xsLmMtNjktXHRpZiAoZm9yY2Vfbm9uYmxvY2sgXHUwMDI2XHUwMDI2IHJldCA9PSAtRUFHQUlOKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ1OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBPdXIgRXBvbGwgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGRvX2Vwb2xsX2N0bF9maWxlYCBpcyBpbmRlZWQgdXNlZCBieSBgaW9fdXJpbmcvZXBvbGwuY2AuIFRoaXMgaXMgZ29vZCwgaXQgaGVscHMgc29saWRpZnkgdGhlIGltcG9ydGFuY2Ugb2YgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGluIHRoZSBvdmVyYWxsIHBpY3R1cmUuIFNvLCB0aGF0LCBhbG9uZyB3aXRoIGBkb19lcG9sbF9jdGxgIGFuZCBgZXBvbGxfc2VuZGV2ZW50c2AgYXJlIGRlZmluaXRlbHkgZXhjZWxsZW50IEZvY3VzU3ltYm9scyBmb3IgdXMgdG8gcmVhbGx5IGRlbHZlIGludG8uIFdoaWxlIEkgY291bGQgYWxzbyBjb25zaWRlciB0aGUgc3lzY2FsbHMgdGhlbXNlbHZlcyBsaWtlIGBzeXNfZXBvbGxfd2FpdGAsIGBzeXNfZXBvbGxfY3RsYCwgYW5kIGBzeXNfZXBvbGxfcHdhaXRgIGFzIHBhcnQgb2YgdGhpcywgU3l6a2FsbGVyIGlzIHByZXR0eSBnb29kIGF0IGZ1enppbmcgdGhvc2UgZGlyZWN0bHksIHNvIHRoZXkgYXJlIGxvd2VyIG9uIHRoZSBwcmlvcml0eSBsaXN0LiBJJiMzOTttIGFkZGluZyBgZG9fZXBvbGxfY3RsYCwgYGRvX2Vwb2xsX2N0bF9maWxlYCwgYW5kIGBlcG9sbF9zZW5kZXZlbnRzYCB0byB0aGUgRm9jdXNTeW1ib2xzIGxpc3Q7IHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHdlIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSBhbGwgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbnMuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYENPTkZJR19gIG9wdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWNhbGx5IHJlcXVpcmVkIGZvciB0aGVzZSBmdW5jdGlvbnMgdG8gZXZlbiBiZSBjb21waWxlZC4gTG9va2luZyBhdCBgZnMvZXZlbnRwb2xsLmNgLCBpdCBzZWVtcyB0aGF0IGBDT05GSUdfRVBPTExgIGlzIHRoZSBrZXkuIEJ1dCBJIHNob3VsZCBkb3VibGUtY2hlY2sgYnkgbG9va2luZyBhdCBgZnMvTWFrZWZpbGVgIG9yIGBpbml0L0tjb25maWdgIGp1c3QgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVBPTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZT0yND1vYmoteVx0XHRcdFx0JiM0Mzs9IG5vdGlmeS9cbmZzL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19FUE9MTClcdFx0JiM0Mzs9IGV2ZW50cG9sbC5vXG5mcy9NYWtlZmlsZS0yNi1vYmoteVx0XHRcdFx0JiM0Mzs9IGFub25faW5vZGVzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMjcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgRVBPTEwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UmIzM5O3JlIG9uIHRoZSByaWdodCB0cmFjayBhbmQgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBlc3BlY2lhbGx5IHNvbWV0aGluZyBhcyBmdW5kYW1lbnRhbCBhcyBgRVBPTExgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCBpcyBlbmFibGVkIG9yIGhhcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgZXhwZWN0LiBJdCYjMzk7cyBhIHF1aWNrIHdheSB0byBlbnN1cmUgSSYjMzk7bSBub3QgY2hhc2luZyBhIGdob3N0IGFuZCB0aGF0IHRoZSBncm91bmR3b3JrIGlzIHByb3Blcmx5IGxhaWQgb3V0LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVQT0xMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xODY4PWNvbmZpZyBGVVRFWF9ST0JVU1RfVU5MT0NLXG4tLVxuaW5pdC9LY29uZmlnLTE4NzAtXG5pbml0L0tjb25maWc6MTg3MTpjb25maWcgRVBPTExcbmluaXQvS2NvbmZpZy0xODcyLVx0Ym9vbCBcJiMzNDtFbmFibGUgZXZlbnRwb2xsIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzA2CgkJCQkJCQlvdXRwdXQ6IDEyOQoJCQkJCQkJdGhvdWdodHM6IDQ2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBFcG9sbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgYGZzL2V2ZW50cG9sbC5jYCB0aGF0IEkgbmVlZCB0byBldmFsdWF0ZSBmb3IgZnV6emluZyBwb3RlbnRpYWwuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGFkZGluZyBgRVBPTExgIHRvIGBFbmFibGVDb25maWdzYCBiZWNhdXNlLCB3ZWxsLCBgRVBPTExgIGlzIGEgY29yZSBmZWF0dXJlOyBpdCYjMzk7cyBwcmFjdGljYWxseSBhbHdheXMgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBvYnZpb3VzbHkgaXQgc2hvdWxkIGJlIGVuYWJsZWQgd2hlbiB0ZXN0aW5nIHRoaXMuCgpOb3csIGRpZ2dpbmcgaW50byB0aGUgcGF0Y2ggaXRzZWxmLCBJIGNhbiBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYSAqbG90KiBvZiBjb3JlIGBlcG9sbGAgZnVuY3Rpb25zLiAgV2UmIzM5O3JlIHRhbGtpbmcgZnVuZGFtZW50YWwgcGllY2VzIGhlcmU6IGBlcF9ldmVudHNfYXZhaWxhYmxlYCwgYGVwX3N0YXRlX3Rlc3RgLCBgZXBfcmVhZHlfZmFzdF9lbmFibGVkYCwgYGVwX3NldF9yZWFkeV9hY2NvdW50ZWRgLCBgZXBfcHJlcGFyZV9yZXBvbGxgLCBgZXBfY2FsbGJhY2tfY2FuX3NraXBgLCBgZXBfZG9uZV9zY2FuYCwgYF9fZXBfZXZlbnRwb2xsX3BvbGxgLCBgZXBfcG9sbF9jYWxsYmFja2AsIGBlcF9pbnNlcnRgLCBgZXBfbW9kaWZ5YCwgYGVwX2RlbGl2ZXJfZXZlbnRgLCBhbmQgYGVwX3BvbGxgLiAgQmFzaWNhbGx5IHRoZSB3aG9sZSBzaGViYW5nIQoKVGhlIGNydXggb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhIG5ldyBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIGBlcG9sbGAgY2FsbGJhY2tzLCB3aGljaCBtZWFucyBuZXcgc3RhdGUgYml0cyBsaWtlIGBFUF9TVEFURV9BQ0NPVU5URURgIGFuZCBgRVBfU1RBVEVfRkFTVGAsIGFuZCBjb3JyZXNwb25kaW5nIG1vZGlmaWNhdGlvbnMgdG8gZXZlbnQgZGVsaXZlcnkgYW5kIHBvbGxpbmcgbG9naWMuICBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGFsdGVyYXRpb24gdG8gY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gVGhpcyBraW5kIG9mIHBhdGNoLCBtb2RpZnlpbmcgdGhlIGZ1bmRhbWVudGFsIGV2ZW50IGhhbmRsaW5nIGluIGBlcG9sbGAgd2hpY2ggaXMgdXNlZCBleHRlbnNpdmVseSBieSBhbG1vc3QgYWxsIHNvZnR3YXJlIHJ1bm5pbmcgb24gdGhlIGtlcm5lbCwgaXMgKmRlZmluaXRlbHkqIGdvaW5nIHRvIGJlIHJlYWNoYWJsZSB0aHJvdWdoIGBlcG9sbF9jdGxgIHN5c2NhbGxzLCBgZXBvbGxfd2FpdGAgc3lzY2FsbHMsIGFuZCBldmVuIGlvX3VyaW5nLiBUaGlzIG1lYW5zIGEgZ29vZCBwb3RlbnRpYWwgZm9yIGZ1enppbmcuCgpNeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIG1vZGlmaWVzIHRoZXNlIGZ1bmN0aW9ucyBpbiBhICpmdW5jdGlvbmFsKiB3YXkuIFRoZSBmdW5jdGlvbnMgSSYjMzk7bSBzZWVpbmcgbW9kaWZpZWQgYXJlIGRlZmluaXRlbHkgaW4gdGhlIGZhc3QgcGF0aC4gVGhpcyBraW5kIG9mIGNvZGUgaXMgaGlnaC12YWx1ZSBmb3IgZnV6emluZy4gQWxzbywgYGVwX3BvbGxfY2FsbGJhY2tgIHdoaWNoIGlzIGNhbGxlZCBmcm9tIHdha2VfdXAgaXMgbW9kaWZpZWQuIFRoaXMgaXMgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIGFsc28gdG91Y2hpbmcgYGVwX2luc2VydGAsIGBlcF9tb2RpZnlgLCBgZXBfZGVsaXZlcl9ldmVudGAsIGFuZCBgZXBfcG9sbGAuIEFsbCBvZiB0aGVzZSBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGBlcG9sbF9jdGxgIGFuZCBgZXBvbGxfd2FpdGAuCgpUaGVyZWZvcmUsIEkmIzM5O20gbWFya2luZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc6IHRydWVgLiAgTXkgYEZvY3VzU3ltYm9sc2AgYXJlIGdvaW5nIHRvIGJlIGBkb19lcG9sbF9jdGxgLCBgZG9fZXBvbGxfY3RsX2ZpbGVgLCBhbmQgYGVwb2xsX3NlbmRldmVudHNgIHRvIGhlbHAgZ3VpZGUgdGhlIGZ1enppbmcgZWZmb3J0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VQT0xMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fZXBvbGxfY3RsJiMzNDssCiAgICAmIzM0O2RvX2Vwb2xsX2N0bF9maWxlJiMzNDssCiAgICAmIzM0O2Vwb2xsX3NlbmRldmVudHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgZXBvbGwgY2FsbGJhY2tzLCBhZGRpbmcgbmV3IHN0YXRlIGJpdHMgKEVQX1NUQVRFX0FDQ09VTlRFRCwgRVBfU1RBVEVfRkFTVCkgYW5kIG1vZGlmeWluZyB0aGUgY29yZSBldmVudCBkZWxpdmVyeSBhbmQgcG9sbGluZyBsb2dpYyBpbiBmcy9ldmVudHBvbGwuYy4gVGhpcyBhZmZlY3RzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIGhpZ2hseSByZWFjaGFibGUgdmlhIGVwb2xsIHN5c2NhbGxzIGFuZCBpb191cmluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVBPTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19lcG9sbF9jdGwmIzM0OywKICAgICYjMzQ7ZG9fZXBvbGxfY3RsX2ZpbGUmIzM0OywKICAgICYjMzQ7ZXBvbGxfc2VuZGV2ZW50cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciBlcG9sbCBjYWxsYmFja3MsIGFkZGluZyBuZXcgc3RhdGUgYml0cyAoRVBfU1RBVEVfQUNDT1VOVEVELCBFUF9TVEFURV9GQVNUKSBhbmQgbW9kaWZ5aW5nIHRoZSBjb3JlIGV2ZW50IGRlbGl2ZXJ5IGFuZCBwb2xsaW5nIGxvZ2ljIGluIGZzL2V2ZW50cG9sbC5jLiBUaGlzIGFmZmVjdHMgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSBhbmQgaXMgaGlnaGx5IHJlYWNoYWJsZSB2aWEgZXBvbGwgc3lzY2FsbHMgYW5kIGlvX3VyaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDAzOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIGVwb2xsIHVzaW5nIGF0b21pYyBzdGF0ZSBiaXRzIGluIGBzdHJ1Y3QgZXBpdGVtYC4gSXQgbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGxvZ2ljLCBldmVudCBhY2NvdW50aW5nLCBhbmQgd2FrZXVwcy4gQWxsIG5ldyBmaWVsZHMgKGxpa2UgYGF0b21pY190IHN0YXRlYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIChlLmcuLCB2aWEgYGttZW1fY2FjaGVfemFsbG9jYCBhbmQgYGF0b21pY19zZXRgKSwgYW5kIG5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ODkyODY5YmQyMzYzNDdhMmZjOTIxZjczOWVmNjdjYzA2MTAxZTkwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMDI6NTA6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9ldmVudHBvbGwuYyBiL2ZzL2V2ZW50cG9sbC5jCmluZGV4IGUwYzRiZjg4YTgzODMuLjYwMGQzZDJkNDc2MzYgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50cG9sbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V2ZW50cG9sbC5jCkBAIC0yNDMsNiAmIzQzOzI0MywxNCBAQCBzdHJ1Y3QgZXBwb2xsX2VudHJ5IHsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAqd2hlYWQ7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBGQVNUIGlzIHNldCBmb3IgZWxpZ2libGUgaXRlbXMgYXQgaW5zZXJ0aW9uLiBBQ0NPVU5URUQgdHJhY2tzIEZBU1QgaXRlbXMKJiM0MzsgKiB3aGlsZSB0aGUgcmVhZHkgcGF0aCBvd25zIHRoZW0gYW5kIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHJlLXBvbGwuCiYjNDM7ICovCiYjNDM7ZW51bSB7CiYjNDM7CUVQX1NUQVRFX0FDQ09VTlRFRAk9IEJJVCgwKSwKJiM0MzsJRVBfU1RBVEVfRkFTVAkJPSBCSVQoMSksCiYjNDM7fTsKIC8qCiAgKiBFYWNoIGZpbGUgZGVzY3JpcHRvciBhZGRlZCB0byB0aGUgZXZlbnRwb2xsIGludGVyZmFjZSB3aWxsCiAgKiBoYXZlIGFuIGVudHJ5IG9mIHRoaXMgdHlwZSBsaW5rZWQgdG8gdGhlICYjMzQ7cmJyJiMzNDsgUkIgdHJlZS4KQEAgLTI3MSw2ICYjNDM7Mjc5LDkgQEAgc3RydWN0IGVwaXRlbSB7CiAJLyogVGhlIGZpbGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiB0aGlzIGl0ZW0gcmVmZXJzIHRvICovCiAJc3RydWN0IGVwb2xsX2tleSBmZmQ7CiAKJiM0MzsJLyogQXRvbWljIHN0YXRlIGJpdHMsIHNlZSB0aGUgRVBfU1RBVEVfKiBlbnVtIGFib3ZlLiAqLwomIzQzOwlhdG9taWNfdCBzdGF0ZTsKJiM0MzsKIAkvKiBMaXN0IGNvbnRhaW5pbmcgcG9sbCB3YWl0IHF1ZXVlcyAqLwogCXN0cnVjdCBlcHBvbGxfZW50cnkgKnB3cWxpc3Q7CiAKQEAgLTYyMCw2ICYjNDM7NjMxLDY1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlcF9ldmVudHNfYXZhaWxhYmxlKHN0cnVjdCBldmVudHBvbGwgKmVwKQogCQlyZWFkX3NlcWNvdW50X3JldHJ5KCZhbXA7ZXAtJmd0O3NlcSwgc2VxKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogTGV0IEEgYmUgQUNDT1VOVEVEIGFuZCBCIGJlIGZpbGUgcmVhZGluZXNzLiBGdWxseSBvcmRlcmVkIGF0b21pYyBSTVdzCiYjNDM7ICogcGFpciBXKEE9MCkgYmVmb3JlIFIoQikgd2l0aCBXKEIpIGJlZm9yZSBSKEEpLCBzbyBhIHNjYW5uZXIgY2Fubm90IG1pc3MKJiM0MzsgKiBCIHdoaWxlIGl0cyBjYWxsYmFjayBza2lwcyBhbiBhY2NvdW50ZWQgaXRlbS4gZXBfZG9uZV9zY2FuKCkgYW5kIHRoZQomIzQzOyAqIGZhdGFsLXNpZ25hbCBoYW5kb2ZmIHBhc3MgcXVldWVkIGV2ZW50cyBiZXR3ZWVuIGV4Y2x1c2l2ZSB3YWl0ZXJzLgomIzQzOyAqIHBvbGxfd2FpdCB1c2VycywgcHJpdmF0ZSBtb2RlcyBhbmQgc3BlY2lhbCBjYWxsYmFja3MgdGFrZSB0aGUgc2xvdyBwYXRoLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBlcF9zdGF0ZV90ZXN0KGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSwgdW5zaWduZWQgaW50IGJpdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhdG9taWNfcmVhZCgmYW1wO2VwaS0mZ3Q7c3RhdGUpICZhbXA7IGJpdDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgZXBpdGVtICplcGkpCiYjNDM7ewomIzQzOwlyZXR1cm4gZXBfc3RhdGVfdGVzdChlcGksIEVQX1NUQVRFX0ZBU1QpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZXBfc2V0X3JlYWR5X2FjY291bnRlZChzdHJ1Y3QgZXBpdGVtICplcGkpCiYjNDM7ewomIzQzOwlpZiAoZXBfcmVhZHlfZmFzdF9lbmFibGVkKGVwaSkpCiYjNDM7CQlhdG9taWNfb3IoRVBfU1RBVEVfQUNDT1VOVEVELCAmYW1wO2VwaS0mZ3Q7c3RhdGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZXBfcHJlcGFyZV9yZXBvbGwoc3RydWN0IGVwaXRlbSAqZXBpKQomIzQzO3sKJiM0MzsJaWYgKGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChlcGkpKQomIzQzOwkJYXRvbWljX2ZldGNoX2FuZG5vdChFUF9TVEFURV9BQ0NPVU5URUQsICZhbXA7ZXBpLSZndDtzdGF0ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGVwX2NhbGxiYWNrX2Nhbl9za2lwKHN0cnVjdCBlcGl0ZW0gKmVwaSwgX19wb2xsX3QgcG9sbGZsYWdzKQomIzQzO3sKJiM0MzsJX19wb2xsX3QgZXZlbnRzOwomIzQzOwomIzQzOwlldmVudHMgPSBSRUFEX09OQ0UoZXBpLSZndDtldmVudC5ldmVudHMpOwomIzQzOwkKJiM0MzsJLyogT25seSBpbnNlcnRpb24tdGltZSBjYW5kaWRhdGVzIG1heSB1c2UgdGhlIGxvY2tsZXNzIHBhdGguICovCiYjNDM7CWlmICghZXBfcmVhZHlfZmFzdF9lbmFibGVkKGVwaSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CQomIzQzOwkvKiBlcF9tb2RpZnkoKSBjYW4gc2VsZWN0IGEgcHJpdmF0ZSBtb2RlIHRoYXQgcmVxdWlyZXMgdGhlIHNsb3cgcGF0aC4gKi8KJiM0MzsJaWYgKGV2ZW50cyAmYW1wOyBFUF9QUklWQVRFX0JJVFMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIHBvbGxfd2FpdCB1c2VycyBtdXN0IGJlIHdva2VuIGJ5IHRoaXMgY2FsbGJhY2suICovCiYjNDM7CWlmICh3YWl0cXVldWVfYWN0aXZlKCZhbXA7ZXBpLSZndDtlcC0mZ3Q7cG9sbF93YWl0KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogUE9MTEZSRUUgdGVhcnMgZG93biB3YWl0IGVudHJpZXM7IFVSSU5HX1dBS0UgbXVzdCBwcm9wYWdhdGUuICovCiYjNDM7CWlmIChwb2xsZmxhZ3MgJmFtcDsgKFBPTExGUkVFIHwgRVBPTExfVVJJTkdfV0FLRSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIFVubWF0Y2hlZCB3YWtlIGtleXMgcmV0YWluIHRoZSBzbG93LXBhdGggY2FsbGJhY2sgc2VtYW50aWNzLiAqLwomIzQzOwlpZiAocG9sbGZsYWdzICZhbXA7JmFtcDsgIShwb2xsZmxhZ3MgJmFtcDsgZXZlbnRzKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogRnVsbHkgb3JkZXJlZCBSTVcgcGFpcnMgdGhlIEIgdXBkYXRlIHdpdGggdGhlIHNjYW5uZXImIzM5O3MgQSBjbGVhci4gKi8KJiM0MzsJcmV0dXJuIGF0b21pY19mZXRjaF9vcigwLCAmYW1wO2VwaS0mZ3Q7c3RhdGUpICZhbXA7IEVQX1NUQVRFX0FDQ09VTlRFRDsKJiM0Mzt9CiYjNDM7CiAjaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTEwKIC8qKgogICogYnVzeV9sb29wX2VwX3RpbWVvdXQgLSBjaGVjayBpZiBidXN5IHBvbGwgaGFzIHRpbWVkIG91dC4gVGhlIHRpbWVvdXQgdmFsdWUKQEAgLTEwMDcsNiAmIzQzOzEwNzcsNyBAQCBzdGF0aWMgdm9pZCBlcF9kb25lX3NjYW4oc3RydWN0IGV2ZW50cG9sbCAqZXAsCiAJCQkgKiByZXZlcnNlcyB0aGUgaXRlcmF0aW9uIG9yZGVyIGludG8gRklGTy4KIAkJCSAqLwogCQkJbGlzdF9hZGQoJmFtcDtlcGktJmd0O3JkbGxpbmssICZhbXA7ZXAtJmd0O3JkbGxpc3QpOwomIzQzOwkJCWVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTsKIAkJCWVwX3BtX3N0YXlfYXdha2UoZXBpKTsKIAkJfQogCX0KQEAgLTEzMDMsOCAmIzQzOzEzNzQsMTAgQEAgc3RhdGljIF9fcG9sbF90IF9fZXBfZXZlbnRwb2xsX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQsIGludCBkZXAKIAltdXRleF9sb2NrX25lc3RlZCgmYW1wO2VwLSZndDttdHgsIGRlcHRoKTsKIAllcF9zdGFydF9zY2FuKGVwLCAmYW1wO3NjYW5fYmF0Y2gpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlcGksIHRtcCwgJmFtcDtzY2FuX2JhdGNoLCByZGxsaW5rKSB7CiYjNDM7CQllcF9wcmVwYXJlX3JlcG9sbChlcGkpOwogCQlpZiAoZXBfaXRlbV9wb2xsKGVwaSwgJmFtcDtwdCwgZGVwdGggJiM0MzsgMSkpIHsKIAkJCXJlcyA9IEVQT0xMSU4gfCBFUE9MTFJETk9STTsKJiM0MzsJCQllcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7CiAJCQlicmVhazsKIAkJfSBlbHNlIHsKIAkJCS8qCkBAIC0xNDk3LDYgJiM0MzsxNTcwLDkgQEAgc3RhdGljIGludCBlcF9wb2xsX2NhbGxiYWNrKHdhaXRfcXVldWVfZW50cnlfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHYKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBld2FrZSA9IDA7CiAKJiM0MzsJaWYgKGVwX2NhbGxiYWNrX2Nhbl9za2lwKGVwaSwgcG9sbGZsYWdzKSkKJiM0MzsJCXJldHVybiAxOwomIzQzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZXAtJmd0O2xvY2ssIGZsYWdzKTsKIAogCWVwX3NldF9idXN5X3BvbGxfbmFwaV9pZChlcGkpOwpAQCAtMTUyOSwxMSAmIzQzOzE2MDUsMTMgQEAgc3RhdGljIGludCBlcF9wb2xsX2NhbGxiYWNrKHdhaXRfcXVldWVfZW50cnlfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHYKIAkJaWYgKCFlcGlfb25fb3ZmbGlzdChlcGkpKSB7CiAJCQllcGktJmd0O292Zmxpc3RfbmV4dCA9IFJFQURfT05DRShlcC0mZ3Q7b3ZmbGlzdCk7CiAJCQlXUklURV9PTkNFKGVwLSZndDtvdmZsaXN0LCBlcGkpOwomIzQzOwkJCWVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTsKIAkJCWVwX3BtX3N0YXlfYXdha2VfcmN1KGVwaSk7CiAJCX0KIAl9IGVsc2UgaWYgKCFlcF9pc19saW5rZWQoZXBpKSkgewogCQkvKiBJbiB0aGUgdXN1YWwgY2FzZSwgYWRkIGV2ZW50IHRvIHJlYWR5IGxpc3QuICovCiAJCWxpc3RfYWRkX3RhaWwoJmFtcDtlcGktJmd0O3JkbGxpbmssICZhbXA7ZXAtJmd0O3JkbGxpc3QpOwomIzQzOwkJZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpOwogCQllcF9wbV9zdGF5X2F3YWtlX3JjdShlcGkpOwogCX0KIApAQCAtMTkxMiw2ICYjNDM7MTk5MCwxMyBAQCBzdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCwKIAlpZiAoSVNfRVJSKGVwaSkpCiAJCXJldHVybiBQVFJfRVJSKGVwaSk7CiAKJiM0MzsJLyoKJiM0MzsJICogTG9ja2xlc3MgY2FuZGlkYXRlcyBhcmUgcGxhaW4gbGV2ZWwtdHJpZ2dlcmVkIGludGVyZXN0czsKJiM0MzsJICogcHJpdmF0ZSBtb2RlcyBhbmQgbmVzdGVkIGVwb2xsIGNoYW5nZSB0aGUgY2FsbGJhY2sgY29udHJhY3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXRlcCAmYW1wOyZhbXA7ICEoZXZlbnQtJmd0O2V2ZW50cyAmYW1wOyBFUF9QUklWQVRFX0JJVFMpKQomIzQzOwkJYXRvbWljX3NldCgmYW1wO2VwaS0mZ3Q7c3RhdGUsIEVQX1NUQVRFX0ZBU1QpOwomIzQzOwogCWVycm9yID0gZXBfcmVnaXN0ZXJfZXBpdGVtKGN0eCwgZXAsIGVwaSwgdGVwLCBmdWxsX2NoZWNrKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTE5NTYsNiAmIzQzOzIwNDEsNyBAQCBzdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCwKIAogCWlmIChyZXZlbnRzICZhbXA7JmFtcDsgIWVwX2lzX2xpbmtlZChlcGkpKSB7CiAJCWxpc3RfYWRkX3RhaWwoJmFtcDtlcGktJmd0O3JkbGxpbmssICZhbXA7ZXAtJmd0O3JkbGxpc3QpOwomIzQzOwkJZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpOwogCQllcF9wbV9zdGF5X2F3YWtlKGVwaSk7CiAKIAkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmFtcDtlcC0mZ3Q7d3EpKQpAQCAtMTk5Miw3ICYjNDM7MjA3OCw3IEBAIHN0YXRpYyBpbnQgZXBfbW9kaWZ5KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksCiAJICogb3RoZXJ3aXNlIHdlIG1pZ2h0IG1pc3MgYW4gZXZlbnQgdGhhdCBoYXBwZW5zIGJldHdlZW4gdGhlCiAJICogZl9vcC0mZ3Q7cG9sbCgpIGNhbGwgYW5kIHRoZSBuZXcgZXZlbnQgc2V0IHJlZ2lzdGVyaW5nLgogCSAqLwotCWVwaS0mZ3Q7ZXZlbnQuZXZlbnRzID0gZXZlbnQtJmd0O2V2ZW50czsgLyogbmVlZCBiYXJyaWVyIGJlbG93ICovCiYjNDM7CVdSSVRFX09OQ0UoZXBpLSZndDtldmVudC5ldmVudHMsIGV2ZW50LSZndDtldmVudHMpOyAvKiBuZWVkIGJhcnJpZXIgYmVsb3cgKi8KIAllcGktJmd0O2V2ZW50LmRhdGEgPSBldmVudC0mZ3Q7ZGF0YTsgLyogcHJvdGVjdGVkIGJ5IG10eCAqLwogCWlmIChlcGktJmd0O2V2ZW50LmV2ZW50cyAmYW1wOyBFUE9MTFdBS0VVUCkgewogCQlpZiAoIWVwX2hhc193YWtldXBfc291cmNlKGVwaSkpCkBAIC0yMDMxLDYgJiM0MzsyMTE3LDcgQEAgc3RhdGljIGludCBlcF9tb2RpZnkoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSwKIAkJc3Bpbl9sb2NrX2lycSgmYW1wO2VwLSZndDtsb2NrKTsKIAkJaWYgKCFlcF9pc19saW5rZWQoZXBpKSkgewogCQkJbGlzdF9hZGRfdGFpbCgmYW1wO2VwaS0mZ3Q7cmRsbGluaywgJmFtcDtlcC0mZ3Q7cmRsbGlzdCk7CiYjNDM7CQkJZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpOwogCQkJZXBfcG1fc3RheV9hd2FrZShlcGkpOwogCiAJCQkvKiBOb3RpZnkgd2FpdGluZyB0YXNrcyB0aGF0IGV2ZW50cyBhcmUgYXZhaWxhYmxlICovCkBAIC0yMDg0LDYgJiM0MzsyMTcxLDcgQEAgc3RhdGljIGludCBlcF9kZWxpdmVyX2V2ZW50KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksCiAJCV9fcG1fcmVsYXgod3MpOwogCX0KIAomIzQzOwllcF9wcmVwYXJlX3JlcG9sbChlcGkpOwogCWxpc3RfZGVsX2luaXQoJmFtcDtlcGktJmd0O3JkbGxpbmspOwogCiAJLyoKQEAgLTIxMDQsMTMgJiM0MzsyMTkyLDE1IEBAIHN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLAogCQkgKiBhdHRlbXB0LgogCQkgKi8KIAkJbGlzdF9hZGQoJmFtcDtlcGktJmd0O3JkbGxpbmssIHNjYW5fYmF0Y2gpOwomIzQzOwkJZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpOwogCQllcF9wbV9zdGF5X2F3YWtlKGVwaSk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAkqdWV2ZW50cyA9IG5leHQ7CiAKIAlpZiAoZXBpLSZndDtldmVudC5ldmVudHMgJmFtcDsgRVBPTExPTkVTSE9UKSB7Ci0JCWVwaS0mZ3Q7ZXZlbnQuZXZlbnRzICZhbXA7PSBFUF9QUklWQVRFX0JJVFM7CiYjNDM7CQlXUklURV9PTkNFKGVwaS0mZ3Q7ZXZlbnQuZXZlbnRzLAomIzQzOwkJCSAgIFJFQURfT05DRShlcGktJmd0O2V2ZW50LmV2ZW50cykgJmFtcDsgRVBfUFJJVkFURV9CSVRTKTsKIAl9IGVsc2UgaWYgKCEoZXBpLSZndDtldmVudC5ldmVudHMgJmFtcDsgRVBPTExFVCkpIHsKIAkJLyoKIAkJICogTGV2ZWwtdHJpZ2dlcmVkOiByZS1xdWV1ZSBzbyB0aGUgbmV4dCBlcG9sbF93YWl0KCkKQEAgLTIxMjAsNiAmIzQzOzIyMTAsNyBAQCBzdGF0aWMgaW50IGVwX2RlbGl2ZXJfZXZlbnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSwKIAkJICogZHVyaW5nIHNjYW5zLgogCQkgKi8KIAkJbGlzdF9hZGRfdGFpbCgmYW1wO2VwaS0mZ3Q7cmRsbGluaywgJmFtcDtlcC0mZ3Q7cmRsbGlzdCk7CiYjNDM7CQllcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7CiAJCWVwX3BtX3N0YXlfYXdha2UoZXBpKTsKIAl9CiAJcmV0dXJuIDE7CkBAIC0yMjg3LDYgJiM0MzsyMzc4LDExIEBAIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLAogCXdoaWxlICgxKSB7CiAJCWlmIChlYXZhaWwpIHsKIAkJCXJlcyA9IGVwX3RyeV9zZW5kX2V2ZW50cyhlcCwgZXZlbnRzLCBtYXhldmVudHMpOwomIzQzOwkJCWlmIChyZXMgPT0gLUVJTlRSKSB7CiYjNDM7CQkJCXNwaW5fbG9ja19pcnEoJmFtcDtlcC0mZ3Q7bG9jayk7CiYjNDM7CQkJCXdha2VfdXAoJmFtcDtlcC0mZ3Q7d3EpOwomIzQzOwkJCQlzcGluX3VubG9ja19pcnEoJmFtcDtlcC0mZ3Q7bG9jayk7CiYjNDM7CQkJfQogCQkJaWYgKHJlcykKIAkJCQlyZXR1cm4gcmVzOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjEyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXBvbGwgRmFzdCBQYXRoIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgZGVlcCBkaXZlIGludG8gYGZzL2V2ZW50cG9sbC5jYCwgc3BlY2lmaWNhbGx5IG9wdGltaXppbmcgYGVwb2xsYCB3aXRoIGEgbmV3ICYjMzQ7ZmFzdCBwYXRoLiYjMzQ7IE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoaXMgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCYjMzk7cyBicmVhayBpdCBkb3duLgoKRXNzZW50aWFsbHksIGl0JiMzOTtzIGFib3V0IGludHJvZHVjaW5nIHNvbWUgYXRvbWljIHN0YXRlIGJpdHMgKGBFUF9TVEFURV9BQ0NPVU5URURgLCBgRVBfU1RBVEVfRkFTVGApIHdpdGhpbiB0aGUgYHN0cnVjdCBlcGl0ZW1gLiBJIHNlZSBhIGJ1bmNoIG9mIG5ldyBoZWxwZXIgZnVuY3Rpb25zOiBgZXBfc3RhdGVfdGVzdGAsIGBlcF9yZWFkeV9mYXN0X2VuYWJsZWRgLCBgZXBfc2V0X3JlYWR5X2FjY291bnRlZGAsIGBlcF9wcmVwYXJlX3JlcG9sbGAsIGFuZCBgZXBfY2FsbGJhY2tfY2FuX3NraXBgLiBUaGUgYGVwX3BvbGxfY2FsbGJhY2tgIGdldHMgdHdlYWtlZCB0byBjb25kaXRpb25hbGx5IHNraXAgd29yaywgYW5kIHNldmVyYWwgY29yZSBmdW5jdGlvbnMsIGluY2x1ZGluZyBgZXBfaW5zZXJ0YCwgYGVwX21vZGlmeWAsIGBlcF9kZWxpdmVyX2V2ZW50YCwgYW5kIGBlcF9wb2xsYCwgYXJlIGFsbCBtb2RpZmllZC4gVGhleSYjMzk7cmUgYWxzbyB1c2luZyBgV1JJVEVfT05DRWAgYW5kIGBSRUFEX09OQ0VgIGZvciBgZXBpLSZndDtldmVudC5ldmVudHNgLCB3aGljaCBpcyBhIGdvb2Qgc2lnbiBmb3IgbWVtb3J5IG9yZGVyaW5nLiBBZGRpbmcgYSBjaGVjayBmb3IgYC1FSU5UUmAgd2l0aGluIGBlcF9wb2xsYCB0byB3YWtlIHVwIGBlcC0mZ3Q7d3FgIHNvdW5kcyByZWFzb25hYmxlLgoKVGhlIG1haW4gY29uY2VybiBpcywgb2YgY291cnNlLCBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgb3Bwb3J0dW5pdGllcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gbGVhaz8gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0LCBubywgaXQgc2hvdWxkbiYjMzk7dC4gVGhlIGNoYW5nZXMgc2VlbSBmb2N1c2VkIG9uIHRoZSBzdGF0ZSBtYWNoaW5lIGFuZCB0aG9zZSBhdG9taWMgZmxhZ3Mgd2l0aGluIGBlcGl0ZW1gLCB3aGljaCBpcyBhbiBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlLiBOb3RoaW5nIHVzZXItZmFjaW5nIGlzIGJlaW5nIGFsbG9jYXRlZCB3aXRoIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBgZXBfdHJ5X3NlbmRfZXZlbnRzYCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgcG9pbnQsIGFzIHRoYXQmIzM5O3MgaG93IGV2ZW50cyBnZXQgc2VudCB0byB1c2Vyc3BhY2UuIEJ1dCB0aGUgcGF0Y2ggKmRvZXNuJiMzOTt0KiBhcHBlYXIgdG8gY2hhbmdlICp3aGF0KiBpcyBzZW50LCBqdXN0IGhvdyBgZXBpdGVtYHMgYXJlIHF1ZXVlZCBhbmQgaGFuZGxlZC4KCldhaXQsIGBlcF90cnlfc2VuZF9ldmVudHNgIGNhbGxzIGBlcF9kZWxpdmVyX2V2ZW50YCwgd2hpY2ggZG9lcyBhIGBfX3B1dF91c2VyYCBvbiBgcmV2ZW50c2AgYW5kIGBlcGktJmd0O2V2ZW50LmRhdGFgLiBUaGF0JiMzOTtzIHRoZSByZWFsIHRlc3QuIFRoZSBjb2RlIGRvaW5nIHRoaXMgKmlzbiYjMzk7dCogdG91Y2hlZCBieSB0aGUgcGF0Y2g7IHdlJiMzOTtyZSBzdGlsbCBzYWZlLiBUaGUgcGF0Y2ggZG9lcyBtb2RpZnkgaG93IGBlcGktJmd0O2V2ZW50LmV2ZW50c2AgaXMgc2V0LCBidXQgaXQmIzM5O3Mgbm93IHVzaW5nIGBXUklURV9PTkNFYCwgd2hpY2ggc2hvdWxkbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBpc3N1ZXMgYW5kIGxvb2tzIHNhZmVyIHRoYW4gdGhlIHByZXZpb3VzIGFzc2lnbm1lbnQuIFNvLCBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgaGVyZS4KCkxldCYjMzk7cyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBUaGUgbmV3IGBhdG9taWNfdCBzdGF0ZWAgaW4gYHN0cnVjdCBlcGl0ZW1gIGxvb2tzIGludGVyZXN0aW5nLiBJdCYjMzk7cyBpbml0aWFsaXplZCBpbiBgZXBfaW5zZXJ0YC4gRWl0aGVyIGBhdG9taWNfc2V0KCZhbXA7ZXBpLSZndDtzdGF0ZSwgRVBfU1RBVEVfRkFTVClgIG9yIGxlZnQgYXMgMCwgd2hpY2ggc3VnZ2VzdHMgaXQgaXMgaW1wbGljaXRseSB6ZXJvZWQgYnkgYGttZW1fY2FjaGVfemFsbG9jYCBkdXJpbmcgYWxsb2NhdGlvbiBpbiBgZXBfaW5zZXJ0YC4gT2theSwgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUsIEkgbmVlZCB0byBjaGVjayB0aGUgYGVwX2luc2VydGAgYWxsb2NhdGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWVtX2NhY2hlX3phbGxvYy4qZXBpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXZlbnRwb2xsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXZlbnRwb2xsLmM9MTg5OT1zdGF0aWMgc3RydWN0IGVwaXRlbSAqZXBfYWxsb2NfZXBpdGVtKHN0cnVjdCBldmVudHBvbGwgKmVwLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTE5MDktXG5mcy9ldmVudHBvbGwuYzoxOTEwOlx0ZXBpID0ga21lbV9jYWNoZV96YWxsb2MoZXBpX2NhY2hlLCBHRlBfS0VSTkVMKTtcbmZzL2V2ZW50cG9sbC5jLTE5MTEtXHRpZiAodW5saWtlbHkoIWVwaSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg5NwoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiA3NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRXBvbGwgUGF0Y2ggYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGF0IHRoaXMgZXBvbGwgcGF0Y2guIFRoZSBjb2RlIGlzIHVzaW5nIGBrbWVtX2NhY2hlX3phbGxvY2AsIHdoaWNoIG1lYW5zIHRoZSBgZXBpLSZndDtzdGF0ZWAgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyBieSBkZWZhdWx0LiBUaGUgcGF0Y2ggdGhlbiBpbnRyb2R1Y2VzIGFuIGBhdG9taWNfc2V0YCB0byBgRVBfU1RBVEVfRkFTVGAgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucy4gU28sIGl0JiMzOTtzIGZ1bGx5IGluaXRpYWxpemVkLCBubyB3b3JyaWVzIHRoZXJlLgoKVGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzIHNlZW1zIHRvIGJlIGFib3V0IGNvbmN1cnJlbmN5IGFuZCBpbXBsZW1lbnRpbmcgbG9ja2xlc3MgZmFzdCBwYXRocy4gSSBzZWUgYWRkaXRpb25zIHRvIGBzdHJ1Y3QgZXBpdGVtYCB3aXRoIGF0b21pYyBzdGF0ZSBiaXRzLCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG9uIGBzdGF0ZWAsIGFuZCBsb2dpYyB0aGF0IG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBldmVudHMuIFRoZXkgYXJlIGFkZGluZyBgYXRvbWljX3Qgc3RhdGVgLiBUaGV5IGFyZSBtb2RpZnlpbmcgbG9naWMgb24gaG93IGV2ZW50cyBhcmUgaGFuZGxlZC4KClRoZSBtYWluIGNvbmNlcm4gaGVyZSB3b3VsZCBiZSByYWNlIGNvbmRpdGlvbnMsIG1pc3NlZCB3YWtldXBzLCBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3PigJRlc3NlbnRpYWxseSwgY2xhc3NpYyBjb25jdXJyZW5jeSBidWdzLiBUaGVzZSBhcmUgKmV4YWN0bHkqIHRoZSBraW5kcyBvZiBpc3N1ZXMgdGhhdCBLQVNBTiwgS0NTQU4sIGFuZCBMb2NrZGVwIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gS01TQU4sIGhvd2V2ZXIsIGlzIGRlc2lnbmVkIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBhbmQgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB0aGF0IGhlcmUuIFRoZSBuZXcgYGF0b21pY190IHN0YXRlYCBmaWVsZCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gSSBzZWUgbm8gc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSBlaXRoZXIsIHNvIHRoZXJlJiMzOTtzIG5vIHBvc3NpYmlsaXR5IG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBLTVNBTiBpc24mIzM5O3QgbmVjZXNzYXJ5IGZvciB0aGlzIHBhdGNoLiBUaGUgcmVsZXZhbnQgdG9vbHMgZm9yIHRoaXMga2luZCBvZiBjaGFuZ2UgYXJlIEtBU0FOLCBLQ1NBTiBhbmQgTG9ja2RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgZXBvbGwgdXNpbmcgYXRvbWljIHN0YXRlIGJpdHMgaW4gYHN0cnVjdCBlcGl0ZW1gLiBJdCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gbG9naWMsIGV2ZW50IGFjY291bnRpbmcsIGFuZCB3YWtldXBzLiBBbGwgbmV3IGZpZWxkcyAobGlrZSBgYXRvbWljX3Qgc3RhdGVgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSBga21lbV9jYWNoZV96YWxsb2NgIGFuZCBgYXRvbWljX3NldGApLCBhbmQgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciBlcG9sbCB1c2luZyBhdG9taWMgc3RhdGUgYml0cyBpbiBgc3RydWN0IGVwaXRlbWAuIEl0IG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBsb2dpYywgZXZlbnQgYWNjb3VudGluZywgYW5kIHdha2V1cHMuIEFsbCBuZXcgZmllbGRzIChsaWtlIGBhdG9taWNfdCBzdGF0ZWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAoZS5nLiwgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AgYW5kIGBhdG9taWNfc2V0YCksIGFuZCBubyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6NTA6MjQuODM1NjU3MjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQwNjA3MDQ1NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVQT0xMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fZXBvbGxfY3RsXCIsXG4gICAgXCJkb19lcG9sbF9jdGxfZmlsZVwiLFxuICAgIFwiZXBvbGxfc2VuZGV2ZW50c1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgZXBvbGwgdXNpbmcgYXRvbWljIHN0YXRlIGJpdHMgaW4gYHN0cnVjdCBlcGl0ZW1gLiBJdCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gbG9naWMsIGV2ZW50IGFjY291bnRpbmcsIGFuZCB3YWtldXBzLiBBbGwgbmV3IGZpZWxkcyAobGlrZSBgYXRvbWljX3Qgc3RhdGVgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSBga21lbV9jYWNoZV96YWxsb2NgIGFuZCBgYXRvbWljX3NldGApLCBhbmQgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgZXBvbGwgY2FsbGJhY2tzLCBhZGRpbmcgbmV3IHN0YXRlIGJpdHMgKEVQX1NUQVRFX0FDQ09VTlRFRCwgRVBfU1RBVEVfRkFTVCkgYW5kIG1vZGlmeWluZyB0aGUgY29yZSBldmVudCBkZWxpdmVyeSBhbmQgcG9sbGluZyBsb2dpYyBpbiBmcy9ldmVudHBvbGwuYy4gVGhpcyBhZmZlY3RzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIGhpZ2hseSByZWFjaGFibGUgdmlhIGVwb2xsIHN5c2NhbGxzIGFuZCBpb191cmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6NTA6MjQuODM1NjYyMDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MjUyMjIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg4OTI4NjliZDIzNjM0N2EyZmM5MjFmNzM5ZWY2N2NjMDYxMDFlOTBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMDI6NTA6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuY1xcbmluZGV4IGUwYzRiZjg4YTgzODMuLjYwMGQzZDJkNDc2MzYgMTAwNjQ0XFxuLS0tIGEvZnMvZXZlbnRwb2xsLmNcXG4rKysgYi9mcy9ldmVudHBvbGwuY1xcbkBAIC0yNDMsNiArMjQzLDE0IEBAIHN0cnVjdCBlcHBvbGxfZW50cnkge1xcbiBcXHR3YWl0X3F1ZXVlX2hlYWRfdCAqd2hlYWQ7XFxuIH07XFxuIFxcbisvKlxcbisgKiBGQVNUIGlzIHNldCBmb3IgZWxpZ2libGUgaXRlbXMgYXQgaW5zZXJ0aW9uLiBBQ0NPVU5URUQgdHJhY2tzIEZBU1QgaXRlbXNcXG4rICogd2hpbGUgdGhlIHJlYWR5IHBhdGggb3ducyB0aGVtIGFuZCBpcyBjbGVhcmVkIGltbWVkaWF0ZWx5IGJlZm9yZSByZS1wb2xsLlxcbisgKi9cXG4rZW51bSB7XFxuK1xcdEVQX1NUQVRFX0FDQ09VTlRFRFxcdD0gQklUKDApLFxcbitcXHRFUF9TVEFURV9GQVNUXFx0XFx0PSBCSVQoMSksXFxuK307XFxuIC8qXFxuICAqIEVhY2ggZmlsZSBkZXNjcmlwdG9yIGFkZGVkIHRvIHRoZSBldmVudHBvbGwgaW50ZXJmYWNlIHdpbGxcXG4gICogaGF2ZSBhbiBlbnRyeSBvZiB0aGlzIHR5cGUgbGlua2VkIHRvIHRoZSBcXFwicmJyXFxcIiBSQiB0cmVlLlxcbkBAIC0yNzEsNiArMjc5LDkgQEAgc3RydWN0IGVwaXRlbSB7XFxuIFxcdC8qIFRoZSBmaWxlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gdGhpcyBpdGVtIHJlZmVycyB0byAqL1xcbiBcXHRzdHJ1Y3QgZXBvbGxfa2V5IGZmZDtcXG4gXFxuK1xcdC8qIEF0b21pYyBzdGF0ZSBiaXRzLCBzZWUgdGhlIEVQX1NUQVRFXyogZW51bSBhYm92ZS4gKi9cXG4rXFx0YXRvbWljX3Qgc3RhdGU7XFxuK1xcbiBcXHQvKiBMaXN0IGNvbnRhaW5pbmcgcG9sbCB3YWl0IHF1ZXVlcyAqL1xcbiBcXHRzdHJ1Y3QgZXBwb2xsX2VudHJ5ICpwd3FsaXN0O1xcbiBcXG5AQCAtNjIwLDYgKzYzMSw2NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZXBfZXZlbnRzX2F2YWlsYWJsZShzdHJ1Y3QgZXZlbnRwb2xsICplcClcXG4gXFx0XFx0cmVhZF9zZXFjb3VudF9yZXRyeShcXHUwMDI2ZXAtXFx1MDAzZXNlcSwgc2VxKTtcXG4gfVxcbiBcXG4rLypcXG4rICogTGV0IEEgYmUgQUNDT1VOVEVEIGFuZCBCIGJlIGZpbGUgcmVhZGluZXNzLiBGdWxseSBvcmRlcmVkIGF0b21pYyBSTVdzXFxuKyAqIHBhaXIgVyhBPTApIGJlZm9yZSBSKEIpIHdpdGggVyhCKSBiZWZvcmUgUihBKSwgc28gYSBzY2FubmVyIGNhbm5vdCBtaXNzXFxuKyAqIEIgd2hpbGUgaXRzIGNhbGxiYWNrIHNraXBzIGFuIGFjY291bnRlZCBpdGVtLiBlcF9kb25lX3NjYW4oKSBhbmQgdGhlXFxuKyAqIGZhdGFsLXNpZ25hbCBoYW5kb2ZmIHBhc3MgcXVldWVkIGV2ZW50cyBiZXR3ZWVuIGV4Y2x1c2l2ZSB3YWl0ZXJzLlxcbisgKiBwb2xsX3dhaXQgdXNlcnMsIHByaXZhdGUgbW9kZXMgYW5kIHNwZWNpYWwgY2FsbGJhY2tzIHRha2UgdGhlIHNsb3cgcGF0aC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBlcF9zdGF0ZV90ZXN0KGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSwgdW5zaWduZWQgaW50IGJpdClcXG4re1xcbitcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNmVwaS1cXHUwMDNlc3RhdGUpIFxcdTAwMjYgYml0O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgZXBfcmVhZHlfZmFzdF9lbmFibGVkKGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSlcXG4re1xcbitcXHRyZXR1cm4gZXBfc3RhdGVfdGVzdChlcGksIEVQX1NUQVRFX0ZBU1QpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZXBfc2V0X3JlYWR5X2FjY291bnRlZChzdHJ1Y3QgZXBpdGVtICplcGkpXFxuK3tcXG4rXFx0aWYgKGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChlcGkpKVxcbitcXHRcXHRhdG9taWNfb3IoRVBfU1RBVEVfQUNDT1VOVEVELCBcXHUwMDI2ZXBpLVxcdTAwM2VzdGF0ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBlcF9wcmVwYXJlX3JlcG9sbChzdHJ1Y3QgZXBpdGVtICplcGkpXFxuK3tcXG4rXFx0aWYgKGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChlcGkpKVxcbitcXHRcXHRhdG9taWNfZmV0Y2hfYW5kbm90KEVQX1NUQVRFX0FDQ09VTlRFRCwgXFx1MDAyNmVwaS1cXHUwMDNlc3RhdGUpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBlcF9jYWxsYmFja19jYW5fc2tpcChzdHJ1Y3QgZXBpdGVtICplcGksIF9fcG9sbF90IHBvbGxmbGFncylcXG4re1xcbitcXHRfX3BvbGxfdCBldmVudHM7XFxuK1xcbitcXHRldmVudHMgPSBSRUFEX09OQ0UoZXBpLVxcdTAwM2VldmVudC5ldmVudHMpO1xcbitcXHRcXG4rXFx0LyogT25seSBpbnNlcnRpb24tdGltZSBjYW5kaWRhdGVzIG1heSB1c2UgdGhlIGxvY2tsZXNzIHBhdGguICovXFxuK1xcdGlmICghZXBfcmVhZHlfZmFzdF9lbmFibGVkKGVwaSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFxuK1xcdC8qIGVwX21vZGlmeSgpIGNhbiBzZWxlY3QgYSBwcml2YXRlIG1vZGUgdGhhdCByZXF1aXJlcyB0aGUgc2xvdyBwYXRoLiAqL1xcbitcXHRpZiAoZXZlbnRzIFxcdTAwMjYgRVBfUFJJVkFURV9CSVRTKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBwb2xsX3dhaXQgdXNlcnMgbXVzdCBiZSB3b2tlbiBieSB0aGlzIGNhbGxiYWNrLiAqL1xcbitcXHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2ZXBpLVxcdTAwM2VlcC1cXHUwMDNlcG9sbF93YWl0KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogUE9MTEZSRUUgdGVhcnMgZG93biB3YWl0IGVudHJpZXM7IFVSSU5HX1dBS0UgbXVzdCBwcm9wYWdhdGUuICovXFxuK1xcdGlmIChwb2xsZmxhZ3MgXFx1MDAyNiAoUE9MTEZSRUUgfCBFUE9MTF9VUklOR19XQUtFKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogVW5tYXRjaGVkIHdha2Uga2V5cyByZXRhaW4gdGhlIHNsb3ctcGF0aCBjYWxsYmFjayBzZW1hbnRpY3MuICovXFxuK1xcdGlmIChwb2xsZmxhZ3MgXFx1MDAyNlxcdTAwMjYgIShwb2xsZmxhZ3MgXFx1MDAyNiBldmVudHMpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBGdWxseSBvcmRlcmVkIFJNVyBwYWlycyB0aGUgQiB1cGRhdGUgd2l0aCB0aGUgc2Nhbm5lcidzIEEgY2xlYXIuICovXFxuK1xcdHJldHVybiBhdG9taWNfZmV0Y2hfb3IoMCwgXFx1MDAyNmVwaS1cXHUwMDNlc3RhdGUpIFxcdTAwMjYgRVBfU1RBVEVfQUNDT1VOVEVEO1xcbit9XFxuK1xcbiAjaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTExcXG4gLyoqXFxuICAqIGJ1c3lfbG9vcF9lcF90aW1lb3V0IC0gY2hlY2sgaWYgYnVzeSBwb2xsIGhhcyB0aW1lZCBvdXQuIFRoZSB0aW1lb3V0IHZhbHVlXFxuQEAgLTEwMDcsNiArMTA3Nyw3IEBAIHN0YXRpYyB2b2lkIGVwX2RvbmVfc2NhbihzdHJ1Y3QgZXZlbnRwb2xsICplcCxcXG4gXFx0XFx0XFx0ICogcmV2ZXJzZXMgdGhlIGl0ZXJhdGlvbiBvcmRlciBpbnRvIEZJRk8uXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2ZXBpLVxcdTAwM2VyZGxsaW5rLCBcXHUwMDI2ZXAtXFx1MDAzZXJkbGxpc3QpO1xcbitcXHRcXHRcXHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XFxuIFxcdFxcdFxcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTEzMDMsOCArMTM3NCwxMCBAQCBzdGF0aWMgX19wb2xsX3QgX19lcF9ldmVudHBvbGxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCwgaW50IGRlcFxcbiBcXHRtdXRleF9sb2NrX25lc3RlZChcXHUwMDI2ZXAtXFx1MDAzZW10eCwgZGVwdGgpO1xcbiBcXHRlcF9zdGFydF9zY2FuKGVwLCBcXHUwMDI2c2Nhbl9iYXRjaCk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlcGksIHRtcCwgXFx1MDAyNnNjYW5fYmF0Y2gsIHJkbGxpbmspIHtcXG4rXFx0XFx0ZXBfcHJlcGFyZV9yZXBvbGwoZXBpKTtcXG4gXFx0XFx0aWYgKGVwX2l0ZW1fcG9sbChlcGksIFxcdTAwMjZwdCwgZGVwdGggKyAxKSkge1xcbiBcXHRcXHRcXHRyZXMgPSBFUE9MTElOIHwgRVBPTExSRE5PUk07XFxuK1xcdFxcdFxcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdC8qXFxuQEAgLTE0OTcsNiArMTU3MCw5IEBAIHN0YXRpYyBpbnQgZXBfcG9sbF9jYWxsYmFjayh3YWl0X3F1ZXVlX2VudHJ5X3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGludCBld2FrZSA9IDA7XFxuIFxcbitcXHRpZiAoZXBfY2FsbGJhY2tfY2FuX3NraXAoZXBpLCBwb2xsZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZlcC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0ZXBfc2V0X2J1c3lfcG9sbF9uYXBpX2lkKGVwaSk7XFxuQEAgLTE1MjksMTEgKzE2MDUsMTMgQEAgc3RhdGljIGludCBlcF9wb2xsX2NhbGxiYWNrKHdhaXRfcXVldWVfZW50cnlfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZcXG4gXFx0XFx0aWYgKCFlcGlfb25fb3ZmbGlzdChlcGkpKSB7XFxuIFxcdFxcdFxcdGVwaS1cXHUwMDNlb3ZmbGlzdF9uZXh0ID0gUkVBRF9PTkNFKGVwLVxcdTAwM2VvdmZsaXN0KTtcXG4gXFx0XFx0XFx0V1JJVEVfT05DRShlcC1cXHUwMDNlb3ZmbGlzdCwgZXBpKTtcXG4rXFx0XFx0XFx0ZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpO1xcbiBcXHRcXHRcXHRlcF9wbV9zdGF5X2F3YWtlX3JjdShlcGkpO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSBpZiAoIWVwX2lzX2xpbmtlZChlcGkpKSB7XFxuIFxcdFxcdC8qIEluIHRoZSB1c3VhbCBjYXNlLCBhZGQgZXZlbnQgdG8gcmVhZHkgbGlzdC4gKi9cXG4gXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZXBpLVxcdTAwM2VyZGxsaW5rLCBcXHUwMDI2ZXAtXFx1MDAzZXJkbGxpc3QpO1xcbitcXHRcXHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XFxuIFxcdFxcdGVwX3BtX3N0YXlfYXdha2VfcmN1KGVwaSk7XFxuIFxcdH1cXG4gXFxuQEAgLTE5MTIsNiArMTk5MCwxMyBAQCBzdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCxcXG4gXFx0aWYgKElTX0VSUihlcGkpKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihlcGkpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogTG9ja2xlc3MgY2FuZGlkYXRlcyBhcmUgcGxhaW4gbGV2ZWwtdHJpZ2dlcmVkIGludGVyZXN0cztcXG4rXFx0ICogcHJpdmF0ZSBtb2RlcyBhbmQgbmVzdGVkIGVwb2xsIGNoYW5nZSB0aGUgY2FsbGJhY2sgY29udHJhY3QuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXRlcCBcXHUwMDI2XFx1MDAyNiAhKGV2ZW50LVxcdTAwM2VldmVudHMgXFx1MDAyNiBFUF9QUklWQVRFX0JJVFMpKVxcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZlcGktXFx1MDAzZXN0YXRlLCBFUF9TVEFURV9GQVNUKTtcXG4rXFxuIFxcdGVycm9yID0gZXBfcmVnaXN0ZXJfZXBpdGVtKGN0eCwgZXAsIGVwaSwgdGVwLCBmdWxsX2NoZWNrKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuQEAgLTE5NTYsNiArMjA0MSw3IEBAIHN0YXRpYyBpbnQgZXBfaW5zZXJ0KHN0cnVjdCBlcF9jdGxfY3R4ICpjdHgsIHN0cnVjdCBldmVudHBvbGwgKmVwLFxcbiBcXG4gXFx0aWYgKHJldmVudHMgXFx1MDAyNlxcdTAwMjYgIWVwX2lzX2xpbmtlZChlcGkpKSB7XFxuIFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmVwaS1cXHUwMDNlcmRsbGluaywgXFx1MDAyNmVwLVxcdTAwM2VyZGxsaXN0KTtcXG4rXFx0XFx0ZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpO1xcbiBcXHRcXHRlcF9wbV9zdGF5X2F3YWtlKGVwaSk7XFxuIFxcbiBcXHRcXHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2ZXAtXFx1MDAzZXdxKSlcXG5AQCAtMTk5Miw3ICsyMDc4LDcgQEAgc3RhdGljIGludCBlcF9tb2RpZnkoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcXG4gXFx0ICogb3RoZXJ3aXNlIHdlIG1pZ2h0IG1pc3MgYW4gZXZlbnQgdGhhdCBoYXBwZW5zIGJldHdlZW4gdGhlXFxuIFxcdCAqIGZfb3AtXFx1MDAzZXBvbGwoKSBjYWxsIGFuZCB0aGUgbmV3IGV2ZW50IHNldCByZWdpc3RlcmluZy5cXG4gXFx0ICovXFxuLVxcdGVwaS1cXHUwMDNlZXZlbnQuZXZlbnRzID0gZXZlbnQtXFx1MDAzZWV2ZW50czsgLyogbmVlZCBiYXJyaWVyIGJlbG93ICovXFxuK1xcdFdSSVRFX09OQ0UoZXBpLVxcdTAwM2VldmVudC5ldmVudHMsIGV2ZW50LVxcdTAwM2VldmVudHMpOyAvKiBuZWVkIGJhcnJpZXIgYmVsb3cgKi9cXG4gXFx0ZXBpLVxcdTAwM2VldmVudC5kYXRhID0gZXZlbnQtXFx1MDAzZWRhdGE7IC8qIHByb3RlY3RlZCBieSBtdHggKi9cXG4gXFx0aWYgKGVwaS1cXHUwMDNlZXZlbnQuZXZlbnRzIFxcdTAwMjYgRVBPTExXQUtFVVApIHtcXG4gXFx0XFx0aWYgKCFlcF9oYXNfd2FrZXVwX3NvdXJjZShlcGkpKVxcbkBAIC0yMDMxLDYgKzIxMTcsNyBAQCBzdGF0aWMgaW50IGVwX21vZGlmeShzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxcbiBcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZlcC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdGlmICghZXBfaXNfbGlua2VkKGVwaSkpIHtcXG4gXFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZXBpLVxcdTAwM2VyZGxsaW5rLCBcXHUwMDI2ZXAtXFx1MDAzZXJkbGxpc3QpO1xcbitcXHRcXHRcXHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XFxuIFxcdFxcdFxcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcXG4gXFxuIFxcdFxcdFxcdC8qIE5vdGlmeSB3YWl0aW5nIHRhc2tzIHRoYXQgZXZlbnRzIGFyZSBhdmFpbGFibGUgKi9cXG5AQCAtMjA4NCw2ICsyMTcxLDcgQEAgc3RhdGljIGludCBlcF9kZWxpdmVyX2V2ZW50KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksXFxuIFxcdFxcdF9fcG1fcmVsYXgod3MpO1xcbiBcXHR9XFxuIFxcbitcXHRlcF9wcmVwYXJlX3JlcG9sbChlcGkpO1xcbiBcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZlcGktXFx1MDAzZXJkbGxpbmspO1xcbiBcXG4gXFx0LypcXG5AQCAtMjEwNCwxMyArMjE5MiwxNSBAQCBzdGF0aWMgaW50IGVwX2RlbGl2ZXJfZXZlbnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcXG4gXFx0XFx0ICogYXR0ZW1wdC5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZlcGktXFx1MDAzZXJkbGxpbmssIHNjYW5fYmF0Y2gpO1xcbitcXHRcXHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XFxuIFxcdFxcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdH1cXG4gXFx0KnVldmVudHMgPSBuZXh0O1xcbiBcXG4gXFx0aWYgKGVwaS1cXHUwMDNlZXZlbnQuZXZlbnRzIFxcdTAwMjYgRVBPTExPTkVTSE9UKSB7XFxuLVxcdFxcdGVwaS1cXHUwMDNlZXZlbnQuZXZlbnRzIFxcdTAwMjY9IEVQX1BSSVZBVEVfQklUUztcXG4rXFx0XFx0V1JJVEVfT05DRShlcGktXFx1MDAzZWV2ZW50LmV2ZW50cyxcXG4rXFx0XFx0XFx0ICAgUkVBRF9PTkNFKGVwaS1cXHUwMDNlZXZlbnQuZXZlbnRzKSBcXHUwMDI2IEVQX1BSSVZBVEVfQklUUyk7XFxuIFxcdH0gZWxzZSBpZiAoIShlcGktXFx1MDAzZWV2ZW50LmV2ZW50cyBcXHUwMDI2IEVQT0xMRVQpKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIExldmVsLXRyaWdnZXJlZDogcmUtcXVldWUgc28gdGhlIG5leHQgZXBvbGxfd2FpdCgpXFxuQEAgLTIxMjAsNiArMjIxMCw3IEBAIHN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxcbiBcXHRcXHQgKiBkdXJpbmcgc2NhbnMuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZlcGktXFx1MDAzZXJkbGxpbmssIFxcdTAwMjZlcC1cXHUwMDNlcmRsbGlzdCk7XFxuK1xcdFxcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcXG4gXFx0XFx0ZXBfcG1fc3RheV9hd2FrZShlcGkpO1xcbiBcXHR9XFxuIFxcdHJldHVybiAxO1xcbkBAIC0yMjg3LDYgKzIzNzgsMTEgQEAgc3RhdGljIGludCBlcF9wb2xsKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXFxuIFxcdHdoaWxlICgxKSB7XFxuIFxcdFxcdGlmIChlYXZhaWwpIHtcXG4gXFx0XFx0XFx0cmVzID0gZXBfdHJ5X3NlbmRfZXZlbnRzKGVwLCBldmVudHMsIG1heGV2ZW50cyk7XFxuK1xcdFxcdFxcdGlmIChyZXMgPT0gLUVJTlRSKSB7XFxuK1xcdFxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmVwLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0XFx0d2FrZV91cChcXHUwMDI2ZXAtXFx1MDAzZXdxKTtcXG4rXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZlcC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKHJlcylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjo1MDoyNS4yMTg3NjMzOTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDIwNDg4NTA1NDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVQT0xMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fZXBvbGxfY3RsXCIsXG4gICAgXCJkb19lcG9sbF9jdGxfZmlsZVwiLFxuICAgIFwiZXBvbGxfc2VuZGV2ZW50c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIGVwb2xsIGNhbGxiYWNrcywgYWRkaW5nIG5ldyBzdGF0ZSBiaXRzIChFUF9TVEFURV9BQ0NPVU5URUQsIEVQX1NUQVRFX0ZBU1QpIGFuZCBtb2RpZnlpbmcgdGhlIGNvcmUgZXZlbnQgZGVsaXZlcnkgYW5kIHBvbGxpbmcgbG9naWMgaW4gZnMvZXZlbnRwb2xsLmMuIFRoaXMgYWZmZWN0cyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGFuZCBpcyBoaWdobHkgcmVhY2hhYmxlIHZpYSBlcG9sbCBzeXNjYWxscyBhbmQgaW9fdXJpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg4OTI4NjliZDIzNjM0N2EyZmM5MjFmNzM5ZWY2N2NjMDYxMDFlOTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwMjo1MDoyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmNcbmluZGV4IGUwYzRiZjg4YTgzODMuLjYwMGQzZDJkNDc2MzYgMTAwNjQ0XG4tLS0gYS9mcy9ldmVudHBvbGwuY1xuKysrIGIvZnMvZXZlbnRwb2xsLmNcbkBAIC0yNDMsNiArMjQzLDE0IEBAIHN0cnVjdCBlcHBvbGxfZW50cnkge1xuIFx0d2FpdF9xdWV1ZV9oZWFkX3QgKndoZWFkO1xuIH07XG4gXG4rLypcbisgKiBGQVNUIGlzIHNldCBmb3IgZWxpZ2libGUgaXRlbXMgYXQgaW5zZXJ0aW9uLiBBQ0NPVU5URUQgdHJhY2tzIEZBU1QgaXRlbXNcbisgKiB3aGlsZSB0aGUgcmVhZHkgcGF0aCBvd25zIHRoZW0gYW5kIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHJlLXBvbGwuXG4rICovXG4rZW51bSB7XG4rXHRFUF9TVEFURV9BQ0NPVU5URURcdD0gQklUKDApLFxuK1x0RVBfU1RBVEVfRkFTVFx0XHQ9IEJJVCgxKSxcbit9O1xuIC8qXG4gICogRWFjaCBmaWxlIGRlc2NyaXB0b3IgYWRkZWQgdG8gdGhlIGV2ZW50cG9sbCBpbnRlcmZhY2Ugd2lsbFxuICAqIGhhdmUgYW4gZW50cnkgb2YgdGhpcyB0eXBlIGxpbmtlZCB0byB0aGUgXCJyYnJcIiBSQiB0cmVlLlxuQEAgLTI3MSw2ICsyNzksOSBAQCBzdHJ1Y3QgZXBpdGVtIHtcbiBcdC8qIFRoZSBmaWxlIGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gdGhpcyBpdGVtIHJlZmVycyB0byAqL1xuIFx0c3RydWN0IGVwb2xsX2tleSBmZmQ7XG4gXG4rXHQvKiBBdG9taWMgc3RhdGUgYml0cywgc2VlIHRoZSBFUF9TVEFURV8qIGVudW0gYWJvdmUuICovXG4rXHRhdG9taWNfdCBzdGF0ZTtcbitcbiBcdC8qIExpc3QgY29udGFpbmluZyBwb2xsIHdhaXQgcXVldWVzICovXG4gXHRzdHJ1Y3QgZXBwb2xsX2VudHJ5ICpwd3FsaXN0O1xuIFxuQEAgLTYyMCw2ICs2MzEsNjUgQEAgc3RhdGljIGlubGluZSBib29sIGVwX2V2ZW50c19hdmFpbGFibGUoc3RydWN0IGV2ZW50cG9sbCAqZXApXG4gXHRcdHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2ZXAtXHUwMDNlc2VxLCBzZXEpO1xuIH1cbiBcbisvKlxuKyAqIExldCBBIGJlIEFDQ09VTlRFRCBhbmQgQiBiZSBmaWxlIHJlYWRpbmVzcy4gRnVsbHkgb3JkZXJlZCBhdG9taWMgUk1Xc1xuKyAqIHBhaXIgVyhBPTApIGJlZm9yZSBSKEIpIHdpdGggVyhCKSBiZWZvcmUgUihBKSwgc28gYSBzY2FubmVyIGNhbm5vdCBtaXNzXG4rICogQiB3aGlsZSBpdHMgY2FsbGJhY2sgc2tpcHMgYW4gYWNjb3VudGVkIGl0ZW0uIGVwX2RvbmVfc2NhbigpIGFuZCB0aGVcbisgKiBmYXRhbC1zaWduYWwgaGFuZG9mZiBwYXNzIHF1ZXVlZCBldmVudHMgYmV0d2VlbiBleGNsdXNpdmUgd2FpdGVycy5cbisgKiBwb2xsX3dhaXQgdXNlcnMsIHByaXZhdGUgbW9kZXMgYW5kIHNwZWNpYWwgY2FsbGJhY2tzIHRha2UgdGhlIHNsb3cgcGF0aC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgZXBfc3RhdGVfdGVzdChjb25zdCBzdHJ1Y3QgZXBpdGVtICplcGksIHVuc2lnbmVkIGludCBiaXQpXG4re1xuK1x0cmV0dXJuIGF0b21pY19yZWFkKFx1MDAyNmVwaS1cdTAwM2VzdGF0ZSkgXHUwMDI2IGJpdDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sIGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgZXBpdGVtICplcGkpXG4re1xuK1x0cmV0dXJuIGVwX3N0YXRlX3Rlc3QoZXBpLCBFUF9TVEFURV9GQVNUKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoc3RydWN0IGVwaXRlbSAqZXBpKVxuK3tcbitcdGlmIChlcF9yZWFkeV9mYXN0X2VuYWJsZWQoZXBpKSlcbitcdFx0YXRvbWljX29yKEVQX1NUQVRFX0FDQ09VTlRFRCwgXHUwMDI2ZXBpLVx1MDAzZXN0YXRlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGVwX3ByZXBhcmVfcmVwb2xsKHN0cnVjdCBlcGl0ZW0gKmVwaSlcbit7XG4rXHRpZiAoZXBfcmVhZHlfZmFzdF9lbmFibGVkKGVwaSkpXG4rXHRcdGF0b21pY19mZXRjaF9hbmRub3QoRVBfU1RBVEVfQUNDT1VOVEVELCBcdTAwMjZlcGktXHUwMDNlc3RhdGUpO1xuK31cbitcbitzdGF0aWMgYm9vbCBlcF9jYWxsYmFja19jYW5fc2tpcChzdHJ1Y3QgZXBpdGVtICplcGksIF9fcG9sbF90IHBvbGxmbGFncylcbit7XG4rXHRfX3BvbGxfdCBldmVudHM7XG4rXG4rXHRldmVudHMgPSBSRUFEX09OQ0UoZXBpLVx1MDAzZWV2ZW50LmV2ZW50cyk7XG4rXHRcbitcdC8qIE9ubHkgaW5zZXJ0aW9uLXRpbWUgY2FuZGlkYXRlcyBtYXkgdXNlIHRoZSBsb2NrbGVzcyBwYXRoLiAqL1xuK1x0aWYgKCFlcF9yZWFkeV9mYXN0X2VuYWJsZWQoZXBpKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XG4rXHQvKiBlcF9tb2RpZnkoKSBjYW4gc2VsZWN0IGEgcHJpdmF0ZSBtb2RlIHRoYXQgcmVxdWlyZXMgdGhlIHNsb3cgcGF0aC4gKi9cbitcdGlmIChldmVudHMgXHUwMDI2IEVQX1BSSVZBVEVfQklUUylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogcG9sbF93YWl0IHVzZXJzIG11c3QgYmUgd29rZW4gYnkgdGhpcyBjYWxsYmFjay4gKi9cbitcdGlmICh3YWl0cXVldWVfYWN0aXZlKFx1MDAyNmVwaS1cdTAwM2VlcC1cdTAwM2Vwb2xsX3dhaXQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBQT0xMRlJFRSB0ZWFycyBkb3duIHdhaXQgZW50cmllczsgVVJJTkdfV0FLRSBtdXN0IHByb3BhZ2F0ZS4gKi9cbitcdGlmIChwb2xsZmxhZ3MgXHUwMDI2IChQT0xMRlJFRSB8IEVQT0xMX1VSSU5HX1dBS0UpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBVbm1hdGNoZWQgd2FrZSBrZXlzIHJldGFpbiB0aGUgc2xvdy1wYXRoIGNhbGxiYWNrIHNlbWFudGljcy4gKi9cbitcdGlmIChwb2xsZmxhZ3MgXHUwMDI2XHUwMDI2ICEocG9sbGZsYWdzIFx1MDAyNiBldmVudHMpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBGdWxseSBvcmRlcmVkIFJNVyBwYWlycyB0aGUgQiB1cGRhdGUgd2l0aCB0aGUgc2Nhbm5lcidzIEEgY2xlYXIuICovXG4rXHRyZXR1cm4gYXRvbWljX2ZldGNoX29yKDAsIFx1MDAyNmVwaS1cdTAwM2VzdGF0ZSkgXHUwMDI2IEVQX1NUQVRFX0FDQ09VTlRFRDtcbit9XG4rXG4gI2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMXG4gLyoqXG4gICogYnVzeV9sb29wX2VwX3RpbWVvdXQgLSBjaGVjayBpZiBidXN5IHBvbGwgaGFzIHRpbWVkIG91dC4gVGhlIHRpbWVvdXQgdmFsdWVcbkBAIC0xMDA3LDYgKzEwNzcsNyBAQCBzdGF0aWMgdm9pZCBlcF9kb25lX3NjYW4oc3RydWN0IGV2ZW50cG9sbCAqZXAsXG4gXHRcdFx0ICogcmV2ZXJzZXMgdGhlIGl0ZXJhdGlvbiBvcmRlciBpbnRvIEZJRk8uXG4gXHRcdFx0ICovXG4gXHRcdFx0bGlzdF9hZGQoXHUwMDI2ZXBpLVx1MDAzZXJkbGxpbmssIFx1MDAyNmVwLVx1MDAzZXJkbGxpc3QpO1xuK1x0XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0XHRlcF9wbV9zdGF5X2F3YWtlKGVwaSk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xMzAzLDggKzEzNzQsMTAgQEAgc3RhdGljIF9fcG9sbF90IF9fZXBfZXZlbnRwb2xsX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQsIGludCBkZXBcbiBcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNmVwLVx1MDAzZW10eCwgZGVwdGgpO1xuIFx0ZXBfc3RhcnRfc2NhbihlcCwgXHUwMDI2c2Nhbl9iYXRjaCk7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXBpLCB0bXAsIFx1MDAyNnNjYW5fYmF0Y2gsIHJkbGxpbmspIHtcbitcdFx0ZXBfcHJlcGFyZV9yZXBvbGwoZXBpKTtcbiBcdFx0aWYgKGVwX2l0ZW1fcG9sbChlcGksIFx1MDAyNnB0LCBkZXB0aCArIDEpKSB7XG4gXHRcdFx0cmVzID0gRVBPTExJTiB8IEVQT0xMUkROT1JNO1xuK1x0XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKlxuQEAgLTE0OTcsNiArMTU3MCw5IEBAIHN0YXRpYyBpbnQgZXBfcG9sbF9jYWxsYmFjayh3YWl0X3F1ZXVlX2VudHJ5X3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IGV3YWtlID0gMDtcbiBcbitcdGlmIChlcF9jYWxsYmFja19jYW5fc2tpcChlcGksIHBvbGxmbGFncykpXG4rXHRcdHJldHVybiAxO1xuK1xuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZXAtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuIFx0ZXBfc2V0X2J1c3lfcG9sbF9uYXBpX2lkKGVwaSk7XG5AQCAtMTUyOSwxMSArMTYwNSwxMyBAQCBzdGF0aWMgaW50IGVwX3BvbGxfY2FsbGJhY2sod2FpdF9xdWV1ZV9lbnRyeV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdlxuIFx0XHRpZiAoIWVwaV9vbl9vdmZsaXN0KGVwaSkpIHtcbiBcdFx0XHRlcGktXHUwMDNlb3ZmbGlzdF9uZXh0ID0gUkVBRF9PTkNFKGVwLVx1MDAzZW92Zmxpc3QpO1xuIFx0XHRcdFdSSVRFX09OQ0UoZXAtXHUwMDNlb3ZmbGlzdCwgZXBpKTtcbitcdFx0XHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XG4gXHRcdFx0ZXBfcG1fc3RheV9hd2FrZV9yY3UoZXBpKTtcbiBcdFx0fVxuIFx0fSBlbHNlIGlmICghZXBfaXNfbGlua2VkKGVwaSkpIHtcbiBcdFx0LyogSW4gdGhlIHVzdWFsIGNhc2UsIGFkZCBldmVudCB0byByZWFkeSBsaXN0LiAqL1xuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmVwaS1cdTAwM2VyZGxsaW5rLCBcdTAwMjZlcC1cdTAwM2VyZGxsaXN0KTtcbitcdFx0ZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpO1xuIFx0XHRlcF9wbV9zdGF5X2F3YWtlX3JjdShlcGkpO1xuIFx0fVxuIFxuQEAgLTE5MTIsNiArMTk5MCwxMyBAQCBzdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCxcbiBcdGlmIChJU19FUlIoZXBpKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZXBpKTtcbiBcbitcdC8qXG4rXHQgKiBMb2NrbGVzcyBjYW5kaWRhdGVzIGFyZSBwbGFpbiBsZXZlbC10cmlnZ2VyZWQgaW50ZXJlc3RzO1xuK1x0ICogcHJpdmF0ZSBtb2RlcyBhbmQgbmVzdGVkIGVwb2xsIGNoYW5nZSB0aGUgY2FsbGJhY2sgY29udHJhY3QuXG4rXHQgKi9cbitcdGlmICghdGVwIFx1MDAyNlx1MDAyNiAhKGV2ZW50LVx1MDAzZWV2ZW50cyBcdTAwMjYgRVBfUFJJVkFURV9CSVRTKSlcbitcdFx0YXRvbWljX3NldChcdTAwMjZlcGktXHUwMDNlc3RhdGUsIEVQX1NUQVRFX0ZBU1QpO1xuK1xuIFx0ZXJyb3IgPSBlcF9yZWdpc3Rlcl9lcGl0ZW0oY3R4LCBlcCwgZXBpLCB0ZXAsIGZ1bGxfY2hlY2spO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtMTk1Niw2ICsyMDQxLDcgQEAgc3RhdGljIGludCBlcF9pbnNlcnQoc3RydWN0IGVwX2N0bF9jdHggKmN0eCwgc3RydWN0IGV2ZW50cG9sbCAqZXAsXG4gXG4gXHRpZiAocmV2ZW50cyBcdTAwMjZcdTAwMjYgIWVwX2lzX2xpbmtlZChlcGkpKSB7XG4gXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZXBpLVx1MDAzZXJkbGxpbmssIFx1MDAyNmVwLVx1MDAzZXJkbGxpc3QpO1xuK1x0XHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XG4gXHRcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcbiBcbiBcdFx0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2ZXAtXHUwMDNld3EpKVxuQEAgLTE5OTIsNyArMjA3OCw3IEBAIHN0YXRpYyBpbnQgZXBfbW9kaWZ5KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksXG4gXHQgKiBvdGhlcndpc2Ugd2UgbWlnaHQgbWlzcyBhbiBldmVudCB0aGF0IGhhcHBlbnMgYmV0d2VlbiB0aGVcbiBcdCAqIGZfb3AtXHUwMDNlcG9sbCgpIGNhbGwgYW5kIHRoZSBuZXcgZXZlbnQgc2V0IHJlZ2lzdGVyaW5nLlxuIFx0ICovXG4tXHRlcGktXHUwMDNlZXZlbnQuZXZlbnRzID0gZXZlbnQtXHUwMDNlZXZlbnRzOyAvKiBuZWVkIGJhcnJpZXIgYmVsb3cgKi9cbitcdFdSSVRFX09OQ0UoZXBpLVx1MDAzZWV2ZW50LmV2ZW50cywgZXZlbnQtXHUwMDNlZXZlbnRzKTsgLyogbmVlZCBiYXJyaWVyIGJlbG93ICovXG4gXHRlcGktXHUwMDNlZXZlbnQuZGF0YSA9IGV2ZW50LVx1MDAzZWRhdGE7IC8qIHByb3RlY3RlZCBieSBtdHggKi9cbiBcdGlmIChlcGktXHUwMDNlZXZlbnQuZXZlbnRzIFx1MDAyNiBFUE9MTFdBS0VVUCkge1xuIFx0XHRpZiAoIWVwX2hhc193YWtldXBfc291cmNlKGVwaSkpXG5AQCAtMjAzMSw2ICsyMTE3LDcgQEAgc3RhdGljIGludCBlcF9tb2RpZnkoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZlcC1cdTAwM2Vsb2NrKTtcbiBcdFx0aWYgKCFlcF9pc19saW5rZWQoZXBpKSkge1xuIFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZXBpLVx1MDAzZXJkbGxpbmssIFx1MDAyNmVwLVx1MDAzZXJkbGxpc3QpO1xuK1x0XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0XHRlcF9wbV9zdGF5X2F3YWtlKGVwaSk7XG4gXG4gXHRcdFx0LyogTm90aWZ5IHdhaXRpbmcgdGFza3MgdGhhdCBldmVudHMgYXJlIGF2YWlsYWJsZSAqL1xuQEAgLTIwODQsNiArMjE3MSw3IEBAIHN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxuIFx0XHRfX3BtX3JlbGF4KHdzKTtcbiBcdH1cbiBcbitcdGVwX3ByZXBhcmVfcmVwb2xsKGVwaSk7XG4gXHRsaXN0X2RlbF9pbml0KFx1MDAyNmVwaS1cdTAwM2VyZGxsaW5rKTtcbiBcbiBcdC8qXG5AQCAtMjEwNCwxMyArMjE5MiwxNSBAQCBzdGF0aWMgaW50IGVwX2RlbGl2ZXJfZXZlbnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcbiBcdFx0ICogYXR0ZW1wdC5cbiBcdFx0ICovXG4gXHRcdGxpc3RfYWRkKFx1MDAyNmVwaS1cdTAwM2VyZGxsaW5rLCBzY2FuX2JhdGNoKTtcbitcdFx0ZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpO1xuIFx0XHRlcF9wbV9zdGF5X2F3YWtlKGVwaSk7XG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0fVxuIFx0KnVldmVudHMgPSBuZXh0O1xuIFxuIFx0aWYgKGVwaS1cdTAwM2VldmVudC5ldmVudHMgXHUwMDI2IEVQT0xMT05FU0hPVCkge1xuLVx0XHRlcGktXHUwMDNlZXZlbnQuZXZlbnRzIFx1MDAyNj0gRVBfUFJJVkFURV9CSVRTO1xuK1x0XHRXUklURV9PTkNFKGVwaS1cdTAwM2VldmVudC5ldmVudHMsXG4rXHRcdFx0ICAgUkVBRF9PTkNFKGVwaS1cdTAwM2VldmVudC5ldmVudHMpIFx1MDAyNiBFUF9QUklWQVRFX0JJVFMpO1xuIFx0fSBlbHNlIGlmICghKGVwaS1cdTAwM2VldmVudC5ldmVudHMgXHUwMDI2IEVQT0xMRVQpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIExldmVsLXRyaWdnZXJlZDogcmUtcXVldWUgc28gdGhlIG5leHQgZXBvbGxfd2FpdCgpXG5AQCAtMjEyMCw2ICsyMjEwLDcgQEAgc3RhdGljIGludCBlcF9kZWxpdmVyX2V2ZW50KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksXG4gXHRcdCAqIGR1cmluZyBzY2Fucy5cbiBcdFx0ICovXG4gXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZXBpLVx1MDAzZXJkbGxpbmssIFx1MDAyNmVwLVx1MDAzZXJkbGxpc3QpO1xuK1x0XHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XG4gXHRcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcbiBcdH1cbiBcdHJldHVybiAxO1xuQEAgLTIyODcsNiArMjM3OCwxMSBAQCBzdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcbiBcdHdoaWxlICgxKSB7XG4gXHRcdGlmIChlYXZhaWwpIHtcbiBcdFx0XHRyZXMgPSBlcF90cnlfc2VuZF9ldmVudHMoZXAsIGV2ZW50cywgbWF4ZXZlbnRzKTtcbitcdFx0XHRpZiAocmVzID09IC1FSU5UUikge1xuK1x0XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZlcC1cdTAwM2Vsb2NrKTtcbitcdFx0XHRcdHdha2VfdXAoXHUwMDI2ZXAtXHUwMDNld3EpO1xuK1x0XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmVwLVx1MDAzZWxvY2spO1xuK1x0XHRcdH1cbiBcdFx0XHRpZiAocmVzKVxuIFx0XHRcdFx0cmV0dXJuIHJlcztcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6NTA6MjUuMjE4NzY0NjE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4NzIwNzg2OTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFcG9sbCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UndmUgZ290IGEgcGF0Y2ggdG91Y2hpbmcgYGZzL2V2ZW50cG9sbC5jYCwgd2hpY2ggaXMgYSBjb3JlIGtlcm5lbCBjb21wb25lbnQsIHNvIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBiZSBmdXp6aW5nLiBUaGlzIHBhdGNoIGlzIGFkZGluZyBhIGZhc3QgcGF0aCBmb3IgZXBvbGwgY2FsbGJhY2tzLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmcm9tIGEgcGVyZm9ybWFuY2UgYW5kLCBwb3RlbnRpYWxseSwgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGVwX2NhbGxiYWNrX2Nhbl9za2lwKClgIGlzIHRoZSBrZXkuIEl0J3MgZGVzaWduZWQgdG8gYnlwYXNzIHRoZSBzcGlubG9jayBpbiBgZXBfcG9sbF9jYWxsYmFja2AgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBhbmQgdGhhdCBraW5kIG9mIG9wdGltaXphdGlvbiBpcyBvZnRlbiBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGUgbmV3IHN0YXRlIGJpdHMsIGBFUF9TVEFURV9BQ0NPVU5URURgIGFuZCBgRVBfU1RBVEVfRkFTVGAgaW4gYHN0cnVjdCBlcGl0ZW1gLCBmdXJ0aGVyIGNlbWVudCB0aGlzIG5ldyBmYXN0IHBhdGguXG5cblNvLCBsZXQncyBpZGVudGlmeSB0aGUgbmV3IGFuZCBtb2RpZmllZCBmdW5jdGlvbnM6IGBlcF9jYWxsYmFja19jYW5fc2tpcGAsIGBlcF9wb2xsX2NhbGxiYWNrYCwgYGVwX2luc2VydGAsIGBlcF9tb2RpZnlgLCBgZXBfZGVsaXZlcl9ldmVudGAsIGBlcF9wb2xsYCwgYF9fZXBfZXZlbnRwb2xsX3BvbGxgLCBhbmQgYGVwX2RvbmVfc2NhbmAuIE5vdywgd2hpY2ggb25lcyBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIGZ1enppbmcgdGFyZ2V0cz8gRm9jdXNpbmcgb24gdGhlIG9uZXMgd2l0aCB0aGUgbW9zdCBwb3RlbnRpYWwgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgbmV3IGZhc3QgcGF0aDogYGVwX3BvbGxfY2FsbGJhY2tgLCBgZXBfaW5zZXJ0YCwgYGVwX21vZGlmeWAsIGBlcF9wb2xsYCwgYGVwX2RlbGl2ZXJfZXZlbnRgIGFuZCBgX19lcF9ldmVudHBvbGxfcG9sbGAgbG9vayBsaWtlIHRoZSBiZXN0IGNhbmRpZGF0ZXMuXG5cbmBlcF9kZWxpdmVyX2V2ZW50YCBpcyBtYXJrZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGNvdWxkIG1lYW4gaXQncyBpbmxpbmVkLiBMZXQncyBtYWtlIHN1cmUgaXTigJlzIG5vdCBpbmxpbmVkIHRvIHNlZSBpZiB3ZSBjYW4gdGFyZ2V0IGl0LiBXZeKAmWxsIHZlcmlmeSB0aGF0IGl04oCZcyBgc3RhdGljYCB3aXRoIGBncmVwcGVyYCwgYnV0IHdl4oCZbGwgYWxzbyBuZWVkIHRvIGNoZWNrIGBmcy9ldmVudHBvbGwuY2AgZGlyZWN0bHkgdG8gY29uZmlybSB3aGV0aGVyIGl0IGlzIGFjdHVhbGx5IGlubGluZWQgb3Igbm90IHRvIGRlY2lkZSBpZiB3ZSB3aWxsIGluY2x1ZGUgaXQgaW4gb3VyIGZ1enppbmcgdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYxNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjU1OjUzLjkzOTU1NTA2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTQ4ODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVwX2RlbGl2ZXJfZXZlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXZlbnRwb2xsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXZlbnRwb2xsLmM9MjA2Nj1zdGF0aWMgaW50IGVwX21vZGlmeShzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjE1MS0gKi9cXG5mcy9ldmVudHBvbGwuYzoyMTUyOnN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxcbmZzL2V2ZW50cG9sbC5jLTIxNTMtXFx0XFx0XFx0ICAgIHBvbGxfdGFibGUgKnB0LFxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MjIxOT1zdGF0aWMgaW50IGVwX3NlbmRfZXZlbnRzKHN0cnVjdCBldmVudHBvbGwgKmVwLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjI0OS1cXG5mcy9ldmVudHBvbGwuYzoyMjUwOlxcdFxcdGRlbGl2ZXJlZCA9IGVwX2RlbGl2ZXJfZXZlbnQoZXAsIGVwaSwgXFx1MDAyNnB0LCBcXHUwMDI2ZXZlbnRzLCBcXHUwMDI2c2Nhbl9iYXRjaCk7XFxuZnMvZXZlbnRwb2xsLmMtMjI1MS1cXHRcXHRpZiAoZGVsaXZlcmVkIFxcdTAwM2MgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMjo1NTo1My45ODM1MDk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3MTAwMTA1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgRXZlbnQgRGVsaXZlcnkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZXBfZGVsaXZlcl9ldmVudGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCdzIHNjb3BlZCBwcmV0dHkgdGlnaHRseSwgc3BlY2lmaWNhbGx5IGNhbGxlZCBmcm9tIGBlcF9zZW5kX2V2ZW50c2AuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgYGVwX3NlbmRfZXZlbnRzYCBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyBob3cgaXQgY2FsbHMgYGVwX2RlbGl2ZXJfZXZlbnRgIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIG92ZXJhbGwgZXZlbnQgZGVsaXZlcnkgbWVjaGFuaXNtLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjYWxsIGFuZCBzZWUgaG93IGl0J3MgdHJpZ2dlcmVkLCB3aGF0IGRhdGEgaXQgcGFzc2VzLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBmbG93IGxvb2tzIGxpa2UuIFRoaXMgaW5pdGlhbCBvYnNlcnZhdGlvbiBwb2ludHMgdG93YXJkcyBhIHNwZWNpZmljIGludGVyYWN0aW9uIEkgbmVlZCB0byBhbmFseXplIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU5NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAyOjU2OjA1LjY5MzUyMTk4NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjI2NDk1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXBfc2VuZF9ldmVudHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXZlbnRwb2xsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXZlbnRwb2xsLmM9MzA2PXN0cnVjdCBldmVudHBvbGwge1xcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMzM5LVxcbmZzL2V2ZW50cG9sbC5jOjM0MDpcXHQvKiB3YWtldXBfc291cmNlIHVzZWQgd2hlbiBlcF9zZW5kX2V2ZW50cyBvciBfX2VwX2V2ZW50cG9sbF9wb2xsIGlzIHJ1bm5pbmcgKi9cXG5mcy9ldmVudHBvbGwuYy0zNDEtXFx0c3RydWN0IHdha2V1cF9zb3VyY2UgKndzO1xcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MjE1Mj1zdGF0aWMgaW50IGVwX2RlbGl2ZXJfZXZlbnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTIyMTgtXFxuZnMvZXZlbnRwb2xsLmM6MjIxOTpzdGF0aWMgaW50IGVwX3NlbmRfZXZlbnRzKHN0cnVjdCBldmVudHBvbGwgKmVwLFxcbmZzL2V2ZW50cG9sbC5jLTIyMjAtXFx0XFx0XFx0ICBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsIGludCBtYXhldmVudHMpXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yMzA1PXN0YXRpYyBpbnQgZXBfdHJ5X3NlbmRfZXZlbnRzKHN0cnVjdCBldmVudHBvbGwgKmVwLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjMxNC1cXHQgKi9cXG5mcy9ldmVudHBvbGwuYzoyMzE1OlxcdHJlcyA9IGVwX3NlbmRfZXZlbnRzKGVwLCBldmVudHMsIG1heGV2ZW50cyk7XFxuZnMvZXZlbnRwb2xsLmMtMjMxNi1cXHRpZiAocmVzIFxcdTAwM2UgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDI6NTY6MDUuOTU2MTc2NTkyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwMjE2NjQyOTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25zaWRlcmluZyBgZXBfc2VuZF9ldmVudHNgIGFuZCBgZXBfcG9sbGAgaW4gUmVsYXRpb24gdG8gRWFjaCBPdGhlcioqXG5cblJpZ2h0LCBzbyBgZXBfc2VuZF9ldmVudHNgIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBhIGdpdmVuLiBCdXQgdGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBpdHMgY291bnRlcnBhcnQgaW4gdGhpcyBjb250ZXh0OiBgZXBfcG9sbGAuIElzIGBlcF9wb2xsYCBhbHNvIHN0YXRpYz8gT3IgZG9lcyBpdHMgZGVmaW5pdGlvbiwgb3IgbGFjayB0aGVyZW9mLCBoYXZlIGltcGxpY2F0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBBcmUgdGhlcmUgYXNwZWN0cyBvZiB0aGVpciBpbXBsZW1lbnRhdGlvbiwgb3IgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGhpbiB0aGlzIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCB0aGF0IGFyZSBiZWluZyBzdWJ0bHkgaW5mbHVlbmNlZCBieSBvbmUgYmVpbmcgc3RhdGljIGFuZCB0aGUgb3RoZXIgbm90PyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhleSBpbnRlcmFjdCwgYW5kIHdoZXRoZXIgdGhlIHNjb3BlIG9mIGBlcF9wb2xsYCBpcyBwbGF5aW5nIGEgc2lnbmlmaWNhbnQgcm9sZSBoZXJlLCByZWxhdGl2ZSB0byBgZXBfc2VuZF9ldmVudHNgLiBQZXJoYXBzIHRoZXJlJ3MgYW4gb3B0aW1pemF0aW9uIGJlaW5nIG1hZGUsIG9yIGEgbGltaXRhdGlvbiB0aGF0IG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowMTowNi4xNzI4MjE4NTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNjM5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXBfcG9sbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9ldmVudHBvbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9ldmVudHBvbGwuYy01NC0gKiBldmVudHBvbGwgdmlhIHRoZSB3YXRjaGVkIGZpbGUncyBmX29wLVxcdTAwM2Vwb2xsKCkgd2FpdCBxdWV1ZShzKS4gV2hlblxcbmZzL2V2ZW50cG9sbC5jOjU1OiAqIHRoZSB3YXRjaGVkIGZpbGUgc2lnbmFscyByZWFkaW5lc3MsIGVwX3BvbGxfY2FsbGJhY2soKSBmaXJlcyBhbmRcXG5mcy9ldmVudHBvbGwuYy01Ni0gKiBtYXJrcyB0aGUgZXBpdGVtIHJlYWR5LiBlcG9sbF93YWl0KDIpIGRyYWlucyB0aGUgcmVhZHkgbGlzdCB1bmRlclxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtNzYtICogUmF0aW9uYWxlOlxcbmZzL2V2ZW50cG9sbC5jOjc3OiAqICAgLSBlcC1cXHUwMDNlbG9jayBpcyBhIHNwaW5sb2NrIGJlY2F1c2UgZXBfcG9sbF9jYWxsYmFjaygpIGlzIGNhbGxlZCBmcm9tXFxuZnMvZXZlbnRwb2xsLmMtNzgtICogICAgIHdha2VfdXAoKSB3aGljaCBtYXkgcnVuIGluIGhhcmQtSVJRIGNvbnRleHQuIEFsbCBlcC1cXHUwMDNlbG9ja1xcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMTI2LSAqICAgZXZlbnQgICAgICAgICAgICAtIGVwLVxcdTAwM2VtdHggZm9yIHdyaXRlczsgbG9ja2xlc3MgcmVhZCBpblxcbmZzL2V2ZW50cG9sbC5jOjEyNzogKiAgICAgICAgICAgICAgICAgICAgICBlcF9wb2xsX2NhbGxiYWNrIHBhaXJzIHdpdGggc21wX21iKCkgaW5cXG5mcy9ldmVudHBvbGwuYy0xMjgtICogICAgICAgICAgICAgICAgICAgICAgZXBfbW9kaWZ5KClcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTE4MC0gKiAgIGVwX3VucmVnaXN0ZXJfcG9sbHdhaXQoKSAgLSBkcmFpbiBwd3FsaXN0OyBzeW5jaHJvbml6ZXMgd2l0aCBhbnlcXG5mcy9ldmVudHBvbGwuYzoxODE6ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluLWZsaWdodCBlcF9wb2xsX2NhbGxiYWNrIHZpYSB0aGVcXG5mcy9ldmVudHBvbGwuYy0xODItICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhdGNoZWQgd2FpdC1xdWV1ZSBoZWFkJ3MgbG9jay5cXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTIwMS0gKlxcbmZzL2V2ZW50cG9sbC5jOjIwMjogKiAgIGVwX3BvbGxfY2FsbGJhY2soKSBQT0xMRlJFRSBicmFuY2g6XFxuZnMvZXZlbnRwb2xsLmMtMjAzLSAqICAgICBzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2cHdxLVxcdTAwM2V3aGVhZCwgTlVMTClcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTU5Nj1zdGF0aWMgaW5saW5lIGJvb2wgZXBfaXNfc2Nhbm5pbmcoc3RydWN0IGV2ZW50cG9sbCAqZXApXFxuLS1cXG5mcy9ldmVudHBvbGwuYy02MDAtXFxuZnMvZXZlbnRwb2xsLmM6NjAxOi8qIENhbGxlZCBieSBlcF9zdGFydF9zY2FuKCk6IGRpdmVydCBlcF9wb2xsX2NhbGxiYWNrKCkgdG8gb3ZmbGlzdC4gKi9cXG5mcy9ldmVudHBvbGwuYy02MDItc3RhdGljIGlubGluZSB2b2lkIGVwX2VudGVyX3NjYW4oc3RydWN0IGV2ZW50cG9sbCAqZXApXFxuLS1cXG5mcy9ldmVudHBvbGwuYy02MDYtXFxuZnMvZXZlbnRwb2xsLmM6NjA3Oi8qIENhbGxlZCBieSBlcF9kb25lX3NjYW4oKTogcmVkaXJlY3QgZXBfcG9sbF9jYWxsYmFjaygpIGJhY2sgdG8gcmRsbGlzdC4gKi9cXG5mcy9ldmVudHBvbGwuYy02MDgtc3RhdGljIGlubGluZSB2b2lkIGVwX2V4aXRfc2NhbihzdHJ1Y3QgZXZlbnRwb2xsICplcClcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTg4MD1zdGF0aWMgdm9pZCBlcF9yZXN1bWVfbmFwaV9pcnFzKHN0cnVjdCBldmVudHBvbGwgKmVwKVxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtOTAwLSAqIGNhbGxiYWNrIHdha2V1cCBlbnRyeSBvbiB0aGF0IHF1ZXVlLCBhbmQgdGhlIHdha2VfdXAoKSBwZXJmb3JtZWQgYnkgdGhlXFxuZnMvZXZlbnRwb2xsLmM6OTAxOiAqIFxcXCJkZmRcXFwiIG5ldCBjb2RlIHdpbGwgZW5kIHVwIGluIGVwX3BvbGxfY2FsbGJhY2soKS4gQXQgdGhpcyBwb2ludCBlcG9sbFxcbmZzL2V2ZW50cG9sbC5jLTkwMi0gKiAoZWZkMSkgbm90aWNlcyB0aGF0IGl0IG1heSBoYXZlIHNvbWUgZXZlbnQgcmVhZHksIHNvIGl0IG5lZWRzIHRvIHdha2UgdXBcXG5mcy9ldmVudHBvbGwuYzo5MDM6ICogdGhlIHdhaXRlcnMgb24gaXRzIHBvbGwgd2FpdCBsaXN0IChlZmQyKS4gU28gaXQgY2FsbHMgZXBfcG9sbF9zYWZld2FrZSgpXFxuZnMvZXZlbnRwb2xsLmMtOTA0LSAqIHRoYXQgZW5kcyB1cCBpbiBhbm90aGVyIHdha2VfdXAoKSwgYWZ0ZXIgaGF2aW5nIGNoZWNrZWQgYWJvdXQgdGhlXFxuLS1cXG5mcy9ldmVudHBvbGwuYy05MTItXFxuZnMvZXZlbnRwb2xsLmM6OTEzOnN0YXRpYyB2b2lkIGVwX3BvbGxfc2FmZXdha2Uoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcXG5mcy9ldmVudHBvbGwuYy05MTQtXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBwb2xsZmxhZ3MpXFxuLS1cXG5mcy9ldmVudHBvbGwuYy05MjUtXFx0ICogcHJvdGVjdGVkLiBUaHVzLCB3ZSBhcmUgaW50cm9kdWNpbmcgYSBwZXIgZXZlbnRwb2xsIG5lc3QgZmllbGQuXFxuZnMvZXZlbnRwb2xsLmM6OTI2OlxcdCAqIElmIHdlIGFyZSBub3QgYmVpbmcgY2FsbCBmcm9tIGVwX3BvbGxfY2FsbGJhY2soKSwgZXBpIGlzIE5VTEwgYW5kXFxuZnMvZXZlbnRwb2xsLmMtOTI3LVxcdCAqIHdlIGFyZSBhdCB0aGUgZmlyc3QgbGV2ZWwgb2YgbmVzdGluZywgMC4gT3RoZXJ3aXNlLCB3ZSBhcmUgYmVpbmdcXG5mcy9ldmVudHBvbGwuYzo5Mjg6XFx0ICogY2FsbGVkIGZyb20gZXBfcG9sbF9jYWxsYmFjaygpIGFuZCBpZiBhIHByZXZpb3VzIHdha2V1cCBzb3VyY2UgaXNcXG5mcy9ldmVudHBvbGwuYy05MjktXFx0ICogbm90IGFuIGVwb2xsIGZpbGUgaXRzZWxmLCB3ZSBhcmUgYXQgZGVwdGggMSBzaW5jZSB0aGUgd2FrZXVwIHNvdXJjZVxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtOTUxLVxcbmZzL2V2ZW50cG9sbC5jOjk1MjpzdGF0aWMgdm9pZCBlcF9wb2xsX3NhZmV3YWtlKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksXFxuZnMvZXZlbnRwb2xsLmMtOTUzLVxcdFxcdFxcdCAgICAgX19wb2xsX3QgcG9sbGZsYWdzKVxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9OTYwPXN0YXRpYyB2b2lkIGVwX3JlbW92ZV93YWl0X3F1ZXVlKHN0cnVjdCBlcHBvbGxfZW50cnkgKnB3cSlcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTk2OS1cXHQgKiBBIE5VTEwgbG9hZCBpcyBwYWlyZWQgd2l0aCB0aGUgc21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNndoZWFkLCBOVUxMKVxcbmZzL2V2ZW50cG9sbC5jOjk3MDpcXHQgKiBpbiBlcF9wb2xsX2NhbGxiYWNrKCkncyBQT0xMRlJFRSBicmFuY2g6IHRoZSB0ZWFyZG93biBpc1xcbmZzL2V2ZW50cG9sbC5jLTk3MS1cXHQgKiBjb21wbGV0ZSBhbmQgd2UgbXVzdCBub3QgdG91Y2ggd2hlYWQgYWdhaW4uIE9uIGEgbm9uLU5VTEwgbG9hZFxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MTAxMz1zdGF0aWMgaW5saW5lIGJvb2wgZXBfaGFzX3dha2V1cF9zb3VyY2Uoc3RydWN0IGVwaXRlbSAqZXBpKVxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMTAxNy1cXG5mcy9ldmVudHBvbGwuYzoxMDE4Oi8qIGNhbGwgd2hlbiBlcC1cXHUwMDNlbXR4IGNhbm5vdCBiZSBoZWxkIChlcF9wb2xsX2NhbGxiYWNrKSAqL1xcbmZzL2V2ZW50cG9sbC5jLTEwMTktc3RhdGljIGlubGluZSB2b2lkIGVwX3BtX3N0YXlfYXdha2VfcmN1KHN0cnVjdCBlcGl0ZW0gKmVwaSlcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTEyMjU9c3RhdGljIHZvaWQgZXBfcmVtb3ZlKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGkpXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0xMjUwLSAqIGVwX3VucmVnaXN0ZXJfcG9sbHdhaXQoKSB0YWtlcyBlYWNoIHdhdGNoZWQgd2FpdC1xdWV1ZSBoZWFkJ3MgbG9jayxcXG5mcy9ldmVudHBvbGwuYzoxMjUxOiAqIHdoaWNoIHN5bmNocm9uaXplcyB3aXRoIGFueSBpbi1mbGlnaHQgZXBfcG9sbF9jYWxsYmFjaygpOyBhZnRlclxcbmZzL2V2ZW50cG9sbC5jLTEyNTItICogdGhpcyByZXR1cm5zIG5vIGNhbGxiYWNrIGNhbiBzdGlsbCBiZSBhYm91dCB0byBkZXJlZmVyZW5jZSBhbiBlcGlcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTEzMDk9c3RhdGljIHZvaWQgZXBfY2xlYXJfYW5kX3B1dChzdHJ1Y3QgZXZlbnRwb2xsICplcClcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTEzMTItXFx0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXFx1MDAyNmVwLVxcdTAwM2Vwb2xsX3dhaXQpKVxcbmZzL2V2ZW50cG9sbC5jOjEzMTM6XFx0XFx0ZXBfcG9sbF9zYWZld2FrZShlcCwgTlVMTCwgMCk7XFxuZnMvZXZlbnRwb2xsLmMtMTMxNC1cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTE1Mzc9c3RhdGljIHN0cnVjdCBlcGl0ZW0gKmVwX2ZpbmQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9rZXkgKnRmKVxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMTU2My0gKi9cXG5mcy9ldmVudHBvbGwuYzoxNTY0OnN0YXRpYyBpbnQgZXBfcG9sbF9jYWxsYmFjayh3YWl0X3F1ZXVlX2VudHJ5X3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICprZXkpXFxuZnMvZXZlbnRwb2xsLmMtMTU2NS17XFxuLS1cXG5mcy9ldmVudHBvbGwuYy0xNjUxLVxcdGlmIChwd2FrZSlcXG5mcy9ldmVudHBvbGwuYzoxNjUyOlxcdFxcdGVwX3BvbGxfc2FmZXdha2UoZXAsIGVwaSwgcG9sbGZsYWdzIFxcdTAwMjYgRVBPTExfVVJJTkdfV0FLRSk7XFxuZnMvZXZlbnRwb2xsLmMtMTY1My1cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTE2ODc9c3RhdGljIHZvaWQgZXBfcHRhYmxlX3F1ZXVlX3Byb2Moc3RydWN0IGZpbGUgKmZpbGUsIHdhaXRfcXVldWVfaGVhZF90ICp3aGVhZCxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTE3MDItXFxuZnMvZXZlbnRwb2xsLmM6MTcwMzpcXHRpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KFxcdTAwMjZwd3EtXFx1MDAzZXdhaXQsIGVwX3BvbGxfY2FsbGJhY2spO1xcbmZzL2V2ZW50cG9sbC5jLTE3MDQtXFx0cHdxLVxcdTAwM2V3aGVhZCA9IHdoZWFkO1xcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MTk3ND1zdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTIwNTYtXFx0aWYgKHB3YWtlKVxcbmZzL2V2ZW50cG9sbC5jOjIwNTc6XFx0XFx0ZXBfcG9sbF9zYWZld2FrZShlcCwgTlVMTCwgMCk7XFxuZnMvZXZlbnRwb2xsLmMtMjA1OC1cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTIwNjY9c3RhdGljIGludCBlcF9tb2RpZnkoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTIwOTMtXFx0ICogMSkgRmx1c2ggZXBpIGNoYW5nZXMgYWJvdmUgdG8gb3RoZXIgQ1BVcy4gIFRoaXMgZW5zdXJlc1xcbmZzL2V2ZW50cG9sbC5jOjIwOTQ6XFx0ICogICAgd2UgZG8gbm90IG1pc3MgZXZlbnRzIGZyb20gZXBfcG9sbF9jYWxsYmFjayBpZiBhblxcbmZzL2V2ZW50cG9sbC5jLTIwOTUtXFx0ICogICAgZXZlbnQgb2NjdXJzIGltbWVkaWF0ZWx5IGFmdGVyIHdlIGNhbGwgZl9vcC1cXHUwMDNlcG9sbCgpLlxcbmZzL2V2ZW50cG9sbC5jLTIwOTYtXFx0ICogICAgV2UgbmVlZCB0aGlzIGJlY2F1c2Ugd2UgZGlkIG5vdCB0YWtlIGVwLVxcdTAwM2Vsb2NrIHdoaWxlXFxuZnMvZXZlbnRwb2xsLmM6MjA5NzpcXHQgKiAgICBjaGFuZ2luZyBlcGkgYWJvdmUgKGJ1dCBlcF9wb2xsX2NhbGxiYWNrIGRvZXMgdGFrZVxcbmZzL2V2ZW50cG9sbC5jLTIwOTgtXFx0ICogICAgZXAtXFx1MDAzZWxvY2spLlxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjEwNC1cXHQgKlxcbmZzL2V2ZW50cG9sbC5jOjIxMDU6XFx0ICogVGhpcyBiYXJyaWVyIHdpbGwgbm93IGd1YXJhbnRlZSBlcF9wb2xsX2NhbGxiYWNrIG9yIGZfb3AtXFx1MDAzZXBvbGxcXG5mcy9ldmVudHBvbGwuYy0yMTA2LVxcdCAqIChvciBib3RoKSB3aWxsIG5vdGljZSB0aGUgcmVhZGluZXNzIG9mIGFuIGl0ZW0uXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yMTMzLVxcdGlmIChwd2FrZSlcXG5mcy9ldmVudHBvbGwuYzoyMTM0OlxcdFxcdGVwX3BvbGxfc2FmZXdha2UoZXAsIE5VTEwsIDApO1xcbmZzL2V2ZW50cG9sbC5jLTIxMzUtXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yMjY1PXN0YXRpYyBzdHJ1Y3QgdGltZXNwZWM2NCAqZXBfdGltZW91dF90b190aW1lc3BlYyhzdHJ1Y3QgdGltZXNwZWM2NCAqdG8sIGxvbmcgbXMpXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yMjg4LSAqIGtub3cgdGhhdCBkZWZhdWx0X3dha2VfZnVuY3Rpb24vdHR3dSB3aWxsIG9ubHkgZmFpbCBpZiB0aGUgdGhyZWFkIGlzIGFscmVhZHlcXG5mcy9ldmVudHBvbGwuYzoyMjg5OiAqIHdva2VuLCBhbmQgaW4gdGhhdCBjYXNlIHRoZSBlcF9wb2xsIGxvb3Agd2lsbCByZW1vdmUgdGhlIGVudHJ5IGFueXdheXMsIG5vdFxcbmZzL2V2ZW50cG9sbC5jLTIyOTAtICogdHJ5IHRvIHJldXNlIGl0Llxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MjI5Mj1zdGF0aWMgaW50IGVwX2F1dG9yZW1vdmVfd2FrZV9mdW5jdGlvbihzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FfZW50cnksXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yMjk3LVxcdC8qXFxuZnMvZXZlbnRwb2xsLmM6MjI5ODpcXHQgKiBQYWlycyB3aXRoIGxpc3RfZW1wdHlfY2FyZWZ1bCBpbiBlcF9wb2xsLCBhbmQgZW5zdXJlcyBmdXR1cmUgbG9vcFxcbmZzL2V2ZW50cG9sbC5jLTIyOTktXFx0ICogaXRlcmF0aW9ucyBzZWUgdGhlIGNhdXNlIG9mIHRoaXMgd2FrZXVwLlxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MjMyMT1zdGF0aWMgaW50IGVwX3NjaGVkdWxlX3RpbWVvdXQoa3RpbWVfdCAqdG8pXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yMzI5LS8qKlxcbmZzL2V2ZW50cG9sbC5jOjIzMzA6ICogZXBfcG9sbCAtIFJldHJpZXZlcyByZWFkeSBldmVudHMsIGFuZCBkZWxpdmVycyB0aGVtIHRvIHRoZSBjYWxsZXItc3VwcGxpZWRcXG5mcy9ldmVudHBvbGwuYy0yMzMxLSAqICAgICAgICAgICBldmVudCBidWZmZXIuXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yMzQ1LSAqL1xcbmZzL2V2ZW50cG9sbC5jOjIzNDY6c3RhdGljIGludCBlcF9wb2xsKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXFxuZnMvZXZlbnRwb2xsLmMtMjM0Ny1cXHRcXHQgICBpbnQgbWF4ZXZlbnRzLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdGltZW91dClcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI0MjItXFx0XFx0ICogQmFycmllcmxlc3MgdmFyaWFudCwgd2FpdHF1ZXVlX2FjdGl2ZSgpIGlzIGNhbGxlZCB1bmRlclxcbmZzL2V2ZW50cG9sbC5jOjI0MjM6XFx0XFx0ICogdGhlIHNhbWUgbG9jayBvbiB3YWtldXAgZXBfcG9sbF9jYWxsYmFjaygpIHNpZGUsIHNvIGl0XFxuZnMvZXZlbnRwb2xsLmMtMjQyNC1cXHRcXHQgKiBpcyBzYWZlIHRvIGF2b2lkIGFuIGV4cGxpY2l0IGJhcnJpZXIuXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yOTAzPXN0YXRpYyBpbnQgZG9fZXBvbGxfd2FpdChpbnQgZXBmZCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjkyNC1cXHQvKiBUaW1lIHRvIGZpc2ggZm9yIGV2ZW50cyAuLi4gKi9cXG5mcy9ldmVudHBvbGwuYzoyOTI1OlxcdHJldHVybiBlcF9wb2xsKGVwLCBldmVudHMsIG1heGV2ZW50cywgdG8pO1xcbmZzL2V2ZW50cG9sbC5jLTI5MjYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowMTowNi4yMTcxOTA4NzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjYxODkzNDMzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFdmVudHBvbGwgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIE15IGZvY3VzIHNob3VsZCBiZSBvbiBgZXBfcG9sbF9jYWxsYmFja2AsIGBlcF9pbnNlcnRgLCBgZXBfbW9kaWZ5YCwgYGVwX3BvbGxgLCBgX19lcF9ldmVudHBvbGxfcG9sbGAsIGFuZCBgZXBfZG9uZV9zY2FuYC4gTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gc29tZXRoaW5nIOKAkyB5ZXMsIGBfX2VwX2V2ZW50cG9sbF9wb2xsYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb24uIEFuZCBgZXBfZG9uZV9zY2FuYD8gWWVwLCBhbHNvIHN0YXRpYy4gSW50ZXJlc3RpbmcuIExldCdzIHNlZSwgYGVwX2luc2VydGAgaXMgc3RhdGljIHRvby4gSHVoLCBpdCBsb29rcyBsaWtlIGFsbCB0aGVzZSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIHdpdGhpbiBgZnMvZXZlbnRwb2xsLmNgIGFyZSBkZWZpbmVkIGFzIHN0YXRpYy4gVGhhdCBoZWxwcyB3aXRoIGVuY2Fwc3VsYXRpb24sIEkgc3VwcG9zZS4gVGhlIHRydWUgZW50cnkgcG9pbnRzIHRvIHRoaXMgd2hvbGUgZXZlbnRwb2xsIG1lY2hhbmlzbSBhcmUgYGRvX2Vwb2xsX3dhaXRgLCBgZG9fZXBvbGxfY3RsYCwgYW5kIGBkb19lcG9sbF9jcmVhdGVgLiBBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBkb19lcG9sbF9jdGxgIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTk1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjAzOjEyLjQwNjUzNjY3OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1NTM1MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fZXBvbGxfY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V2ZW50cG9sbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V2ZW50cG9sbC5jPTM4NT1zdGF0aWMgbG9uZyBtYXhfdXNlcl93YXRjaGVzIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5mcy9ldmVudHBvbGwuYy00MDItICogYW5kIGNhcnJpZXMgaXRzIHNjcmF0Y2ggc3RhdGUgb24gYSBzdGFjay1hbGxvY2F0ZWQgc3RydWN0XFxuZnMvZXZlbnRwb2xsLmM6NDAzOiAqIGVwX2N0bF9jdHggc2NvcGVkIHRvIG9uZSBkb19lcG9sbF9jdGwoKSBjYWxsLiBOb24tbmVzdGVkIGluc2VydHNcXG5mcy9ldmVudHBvbGwuYy00MDQtICogc2tpcCB0aGlzIG1hY2hpbmVyeSBlbnRpcmVseSBhbmQgdGFrZSBvbmx5IGVwLVxcdTAwM2VtdHguXFxuLS1cXG5mcy9ldmVudHBvbGwuYz00Mjc9c3RhdGljIHU2NCBsb29wX2NoZWNrX2dlbiA9IDA7XFxuLS1cXG5mcy9ldmVudHBvbGwuYy00MzEtLypcXG5mcy9ldmVudHBvbGwuYzo0MzI6ICogUGVyLWRvX2Vwb2xsX2N0bCgpIHNjcmF0Y2ggZm9yIHRoZSBsb29wIC8gcGF0aCBjaGVja3MuIEFsbG9jYXRlZCBvblxcbmZzL2V2ZW50cG9sbC5jLTQzMy0gKiB0aGUgY2FsbGVyJ3Mgc3RhY2s7IHBvcHVsYXRlZCBieSBlcF9jdGxfbG9jaygpIGFuZCB0aGUgZG93bndhcmRcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTE3Njk9c3RhdGljIGludCByZXZlcnNlX3BhdGhfY2hlY2tfcHJvYyhzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMTc5NS0gKiAgICAgICAgICAgICAgICAgICAgICBvdmVyIGl0cyBsaW1pdCBpbiBwYXRoX2xpbWl0c1tdLlxcbmZzL2V2ZW50cG9sbC5jOjE3OTY6ICogQGN0eDogUGVyLWRvX2Vwb2xsX2N0bCgpIHNjcmF0Y2ggZm9yIHRoZSBsb29wIC8gcGF0aCBjaGVja3MuXFxuZnMvZXZlbnRwb2xsLmMtMTc5Ny0gKlxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MjM0Nj1zdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI0NzgtICpcXG5mcy9ldmVudHBvbGwuYzoyNDc5OiAqIEBjdHg6IFBlci1kb19lcG9sbF9jdGwoKSBzY3JhdGNoIGZvciB0aGUgbG9vcCAvIHBhdGggY2hlY2tzLlxcbmZzL2V2ZW50cG9sbC5jLTI0ODAtICogQGVwOiB0aGUgXFx1MDAyNnN0cnVjdCBldmVudHBvbGwgdG8gYmUgY3VycmVudGx5IGNoZWNrZWQuXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yNjQ3PXN0YXRpYyBpbmxpbmUgaW50IGVwb2xsX211dGV4X2xvY2soc3RydWN0IG11dGV4ICptdXRleCwgYm9vbCBub25ibG9jaylcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI2NTYtLypcXG5mcy9ldmVudHBvbGwuYzoyNjU3OiAqIEFjcXVpcmUgdGhlIGxvY2tzIHJlcXVpcmVkIGZvciBkb19lcG9sbF9jdGwoKSBvbiBAZXAgZm9yIEBvcC5cXG5mcy9ldmVudHBvbGwuYy0yNjU4LSAqXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yNzI0PXN0YXRpYyB2b2lkIGVwX2N0bF91bmxvY2soc3RydWN0IGVwX2N0bF9jdHggKmN0eCwgc3RydWN0IGV2ZW50cG9sbCAqZXAsXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yNzM0LVxcbmZzL2V2ZW50cG9sbC5jOjI3MzU6aW50IGRvX2Vwb2xsX2N0bF9maWxlKHN0cnVjdCBmaWxlICpmLCBpbnQgb3AsIHN0cnVjdCBlcG9sbF9rZXkgKnRmLFxcbmZzL2V2ZW50cG9sbC5jLTI3MzYtXFx0XFx0ICAgICAgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLCBib29sIG5vbmJsb2NrKVxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjgyMS1cXG5mcy9ldmVudHBvbGwuYzoyODIyOmludCBkb19lcG9sbF9jdGwoaW50IGVwZmQsIGludCBvcCwgaW50IGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmVwZHMsXFxuZnMvZXZlbnRwb2xsLmMtMjgyMy1cXHRcXHQgYm9vbCBub25ibG9jaylcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI4MzctXFx0ZWZkLmZkID0gZmQ7XFxuZnMvZXZlbnRwb2xsLmM6MjgzODpcXHRyZXR1cm4gZG9fZXBvbGxfY3RsX2ZpbGUoZmRfZmlsZShmKSwgb3AsIFxcdTAwMjZlZmQsIGVwZHMsIG5vbmJsb2NrKTtcXG5mcy9ldmVudHBvbGwuYy0yODM5LX1cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTI4NDY9U1lTQ0FMTF9ERUZJTkU0KGVwb2xsX2N0bCwgaW50LCBlcGZkLCBpbnQsIG9wLCBpbnQsIGZkLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjg1NC1cXG5mcy9ldmVudHBvbGwuYzoyODU1OlxcdHJldHVybiBkb19lcG9sbF9jdGwoZXBmZCwgb3AsIGZkLCBcXHUwMDI2ZXBkcywgZmFsc2UpO1xcbmZzL2V2ZW50cG9sbC5jLTI4NTYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowMzoxMi40NTEwOTcwOTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2NTg5MjcwMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEVwb2xsIEVudHJ5IFBvaW50IEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBlcG9sbCBlbnRyeSBwb2ludHMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgdGhlIGtlcm5lbCBpbnRlcmFjdHMgd2l0aCB0aGUgdXNlcnNwYWNlIHJlcXVlc3RzLiBGcm9tIHdoYXQgSSBzZWUsIHRoZXJlIGFyZSBhIGZldyBwcmltYXJ5IGZ1bmN0aW9uczogYGRvX2Vwb2xsX2N0bGAsIGBkb19lcG9sbF93YWl0YCwgYW5kIGBkb19lcG9sbF9jcmVhdGVgLiBUaG9zZSBhcmUgdGhlIG9idmlvdXMgc3VzcGVjdHMgZm9yIGhhbmRsaW5nIHVzZXItc3BhY2UgcmVxdWVzdHMgZGlyZWN0bHkuIFRoZW4gdGhlcmUncyBgZXBfcG9sbF9jYWxsYmFja2AuIE5vdywgdGhhdCBvbmUgaXMgaW50ZXJlc3Rpbmc7IGl0J3MgYSBjYWxsYmFjayBmdW5jdGlvbiwgdHlwaWNhbGx5IHRyaWdnZXJlZCBieSB3YWl0cXVldWVzLCBidXQgaXQncyAqc3RhdGljKi5cblxuV2FpdCwgbGV0IG1lIHBhcnNlIHRoYXQuIFRoZSBmYWN0IHRoYXQgYGVwX3BvbGxfY2FsbGJhY2tgIGlzIHN0YXRpYyBtZWFucyBpdCdzIG5vdCBkaXJlY3RseSBleHBvc2VkIGFzIGEgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnQuIEl0J3MgY2FsbGVkIGluZGlyZWN0bHksIGxpa2VseSBmcm9tIHdpdGhpbiB0aGUga2VybmVsLiBJdCdzIHRoZSB3b3JrZXIgaW4gdGhlIHNoYWRvd3MsIG5vdCB0aGUgZnJvbnQgZG9vci4gSSBuZWVkIHRvIGtlZXAgdGhhdCBkaXN0aW5jdGlvbiBjbGVhciBpbiBteSBoZWFkLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBlcF9wb2xsX2NhbGxiYWNrYCBpcyBpbmRlZWQgc3RhdGljLiBBaCwgeWVzLCBpdCBpcy4gVGhlIHNpZ25hdHVyZSBjb25maXJtczogYHN0YXRpYyBpbnQgZXBfcG9sbF9jYWxsYmFjayh3YWl0X3F1ZXVlX2VudHJ5X3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICprZXkpYC5cblxuTXkgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGFuZCBpZiBzbywgaG93IHRoZXkgZml0IGludG8gdGhlIHBpY3R1cmUuIGBkb19lcG9sbF9jdGxgIGxvb2tzIG5vbi1zdGF0aWMgdG8gbWUuIE9rYXksIGxldCdzIGFzc3VtZSBgZG9fZXBvbGxfd2FpdGAgaXMgc3RhdGljLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDU6MTkuMDQwMzY5NzM4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM4MTQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19lcG9sbF93YWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V2ZW50cG9sbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V2ZW50cG9sbC5jPTI4Nzk9aW50IGVwb2xsX3NlbmRldmVudHMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI5MDItICovXFxuZnMvZXZlbnRwb2xsLmM6MjkwMzpzdGF0aWMgaW50IGRvX2Vwb2xsX3dhaXQoaW50IGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcXG5mcy9ldmVudHBvbGwuYy0yOTA0LVxcdFxcdFxcdCBpbnQgbWF4ZXZlbnRzLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdG8pXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yOTI4PVNZU0NBTExfREVGSU5FNChlcG9sbF93YWl0LCBpbnQsIGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKiwgZXZlbnRzLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjkzMi1cXG5mcy9ldmVudHBvbGwuYzoyOTMzOlxcdHJldHVybiBkb19lcG9sbF93YWl0KGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLFxcbmZzL2V2ZW50cG9sbC5jLTI5MzQtXFx0XFx0XFx0ICAgICBlcF90aW1lb3V0X3RvX3RpbWVzcGVjKFxcdTAwMjZ0bywgdGltZW91dCkpO1xcbi0tXFxuZnMvZXZlbnRwb2xsLmM9Mjk0MT1zdGF0aWMgaW50IGRvX2Vwb2xsX3B3YWl0KGludCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yOTU0LVxcbmZzL2V2ZW50cG9sbC5jOjI5NTU6XFx0ZXJyb3IgPSBkb19lcG9sbF93YWl0KGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLCB0byk7XFxuZnMvZXZlbnRwb2xsLmMtMjk1Ni1cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTMwMzY9c3RhdGljIGludCBkb19jb21wYXRfZXBvbGxfcHdhaXQoaW50IGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTMwNTAtXFxuZnMvZXZlbnRwb2xsLmM6MzA1MTpcXHRlcnIgPSBkb19lcG9sbF93YWl0KGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLCB0aW1lb3V0KTtcXG5mcy9ldmVudHBvbGwuYy0zMDUyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowNToxOS4wODU3NTYzNzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4MzY5MTMwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEVwb2xsIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGVwb2xsIGNvZGUsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gY2FsbCBoaWVyYXJjaHkuIGBkb19lcG9sbF93YWl0YCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0J3Mgbm90IGRpcmVjdGx5IGV4cG9zZWQgYXMgYSBzeXN0ZW0gY2FsbC4gVGhhdCBuYXJyb3dzIG15IGZvY3VzIHRvIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50czogYHN5c19lcG9sbF93YWl0YCwgYHN5c19lcG9sbF9jdGxgLCBgc3lzX2Vwb2xsX3B3YWl0YCwgYW5kIGBzeXNfZXBvbGxfcHdhaXQyYC4gVGhvc2UgYXJlIHRoZSBzeXNjYWxscy4gUGx1cyBgZG9fZXBvbGxfY3RsYCwgYGRvX2Vwb2xsX2N0bF9maWxlYCB3aGljaCBhcmUgaW50ZXJuYWwuXG5cbk5vdywgZ2xhbmNpbmcgYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgSSBzZWUgYSBtaXggb2YgaW5saW5lIGFuZCBzdGF0aWMgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBoYXMgdG91Y2hlZCBgZXBfZXZlbnRzX2F2YWlsYWJsZWAsIGBlcF9zdGF0ZV90ZXN0YCwgYGVwX3JlYWR5X2Zhc3RfZW5hYmxlZGAsIGBlcF9zZXRfcmVhZHlfYWNjb3VudGVkYCwgYGVwX3ByZXBhcmVfcmVwb2xsYCwgd2hpY2ggYXJlIGFsbCBpbmxpbmUsIHBsdXMgYGVwX2NhbGxiYWNrX2Nhbl9za2lwYCwgYGVwX2RvbmVfc2NhbmAsIGBfX2VwX2V2ZW50cG9sbF9wb2xsYCwgYGVwX3BvbGxfY2FsbGJhY2tgLCBgZXBfaW5zZXJ0YCwgYGVwX21vZGlmeWAsIGBlcF9kZWxpdmVyX2V2ZW50YCwgYW5kIGBlcF9wb2xsYCBhcmUgYWxsIHN0YXRpYy4gR2l2ZW4gdGhhdCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBtb3N0bHkgc3RhdGljIG9yIGlubGluZSwgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzIGxpa2VseSBsaWVzIGluIGhvdyB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHRoZSBzeXNjYWxscyBhbmQgYGRvX2Vwb2xsX2N0bGAgb3IgYGRvX2Vwb2xsX2N0bF9maWxlYCwgaW50ZXJhY3Qgd2l0aCB0aGVtLlxuXG5TbywgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgZG9fZXBvbGxfY3RsYCBhbmQgYGRvX2Vwb2xsX2N0bF9maWxlYCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIGNvbnRyb2wgb3BlcmF0aW9ucyBhbmQgdGhleSBjYWxsIGBlcF9pbnNlcnRgIGFuZCBgZXBfbW9kaWZ5YC4gYGRvX2Vwb2xsX3dhaXRgICh0aGUgc3RhdGljIG9uZSkgaXMgY2FsbGVkIGJ5IHRoZSBgc3lzX2Vwb2xsXypgIHN5c2NhbGxzLCBsaWtlIGBzeXNfZXBvbGxfd2FpdGAsIGBzeXNfZXBvbGxfcHdhaXRgLCBhbmQgYHN5c19lcG9sbF9wd2FpdDJgLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5gX19lcF9ldmVudHBvbGxfcG9sbGAgaXMgYWxzbyBrZXkgYmVjYXVzZSBpdCdzIGNhbGxlZCBieSBgZXBfZXZlbnRwb2xsX3BvbGxgLCB3aGljaCBpcyB0aGUgYC5wb2xsYCBjYWxsYmFjayBmb3IgZXBvbGwgZmlsZXMuIEZpbmFsbHksIGBlcF9wb2xsX2NhbGxiYWNrYCBpcyBjYWxsZWQgYnkgd2FpdHF1ZXVlcy4gU28sIG15IHByaW1hcnkgYXJlYXMgb2YgY29uY2VybiBmb3IgYW55IGRlZXBlciBpbXBhY3QgYW5hbHlzaXMgYXJlOlxuXG4qICAgYGRvX2Vwb2xsX2N0bGAgYW5kIGBkb19lcG9sbF9jdGxfZmlsZWBcbiogICBgc3lzX2Vwb2xsX3dhaXRgLCBgc3lzX2Vwb2xsX3B3YWl0YCwgYHN5c19lcG9sbF9wd2FpdDJgIChhbmQgYnkgaW1wbGljYXRpb24gYGRvX2Vwb2xsX3dhaXRgKVxuKiAgIGBlcF9ldmVudHBvbGxfcG9sbGAgKHdhaXQsIGlzICp0aGF0KiBzdGF0aWM/KS4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTIzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjA1OjQ5LjkyMjY3MjAzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3Mzk5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXBfZXZlbnRwb2xsX3BvbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXZlbnRwb2xsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXZlbnRwb2xsLmM9MzA2PXN0cnVjdCBldmVudHBvbGwge1xcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMzM5LVxcbmZzL2V2ZW50cG9sbC5jOjM0MDpcXHQvKiB3YWtldXBfc291cmNlIHVzZWQgd2hlbiBlcF9zZW5kX2V2ZW50cyBvciBfX2VwX2V2ZW50cG9sbF9wb2xsIGlzIHJ1bm5pbmcgKi9cXG5mcy9ldmVudHBvbGwuYy0zNDEtXFx0c3RydWN0IHdha2V1cF9zb3VyY2UgKndzO1xcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MTM1NT1zdGF0aWMgX19wb2xsX3QgZXBfaXRlbV9wb2xsKGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSwgcG9sbF90YWJsZSAqcHQsIGludCBkZXB0aCk7XFxuZnMvZXZlbnRwb2xsLmMtMTM1Ni1cXG5mcy9ldmVudHBvbGwuYzoxMzU3OnN0YXRpYyBfX3BvbGxfdCBfX2VwX2V2ZW50cG9sbF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0LCBpbnQgZGVwdGgpXFxuZnMvZXZlbnRwb2xsLmMtMTM1OC17XFxuLS1cXG5mcy9ldmVudHBvbGwuYy0xMzk3LS8qXFxuZnMvZXZlbnRwb2xsLmM6MTM5ODogKiBEaWZmZXJzIGZyb20gZXBfZXZlbnRwb2xsX3BvbGwoKSBpbiB0aGF0IGludGVybmFsIGNhbGxlcnMgYWxyZWFkeSBoYXZlXFxuZnMvZXZlbnRwb2xsLmMtMTM5OS0gKiB0aGUgZXAtXFx1MDAzZW10eCBzbyB3ZSBuZWVkIHRvIHN0YXJ0IGZyb20gZGVwdGg9MSwgc3VjaCB0aGF0IG11dGV4X2xvY2tfbmVzdGVkKClcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTE0MDI9c3RhdGljIF9fcG9sbF90IGVwX2l0ZW1fcG9sbChjb25zdCBzdHJ1Y3QgZXBpdGVtICplcGksIHBvbGxfdGFibGUgKnB0LFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMTQxOC1cXHRlbHNlXFxuZnMvZXZlbnRwb2xsLmM6MTQxOTpcXHRcXHRyZXMgPSBfX2VwX2V2ZW50cG9sbF9wb2xsKGZpbGUsIHB0LCBkZXB0aCk7XFxuZnMvZXZlbnRwb2xsLmMtMTQyMC1cXHRmcHV0KGZpbGUpO1xcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMTQyMy1cXG5mcy9ldmVudHBvbGwuYzoxNDI0OnN0YXRpYyBfX3BvbGxfdCBlcF9ldmVudHBvbGxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcXG5mcy9ldmVudHBvbGwuYy0xNDI1LXtcXG5mcy9ldmVudHBvbGwuYzoxNDI2OlxcdHJldHVybiBfX2VwX2V2ZW50cG9sbF9wb2xsKGZpbGUsIHdhaXQsIDApO1xcbmZzL2V2ZW50cG9sbC5jLTE0MjctfVxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MTQ1ND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBldmVudHBvbGxfZm9wcyA9IHtcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTE0NTgtXFx0LnJlbGVhc2VcXHQ9IGVwX2V2ZW50cG9sbF9yZWxlYXNlLFxcbmZzL2V2ZW50cG9sbC5jOjE0NTk6XFx0LnBvbGxcXHRcXHQ9IGVwX2V2ZW50cG9sbF9wb2xsLFxcbmZzL2V2ZW50cG9sbC5jLTE0NjAtXFx0Lmxsc2Vla1xcdFxcdD0gbm9vcF9sbHNlZWssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjA1OjQ5Ljk2NjQxNTI2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODUzNTEyNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEVwb2xsIEZ1bmN0aW9uIEh1bnQqKlxuXG5Pa2F5LCBzbyBgZXBfZXZlbnRwb2xsX3BvbGxgIGlzIGRlZmluaXRlbHkgc3RhdGljLCB0aGF0J3Mgbm90IGdvaW5nIHRvIGdldCBtZSBhbnl3aGVyZS4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGVwb2xsLiBGcm9tIG15IG5vdGVzLCBpdCBsb29rcyBsaWtlIGBkb19lcG9sbF9jdGxgLCBgZG9fZXBvbGxfY3RsX2ZpbGVgLCBhbmQgYHN5c19lcG9sbF93YWl0YCBhcmUgdGhlIG9uZXMgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gV2FpdCwgaGFuZyBvbi4uLiBgc3lzX2Vwb2xsX3dhaXRgIGlzIGFjdHVhbGx5IGRlZmluZWQgdXNpbmcgYFNZU0NBTExfREVGSU5FNGAsIHNvIHRoZSBzeXN0ZW0gY2FsbCBuYW1lIGlzIGBzeXNfZXBvbGxfd2FpdGAgb3IgYF9feDY0X3N5c19lcG9sbF93YWl0YC4gSSBjYW4gcHJvYmFibHkganVzdCBzdGljayB3aXRoIGBlcG9sbF93YWl0YCwgdGhvdWdoLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBjYW4gSSBhY3R1YWxseSAqdXNlKiBhbnkgb2YgdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnM/IExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgc2lnbmF0dXJlIGFuZCBiZWhhdmlvciBvZiBgZG9fZXBvbGxfY3RsYCB0byBtYWtlIHN1cmUgaXQgaXMgaW5kZWVkIHRoZSBiZXN0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyODEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDY6MDEuODE5OTMwMTI0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA4OTgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19lcG9sbF9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXZlbnRwb2xsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXZlbnRwb2xsLmM9Mzg1PXN0YXRpYyBsb25nIG1heF91c2VyX3dhdGNoZXMgX19yZWFkX21vc3RseTtcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTQwMi0gKiBhbmQgY2FycmllcyBpdHMgc2NyYXRjaCBzdGF0ZSBvbiBhIHN0YWNrLWFsbG9jYXRlZCBzdHJ1Y3RcXG5mcy9ldmVudHBvbGwuYzo0MDM6ICogZXBfY3RsX2N0eCBzY29wZWQgdG8gb25lIGRvX2Vwb2xsX2N0bCgpIGNhbGwuIE5vbi1uZXN0ZWQgaW5zZXJ0c1xcbmZzL2V2ZW50cG9sbC5jLTQwNC0gKiBza2lwIHRoaXMgbWFjaGluZXJ5IGVudGlyZWx5IGFuZCB0YWtlIG9ubHkgZXAtXFx1MDAzZW10eC5cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTQyNz1zdGF0aWMgdTY0IGxvb3BfY2hlY2tfZ2VuID0gMDtcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTQzMS0vKlxcbmZzL2V2ZW50cG9sbC5jOjQzMjogKiBQZXItZG9fZXBvbGxfY3RsKCkgc2NyYXRjaCBmb3IgdGhlIGxvb3AgLyBwYXRoIGNoZWNrcy4gQWxsb2NhdGVkIG9uXFxuZnMvZXZlbnRwb2xsLmMtNDMzLSAqIHRoZSBjYWxsZXIncyBzdGFjazsgcG9wdWxhdGVkIGJ5IGVwX2N0bF9sb2NrKCkgYW5kIHRoZSBkb3dud2FyZFxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MTc2OT1zdGF0aWMgaW50IHJldmVyc2VfcGF0aF9jaGVja19wcm9jKHN0cnVjdCBlcF9jdGxfY3R4ICpjdHgsXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0xNzk1LSAqICAgICAgICAgICAgICAgICAgICAgIG92ZXIgaXRzIGxpbWl0IGluIHBhdGhfbGltaXRzW10uXFxuZnMvZXZlbnRwb2xsLmM6MTc5NjogKiBAY3R4OiBQZXItZG9fZXBvbGxfY3RsKCkgc2NyYXRjaCBmb3IgdGhlIGxvb3AgLyBwYXRoIGNoZWNrcy5cXG5mcy9ldmVudHBvbGwuYy0xNzk3LSAqXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yMzQ2PXN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjQ3OC0gKlxcbmZzL2V2ZW50cG9sbC5jOjI0Nzk6ICogQGN0eDogUGVyLWRvX2Vwb2xsX2N0bCgpIHNjcmF0Y2ggZm9yIHRoZSBsb29wIC8gcGF0aCBjaGVja3MuXFxuZnMvZXZlbnRwb2xsLmMtMjQ4MC0gKiBAZXA6IHRoZSBcXHUwMDI2c3RydWN0IGV2ZW50cG9sbCB0byBiZSBjdXJyZW50bHkgY2hlY2tlZC5cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTI2NDc9c3RhdGljIGlubGluZSBpbnQgZXBvbGxfbXV0ZXhfbG9jayhzdHJ1Y3QgbXV0ZXggKm11dGV4LCBib29sIG5vbmJsb2NrKVxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjY1Ni0vKlxcbmZzL2V2ZW50cG9sbC5jOjI2NTc6ICogQWNxdWlyZSB0aGUgbG9ja3MgcmVxdWlyZWQgZm9yIGRvX2Vwb2xsX2N0bCgpIG9uIEBlcCBmb3IgQG9wLlxcbmZzL2V2ZW50cG9sbC5jLTI2NTgtICpcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTI3MjQ9c3RhdGljIHZvaWQgZXBfY3RsX3VubG9jayhzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI3MzQtXFxuZnMvZXZlbnRwb2xsLmM6MjczNTppbnQgZG9fZXBvbGxfY3RsX2ZpbGUoc3RydWN0IGZpbGUgKmYsIGludCBvcCwgc3RydWN0IGVwb2xsX2tleSAqdGYsXFxuZnMvZXZlbnRwb2xsLmMtMjczNi1cXHRcXHQgICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmVwZHMsIGJvb2wgbm9uYmxvY2spXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yODIxLVxcbmZzL2V2ZW50cG9sbC5jOjI4MjI6aW50IGRvX2Vwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXBkcyxcXG5mcy9ldmVudHBvbGwuYy0yODIzLVxcdFxcdCBib29sIG5vbmJsb2NrKVxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjgzNy1cXHRlZmQuZmQgPSBmZDtcXG5mcy9ldmVudHBvbGwuYzoyODM4OlxcdHJldHVybiBkb19lcG9sbF9jdGxfZmlsZShmZF9maWxlKGYpLCBvcCwgXFx1MDAyNmVmZCwgZXBkcywgbm9uYmxvY2spO1xcbmZzL2V2ZW50cG9sbC5jLTI4MzktfVxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9Mjg0Nj1TWVNDQUxMX0RFRklORTQoZXBvbGxfY3RsLCBpbnQsIGVwZmQsIGludCwgb3AsIGludCwgZmQsXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yODU0LVxcbmZzL2V2ZW50cG9sbC5jOjI4NTU6XFx0cmV0dXJuIGRvX2Vwb2xsX2N0bChlcGZkLCBvcCwgZmQsIFxcdTAwMjZlcGRzLCBmYWxzZSk7XFxuZnMvZXZlbnRwb2xsLmMtMjg1Ni19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjA2OjAxLjg2NjAyMzQ4NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjU3MjY4NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgYGVwb2xsYCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBlcG9sbGAgaW1wbGVtZW50YXRpb24gYWdhaW4uIEknbSBmb2N1c2luZyBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBjb250cm9sIGFuZCB3YWl0IG9wZXJhdGlvbnMuIExldCBtZSBzZWUuLi4gSSBub3RpY2UgdGhhdCBib3RoIGBkb19lcG9sbF9jdGxgIGFuZCBgZG9fZXBvbGxfY3RsX2ZpbGVgIGFyZSBkZWZpbmVkIGFzIG5vbi1zdGF0aWMuIE1ha2VzIHNlbnNlLCB0aGV5J3JlIGxpa2VseSBlbnRyeSBwb2ludHMuIEJ1dCB0aGF0IGJyaW5ncyB1cCB0aGUgcXVlc3Rpb24gb2YgYGVwb2xsX3dhaXRgLiBJdOKAmXMgYSBzeXN0ZW0gY2FsbCwgb2J2aW91c2x5LiBCdXQgaXMgdGhlcmUgc29tZSBub24tc3RhdGljIGhlbHBlciBmdW5jdGlvbiwgc29tZSBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIHRvIGhhbmRsZSB0aGUgd2FpdGluZyBhc3BlY3Q/IEkgZG9uJ3QgcmVjYWxsIG9uZSBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLiBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSdzIGFueSBub24tc3RhdGljIGZ1bmN0aW9uIGludm9sdmVkIGluIHdhaXRpbmcuIExldCdzIHNlZS4uLiBNYXliZSBgZXBvbGxfc2VuZGV2ZW50c2A/IEknbGwgbmVlZCB0byBleGFtaW5lIHRoYXQgZnVuY3Rpb24uIEkgZmVlbCBsaWtlIGl0IG1pZ2h0IGJlIHNvbWVob3cgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjEwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDY6MDcuMTIzMjkzOTI0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYzOTcyMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXBvbGxfc2VuZGV2ZW50c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9ldmVudHBvbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9ldmVudHBvbGwuYz0yODU4PXN0YXRpYyBpbnQgZXBfY2hlY2tfcGFyYW1zKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldnMsXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yODc4LVxcbmZzL2V2ZW50cG9sbC5jOjI4Nzk6aW50IGVwb2xsX3NlbmRldmVudHMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcXG5mcy9ldmVudHBvbGwuYy0yODgwLVxcdFxcdCAgICAgaW50IG1heGV2ZW50cylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDY6MDcuMjg5Njk1NTgyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDg2OTE5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGVwb2xsX3NlbmRldmVudHNgJ3MgU2NvcGUqKlxuXG5SaWdodCwgc28gYGVwb2xsX3NlbmRldmVudHNgIGlzbid0IGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyB0aGF0IGl0J3MgbWVhbnQgdG8gYmUgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBpbW1lZGlhdGUgbW9kdWxlIHdoZXJlIGl0J3MgZGVmaW5lZC4gTGV0J3Mgc2VlLi4uIEkgbmVlZCB0byBmaWd1cmUgb3V0ICpob3cqIGl0J3MgZXhwb3NlZC4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGhlYWRlciBmaWxlIHdoZXJlIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIGFuZCwgaG9wZWZ1bGx5LCBwcm90b3R5cGVzIGFyZSBkZWNsYXJlZC4gSSdsbCB0YWtlIGEgcXVpY2sgcGVlayBhdCBgaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaGAgYW5kIHNlZSB3aGF0IHdlJ3JlIGV4cG9ydGluZyBhbmQgaW1wb3J0aW5nIGZyb20gdGhpcyBmaWxlLiBJdCdsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW50ZW5kZWQgdXNlLCBkZXBlbmRlbmNpZXMgYW5kIHdoZXJlIGl0J3MgY2FsbGVkLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBxdWljayB3YXkgb2YgdHJhY2luZyBkZXBlbmRlbmNpZXMgYW5kIGVudHJ5IHBvaW50cyBpbiB0aGUga2VybmVsLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMjgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowNjoxMS42OTgzOTA2OTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzYyMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVwb2xsX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg9MTY9c3RydWN0IGZpbGU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTIxLSNpZmRlZiBDT05GSUdfS0NNUFxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6MjI6c3RydWN0IGZpbGUgKmdldF9lcG9sbF90ZmlsZV9yYXdfcHRyKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgdGZkLCB1bnNpZ25lZCBsb25nIHRvZmYpO1xcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtMjMtI2VuZGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oPTI2PXZvaWQgZXZlbnRwb2xsX3JlbGVhc2VfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTI4LS8qIENvcHkgcmVhZHkgZXZlbnRzIHRvIHVzZXJzcGFjZSAqL1xcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6Mjk6aW50IGVwb2xsX3NlbmRldmVudHMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTMwLVxcdFxcdCAgICAgaW50IG1heGV2ZW50cyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oPTM4PXN0YXRpYyBpbmxpbmUgdm9pZCBldmVudHBvbGxfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtNjMtXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo2NDpzdHJ1Y3QgZXBvbGxfa2V5IHtcXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTY1LVxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC02OC1cXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oOjY5OmludCBkb19lcG9sbF9jdGxfZmlsZShzdHJ1Y3QgZmlsZSAqZiwgaW50IG9wLCBzdHJ1Y3QgZXBvbGxfa2V5ICp0ZixcXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oOjcwOlxcdFxcdCAgICAgIHN0cnVjdCBlcG9sbF9ldmVudCAqZXBkcywgYm9vbCBub25ibG9jayk7XFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo3MTppbnQgZG9fZXBvbGxfY3RsKGludCBlcGZkLCBpbnQgb3AsIGludCBmZCwgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLFxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtNzItXFx0XFx0IGJvb2wgbm9uYmxvY2spO1xcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg9NzM9Ym9vbCBpc19maWxlX2Vwb2xsKHN0cnVjdCBmaWxlICpmKTtcXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTc0LVxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6NzU6LyogVGVsbHMgaWYgdGhlIGVwb2xsX2N0bCgyKSBvcGVyYXRpb24gbmVlZHMgYW4gZXZlbnQgY29weSBmcm9tIHVzZXJzcGFjZSAqL1xcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtNzYtc3RhdGljIGlubGluZSBpbnQgZXBfb3BfaGFzX2V2ZW50KGludCBvcClcXG4tLVxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg9ODM9c3RhdGljIGlubGluZSB2b2lkIGV2ZW50cG9sbF9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKSB7fVxcbi0tXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC04OC0vKiBBUk0gT0FCSSBoYXMgYW4gaW5jb21wYXRpYmxlIHN0cnVjdCBsYXlvdXQgYW5kIG5lZWRzIGEgc3BlY2lhbCBoYW5kbGVyICovXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo4OTpleHRlcm4gc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo5MDplcG9sbF9wdXRfdWV2ZW50KF9fcG9sbF90IHJldmVudHMsIF9fdTY0IGRhdGEsXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo5MTpcXHRcXHQgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqdWV2ZW50KTtcXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTkyLSNlbHNlXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo5MzpzdGF0aWMgaW5saW5lIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKlxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6OTQ6ZXBvbGxfcHV0X3VldmVudChfX3BvbGxfdCByZXZlbnRzLCBfX3U2NCBkYXRhLFxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6OTU6XFx0XFx0IHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKnVldmVudClcXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTk2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDY6MTEuNzQxMTU3MDYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzQ4MTczMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFcG9sbCBJbXBsZW1lbnRhdGlvbiBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcgdGhlIGVwb2xsIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUuLi4gZnJvbSB3aGF0IEkgY2FuIHRlbGwsIGBkb19lcG9sbF9jdGxgLCBgZG9fZXBvbGxfY3RsX2ZpbGVgLCBhbmQgYGVwb2xsX3NlbmRldmVudHNgIGFyZSB0aGUgcHJpbWFyeSBub24tc3RhdGljIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBzeXN0ZW0gY2FsbCBkZWZpbml0aW9uczogYHN5c19lcG9sbF93YWl0YCwgYHN5c19lcG9sbF9jdGxgLCBhbmQgYHN5c19lcG9sbF9jcmVhdGVgIGFyZSBhbHNvIHRoZXJlLCBkZWZpbmVkIHVzaW5nIGBTWVNDQUxMX0RFRklORWAuIFNpbmNlIFN5emthbGxlciBjYW4gZnV6eiBzeXNjYWxscyBkaXJlY3RseSwgaGl0dGluZyB0aG9zZSBzeXNjYWxsIGVudHJ5IHBvaW50cyBkaXJlY3RseSBtYWtlcyBzZW5zZS4gU28sIGZvY3VzaW5nIG9uIGBkb19lcG9sbF9jdGxgIGFuZCBgZXBvbGxfc2VuZGV2ZW50c2Agc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbkJ1dCB0aGVuIHRoZXJlJ3MgdGhpcyBgZXBfcG9sbF9jYWxsYmFja2AgZnVuY3Rpb24uIEl0J3MgbWFya2VkIGFzIHN0YXRpYywgYW5kIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBJdCdzIHRoZSBjb3JlIG9mIHRoZSBwcm9wb3NlZCBwYXRjaCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQuIFdhaXQgYSBtaW51dGUuLi4gdGhlIGluc3RydWN0aW9ucyBhbHNvIG1lbnRpb24gYXZvaWRpbmcgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zLiBCdXQsIGBlcF9wb2xsX2NhbGxiYWNrYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGBpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5YC4gVGhhdCBtZWFucyBpdCAqY2FuJ3QqIGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCByaWdodD8gVGhlIGNvbXBpbGVyIGhhcyB0byB0cmVhdCBpdCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGJlIGNhbGxhYmxlIHRocm91Z2ggdGhlIHBvaW50ZXIuIFNvLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYywgaXQncyBzdGlsbCBhY2Nlc3NpYmxlIHRocm91Z2ggYSBzeW1ib2wuIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoYXQgaXQncyBhY3R1YWxseSBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDY6MTcuNTc1OTc2OTA2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQyNjIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5LiplcF9wb2xsX2NhbGxiYWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V2ZW50cG9sbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V2ZW50cG9sbC5jPTE2ODc9c3RhdGljIHZvaWQgZXBfcHRhYmxlX3F1ZXVlX3Byb2Moc3RydWN0IGZpbGUgKmZpbGUsIHdhaXRfcXVldWVfaGVhZF90ICp3aGVhZCxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTE3MDItXFxuZnMvZXZlbnRwb2xsLmM6MTcwMzpcXHRpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KFxcdTAwMjZwd3EtXFx1MDAzZXdhaXQsIGVwX3BvbGxfY2FsbGJhY2spO1xcbmZzL2V2ZW50cG9sbC5jLTE3MDQtXFx0cHdxLVxcdTAwM2V3aGVhZCA9IHdoZWFkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowNjoxNy42MjA0MDgwNDZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQxODE1MDk3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEVwb2xsIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggZXBvbGwsIGFuZCB0aGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHdoZXRoZXIgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBhcmUgaW5saW5lZCBvciBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMuIFRoZSBmYWN0IHRoYXQgaXQncyBhIGZ1bmN0aW9uIHBvaW50ZXIgbWVhbnMgaXQncyAqbm90KiBpbmxpbmVkLCB3aGljaCBpcyBhIGtleSBkaXN0aW5jdGlvbi4gTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIEknbSB3b3JraW5nIHVuZGVyIHNheSBJIG5lZWQgdG8gbGlzdCB0aGUgbm9uLXN0YXRpYyBBUEkgZW50cnkgcG9pbnRzLiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIHRhc2suXG5cbkkgaW5pdGlhbGx5IGxpc3RlZCBgZG9fZXBvbGxfY3RsYCwgYGRvX2Vwb2xsX2N0bF9maWxlYCwgYGVwb2xsX3NlbmRldmVudHNgLCBhbmQgYHN5c19lcG9sbF93YWl0YCBhcyBsaWtlbHkgY2FuZGlkYXRlcy4gQnV0IHRoZW4gSSBzdG9wcGVkIHRvIHRoaW5rIGFib3V0IG5hbWluZyBjb252ZW50aW9ucy4gU3l6a2FsbGVyIHVzZXMgc3lzY2FsbCBuYW1lcywgd2hpbGUgRm9jdXNTeW1ib2xzIGFyZSBmb3Iga2VybmVsIHN5bWJvbHMuIFNvLCBpcyBpdCBgX194NjRfc3lzX2Vwb2xsX3dhaXRgIG9yIHNvbWV0aGluZyBsaWtlIGBkb19lcG9sbF93YWl0YD8gQWhhLCBgZG9fZXBvbGxfd2FpdGAgaXMgc3RhdGljLCBzbyB0aGF0J3Mgb3V0LiBLZWVwaW5nIGluIG1pbmQgdGhlIGluc3RydWN0aW9uLCBsZXQncyBzdGljayB3aXRoIGBkb19lcG9sbF9jdGxgIGFuZCBgZXBvbGxfc2VuZGV2ZW50c2AgZm9yIG5vdyBhcyB0aGUgcmlnaHQgZW50cnkgcG9pbnRzLlxuXG5CdXQsIGEgc3lzY2FsbCBpcywgd2VsbCwgYSBzeXNjYWxsLiBJdHMgc3ltYm9sIG5hbWUgZGVwZW5kcyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCB3aGljaCBjb21wbGljYXRlcyB0aGluZ3MuIEkndmUgZ290IHRvIGVuc3VyZSBJJ20gZ2V0dGluZyBldmVyeXRoaW5nLCBzbyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGVwb2xsLiBUaGUgc2FmZXN0IGFwcHJvYWNoIG5vdyBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBkaWcgaW50byBgZnMvZXZlbnRwb2xsLmNgIGFuZCBodW50IGZvciBhbnkgYFNZU0NBTExfREVGSU5FYCBtYWNyb3MuIFRoYXQgc2hvdWxkIGJlIHRoZSBkZWZpbml0aXZlIHdheSB0byBpZGVudGlmeSBhbnkgbWlzc2VkIEFQSSBlbnRyeXBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDY6MzEuODAxOTIwMDk4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM1NzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTWVNDQUxMX0RFRklORS4qZXBvbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXZlbnRwb2xsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXZlbnRwb2xsLmM9MjU5MD1zdGF0aWMgaW50IGRvX2Vwb2xsX2NyZWF0ZShpbnQgZmxhZ3MpXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yNjIwLVxcbmZzL2V2ZW50cG9sbC5jOjI2MjE6U1lTQ0FMTF9ERUZJTkUxKGVwb2xsX2NyZWF0ZTEsIGludCwgZmxhZ3MpXFxuZnMvZXZlbnRwb2xsLmMtMjYyMi17XFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yNjI1LVxcbmZzL2V2ZW50cG9sbC5jOjI2MjY6U1lTQ0FMTF9ERUZJTkUxKGVwb2xsX2NyZWF0ZSwgaW50LCBzaXplKVxcbmZzL2V2ZW50cG9sbC5jLTI2Mjcte1xcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MjgyMj1pbnQgZG9fZXBvbGxfY3RsKGludCBlcGZkLCBpbnQgb3AsIGludCBmZCwgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjg0NS0gKi9cXG5mcy9ldmVudHBvbGwuYzoyODQ2OlNZU0NBTExfREVGSU5FNChlcG9sbF9jdGwsIGludCwgZXBmZCwgaW50LCBvcCwgaW50LCBmZCxcXG5mcy9ldmVudHBvbGwuYy0yODQ3LVxcdFxcdHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKiwgZXZlbnQpXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yOTAzPXN0YXRpYyBpbnQgZG9fZXBvbGxfd2FpdChpbnQgZXBmZCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjkyNy1cXG5mcy9ldmVudHBvbGwuYzoyOTI4OlNZU0NBTExfREVGSU5FNChlcG9sbF93YWl0LCBpbnQsIGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKiwgZXZlbnRzLFxcbmZzL2V2ZW50cG9sbC5jLTI5MjktXFx0XFx0aW50LCBtYXhldmVudHMsIGludCwgdGltZW91dClcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTI5NDE9c3RhdGljIGludCBkb19lcG9sbF9wd2FpdChpbnQgZXBmZCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjk2MS1cXG5mcy9ldmVudHBvbGwuYzoyOTYyOlNZU0NBTExfREVGSU5FNihlcG9sbF9wd2FpdCwgaW50LCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICosIGV2ZW50cyxcXG5mcy9ldmVudHBvbGwuYy0yOTYzLVxcdFxcdGludCwgbWF4ZXZlbnRzLCBpbnQsIHRpbWVvdXQsIGNvbnN0IHNpZ3NldF90IF9fdXNlciAqLCBzaWdtYXNrLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjk3Mi1cXG5mcy9ldmVudHBvbGwuYzoyOTczOlNZU0NBTExfREVGSU5FNihlcG9sbF9wd2FpdDIsIGludCwgZXBmZCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqLCBldmVudHMsXFxuZnMvZXZlbnRwb2xsLmMtMjk3NC1cXHRcXHRpbnQsIG1heGV2ZW50cywgY29uc3Qgc3RydWN0IF9fa2VybmVsX3RpbWVzcGVjIF9fdXNlciAqLCB0aW1lb3V0LFxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MzAzNj1zdGF0aWMgaW50IGRvX2NvbXBhdF9lcG9sbF9wd2FpdChpbnQgZXBmZCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMzA1Ny1cXG5mcy9ldmVudHBvbGwuYzozMDU4OkNPTVBBVF9TWVNDQUxMX0RFRklORTYoZXBvbGxfcHdhaXQsIGludCwgZXBmZCxcXG5mcy9ldmVudHBvbGwuYy0zMDU5LVxcdFxcdCAgICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICosIGV2ZW50cyxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTMwNzAtXFxuZnMvZXZlbnRwb2xsLmM6MzA3MTpDT01QQVRfU1lTQ0FMTF9ERUZJTkU2KGVwb2xsX3B3YWl0MiwgaW50LCBlcGZkLFxcbmZzL2V2ZW50cG9sbC5jLTMwNzItXFx0XFx0ICAgICAgIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKiwgZXZlbnRzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowNjozMS44NTAyODIyOThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMwODI2NDEyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRXBvbGwgRXZlbnQgRGlzcGF0Y2ggSm91cm5leSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYGVwb2xsYCBjb2RlIGFnYWluLiBNeSBwcmltYXJ5IEZvY3VzU3ltYm9scyBmb3IgdGhpcyBleHBsb3JhdGlvbiBhcmUgYGRvX2Vwb2xsX2N0bGAgYW5kIGBlcG9sbF9zZW5kZXZlbnRzYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGV2ZW50cyBhcmUgbWFuYWdlZCBhbmQgZGVsaXZlcmVkLlxuXG5IbW0sIHdhaXQgYSBzZWNvbmQuLi4gdGhpcyBpc24ndCBhcyBzdHJhaWdodGZvcndhcmQgYXMgSSBpbml0aWFsbHkgdGhvdWdodC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgZXBvbGxfc2VuZGV2ZW50c2Agd2FzIGRpcmVjdGx5IGludm9rZWQgYnkgYGVwb2xsX3dhaXRgLCBidXQgc29tZXRoaW5nJ3Mgb2ZmLiBMZXQgbWUgcmV0cmFjZSBteSBzdGVwcy4uLiBgZXBvbGxfd2FpdGAgZG9lc24ndCBjYWxsIGl0LiBSaWdodCwgYGRvX2Vwb2xsX3dhaXRgIGNhbGxzIGBlcF9wb2xsYCwgYW5kIGBlcF9wb2xsYCwgaW4gdHVybiwgaXMgY2FsbGluZyB0aGUgc3RhdGljIGZ1bmN0aW9uIGBlcF9zZW5kX2V2ZW50c2AuXG5cblNvLCB3aGVyZSBpcyB0aGlzIGBlcG9sbF9zZW5kZXZlbnRzYCBhY3R1YWxseSBiZWluZyB1c2VkPyBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgaXRzIGNhbGwgc2l0ZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgZXZlbnRzIGFyZSBwcm9wYWdhdGVkIGluIHRoaXMgc3lzdGVtLiBUaGlzIHdpbGwgcmVxdWlyZSBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjI1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjA2OjU0LjkzMjkyNjkxM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MDkyNTQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlcG9sbF9zZW5kZXZlbnRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9ldmVudHBvbGwuYz0yODU4PXN0YXRpYyBpbnQgZXBfY2hlY2tfcGFyYW1zKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldnMsXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yODc4LVxcbmZzL2V2ZW50cG9sbC5jOjI4Nzk6aW50IGVwb2xsX3NlbmRldmVudHMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcXG5mcy9ldmVudHBvbGwuYy0yODgwLVxcdFxcdCAgICAgaW50IG1heGV2ZW50cylcXG4tLVxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg9MjY9dm9pZCBldmVudHBvbGxfcmVsZWFzZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtMjgtLyogQ29weSByZWFkeSBldmVudHMgdG8gdXNlcnNwYWNlICovXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDoyOTppbnQgZXBvbGxfc2VuZGV2ZW50cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtMzAtXFx0XFx0ICAgICBpbnQgbWF4ZXZlbnRzKTtcXG4tLVxcbmlvX3VyaW5nL2Vwb2xsLmM9OTA9aW50IGlvX2Vwb2xsX3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL2Vwb2xsLmMtOTQtXFxuaW9fdXJpbmcvZXBvbGwuYzo5NTpcXHRyZXQgPSBlcG9sbF9zZW5kZXZlbnRzKHJlcS1cXHUwMDNlZmlsZSwgaWV3LVxcdTAwM2VldmVudHMsIGlldy1cXHUwMDNlbWF4ZXZlbnRzKTtcXG5pb191cmluZy9lcG9sbC5jLTk2LVxcdGlmIChyZXQgPT0gMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDY6NTYuNjAzODU2NDEyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNTMxNzE5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBpb191cmluZy9lcG9sbCBpbnRlcnBsYXkqKlxuXG5SaWdodCwgc28gYGVwb2xsX3NlbmRldmVudHNgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBBaCwgeWVzLCBpdCdzIGNhbGxlZCBieSBgaW9fdXJpbmcvZXBvbGwuY2AuIEdvb2QsIHRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSB0d28gYXJlIGNvbm5lY3RlZC4gTm93LCB3aGF0IGVsc2UgaXMgaW4gdGhhdCBhcmVhPyBMZXQncyBjaGVjayBgZG9fZXBvbGxfY3RsYC4gSXMgdGhhdCBhbHNvIHVzZWQgYnkgYGlvX3VyaW5nL2Vwb2xsLmNgPyBUaGF0IHdvdWxkIGRlZmluaXRlbHkgYmUgd29ydGggaW52ZXN0aWdhdGluZyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg5NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjA3OjA0Ljg1NzAzMTI2M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NzU0NzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19lcG9sbF9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYz0yODM9YXNtbGlua2FnZSBsb25nIHN5c19vYWJpX2Vwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMtMjk1LVxcbmFyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYzoyOTY6XFx0cmV0dXJuIGRvX2Vwb2xsX2N0bChlcGZkLCBvcCwgZmQsIFxcdTAwMjZrZXJuZWwsIGZhbHNlKTtcXG5hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMtMjk3LX1cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTM4NT1zdGF0aWMgbG9uZyBtYXhfdXNlcl93YXRjaGVzIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5mcy9ldmVudHBvbGwuYy00MDItICogYW5kIGNhcnJpZXMgaXRzIHNjcmF0Y2ggc3RhdGUgb24gYSBzdGFjay1hbGxvY2F0ZWQgc3RydWN0XFxuZnMvZXZlbnRwb2xsLmM6NDAzOiAqIGVwX2N0bF9jdHggc2NvcGVkIHRvIG9uZSBkb19lcG9sbF9jdGwoKSBjYWxsLiBOb24tbmVzdGVkIGluc2VydHNcXG5mcy9ldmVudHBvbGwuYy00MDQtICogc2tpcCB0aGlzIG1hY2hpbmVyeSBlbnRpcmVseSBhbmQgdGFrZSBvbmx5IGVwLVxcdTAwM2VtdHguXFxuLS1cXG5mcy9ldmVudHBvbGwuYz00Mjc9c3RhdGljIHU2NCBsb29wX2NoZWNrX2dlbiA9IDA7XFxuLS1cXG5mcy9ldmVudHBvbGwuYy00MzEtLypcXG5mcy9ldmVudHBvbGwuYzo0MzI6ICogUGVyLWRvX2Vwb2xsX2N0bCgpIHNjcmF0Y2ggZm9yIHRoZSBsb29wIC8gcGF0aCBjaGVja3MuIEFsbG9jYXRlZCBvblxcbmZzL2V2ZW50cG9sbC5jLTQzMy0gKiB0aGUgY2FsbGVyJ3Mgc3RhY2s7IHBvcHVsYXRlZCBieSBlcF9jdGxfbG9jaygpIGFuZCB0aGUgZG93bndhcmRcXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTE3Njk9c3RhdGljIGludCByZXZlcnNlX3BhdGhfY2hlY2tfcHJvYyhzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMTc5NS0gKiAgICAgICAgICAgICAgICAgICAgICBvdmVyIGl0cyBsaW1pdCBpbiBwYXRoX2xpbWl0c1tdLlxcbmZzL2V2ZW50cG9sbC5jOjE3OTY6ICogQGN0eDogUGVyLWRvX2Vwb2xsX2N0bCgpIHNjcmF0Y2ggZm9yIHRoZSBsb29wIC8gcGF0aCBjaGVja3MuXFxuZnMvZXZlbnRwb2xsLmMtMTc5Ny0gKlxcbi0tXFxuZnMvZXZlbnRwb2xsLmM9MjM0Nj1zdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI0NzgtICpcXG5mcy9ldmVudHBvbGwuYzoyNDc5OiAqIEBjdHg6IFBlci1kb19lcG9sbF9jdGwoKSBzY3JhdGNoIGZvciB0aGUgbG9vcCAvIHBhdGggY2hlY2tzLlxcbmZzL2V2ZW50cG9sbC5jLTI0ODAtICogQGVwOiB0aGUgXFx1MDAyNnN0cnVjdCBldmVudHBvbGwgdG8gYmUgY3VycmVudGx5IGNoZWNrZWQuXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yNjQ3PXN0YXRpYyBpbmxpbmUgaW50IGVwb2xsX211dGV4X2xvY2soc3RydWN0IG11dGV4ICptdXRleCwgYm9vbCBub25ibG9jaylcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI2NTYtLypcXG5mcy9ldmVudHBvbGwuYzoyNjU3OiAqIEFjcXVpcmUgdGhlIGxvY2tzIHJlcXVpcmVkIGZvciBkb19lcG9sbF9jdGwoKSBvbiBAZXAgZm9yIEBvcC5cXG5mcy9ldmVudHBvbGwuYy0yNjU4LSAqXFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yNzI0PXN0YXRpYyB2b2lkIGVwX2N0bF91bmxvY2soc3RydWN0IGVwX2N0bF9jdHggKmN0eCwgc3RydWN0IGV2ZW50cG9sbCAqZXAsXFxuLS1cXG5mcy9ldmVudHBvbGwuYy0yNzM0LVxcbmZzL2V2ZW50cG9sbC5jOjI3MzU6aW50IGRvX2Vwb2xsX2N0bF9maWxlKHN0cnVjdCBmaWxlICpmLCBpbnQgb3AsIHN0cnVjdCBlcG9sbF9rZXkgKnRmLFxcbmZzL2V2ZW50cG9sbC5jLTI3MzYtXFx0XFx0ICAgICAgc3RydWN0IGVwb2xsX2V2ZW50ICplcGRzLCBib29sIG5vbmJsb2NrKVxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjgyMS1cXG5mcy9ldmVudHBvbGwuYzoyODIyOmludCBkb19lcG9sbF9jdGwoaW50IGVwZmQsIGludCBvcCwgaW50IGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmVwZHMsXFxuZnMvZXZlbnRwb2xsLmMtMjgyMy1cXHRcXHQgYm9vbCBub25ibG9jaylcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTI4MzctXFx0ZWZkLmZkID0gZmQ7XFxuZnMvZXZlbnRwb2xsLmM6MjgzODpcXHRyZXR1cm4gZG9fZXBvbGxfY3RsX2ZpbGUoZmRfZmlsZShmKSwgb3AsIFxcdTAwMjZlZmQsIGVwZHMsIG5vbmJsb2NrKTtcXG5mcy9ldmVudHBvbGwuYy0yODM5LX1cXG4tLVxcbmZzL2V2ZW50cG9sbC5jPTI4NDY9U1lTQ0FMTF9ERUZJTkU0KGVwb2xsX2N0bCwgaW50LCBlcGZkLCBpbnQsIG9wLCBpbnQsIGZkLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjg1NC1cXG5mcy9ldmVudHBvbGwuYzoyODU1OlxcdHJldHVybiBkb19lcG9sbF9jdGwoZXBmZCwgb3AsIGZkLCBcXHUwMDI2ZXBkcywgZmFsc2UpO1xcbmZzL2V2ZW50cG9sbC5jLTI4NTYtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaD02ND1zdHJ1Y3QgZXBvbGxfa2V5IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgtNjgtXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaDo2OTppbnQgZG9fZXBvbGxfY3RsX2ZpbGUoc3RydWN0IGZpbGUgKmYsIGludCBvcCwgc3RydWN0IGVwb2xsX2tleSAqdGYsXFxuaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaC03MC1cXHRcXHQgICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmVwZHMsIGJvb2wgbm9uYmxvY2spO1xcbmluY2x1ZGUvbGludXgvZXZlbnRwb2xsLmg6NzE6aW50IGRvX2Vwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXBkcyxcXG5pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oLTcyLVxcdFxcdCBib29sIG5vbmJsb2NrKTtcXG4tLVxcbmlvX3VyaW5nL2Vwb2xsLmM9NTE9aW50IGlvX2Vwb2xsX2N0bChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvZXBvbGwuYy02Ny1cXHRrZXkuZmQgPSBpZS1cXHUwMDNlZmQ7XFxuaW9fdXJpbmcvZXBvbGwuYzo2ODpcXHRyZXQgPSBkb19lcG9sbF9jdGxfZmlsZShmZF9maWxlKGYpLCBpZS1cXHUwMDNlb3AsIFxcdTAwMjZrZXksIFxcdTAwMjZpZS1cXHUwMDNlZXZlbnQsIGZvcmNlX25vbmJsb2NrKTtcXG5pb191cmluZy9lcG9sbC5jLTY5LVxcdGlmIChmb3JjZV9ub25ibG9jayBcXHUwMDI2XFx1MDAyNiByZXQgPT0gLUVBR0FJTilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDc6MDYuNTA0NTgyNzcxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4ODQ4OTAwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgT3VyIEVwb2xsIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgZG9fZXBvbGxfY3RsX2ZpbGVgIGlzIGluZGVlZCB1c2VkIGJ5IGBpb191cmluZy9lcG9sbC5jYC4gVGhpcyBpcyBnb29kLCBpdCBoZWxwcyBzb2xpZGlmeSB0aGUgaW1wb3J0YW5jZSBvZiB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gaW4gdGhlIG92ZXJhbGwgcGljdHVyZS4gU28sIHRoYXQsIGFsb25nIHdpdGggYGRvX2Vwb2xsX2N0bGAgYW5kIGBlcG9sbF9zZW5kZXZlbnRzYCBhcmUgZGVmaW5pdGVseSBleGNlbGxlbnQgRm9jdXNTeW1ib2xzIGZvciB1cyB0byByZWFsbHkgZGVsdmUgaW50by4gV2hpbGUgSSBjb3VsZCBhbHNvIGNvbnNpZGVyIHRoZSBzeXNjYWxscyB0aGVtc2VsdmVzIGxpa2UgYHN5c19lcG9sbF93YWl0YCwgYHN5c19lcG9sbF9jdGxgLCBhbmQgYHN5c19lcG9sbF9wd2FpdGAgYXMgcGFydCBvZiB0aGlzLCBTeXprYWxsZXIgaXMgcHJldHR5IGdvb2QgYXQgZnV6emluZyB0aG9zZSBkaXJlY3RseSwgc28gdGhleSBhcmUgbG93ZXIgb24gdGhlIHByaW9yaXR5IGxpc3QuIEknbSBhZGRpbmcgYGRvX2Vwb2xsX2N0bGAsIGBkb19lcG9sbF9jdGxfZmlsZWAsIGFuZCBgZXBvbGxfc2VuZGV2ZW50c2AgdG8gdGhlIEZvY3VzU3ltYm9scyBsaXN0OyB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9ucy4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBgQ09ORklHX2Agb3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgcmVxdWlyZWQgZm9yIHRoZXNlIGZ1bmN0aW9ucyB0byBldmVuIGJlIGNvbXBpbGVkLiBMb29raW5nIGF0IGBmcy9ldmVudHBvbGwuY2AsIGl0IHNlZW1zIHRoYXQgYENPTkZJR19FUE9MTGAgaXMgdGhlIGtleS4gQnV0IEkgc2hvdWxkIGRvdWJsZS1jaGVjayBieSBsb29raW5nIGF0IGBmcy9NYWtlZmlsZWAgb3IgYGluaXQvS2NvbmZpZ2AganVzdCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ1OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowNzoxMy4zODk0NzQ5OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNjI1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVBPTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MjQ9b2JqLXlcXHRcXHRcXHRcXHQrPSBub3RpZnkvXFxuZnMvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX0VQT0xMKVxcdFxcdCs9IGV2ZW50cG9sbC5vXFxuZnMvTWFrZWZpbGUtMjYtb2JqLXlcXHRcXHRcXHRcXHQrPSBhbm9uX2lub2Rlcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjA3OjEzLjQzMzU0MDM5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTkwNTQ0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEVQT0xMIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2sgYW5kIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEknbGwgcXVpY2tseSBjaGVjayB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHVzdWFsbHkgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2sgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZXNwZWNpYWxseSBzb21ldGhpbmcgYXMgZnVuZGFtZW50YWwgYXMgYEVQT0xMYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgaXMgZW5hYmxlZCBvciBoYXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIGV4cGVjdC4gSXQncyBhIHF1aWNrIHdheSB0byBlbnN1cmUgSSdtIG5vdCBjaGFzaW5nIGEgZ2hvc3QgYW5kIHRoYXQgdGhlIGdyb3VuZHdvcmsgaXMgcHJvcGVybHkgbGFpZCBvdXQuIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMjcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowNzoxNi42OTI1OTcxMzdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDA0MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFUE9MTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4Njg9Y29uZmlnIEZVVEVYX1JPQlVTVF9VTkxPQ0tcXG4tLVxcbmluaXQvS2NvbmZpZy0xODcwLVxcbmluaXQvS2NvbmZpZzoxODcxOmNvbmZpZyBFUE9MTFxcbmluaXQvS2NvbmZpZy0xODcyLVxcdGJvb2wgXFxcIkVuYWJsZSBldmVudHBvbGwgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjA3OjE2LjczNjYyNDUyNloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODk1MjUwMzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEVwb2xsIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgYGZzL2V2ZW50cG9sbC5jYCB0aGF0IEkgbmVlZCB0byBldmFsdWF0ZSBmb3IgZnV6emluZyBwb3RlbnRpYWwuIFRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgYWRkaW5nIGBFUE9MTGAgdG8gYEVuYWJsZUNvbmZpZ3NgIGJlY2F1c2UsIHdlbGwsIGBFUE9MTGAgaXMgYSBjb3JlIGZlYXR1cmU7IGl0J3MgcHJhY3RpY2FsbHkgYWx3YXlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gb2J2aW91c2x5IGl0IHNob3VsZCBiZSBlbmFibGVkIHdoZW4gdGVzdGluZyB0aGlzLlxuXG5Ob3csIGRpZ2dpbmcgaW50byB0aGUgcGF0Y2ggaXRzZWxmLCBJIGNhbiBzZWUgaXQncyB0b3VjaGluZyBhICpsb3QqIG9mIGNvcmUgYGVwb2xsYCBmdW5jdGlvbnMuICBXZSdyZSB0YWxraW5nIGZ1bmRhbWVudGFsIHBpZWNlcyBoZXJlOiBgZXBfZXZlbnRzX2F2YWlsYWJsZWAsIGBlcF9zdGF0ZV90ZXN0YCwgYGVwX3JlYWR5X2Zhc3RfZW5hYmxlZGAsIGBlcF9zZXRfcmVhZHlfYWNjb3VudGVkYCwgYGVwX3ByZXBhcmVfcmVwb2xsYCwgYGVwX2NhbGxiYWNrX2Nhbl9za2lwYCwgYGVwX2RvbmVfc2NhbmAsIGBfX2VwX2V2ZW50cG9sbF9wb2xsYCwgYGVwX3BvbGxfY2FsbGJhY2tgLCBgZXBfaW5zZXJ0YCwgYGVwX21vZGlmeWAsIGBlcF9kZWxpdmVyX2V2ZW50YCwgYW5kIGBlcF9wb2xsYC4gIEJhc2ljYWxseSB0aGUgd2hvbGUgc2hlYmFuZyFcblxuVGhlIGNydXggb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhIG5ldyBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIGBlcG9sbGAgY2FsbGJhY2tzLCB3aGljaCBtZWFucyBuZXcgc3RhdGUgYml0cyBsaWtlIGBFUF9TVEFURV9BQ0NPVU5URURgIGFuZCBgRVBfU1RBVEVfRkFTVGAsIGFuZCBjb3JyZXNwb25kaW5nIG1vZGlmaWNhdGlvbnMgdG8gZXZlbnQgZGVsaXZlcnkgYW5kIHBvbGxpbmcgbG9naWMuICBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGFsdGVyYXRpb24gdG8gY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gVGhpcyBraW5kIG9mIHBhdGNoLCBtb2RpZnlpbmcgdGhlIGZ1bmRhbWVudGFsIGV2ZW50IGhhbmRsaW5nIGluIGBlcG9sbGAgd2hpY2ggaXMgdXNlZCBleHRlbnNpdmVseSBieSBhbG1vc3QgYWxsIHNvZnR3YXJlIHJ1bm5pbmcgb24gdGhlIGtlcm5lbCwgaXMgKmRlZmluaXRlbHkqIGdvaW5nIHRvIGJlIHJlYWNoYWJsZSB0aHJvdWdoIGBlcG9sbF9jdGxgIHN5c2NhbGxzLCBgZXBvbGxfd2FpdGAgc3lzY2FsbHMsIGFuZCBldmVuIGlvX3VyaW5nLiBUaGlzIG1lYW5zIGEgZ29vZCBwb3RlbnRpYWwgZm9yIGZ1enppbmcuXG5cbk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlc2UgZnVuY3Rpb25zIGluIGEgKmZ1bmN0aW9uYWwqIHdheS4gVGhlIGZ1bmN0aW9ucyBJJ20gc2VlaW5nIG1vZGlmaWVkIGFyZSBkZWZpbml0ZWx5IGluIHRoZSBmYXN0IHBhdGguIFRoaXMga2luZCBvZiBjb2RlIGlzIGhpZ2gtdmFsdWUgZm9yIGZ1enppbmcuIEFsc28sIGBlcF9wb2xsX2NhbGxiYWNrYCB3aGljaCBpcyBjYWxsZWQgZnJvbSB3YWtlX3VwIGlzIG1vZGlmaWVkLiBUaGlzIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBhbHNvIHRvdWNoaW5nIGBlcF9pbnNlcnRgLCBgZXBfbW9kaWZ5YCwgYGVwX2RlbGl2ZXJfZXZlbnRgLCBhbmQgYGVwX3BvbGxgLiBBbGwgb2YgdGhlc2UgYXJlIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBgZXBvbGxfY3RsYCBhbmQgYGVwb2xsX3dhaXRgLlxuXG5UaGVyZWZvcmUsIEknbSBtYXJraW5nIHRoaXMgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAuICBNeSBgRm9jdXNTeW1ib2xzYCBhcmUgZ29pbmcgdG8gYmUgYGRvX2Vwb2xsX2N0bGAsIGBkb19lcG9sbF9jdGxfZmlsZWAsIGFuZCBgZXBvbGxfc2VuZGV2ZW50c2AgdG8gaGVscCBndWlkZSB0aGUgZnV6emluZyBlZmZvcnQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMwNiwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDc6MjUuNjMxODc4MDg5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUzODcxMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVQT0xMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fZXBvbGxfY3RsXCIsXG4gICAgXCJkb19lcG9sbF9jdGxfZmlsZVwiLFxuICAgIFwiZXBvbGxfc2VuZGV2ZW50c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIGVwb2xsIGNhbGxiYWNrcywgYWRkaW5nIG5ldyBzdGF0ZSBiaXRzIChFUF9TVEFURV9BQ0NPVU5URUQsIEVQX1NUQVRFX0ZBU1QpIGFuZCBtb2RpZnlpbmcgdGhlIGNvcmUgZXZlbnQgZGVsaXZlcnkgYW5kIHBvbGxpbmcgbG9naWMgaW4gZnMvZXZlbnRwb2xsLmMuIFRoaXMgYWZmZWN0cyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGFuZCBpcyBoaWdobHkgcmVhY2hhYmxlIHZpYSBlcG9sbCBzeXNjYWxscyBhbmQgaW9fdXJpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVBPTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19lcG9sbF9jdGxcIixcbiAgICBcImRvX2Vwb2xsX2N0bF9maWxlXCIsXG4gICAgXCJlcG9sbF9zZW5kZXZlbnRzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgZXBvbGwgY2FsbGJhY2tzLCBhZGRpbmcgbmV3IHN0YXRlIGJpdHMgKEVQX1NUQVRFX0FDQ09VTlRFRCwgRVBfU1RBVEVfRkFTVCkgYW5kIG1vZGlmeWluZyB0aGUgY29yZSBldmVudCBkZWxpdmVyeSBhbmQgcG9sbGluZyBsb2dpYyBpbiBmcy9ldmVudHBvbGwuYy4gVGhpcyBhZmZlY3RzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgYW5kIGlzIGhpZ2hseSByZWFjaGFibGUgdmlhIGVwb2xsIHN5c2NhbGxzIGFuZCBpb191cmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDc6MjUuNzA3MjcyNzU4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTczNTQxOTczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDAzOjA3OjI1LjcwNzY5ODE3OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTczNDk5MDg4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgZXBvbGwgdXNpbmcgYXRvbWljIHN0YXRlIGJpdHMgaW4gYHN0cnVjdCBlcGl0ZW1gLiBJdCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gbG9naWMsIGV2ZW50IGFjY291bnRpbmcsIGFuZCB3YWtldXBzLiBBbGwgbmV3IGZpZWxkcyAobGlrZSBgYXRvbWljX3Qgc3RhdGVgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSBga21lbV9jYWNoZV96YWxsb2NgIGFuZCBgYXRvbWljX3NldGApLCBhbmQgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODg5Mjg2OWJkMjM2MzQ3YTJmYzkyMWY3MzllZjY3Y2MwNjEwMWU5MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDAyOjUwOjI0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuY1xuaW5kZXggZTBjNGJmODhhODM4My4uNjAwZDNkMmQ0NzYzNiAxMDA2NDRcbi0tLSBhL2ZzL2V2ZW50cG9sbC5jXG4rKysgYi9mcy9ldmVudHBvbGwuY1xuQEAgLTI0Myw2ICsyNDMsMTQgQEAgc3RydWN0IGVwcG9sbF9lbnRyeSB7XG4gXHR3YWl0X3F1ZXVlX2hlYWRfdCAqd2hlYWQ7XG4gfTtcbiBcbisvKlxuKyAqIEZBU1QgaXMgc2V0IGZvciBlbGlnaWJsZSBpdGVtcyBhdCBpbnNlcnRpb24uIEFDQ09VTlRFRCB0cmFja3MgRkFTVCBpdGVtc1xuKyAqIHdoaWxlIHRoZSByZWFkeSBwYXRoIG93bnMgdGhlbSBhbmQgaXMgY2xlYXJlZCBpbW1lZGlhdGVseSBiZWZvcmUgcmUtcG9sbC5cbisgKi9cbitlbnVtIHtcbitcdEVQX1NUQVRFX0FDQ09VTlRFRFx0PSBCSVQoMCksXG4rXHRFUF9TVEFURV9GQVNUXHRcdD0gQklUKDEpLFxuK307XG4gLypcbiAgKiBFYWNoIGZpbGUgZGVzY3JpcHRvciBhZGRlZCB0byB0aGUgZXZlbnRwb2xsIGludGVyZmFjZSB3aWxsXG4gICogaGF2ZSBhbiBlbnRyeSBvZiB0aGlzIHR5cGUgbGlua2VkIHRvIHRoZSBcInJiclwiIFJCIHRyZWUuXG5AQCAtMjcxLDYgKzI3OSw5IEBAIHN0cnVjdCBlcGl0ZW0ge1xuIFx0LyogVGhlIGZpbGUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiB0aGlzIGl0ZW0gcmVmZXJzIHRvICovXG4gXHRzdHJ1Y3QgZXBvbGxfa2V5IGZmZDtcbiBcbitcdC8qIEF0b21pYyBzdGF0ZSBiaXRzLCBzZWUgdGhlIEVQX1NUQVRFXyogZW51bSBhYm92ZS4gKi9cbitcdGF0b21pY190IHN0YXRlO1xuK1xuIFx0LyogTGlzdCBjb250YWluaW5nIHBvbGwgd2FpdCBxdWV1ZXMgKi9cbiBcdHN0cnVjdCBlcHBvbGxfZW50cnkgKnB3cWxpc3Q7XG4gXG5AQCAtNjIwLDYgKzYzMSw2NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZXBfZXZlbnRzX2F2YWlsYWJsZShzdHJ1Y3QgZXZlbnRwb2xsICplcClcbiBcdFx0cmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZlcC1cdTAwM2VzZXEsIHNlcSk7XG4gfVxuIFxuKy8qXG4rICogTGV0IEEgYmUgQUNDT1VOVEVEIGFuZCBCIGJlIGZpbGUgcmVhZGluZXNzLiBGdWxseSBvcmRlcmVkIGF0b21pYyBSTVdzXG4rICogcGFpciBXKEE9MCkgYmVmb3JlIFIoQikgd2l0aCBXKEIpIGJlZm9yZSBSKEEpLCBzbyBhIHNjYW5uZXIgY2Fubm90IG1pc3NcbisgKiBCIHdoaWxlIGl0cyBjYWxsYmFjayBza2lwcyBhbiBhY2NvdW50ZWQgaXRlbS4gZXBfZG9uZV9zY2FuKCkgYW5kIHRoZVxuKyAqIGZhdGFsLXNpZ25hbCBoYW5kb2ZmIHBhc3MgcXVldWVkIGV2ZW50cyBiZXR3ZWVuIGV4Y2x1c2l2ZSB3YWl0ZXJzLlxuKyAqIHBvbGxfd2FpdCB1c2VycywgcHJpdmF0ZSBtb2RlcyBhbmQgc3BlY2lhbCBjYWxsYmFja3MgdGFrZSB0aGUgc2xvdyBwYXRoLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBlcF9zdGF0ZV90ZXN0KGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSwgdW5zaWduZWQgaW50IGJpdClcbit7XG4rXHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2ZXBpLVx1MDAzZXN0YXRlKSBcdTAwMjYgYml0O1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgZXBfcmVhZHlfZmFzdF9lbmFibGVkKGNvbnN0IHN0cnVjdCBlcGl0ZW0gKmVwaSlcbit7XG4rXHRyZXR1cm4gZXBfc3RhdGVfdGVzdChlcGksIEVQX1NUQVRFX0ZBU1QpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgZXBfc2V0X3JlYWR5X2FjY291bnRlZChzdHJ1Y3QgZXBpdGVtICplcGkpXG4re1xuK1x0aWYgKGVwX3JlYWR5X2Zhc3RfZW5hYmxlZChlcGkpKVxuK1x0XHRhdG9taWNfb3IoRVBfU1RBVEVfQUNDT1VOVEVELCBcdTAwMjZlcGktXHUwMDNlc3RhdGUpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgZXBfcHJlcGFyZV9yZXBvbGwoc3RydWN0IGVwaXRlbSAqZXBpKVxuK3tcbitcdGlmIChlcF9yZWFkeV9mYXN0X2VuYWJsZWQoZXBpKSlcbitcdFx0YXRvbWljX2ZldGNoX2FuZG5vdChFUF9TVEFURV9BQ0NPVU5URUQsIFx1MDAyNmVwaS1cdTAwM2VzdGF0ZSk7XG4rfVxuK1xuK3N0YXRpYyBib29sIGVwX2NhbGxiYWNrX2Nhbl9za2lwKHN0cnVjdCBlcGl0ZW0gKmVwaSwgX19wb2xsX3QgcG9sbGZsYWdzKVxuK3tcbitcdF9fcG9sbF90IGV2ZW50cztcbitcbitcdGV2ZW50cyA9IFJFQURfT05DRShlcGktXHUwMDNlZXZlbnQuZXZlbnRzKTtcbitcdFxuK1x0LyogT25seSBpbnNlcnRpb24tdGltZSBjYW5kaWRhdGVzIG1heSB1c2UgdGhlIGxvY2tsZXNzIHBhdGguICovXG4rXHRpZiAoIWVwX3JlYWR5X2Zhc3RfZW5hYmxlZChlcGkpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRcbitcdC8qIGVwX21vZGlmeSgpIGNhbiBzZWxlY3QgYSBwcml2YXRlIG1vZGUgdGhhdCByZXF1aXJlcyB0aGUgc2xvdyBwYXRoLiAqL1xuK1x0aWYgKGV2ZW50cyBcdTAwMjYgRVBfUFJJVkFURV9CSVRTKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBwb2xsX3dhaXQgdXNlcnMgbXVzdCBiZSB3b2tlbiBieSB0aGlzIGNhbGxiYWNrLiAqL1xuK1x0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2ZXBpLVx1MDAzZWVwLVx1MDAzZXBvbGxfd2FpdCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIFBPTExGUkVFIHRlYXJzIGRvd24gd2FpdCBlbnRyaWVzOyBVUklOR19XQUtFIG11c3QgcHJvcGFnYXRlLiAqL1xuK1x0aWYgKHBvbGxmbGFncyBcdTAwMjYgKFBPTExGUkVFIHwgRVBPTExfVVJJTkdfV0FLRSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIFVubWF0Y2hlZCB3YWtlIGtleXMgcmV0YWluIHRoZSBzbG93LXBhdGggY2FsbGJhY2sgc2VtYW50aWNzLiAqL1xuK1x0aWYgKHBvbGxmbGFncyBcdTAwMjZcdTAwMjYgIShwb2xsZmxhZ3MgXHUwMDI2IGV2ZW50cykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIEZ1bGx5IG9yZGVyZWQgUk1XIHBhaXJzIHRoZSBCIHVwZGF0ZSB3aXRoIHRoZSBzY2FubmVyJ3MgQSBjbGVhci4gKi9cbitcdHJldHVybiBhdG9taWNfZmV0Y2hfb3IoMCwgXHUwMDI2ZXBpLVx1MDAzZXN0YXRlKSBcdTAwMjYgRVBfU1RBVEVfQUNDT1VOVEVEO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTExcbiAvKipcbiAgKiBidXN5X2xvb3BfZXBfdGltZW91dCAtIGNoZWNrIGlmIGJ1c3kgcG9sbCBoYXMgdGltZWQgb3V0LiBUaGUgdGltZW91dCB2YWx1ZVxuQEAgLTEwMDcsNiArMTA3Nyw3IEBAIHN0YXRpYyB2b2lkIGVwX2RvbmVfc2NhbihzdHJ1Y3QgZXZlbnRwb2xsICplcCxcbiBcdFx0XHQgKiByZXZlcnNlcyB0aGUgaXRlcmF0aW9uIG9yZGVyIGludG8gRklGTy5cbiBcdFx0XHQgKi9cbiBcdFx0XHRsaXN0X2FkZChcdTAwMjZlcGktXHUwMDNlcmRsbGluaywgXHUwMDI2ZXAtXHUwMDNlcmRsbGlzdCk7XG4rXHRcdFx0ZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpO1xuIFx0XHRcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTEzMDMsOCArMTM3NCwxMCBAQCBzdGF0aWMgX19wb2xsX3QgX19lcF9ldmVudHBvbGxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCwgaW50IGRlcFxuIFx0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2ZXAtXHUwMDNlbXR4LCBkZXB0aCk7XG4gXHRlcF9zdGFydF9zY2FuKGVwLCBcdTAwMjZzY2FuX2JhdGNoKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlcGksIHRtcCwgXHUwMDI2c2Nhbl9iYXRjaCwgcmRsbGluaykge1xuK1x0XHRlcF9wcmVwYXJlX3JlcG9sbChlcGkpO1xuIFx0XHRpZiAoZXBfaXRlbV9wb2xsKGVwaSwgXHUwMDI2cHQsIGRlcHRoICsgMSkpIHtcbiBcdFx0XHRyZXMgPSBFUE9MTElOIHwgRVBPTExSRE5PUk07XG4rXHRcdFx0ZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qXG5AQCAtMTQ5Nyw2ICsxNTcwLDkgQEAgc3RhdGljIGludCBlcF9wb2xsX2NhbGxiYWNrKHdhaXRfcXVldWVfZW50cnlfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsIHZcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgZXdha2UgPSAwO1xuIFxuK1x0aWYgKGVwX2NhbGxiYWNrX2Nhbl9za2lwKGVwaSwgcG9sbGZsYWdzKSlcbitcdFx0cmV0dXJuIDE7XG4rXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZlcC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4gXHRlcF9zZXRfYnVzeV9wb2xsX25hcGlfaWQoZXBpKTtcbkBAIC0xNTI5LDExICsxNjA1LDEzIEBAIHN0YXRpYyBpbnQgZXBfcG9sbF9jYWxsYmFjayh3YWl0X3F1ZXVlX2VudHJ5X3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2XG4gXHRcdGlmICghZXBpX29uX292Zmxpc3QoZXBpKSkge1xuIFx0XHRcdGVwaS1cdTAwM2VvdmZsaXN0X25leHQgPSBSRUFEX09OQ0UoZXAtXHUwMDNlb3ZmbGlzdCk7XG4gXHRcdFx0V1JJVEVfT05DRShlcC1cdTAwM2VvdmZsaXN0LCBlcGkpO1xuK1x0XHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0XHRlcF9wbV9zdGF5X2F3YWtlX3JjdShlcGkpO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKCFlcF9pc19saW5rZWQoZXBpKSkge1xuIFx0XHQvKiBJbiB0aGUgdXN1YWwgY2FzZSwgYWRkIGV2ZW50IHRvIHJlYWR5IGxpc3QuICovXG4gXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZXBpLVx1MDAzZXJkbGxpbmssIFx1MDAyNmVwLVx1MDAzZXJkbGxpc3QpO1xuK1x0XHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XG4gXHRcdGVwX3BtX3N0YXlfYXdha2VfcmN1KGVwaSk7XG4gXHR9XG4gXG5AQCAtMTkxMiw2ICsxOTkwLDEzIEBAIHN0YXRpYyBpbnQgZXBfaW5zZXJ0KHN0cnVjdCBlcF9jdGxfY3R4ICpjdHgsIHN0cnVjdCBldmVudHBvbGwgKmVwLFxuIFx0aWYgKElTX0VSUihlcGkpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihlcGkpO1xuIFxuK1x0LypcbitcdCAqIExvY2tsZXNzIGNhbmRpZGF0ZXMgYXJlIHBsYWluIGxldmVsLXRyaWdnZXJlZCBpbnRlcmVzdHM7XG4rXHQgKiBwcml2YXRlIG1vZGVzIGFuZCBuZXN0ZWQgZXBvbGwgY2hhbmdlIHRoZSBjYWxsYmFjayBjb250cmFjdC5cbitcdCAqL1xuK1x0aWYgKCF0ZXAgXHUwMDI2XHUwMDI2ICEoZXZlbnQtXHUwMDNlZXZlbnRzIFx1MDAyNiBFUF9QUklWQVRFX0JJVFMpKVxuK1x0XHRhdG9taWNfc2V0KFx1MDAyNmVwaS1cdTAwM2VzdGF0ZSwgRVBfU1RBVEVfRkFTVCk7XG4rXG4gXHRlcnJvciA9IGVwX3JlZ2lzdGVyX2VwaXRlbShjdHgsIGVwLCBlcGksIHRlcCwgZnVsbF9jaGVjayk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbkBAIC0xOTU2LDYgKzIwNDEsNyBAQCBzdGF0aWMgaW50IGVwX2luc2VydChzdHJ1Y3QgZXBfY3RsX2N0eCAqY3R4LCBzdHJ1Y3QgZXZlbnRwb2xsICplcCxcbiBcbiBcdGlmIChyZXZlbnRzIFx1MDAyNlx1MDAyNiAhZXBfaXNfbGlua2VkKGVwaSkpIHtcbiBcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZlcGktXHUwMDNlcmRsbGluaywgXHUwMDI2ZXAtXHUwMDNlcmRsbGlzdCk7XG4rXHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0ZXBfcG1fc3RheV9hd2FrZShlcGkpO1xuIFxuIFx0XHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcdTAwMjZlcC1cdTAwM2V3cSkpXG5AQCAtMTk5Miw3ICsyMDc4LDcgQEAgc3RhdGljIGludCBlcF9tb2RpZnkoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcbiBcdCAqIG90aGVyd2lzZSB3ZSBtaWdodCBtaXNzIGFuIGV2ZW50IHRoYXQgaGFwcGVucyBiZXR3ZWVuIHRoZVxuIFx0ICogZl9vcC1cdTAwM2Vwb2xsKCkgY2FsbCBhbmQgdGhlIG5ldyBldmVudCBzZXQgcmVnaXN0ZXJpbmcuXG4gXHQgKi9cbi1cdGVwaS1cdTAwM2VldmVudC5ldmVudHMgPSBldmVudC1cdTAwM2VldmVudHM7IC8qIG5lZWQgYmFycmllciBiZWxvdyAqL1xuK1x0V1JJVEVfT05DRShlcGktXHUwMDNlZXZlbnQuZXZlbnRzLCBldmVudC1cdTAwM2VldmVudHMpOyAvKiBuZWVkIGJhcnJpZXIgYmVsb3cgKi9cbiBcdGVwaS1cdTAwM2VldmVudC5kYXRhID0gZXZlbnQtXHUwMDNlZGF0YTsgLyogcHJvdGVjdGVkIGJ5IG10eCAqL1xuIFx0aWYgKGVwaS1cdTAwM2VldmVudC5ldmVudHMgXHUwMDI2IEVQT0xMV0FLRVVQKSB7XG4gXHRcdGlmICghZXBfaGFzX3dha2V1cF9zb3VyY2UoZXBpKSlcbkBAIC0yMDMxLDYgKzIxMTcsNyBAQCBzdGF0aWMgaW50IGVwX21vZGlmeShzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmVwLVx1MDAzZWxvY2spO1xuIFx0XHRpZiAoIWVwX2lzX2xpbmtlZChlcGkpKSB7XG4gXHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZlcGktXHUwMDNlcmRsbGluaywgXHUwMDI2ZXAtXHUwMDNlcmRsbGlzdCk7XG4rXHRcdFx0ZXBfc2V0X3JlYWR5X2FjY291bnRlZChlcGkpO1xuIFx0XHRcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcbiBcbiBcdFx0XHQvKiBOb3RpZnkgd2FpdGluZyB0YXNrcyB0aGF0IGV2ZW50cyBhcmUgYXZhaWxhYmxlICovXG5AQCAtMjA4NCw2ICsyMTcxLDcgQEAgc3RhdGljIGludCBlcF9kZWxpdmVyX2V2ZW50KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGksXG4gXHRcdF9fcG1fcmVsYXgod3MpO1xuIFx0fVxuIFxuK1x0ZXBfcHJlcGFyZV9yZXBvbGwoZXBpKTtcbiBcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZXBpLVx1MDAzZXJkbGxpbmspO1xuIFxuIFx0LypcbkBAIC0yMTA0LDEzICsyMTkyLDE1IEBAIHN0YXRpYyBpbnQgZXBfZGVsaXZlcl9ldmVudChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwaXRlbSAqZXBpLFxuIFx0XHQgKiBhdHRlbXB0LlxuIFx0XHQgKi9cbiBcdFx0bGlzdF9hZGQoXHUwMDI2ZXBpLVx1MDAzZXJkbGxpbmssIHNjYW5fYmF0Y2gpO1xuK1x0XHRlcF9zZXRfcmVhZHlfYWNjb3VudGVkKGVwaSk7XG4gXHRcdGVwX3BtX3N0YXlfYXdha2UoZXBpKTtcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9XG4gXHQqdWV2ZW50cyA9IG5leHQ7XG4gXG4gXHRpZiAoZXBpLVx1MDAzZWV2ZW50LmV2ZW50cyBcdTAwMjYgRVBPTExPTkVTSE9UKSB7XG4tXHRcdGVwaS1cdTAwM2VldmVudC5ldmVudHMgXHUwMDI2PSBFUF9QUklWQVRFX0JJVFM7XG4rXHRcdFdSSVRFX09OQ0UoZXBpLVx1MDAzZWV2ZW50LmV2ZW50cyxcbitcdFx0XHQgICBSRUFEX09OQ0UoZXBpLVx1MDAzZWV2ZW50LmV2ZW50cykgXHUwMDI2IEVQX1BSSVZBVEVfQklUUyk7XG4gXHR9IGVsc2UgaWYgKCEoZXBpLVx1MDAzZWV2ZW50LmV2ZW50cyBcdTAwMjYgRVBPTExFVCkpIHtcbiBcdFx0LypcbiBcdFx0ICogTGV2ZWwtdHJpZ2dlcmVkOiByZS1xdWV1ZSBzbyB0aGUgbmV4dCBlcG9sbF93YWl0KClcbkBAIC0yMTIwLDYgKzIyMTAsNyBAQCBzdGF0aWMgaW50IGVwX2RlbGl2ZXJfZXZlbnQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSxcbiBcdFx0ICogZHVyaW5nIHNjYW5zLlxuIFx0XHQgKi9cbiBcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZlcGktXHUwMDNlcmRsbGluaywgXHUwMDI2ZXAtXHUwMDNlcmRsbGlzdCk7XG4rXHRcdGVwX3NldF9yZWFkeV9hY2NvdW50ZWQoZXBpKTtcbiBcdFx0ZXBfcG1fc3RheV9hd2FrZShlcGkpO1xuIFx0fVxuIFx0cmV0dXJuIDE7XG5AQCAtMjI4Nyw2ICsyMzc4LDExIEBAIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuIFx0d2hpbGUgKDEpIHtcbiBcdFx0aWYgKGVhdmFpbCkge1xuIFx0XHRcdHJlcyA9IGVwX3RyeV9zZW5kX2V2ZW50cyhlcCwgZXZlbnRzLCBtYXhldmVudHMpO1xuK1x0XHRcdGlmIChyZXMgPT0gLUVJTlRSKSB7XG4rXHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmVwLVx1MDAzZWxvY2spO1xuK1x0XHRcdFx0d2FrZV91cChcdTAwMjZlcC1cdTAwM2V3cSk7XG4rXHRcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2ZXAtXHUwMDNlbG9jayk7XG4rXHRcdFx0fVxuIFx0XHRcdGlmIChyZXMpXG4gXHRcdFx0XHRyZXR1cm4gcmVzO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowNzoyNS43MDc2OTkxNDhaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE5Mzg2MjIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEVwb2xsIEZhc3QgUGF0aCBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgZGVlcCBkaXZlIGludG8gYGZzL2V2ZW50cG9sbC5jYCwgc3BlY2lmaWNhbGx5IG9wdGltaXppbmcgYGVwb2xsYCB3aXRoIGEgbmV3IFwiZmFzdCBwYXRoLlwiIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoaXMgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIGJyZWFrIGl0IGRvd24uXG5cbkVzc2VudGlhbGx5LCBpdCdzIGFib3V0IGludHJvZHVjaW5nIHNvbWUgYXRvbWljIHN0YXRlIGJpdHMgKGBFUF9TVEFURV9BQ0NPVU5URURgLCBgRVBfU1RBVEVfRkFTVGApIHdpdGhpbiB0aGUgYHN0cnVjdCBlcGl0ZW1gLiBJIHNlZSBhIGJ1bmNoIG9mIG5ldyBoZWxwZXIgZnVuY3Rpb25zOiBgZXBfc3RhdGVfdGVzdGAsIGBlcF9yZWFkeV9mYXN0X2VuYWJsZWRgLCBgZXBfc2V0X3JlYWR5X2FjY291bnRlZGAsIGBlcF9wcmVwYXJlX3JlcG9sbGAsIGFuZCBgZXBfY2FsbGJhY2tfY2FuX3NraXBgLiBUaGUgYGVwX3BvbGxfY2FsbGJhY2tgIGdldHMgdHdlYWtlZCB0byBjb25kaXRpb25hbGx5IHNraXAgd29yaywgYW5kIHNldmVyYWwgY29yZSBmdW5jdGlvbnMsIGluY2x1ZGluZyBgZXBfaW5zZXJ0YCwgYGVwX21vZGlmeWAsIGBlcF9kZWxpdmVyX2V2ZW50YCwgYW5kIGBlcF9wb2xsYCwgYXJlIGFsbCBtb2RpZmllZC4gVGhleSdyZSBhbHNvIHVzaW5nIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAgZm9yIGBlcGktXHUwMDNlZXZlbnQuZXZlbnRzYCwgd2hpY2ggaXMgYSBnb29kIHNpZ24gZm9yIG1lbW9yeSBvcmRlcmluZy4gQWRkaW5nIGEgY2hlY2sgZm9yIGAtRUlOVFJgIHdpdGhpbiBgZXBfcG9sbGAgdG8gd2FrZSB1cCBgZXAtXHUwMDNld3FgIHNvdW5kcyByZWFzb25hYmxlLlxuXG5UaGUgbWFpbiBjb25jZXJuIGlzLCBvZiBjb3Vyc2UsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyBvcHBvcnR1bml0aWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBsZWFrPyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQsIG5vLCBpdCBzaG91bGRuJ3QuIFRoZSBjaGFuZ2VzIHNlZW0gZm9jdXNlZCBvbiB0aGUgc3RhdGUgbWFjaGluZSBhbmQgdGhvc2UgYXRvbWljIGZsYWdzIHdpdGhpbiBgZXBpdGVtYCwgd2hpY2ggaXMgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZS4gTm90aGluZyB1c2VyLWZhY2luZyBpcyBiZWluZyBhbGxvY2F0ZWQgd2l0aCBjb21wbGV4IGRhdGEgc3RydWN0dXJlcy4gYGVwX3RyeV9zZW5kX2V2ZW50c2Agc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIHBvaW50LCBhcyB0aGF0J3MgaG93IGV2ZW50cyBnZXQgc2VudCB0byB1c2Vyc3BhY2UuIEJ1dCB0aGUgcGF0Y2ggKmRvZXNuJ3QqIGFwcGVhciB0byBjaGFuZ2UgKndoYXQqIGlzIHNlbnQsIGp1c3QgaG93IGBlcGl0ZW1gcyBhcmUgcXVldWVkIGFuZCBoYW5kbGVkLlxuXG5XYWl0LCBgZXBfdHJ5X3NlbmRfZXZlbnRzYCBjYWxscyBgZXBfZGVsaXZlcl9ldmVudGAsIHdoaWNoIGRvZXMgYSBgX19wdXRfdXNlcmAgb24gYHJldmVudHNgIGFuZCBgZXBpLVx1MDAzZWV2ZW50LmRhdGFgLiBUaGF0J3MgdGhlIHJlYWwgdGVzdC4gVGhlIGNvZGUgZG9pbmcgdGhpcyAqaXNuJ3QqIHRvdWNoZWQgYnkgdGhlIHBhdGNoOyB3ZSdyZSBzdGlsbCBzYWZlLiBUaGUgcGF0Y2ggZG9lcyBtb2RpZnkgaG93IGBlcGktXHUwMDNlZXZlbnQuZXZlbnRzYCBpcyBzZXQsIGJ1dCBpdCdzIG5vdyB1c2luZyBgV1JJVEVfT05DRWAsIHdoaWNoIHNob3VsZG4ndCBpbnRyb2R1Y2UgYW55IG5ldyBpc3N1ZXMgYW5kIGxvb2tzIHNhZmVyIHRoYW4gdGhlIHByZXZpb3VzIGFzc2lnbm1lbnQuIFNvLCBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyBoZXJlLlxuXG5MZXQncyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBUaGUgbmV3IGBhdG9taWNfdCBzdGF0ZWAgaW4gYHN0cnVjdCBlcGl0ZW1gIGxvb2tzIGludGVyZXN0aW5nLiBJdCdzIGluaXRpYWxpemVkIGluIGBlcF9pbnNlcnRgLiBFaXRoZXIgYGF0b21pY19zZXQoXHUwMDI2ZXBpLVx1MDAzZXN0YXRlLCBFUF9TVEFURV9GQVNUKWAgb3IgbGVmdCBhcyAwLCB3aGljaCBzdWdnZXN0cyBpdCBpcyBpbXBsaWNpdGx5IHplcm9lZCBieSBga21lbV9jYWNoZV96YWxsb2NgIGR1cmluZyBhbGxvY2F0aW9uIGluIGBlcF9pbnNlcnRgLiBPa2F5LCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBgZXBfaW5zZXJ0YCBhbGxvY2F0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwMzowNzozNC45MDE1NjQ4NzdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTYxOTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fY2FjaGVfemFsbG9jLiplcGlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXZlbnRwb2xsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXZlbnRwb2xsLmM9MTg5OT1zdGF0aWMgc3RydWN0IGVwaXRlbSAqZXBfYWxsb2NfZXBpdGVtKHN0cnVjdCBldmVudHBvbGwgKmVwLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMTkwOS1cXG5mcy9ldmVudHBvbGwuYzoxOTEwOlxcdGVwaSA9IGttZW1fY2FjaGVfemFsbG9jKGVwaV9jYWNoZSwgR0ZQX0tFUk5FTCk7XFxuZnMvZXZlbnRwb2xsLmMtMTkxMS1cXHRpZiAodW5saWtlbHkoIWVwaSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDc6MzQuOTQ1MTM0NjE2WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDk3NTM1MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEVwb2xsIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhpcyBlcG9sbCBwYXRjaC4gVGhlIGNvZGUgaXMgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCwgd2hpY2ggbWVhbnMgdGhlIGBlcGktXHUwMDNlc3RhdGVgIGlzIGluaXRpYWxpemVkIHRvIHplcm8gYnkgZGVmYXVsdC4gVGhlIHBhdGNoIHRoZW4gaW50cm9kdWNlcyBhbiBgYXRvbWljX3NldGAgdG8gYEVQX1NUQVRFX0ZBU1RgIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMuIFNvLCBpdCdzIGZ1bGx5IGluaXRpYWxpemVkLCBubyB3b3JyaWVzIHRoZXJlLlxuXG5UaGUgaGVhcnQgb2YgdGhlIGNoYW5nZXMgc2VlbXMgdG8gYmUgYWJvdXQgY29uY3VycmVuY3kgYW5kIGltcGxlbWVudGluZyBsb2NrbGVzcyBmYXN0IHBhdGhzLiBJIHNlZSBhZGRpdGlvbnMgdG8gYHN0cnVjdCBlcGl0ZW1gIHdpdGggYXRvbWljIHN0YXRlIGJpdHMsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb24gYHN0YXRlYCwgYW5kIGxvZ2ljIHRoYXQgbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGV2ZW50cy4gVGhleSBhcmUgYWRkaW5nIGBhdG9taWNfdCBzdGF0ZWAuIFRoZXkgYXJlIG1vZGlmeWluZyBsb2dpYyBvbiBob3cgZXZlbnRzIGFyZSBoYW5kbGVkLlxuXG5UaGUgbWFpbiBjb25jZXJuIGhlcmUgd291bGQgYmUgcmFjZSBjb25kaXRpb25zLCBtaXNzZWQgd2FrZXVwcywgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9z4oCUZXNzZW50aWFsbHksIGNsYXNzaWMgY29uY3VycmVuY3kgYnVncy4gVGhlc2UgYXJlICpleGFjdGx5KiB0aGUga2luZHMgb2YgaXNzdWVzIHRoYXQgS0FTQU4sIEtDU0FOLCBhbmQgTG9ja2RlcCBhcmUgZGVzaWduZWQgdG8gY2F0Y2guIEtNU0FOLCBob3dldmVyLCBpcyBkZXNpZ25lZCB0byBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYW5kIHRoZXJlJ3Mgbm8gcmlzayBvZiB0aGF0IGhlcmUuIFRoZSBuZXcgYGF0b21pY190IHN0YXRlYCBmaWVsZCBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gSSBzZWUgbm8gc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSBlaXRoZXIsIHNvIHRoZXJlJ3Mgbm8gcG9zc2liaWxpdHkgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgS01TQU4gaXNuJ3QgbmVjZXNzYXJ5IGZvciB0aGlzIHBhdGNoLiBUaGUgcmVsZXZhbnQgdG9vbHMgZm9yIHRoaXMga2luZCBvZiBjaGFuZ2UgYXJlIEtBU0FOLCBLQ1NBTiBhbmQgTG9ja2RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg5NywiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDM6MDc6NDUuNDQyNjcyMTI4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciBlcG9sbCB1c2luZyBhdG9taWMgc3RhdGUgYml0cyBpbiBgc3RydWN0IGVwaXRlbWAuIEl0IG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBsb2dpYywgZXZlbnQgYWNjb3VudGluZywgYW5kIHdha2V1cHMuIEFsbCBuZXcgZmllbGRzIChsaWtlIGBhdG9taWNfdCBzdGF0ZWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAoZS5nLiwgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AgYW5kIGBhdG9taWNfc2V0YCksIGFuZCBubyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciBlcG9sbCB1c2luZyBhdG9taWMgc3RhdGUgYml0cyBpbiBgc3RydWN0IGVwaXRlbWAuIEl0IG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBsb2dpYywgZXZlbnQgYWNjb3VudGluZywgYW5kIHdha2V1cHMuIEFsbCBuZXcgZmllbGRzIChsaWtlIGBhdG9taWNfdCBzdGF0ZWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCAoZS5nLiwgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AgYW5kIGBhdG9taWNfc2V0YCksIGFuZCBubyBuZXcgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowg97pg[1] Phase: Succeeded StartedAt: 2026-08-24 03:07:57 +0000 UTC FinishedAt: 2026-08-24 03:07:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 03:07:57 +0000 UTC FinishedAt: 2026-08-24 03:07:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2] Phase: Succeeded StartedAt: 2026-08-24 03:07:57 +0000 UTC FinishedAt: 2026-08-24 06:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-24 03:07:57 +0000 UTC FinishedAt: 2026-08-24 06:57:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-24 03:07:57 +0000 UTC FinishedAt: 2026-08-24 03:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-24 03:07:57 +0000 UTC FinishedAt: 2026-08-24 03:08:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowg97pg/series-workflowg97pg-convert-artifact-799684859/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-24 03:08:20 +0000 UTC FinishedAt: 2026-08-24 03:28:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-24 03:08:20 +0000 UTC FinishedAt: 2026-08-24 03:28:25 +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:*43753658-fb13-489c-908c-0e1b5da0f01e,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-workflowg97pg/series-workflowg97pg-convert-artifact-799684859/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": "996d6797-82a2-4374-b35e-1e9c7ae638e6", "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-workflowg97pg/series-workflowg97pg-build-action-1135405113/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-24 03:08:20 +0000 UTC FinishedAt: 2026-08-24 03:28:15 +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:*43753658-fb13-489c-908c-0e1b5da0f01e,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-workflowg97pg/series-workflowg97pg-convert-artifact-799684859/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": "996d6797-82a2-4374-b35e-1e9c7ae638e6", "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-workflowg97pg/series-workflowg97pg-build-action-1135405113/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-24 03:28:25 +0000 UTC FinishedAt: 2026-08-24 03:28:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-24 03:28:25 +0000 UTC FinishedAt: 2026-08-24 03:28:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-24 03:28:25 +0000 UTC FinishedAt: 2026-08-24 03:28:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-24 03:28:25 +0000 UTC FinishedAt: 2026-08-24 03:28:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowg97pg/series-workflowg97pg-convert-artifact-2018956626/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-24 03:28:49 +0000 UTC FinishedAt: 2026-08-24 03:30:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-24 03:28:49 +0000 UTC FinishedAt: 2026-08-24 03:30:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*996d6797-82a2-4374-b35e-1e9c7ae638e6,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-workflowg97pg/series-workflowg97pg-build-action-1135405113/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-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-24 03:30:42 +0000 UTC FinishedAt: 2026-08-24 03:30:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-24 03:30:42 +0000 UTC FinishedAt: 2026-08-24 03:30:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-24 03:30:42 +0000 UTC FinishedAt: 2026-08-24 03:51:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-24 03:30:42 +0000 UTC FinishedAt: 2026-08-24 03:51:51 +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:*43753658-fb13-489c-908c-0e1b5da0f01e,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-workflowg97pg/series-workflowg97pg-convert-artifact-2018956626/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": "64a19fab-c3dd-4d19-9de0-69eb3bc0a2e5", "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-workflowg97pg/series-workflowg97pg-build-action-3166000102/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-24 03:30:42 +0000 UTC FinishedAt: 2026-08-24 03:51:23 +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:*43753658-fb13-489c-908c-0e1b5da0f01e,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-workflowg97pg/series-workflowg97pg-convert-artifact-2018956626/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": "64a19fab-c3dd-4d19-9de0-69eb3bc0a2e5", "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-workflowg97pg/series-workflowg97pg-build-action-3166000102/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-24 03:51:51 +0000 UTC FinishedAt: 2026-08-24 03:51:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-24 03:51:51 +0000 UTC FinishedAt: 2026-08-24 03:51:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-24 03:51:51 +0000 UTC FinishedAt: 2026-08-24 03:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-24 03:51:51 +0000 UTC FinishedAt: 2026-08-24 03:53:45 +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:*64a19fab-c3dd-4d19-9de0-69eb3bc0a2e5,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-workflowg97pg/series-workflowg97pg-build-action-3166000102/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-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-24 03:53:55 +0000 UTC FinishedAt: 2026-08-24 06:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-24 03:53:55 +0000 UTC FinishedAt: 2026-08-24 06:57:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"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:*996d6797-82a2-4374-b35e-1e9c7ae638e6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*64a19fab-c3dd-4d19-9de0-69eb3bc0a2e5,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-workflowg97pg/series-workflowg97pg-build-action-1135405113/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-workflowg97pg/series-workflowg97pg-build-action-3166000102/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-24 03:53:55 +0000 UTC FinishedAt: 2026-08-24 03:54:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-24 03:53:55 +0000 UTC FinishedAt: 2026-08-24 03:54:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"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-workflowg97pg/series-workflowg97pg-convert-artifact-1774940583/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-24 03:53:55 +0000 UTC FinishedAt: 2026-08-24 03:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-24 03:53:55 +0000 UTC FinishedAt: 2026-08-24 03:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-24 03:53:55 +0000 UTC FinishedAt: 2026-08-24 03:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-24 03:54:05 +0000 UTC FinishedAt: 2026-08-24 06:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg97pg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["do_epoll_ctl","do_epoll_ctl_file","epoll_sendevents"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4352b8aee98005853aa63f57d6377282de17a33f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"0a2de8be-5ebb-487f-9df0-eb4ac5e24bca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-24 03:54:05 +0000 UTC FinishedAt: 2026-08-24 06:56:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*996d6797-82a2-4374-b35e-1e9c7ae638e6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*64a19fab-c3dd-4d19-9de0-69eb3bc0a2e5,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-workflowg97pg/series-workflowg97pg-build-action-1135405113/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-workflowg97pg/series-workflowg97pg-build-action-3166000102/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-workflowg97pg/series-workflowg97pg-convert-artifact-1774940583/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,}