Name: series-workflowplddg Phase: Succeeded StartedAt: 2026-08-20 02:21:39 +0000 UTC FinishedAt: 2026-08-20 06:27:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[0] Phase: Succeeded StartedAt: 2026-08-20 02:21:39 +0000 UTC FinishedAt: 2026-08-20 02:42:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 02:21:39 +0000 UTC FinishedAt: 2026-08-20 02:42:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "881dc9dd66d2367e7fe1be0f953a8837cb3b26a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MQ_IOSCHED_DEADLINE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "881dc9dd66d2367e7fe1be0f953a8837cb3b26a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MQ_IOSCHED_DEADLINE" ], "series_id": "bf5ef045-a5e8-4ff5-9261-8c16c3daf66d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "deadline_prio_aging_expire_store" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01RX0lPU0NIRURfREVBRExJTkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtcS1kZWFkbGluZSBibG9jayBlbGV2YXRvciB0byBhbGxvdyBkaXNhYmxpbmcgSS9PIHByaW9yaXR5IGJ5IHNldHRpbmcgYHByaW9fYWdpbmdfZXhwaXJlYCB0byAwLiBJdCBpbnRyb2R1Y2VzIGxvZ2ljIGNoYW5nZXMgdG8gcm91dGUgYWxsIHJlcXVlc3RzIHRvIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQgd2hlbiBwcmlvcml0eSBpcyBkaXNhYmxlZCwgYW5kIG9wdGltaXplcyBwcmlvcml0eSBsb29rdXBzIGJ5IHVzaW5nIHRoZSBjYWNoZWQgYHJlcS1cdTAwM2VlbHYucHJpdlswXWAgcG9pbnRlciBpbnN0ZWFkIG9mIHJlY2FsY3VsYXRpbmcgaXQuIFRoZSBgcmVxLVx1MDAzZWVsdi5wcml2WzBdYCBmaWVsZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIE5VTEwgaW4gYGRkX3ByZXBhcmVfcmVxdWVzdGAgYW5kIHBvcHVsYXRlZCBpbiBgZGRfaW5zZXJ0X3JlcXVlc3RgLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcyBkdXJpbmcgcXVldWUgZnJlZXplL3F1aWVzY2UpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtcS1kZWFkbGluZSBJL08gc2NoZWR1bGVyIHRvIHN1cHBvcnQgZGlzYWJsaW5nIEkvTyBwcmlvcml0eSBieSBzZXR0aW5nIGBwcmlvX2FnaW5nX2V4cGlyZWAgdG8gMC4gSXQgYWRkcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAgd2hpY2ggZnJlZXplcyBhbmQgcXVpZXNjZXMgdGhlIHJlcXVlc3QgcXVldWUgdG8gc2FmZWx5IHN3aXRjaCB0aGUgbW9kZS4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBibG9jayBsYXllciB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzZnMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NjU3OTdlZTQ4NDkzMzE1YmJhODcxZWU4ZmU2NmQ3MDQxMTgwYmExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDI6NDE6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svbXEtZGVhZGxpbmUuYyBiL2Jsb2NrL21xLWRlYWRsaW5lLmNcbmluZGV4IDgyNGJmYzE3YjJjNjguLjk1YTAwYTY3M2JlNTUgMTAwNjQ0XG4tLS0gYS9ibG9jay9tcS1kZWFkbGluZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9tcS1kZWFkbGluZS5jXG5AQCAtMzMsNyAmIzQzOzMzLDEwIEBAIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVfZXhwaXJlID0gNSAqIEhaOyAvKiBkaXR0byBmb3Igd3JpdGVzLCB0aGVzZSBsaW1pdHMgYXJlIFNPXG4gICogVGltZSBhZnRlciB3aGljaCB0byBkaXNwYXRjaCBsb3dlciBwcmlvcml0eSByZXF1ZXN0cyBldmVuIGlmIGhpZ2hlclxuICAqIHByaW9yaXR5IHJlcXVlc3RzIGFyZSBwZW5kaW5nLlxuICAqL1xuLXN0YXRpYyBjb25zdCBpbnQgcHJpb19hZ2luZ19leHBpcmUgPSAxMCAqIEhaO1xuJiM0MztzdGF0aWMgaW50IHByaW9fYWdpbmdfZXhwaXJlID0gMTAgKiBNU0VDX1BFUl9TRUM7XG4mIzQzO21vZHVsZV9wYXJhbShwcmlvX2FnaW5nX2V4cGlyZSwgaW50LCAwNjQ0KTtcbiYjNDM7TU9EVUxFX1BBUk1fREVTQyhwcmlvX2FnaW5nX2V4cGlyZSxcbiYjNDM7XHRcdCBcJiMzNDtEZWZhdWx0IHByaW9fYWdpbmdfZXhwaXJlIGluIG1pbGxpc2Vjb25kczsgMCBkaXNhYmxlcyBJL08gcHJpb3JpdHkuXCYjMzQ7KTtcbiBzdGF0aWMgY29uc3QgaW50IHdyaXRlc19zdGFydmVkID0gMjsgICAgLyogbWF4IHRpbWVzIHJlYWRzIGNhbiBzdGFydmUgYSB3cml0ZSAqL1xuIHN0YXRpYyBjb25zdCBpbnQgZmlmb19iYXRjaCA9IDE2OyAgICAgICAvKiAjIG9mIHNlcXVlbnRpYWwgcmVxdWVzdHMgdHJlYXRlZCBhcyBvbmVcbiBcdFx0XHRcdCAgICAgYnkgdGhlIGFib3ZlIHBhcmFtZXRlcnMuIEZvciB0aHJvdWdocHV0LiAqL1xuQEAgLTgzLDYgJiM0Mzs4Niw3IEBAIHN0cnVjdCBkZWFkbGluZV9kYXRhIHtcbiBcdCAqIHJ1biB0aW1lIGRhdGFcbiBcdCAqL1xuIFxuJiM0MztcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxO1x0LyogYXNzb2NpYXRlZCByZXF1ZXN0IHF1ZXVlICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGRpc3BhdGNoO1xuIFx0c3RydWN0IGRkX3Blcl9wcmlvIHBlcl9wcmlvW0REX1BSSU9fQ09VTlRdO1xuIFxuQEAgLTE4NCwxMCAmIzQzOzE4OCw3IEBAIHN0YXRpYyB2b2lkIGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIHN0YXRpYyB2b2lkIGRkX3JlcXVlc3RfbWVyZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRcdCAgICAgIGVudW0gZWx2X21lcmdlIHR5cGUpXG4ge1xuLVx0c3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gcS1cdTAwM2VlbGV2YXRvci1cdTAwM2VlbGV2YXRvcl9kYXRhO1xuLVx0Y29uc3QgdTggaW9wcmlvX2NsYXNzID0gZGRfcnFfaW9jbGFzcyhyZXEpO1xuLVx0Y29uc3QgZW51bSBkZF9wcmlvIHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuLVx0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IFx1MDAyNmRkLVx1MDAzZXBlcl9wcmlvW3ByaW9dO1xuJiM0MztcdHN0cnVjdCBkZF9wZXJfcHJpbyAqcGVyX3ByaW8gPSByZXEtXHUwMDNlZWx2LnByaXZbMF07XG4gXG4gXHQvKlxuIFx0ICogaWYgdGhlIG1lcmdlIHdhcyBhIGZyb250IG1lcmdlLCB3ZSBuZWVkIHRvIHJlcG9zaXRpb24gcmVxdWVzdFxuQEAgLTIwNSwxMiAmIzQzOzIwNiwxMSBAQCBzdGF0aWMgdm9pZCBkZF9tZXJnZWRfcmVxdWVzdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCByZXF1ZXN0ICpuZXh0KVxuIHtcbiBcdHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IHEtXHUwMDNlZWxldmF0b3ItXHUwMDNlZWxldmF0b3JfZGF0YTtcbi1cdGNvbnN0IHU4IGlvcHJpb19jbGFzcyA9IGRkX3JxX2lvY2xhc3MobmV4dCk7XG4tXHRjb25zdCBlbnVtIGRkX3ByaW8gcHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107XG4mIzQzO1x0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IG5leHQtXHUwMDNlZWx2LnByaXZbMF07XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRkLVx1MDAzZWxvY2spO1xuIFxuLVx0ZGQtXHUwMDNlcGVyX3ByaW9bcHJpb10uc3RhdHMubWVyZ2VkJiM0MzsmIzQzOztcbiYjNDM7XHRwZXJfcHJpby1cdTAwM2VzdGF0cy5tZXJnZWQmIzQzOyYjNDM7O1xuIFxuIFx0LypcbiBcdCAqIGlmIG5leHQgZXhwaXJlcyBiZWZvcmUgcnEsIGFzc2lnbiBpdHMgZXhwaXJlIHRpbWUgdG8gcnFcbkBAIC0yMjcsNyAmIzQzOzIyNyw3IEBAIHN0YXRpYyB2b2lkIGRkX21lcmdlZF9yZXF1ZXN0cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcdC8qXG4gXHQgKiBraWxsIGtub3dsZWRnZSBvZiBuZXh0LCB0aGlzIG9uZSBpcyBhIGdvbmVyXG4gXHQgKi9cbi1cdGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHEsIFx1MDAyNmRkLVx1MDAzZXBlcl9wcmlvW3ByaW9dLCBuZXh0KTtcbiYjNDM7XHRkZWFkbGluZV9yZW1vdmVfcmVxdWVzdChxLCBwZXJfcHJpbywgbmV4dCk7XG4gfVxuIFxuIC8qXG5AQCAtNDI2LDYgJiM0Mzs0MjYsMTUgQEAgc3RhdGljIHN0cnVjdCByZXF1ZXN0ICpkZF9kaXNwYXRjaF9wcmlvX2FnZWRfcmVxdWVzdHMoc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkLFxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkZC1cdTAwM2Vsb2NrKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgcHJpb19hZ2luZ19leHBpcmUgb2YgemVybyBkaXNhYmxlcyBJL08gcHJpb3JpdHk6IGFsbCByZXF1ZXN0cyBhcmVcbiYjNDM7XHQgKiBmaWxlZCBpbiB0aGUgRERfQkVfUFJJTyBidWNrZXQgYW5kIG11c3QgbmV2ZXIgYmUgZGlzcGF0Y2hlZCBhaGVhZCBvZlxuJiM0MztcdCAqIGhpZ2hlciBwcmlvcml0eSByZXF1ZXN0cyB0aHJvdWdoIHRoaXMgYWdpbmcgcGF0aCwgd2hpY2ggd291bGQgY2F1c2VcbiYjNDM7XHQgKiBwcmlvcml0eSBpbnZlcnNpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID09IDApXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4gXHRwcmlvX2NudCA9ICEhZGRfcXVldWVkKGRkLCBERF9SVF9QUklPKSAmIzQzOyAhIWRkX3F1ZXVlZChkZCwgRERfQkVfUFJJTykgJiM0MztcbiBcdFx0ICAgISFkZF9xdWV1ZWQoZGQsIEREX0lETEVfUFJJTyk7XG4gXHRpZiAocHJpb19jbnQgXHUwMDNjIDIpXG5AQCAtNTM2LDYgJiM0Mzs1NDUsNyBAQCBzdGF0aWMgaW50IGRkX2luaXRfc2NoZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZXEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0ZXEtXHUwMDNlZWxldmF0b3JfZGF0YSA9IGRkO1xuJiM0MztcdGRkLVx1MDAzZXEgPSBxO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGQtXHUwMDNlZGlzcGF0Y2gpO1xuIFx0Zm9yIChwcmlvID0gMDsgcHJpbyBcdTAwM2M9IEREX1BSSU9fTUFYOyBwcmlvJiM0MzsmIzQzOykge1xuQEAgLTU1Miw3ICYjNDM7NTYyLDcgQEAgc3RhdGljIGludCBkZF9pbml0X3NjaGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKVxuIFx0ZGQtXHUwMDNlZnJvbnRfbWVyZ2VzID0gMTtcbiBcdGRkLVx1MDAzZWxhc3RfZGlyID0gRERfV1JJVEU7XG4gXHRkZC1cdTAwM2VmaWZvX2JhdGNoID0gZmlmb19iYXRjaDtcbi1cdGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID0gcHJpb19hZ2luZ19leHBpcmU7XG4mIzQzO1x0ZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgPSBtc2Vjc190b19qaWZmaWVzKHByaW9fYWdpbmdfZXhwaXJlKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRkLVx1MDAzZWxvY2spO1xuIFxuIFx0LyogV2UgZGlzcGF0Y2ggZnJvbSByZXF1ZXN0IHF1ZXVlIHdpZGUgaW5zdGVhZCBvZiBodyBxdWV1ZSAqL1xuQEAgLTU3Myw3ICYjNDM7NTgzLDggQEAgc3RhdGljIGludCBkZF9yZXF1ZXN0X21lcmdlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqKnJxLFxuIHtcbiBcdHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IHEtXHUwMDNlZWxldmF0b3ItXHUwMDNlZWxldmF0b3JfZGF0YTtcbiBcdGNvbnN0IHU4IGlvcHJpb19jbGFzcyA9IElPUFJJT19QUklPX0NMQVNTKGJpby1cdTAwM2ViaV9pb3ByaW8pO1xuLVx0Y29uc3QgZW51bSBkZF9wcmlvIHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuJiM0MztcdGNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgPT0gMCA/IEREX0JFX1BSSU8gOlxuJiM0MztcdFx0XHRcdFx0ICBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuIFx0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IFx1MDAyNmRkLVx1MDAzZXBlcl9wcmlvW3ByaW9dO1xuIFx0c2VjdG9yX3Qgc2VjdG9yID0gYmlvX2VuZF9zZWN0b3IoYmlvKTtcbiBcdHN0cnVjdCByZXF1ZXN0ICpfX3JxO1xuQEAgLTYzMyw3ICYjNDM7NjQ0LDE1IEBAIHN0YXRpYyB2b2lkIGRkX2luc2VydF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRkLVx1MDAzZWxvY2spO1xuIFxuLVx0cHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIHByaW9fYWdpbmdfZXhwaXJlIGlzIHplcm8sIEkvTyBwcmlvcml0eSBpcyBkaXNhYmxlZDogZmlsZSBldmVyeVxuJiM0MztcdCAqIHJlcXVlc3QgaW4gdGhlIGJlc3QtZWZmb3J0IGJ1Y2tldCBzbyB0aGF0IHRoZSBkaXNwYXRjaCBwYXRoIG5vIGxvbmdlclxuJiM0MztcdCAqIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBSVCwgQkUgYW5kIElETEUgY2xhc3Nlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgPT0gMClcbiYjNDM7XHRcdHByaW8gPSBERF9CRV9QUklPO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuIFx0cGVyX3ByaW8gPSBcdTAwMjZkZC1cdTAwM2VwZXJfcHJpb1twcmlvXTtcbiBcdGlmICghcnEtXHUwMDNlZWx2LnByaXZbMF0pXG4gXHRcdHBlcl9wcmlvLVx1MDAzZXN0YXRzLmluc2VydGVkJiM0MzsmIzQzOztcbkBAIC03NzMsNyAmIzQzOzc5Miw2IEBAIHN0YXRpYyBzc2l6ZV90IF9fRlVOQyhzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcbiBcdFNUT1JFX0ZVTkNUSU9OKF9fRlVOQywgX19QVFIsIE1JTiwgTUFYLCBtc2Vjc190b19qaWZmaWVzKVxuIFNUT1JFX0pJRkZJRVMoZGVhZGxpbmVfcmVhZF9leHBpcmVfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZpZm9fZXhwaXJlW0REX1JFQURdLCAwLCBJTlRfTUFYKTtcbiBTVE9SRV9KSUZGSUVTKGRlYWRsaW5lX3dyaXRlX2V4cGlyZV9zdG9yZSwgXHUwMDI2ZGQtXHUwMDNlZmlmb19leHBpcmVbRERfV1JJVEVdLCAwLCBJTlRfTUFYKTtcbi1TVE9SRV9KSUZGSUVTKGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlLCBcdTAwMjZkZC1cdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSwgMCwgSU5UX01BWCk7XG4gU1RPUkVfSU5UKGRlYWRsaW5lX3dyaXRlc19zdGFydmVkX3N0b3JlLCBcdTAwMjZkZC1cdTAwM2V3cml0ZXNfc3RhcnZlZCwgSU5UX01JTiwgSU5UX01BWCk7XG4gU1RPUkVfSU5UKGRlYWRsaW5lX2Zyb250X21lcmdlc19zdG9yZSwgXHUwMDI2ZGQtXHUwMDNlZnJvbnRfbWVyZ2VzLCAwLCAxKTtcbiBTVE9SRV9JTlQoZGVhZGxpbmVfZmlmb19iYXRjaF9zdG9yZSwgXHUwMDI2ZGQtXHUwMDNlZmlmb19iYXRjaCwgMCwgSU5UX01BWCk7XG5AQCAtNzgxLDYgJiM0Mzs3OTksNDYgQEAgU1RPUkVfSU5UKGRlYWRsaW5lX2ZpZm9fYmF0Y2hfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZpZm9fYmF0Y2gsIDAsIElOVF9NQVgpO1xuICN1bmRlZiBTVE9SRV9JTlRcbiAjdW5kZWYgU1RPUkVfSklGRklFU1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBXcml0aW5nIHplcm8gdG8gcHJpb19hZ2luZ19leHBpcmUgZGlzYWJsZXMgSS9PIHByaW9yaXR5OiBhbGwgcmVxdWVzdHMgYXJlXG4mIzQzOyAqIHRyZWF0ZWQgYXMgYmVzdC1lZmZvcnQuIFRvIGF2b2lkIHByaW9yaXR5IGludmVyc2lvbiB3aGlsZSB0aGUgbW9kZSBpcyBiZWluZ1xuJiM0MzsgKiBzd2l0Y2hlZCwgZmlyc3QgZHJhaW4gYWxsIGluLWZsaWdodCBJL08gYnkgZm9sbG93aW5nIHRoZSBzYW1lIHNlcXVlbmNlIHVzZWRcbiYjNDM7ICogYnkgZWxldmF0b3Jfc3dpdGNoKCk6IGZyZWV6ZSB0aGUgcXVldWUgc28gdGhhdCBuZXcgdXBwZXItbGF5ZXIgSS9PIGlzXG4mIzQzOyAqIGJsb2NrZWQgYW5kIGFsbCBvdXRzdGFuZGluZyByZXF1ZXN0cyBjb21wbGV0ZSwgcXVpZXNjZSB0aGUgcXVldWUgc28gdGhhdCBub1xuJiM0MzsgKiBkaXNwYXRjaCBpcyBpbiBwcm9ncmVzcywgdGhlbiBmbGlwIHByaW9fYWdpbmdfZXhwaXJlIHRvIHplcm8uIE5ldyBJL09cbiYjNDM7ICogcXVldWVkIGFmdGVyIHRoZSBzd2l0Y2ggbGFuZHMgaW4gdGhlIGJlc3QtZWZmb3J0IGJ1Y2tldC5cbiYjNDM7ICogV3JpdGluZyBhIG5vbi16ZXJvIHZhbHVlIChyZS0pZW5hYmxlcyBwcmlvcml0eSB3aXRob3V0IGRyYWluaW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHNzaXplX3QgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmUoc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplLFxuJiM0MztcdFx0XHRcdFx0XHQgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gZS1cdTAwM2VlbGV2YXRvcl9kYXRhO1xuJiM0MztcdGludCB2YWwsIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N0cnRvaW50KHBhZ2UsIDAsIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHZhbCA9IDA7XG4mIzQzO1x0ZWxzZSBpZiAodmFsIFx1MDAzZSBJTlRfTUFYKVxuJiM0MztcdFx0dmFsID0gSU5UX01BWDtcbiYjNDM7XHR2YWwgPSBtc2Vjc190b19qaWZmaWVzKHZhbCk7XG4mIzQzO1xuJiM0MztcdGlmICh2YWwgPT0gMCBcdTAwMjZcdTAwMjYgZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgIT0gMCkge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuJiM0MztcbiYjNDM7XHRcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShkZC1cdTAwM2VxKTtcbiYjNDM7XHRcdGJsa19tcV9xdWllc2NlX3F1ZXVlKGRkLVx1MDAzZXEpO1xuJiM0MztcdFx0ZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgPSAwO1xuJiM0MztcdFx0YmxrX21xX3VucXVpZXNjZV9xdWV1ZShkZC1cdTAwM2VxKTtcbiYjNDM7XHRcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShkZC1cdTAwM2VxLCBtZW1mbGFncyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID0gdmFsO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvdW50O1xuJiM0Mzt9XG4mIzQzO1xuICNkZWZpbmUgRERfQVRUUihuYW1lKSBcXFxuIFx0X19BVFRSKG5hbWUsIDA2NDQsIGRlYWRsaW5lXyMjbmFtZSMjX3Nob3csIGRlYWRsaW5lXyMjbmFtZSMjX3N0b3JlKVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUV9JT1NDSEVEX0RFQURMSU5FJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1xLWRlYWRsaW5lIEkvTyBzY2hlZHVsZXIgdG8gc3VwcG9ydCBkaXNhYmxpbmcgSS9PIHByaW9yaXR5IGJ5IHNldHRpbmcgYHByaW9fYWdpbmdfZXhwaXJlYCB0byAwLiBJdCBhZGRzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24gYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCB3aGljaCBmcmVlemVzIGFuZCBxdWllc2NlcyB0aGUgcmVxdWVzdCBxdWV1ZSB0byBzYWZlbHkgc3dpdGNoIHRoZSBtb2RlLiBUaGlzIGludHJvZHVjZXMgbmV3IGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGJsb2NrIGxheWVyIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2NTc5N2VlNDg0OTMzMTViYmE4NzFlZThmZTY2ZDcwNDExODBiYTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAwMjo0MTowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL21xLWRlYWRsaW5lLmMgYi9ibG9jay9tcS1kZWFkbGluZS5jCmluZGV4IDgyNGJmYzE3YjJjNjguLjk1YTAwYTY3M2JlNTUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL21xLWRlYWRsaW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svbXEtZGVhZGxpbmUuYwpAQCAtMzMsNyAmIzQzOzMzLDEwIEBAIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVfZXhwaXJlID0gNSAqIEhaOyAvKiBkaXR0byBmb3Igd3JpdGVzLCB0aGVzZSBsaW1pdHMgYXJlIFNPCiAgKiBUaW1lIGFmdGVyIHdoaWNoIHRvIGRpc3BhdGNoIGxvd2VyIHByaW9yaXR5IHJlcXVlc3RzIGV2ZW4gaWYgaGlnaGVyCiAgKiBwcmlvcml0eSByZXF1ZXN0cyBhcmUgcGVuZGluZy4KICAqLwotc3RhdGljIGNvbnN0IGludCBwcmlvX2FnaW5nX2V4cGlyZSA9IDEwICogSFo7CiYjNDM7c3RhdGljIGludCBwcmlvX2FnaW5nX2V4cGlyZSA9IDEwICogTVNFQ19QRVJfU0VDOwomIzQzO21vZHVsZV9wYXJhbShwcmlvX2FnaW5nX2V4cGlyZSwgaW50LCAwNjQ0KTsKJiM0MztNT0RVTEVfUEFSTV9ERVNDKHByaW9fYWdpbmdfZXhwaXJlLAomIzQzOwkJICYjMzQ7RGVmYXVsdCBwcmlvX2FnaW5nX2V4cGlyZSBpbiBtaWxsaXNlY29uZHM7IDAgZGlzYWJsZXMgSS9PIHByaW9yaXR5LiYjMzQ7KTsKIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVzX3N0YXJ2ZWQgPSAyOyAgICAvKiBtYXggdGltZXMgcmVhZHMgY2FuIHN0YXJ2ZSBhIHdyaXRlICovCiBzdGF0aWMgY29uc3QgaW50IGZpZm9fYmF0Y2ggPSAxNjsgICAgICAgLyogIyBvZiBzZXF1ZW50aWFsIHJlcXVlc3RzIHRyZWF0ZWQgYXMgb25lCiAJCQkJICAgICBieSB0aGUgYWJvdmUgcGFyYW1ldGVycy4gRm9yIHRocm91Z2hwdXQuICovCkBAIC04Myw2ICYjNDM7ODYsNyBAQCBzdHJ1Y3QgZGVhZGxpbmVfZGF0YSB7CiAJICogcnVuIHRpbWUgZGF0YQogCSAqLwogCiYjNDM7CXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxOwkvKiBhc3NvY2lhdGVkIHJlcXVlc3QgcXVldWUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGRpc3BhdGNoOwogCXN0cnVjdCBkZF9wZXJfcHJpbyBwZXJfcHJpb1tERF9QUklPX0NPVU5UXTsKIApAQCAtMTg0LDEwICYjNDM7MTg4LDcgQEAgc3RhdGljIHZvaWQgZGVhZGxpbmVfcmVtb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCiBzdGF0aWMgdm9pZCBkZF9yZXF1ZXN0X21lcmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSwKIAkJCSAgICAgIGVudW0gZWx2X21lcmdlIHR5cGUpCiB7Ci0Jc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gcS0mZ3Q7ZWxldmF0b3ItJmd0O2VsZXZhdG9yX2RhdGE7Ci0JY29uc3QgdTggaW9wcmlvX2NsYXNzID0gZGRfcnFfaW9jbGFzcyhyZXEpOwotCWNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTsKLQlzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gJmFtcDtkZC0mZ3Q7cGVyX3ByaW9bcHJpb107CiYjNDM7CXN0cnVjdCBkZF9wZXJfcHJpbyAqcGVyX3ByaW8gPSByZXEtJmd0O2Vsdi5wcml2WzBdOwogCiAJLyoKIAkgKiBpZiB0aGUgbWVyZ2Ugd2FzIGEgZnJvbnQgbWVyZ2UsIHdlIG5lZWQgdG8gcmVwb3NpdGlvbiByZXF1ZXN0CkBAIC0yMDUsMTIgJiM0MzsyMDYsMTEgQEAgc3RhdGljIHZvaWQgZGRfbWVyZ2VkX3JlcXVlc3RzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLAogCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICpuZXh0KQogewogCXN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IHEtJmd0O2VsZXZhdG9yLSZndDtlbGV2YXRvcl9kYXRhOwotCWNvbnN0IHU4IGlvcHJpb19jbGFzcyA9IGRkX3JxX2lvY2xhc3MobmV4dCk7Ci0JY29uc3QgZW51bSBkZF9wcmlvIHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdOwomIzQzOwlzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gbmV4dC0mZ3Q7ZWx2LnByaXZbMF07CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7ZGQtJmd0O2xvY2spOwogCi0JZGQtJmd0O3Blcl9wcmlvW3ByaW9dLnN0YXRzLm1lcmdlZCYjNDM7JiM0Mzs7CiYjNDM7CXBlcl9wcmlvLSZndDtzdGF0cy5tZXJnZWQmIzQzOyYjNDM7OwogCiAJLyoKIAkgKiBpZiBuZXh0IGV4cGlyZXMgYmVmb3JlIHJxLCBhc3NpZ24gaXRzIGV4cGlyZSB0aW1lIHRvIHJxCkBAIC0yMjcsNyAmIzQzOzIyNyw3IEBAIHN0YXRpYyB2b2lkIGRkX21lcmdlZF9yZXF1ZXN0cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSwKIAkvKgogCSAqIGtpbGwga25vd2xlZGdlIG9mIG5leHQsIHRoaXMgb25lIGlzIGEgZ29uZXIKIAkgKi8KLQlkZWFkbGluZV9yZW1vdmVfcmVxdWVzdChxLCAmYW1wO2RkLSZndDtwZXJfcHJpb1twcmlvXSwgbmV4dCk7CiYjNDM7CWRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHEsIHBlcl9wcmlvLCBuZXh0KTsKIH0KIAogLyoKQEAgLTQyNiw2ICYjNDM7NDI2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqZGRfZGlzcGF0Y2hfcHJpb19hZ2VkX3JlcXVlc3RzKHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCwKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtkZC0mZ3Q7bG9jayk7CiAKJiM0MzsJLyoKJiM0MzsJICogQSBwcmlvX2FnaW5nX2V4cGlyZSBvZiB6ZXJvIGRpc2FibGVzIEkvTyBwcmlvcml0eTogYWxsIHJlcXVlc3RzIGFyZQomIzQzOwkgKiBmaWxlZCBpbiB0aGUgRERfQkVfUFJJTyBidWNrZXQgYW5kIG11c3QgbmV2ZXIgYmUgZGlzcGF0Y2hlZCBhaGVhZCBvZgomIzQzOwkgKiBoaWdoZXIgcHJpb3JpdHkgcmVxdWVzdHMgdGhyb3VnaCB0aGlzIGFnaW5nIHBhdGgsIHdoaWNoIHdvdWxkIGNhdXNlCiYjNDM7CSAqIHByaW9yaXR5IGludmVyc2lvbi4KJiM0MzsJICovCiYjNDM7CWlmIChkZC0mZ3Q7cHJpb19hZ2luZ19leHBpcmUgPT0gMCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwogCXByaW9fY250ID0gISFkZF9xdWV1ZWQoZGQsIEREX1JUX1BSSU8pICYjNDM7ICEhZGRfcXVldWVkKGRkLCBERF9CRV9QUklPKSAmIzQzOwogCQkgICAhIWRkX3F1ZXVlZChkZCwgRERfSURMRV9QUklPKTsKIAlpZiAocHJpb19jbnQgJmx0OyAyKQpAQCAtNTM2LDYgJiM0Mzs1NDUsNyBAQCBzdGF0aWMgaW50IGRkX2luaXRfc2NoZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZXEpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZXEtJmd0O2VsZXZhdG9yX2RhdGEgPSBkZDsKJiM0MzsJZGQtJmd0O3EgPSBxOwogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtkZC0mZ3Q7ZGlzcGF0Y2gpOwogCWZvciAocHJpbyA9IDA7IHByaW8gJmx0Oz0gRERfUFJJT19NQVg7IHByaW8mIzQzOyYjNDM7KSB7CkBAIC01NTIsNyAmIzQzOzU2Miw3IEBAIHN0YXRpYyBpbnQgZGRfaW5pdF9zY2hlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplcSkKIAlkZC0mZ3Q7ZnJvbnRfbWVyZ2VzID0gMTsKIAlkZC0mZ3Q7bGFzdF9kaXIgPSBERF9XUklURTsKIAlkZC0mZ3Q7Zmlmb19iYXRjaCA9IGZpZm9fYmF0Y2g7Ci0JZGQtJmd0O3ByaW9fYWdpbmdfZXhwaXJlID0gcHJpb19hZ2luZ19leHBpcmU7CiYjNDM7CWRkLSZndDtwcmlvX2FnaW5nX2V4cGlyZSA9IG1zZWNzX3RvX2ppZmZpZXMocHJpb19hZ2luZ19leHBpcmUpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZGQtJmd0O2xvY2spOwogCiAJLyogV2UgZGlzcGF0Y2ggZnJvbSByZXF1ZXN0IHF1ZXVlIHdpZGUgaW5zdGVhZCBvZiBodyBxdWV1ZSAqLwpAQCAtNTczLDcgJiM0Mzs1ODMsOCBAQCBzdGF0aWMgaW50IGRkX3JlcXVlc3RfbWVyZ2Uoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICoqcnEsCiB7CiAJc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gcS0mZ3Q7ZWxldmF0b3ItJmd0O2VsZXZhdG9yX2RhdGE7CiAJY29uc3QgdTggaW9wcmlvX2NsYXNzID0gSU9QUklPX1BSSU9fQ0xBU1MoYmlvLSZndDtiaV9pb3ByaW8pOwotCWNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTsKJiM0MzsJY29uc3QgZW51bSBkZF9wcmlvIHByaW8gPSBkZC0mZ3Q7cHJpb19hZ2luZ19leHBpcmUgPT0gMCA/IEREX0JFX1BSSU8gOgomIzQzOwkJCQkJICBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdOwogCXN0cnVjdCBkZF9wZXJfcHJpbyAqcGVyX3ByaW8gPSAmYW1wO2RkLSZndDtwZXJfcHJpb1twcmlvXTsKIAlzZWN0b3JfdCBzZWN0b3IgPSBiaW9fZW5kX3NlY3RvcihiaW8pOwogCXN0cnVjdCByZXF1ZXN0ICpfX3JxOwpAQCAtNjMzLDcgJiM0Mzs2NDQsMTUgQEAgc3RhdGljIHZvaWQgZGRfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtkZC0mZ3Q7bG9jayk7CiAKLQlwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTsKJiM0MzsJLyoKJiM0MzsJICogV2hlbiBwcmlvX2FnaW5nX2V4cGlyZSBpcyB6ZXJvLCBJL08gcHJpb3JpdHkgaXMgZGlzYWJsZWQ6IGZpbGUgZXZlcnkKJiM0MzsJICogcmVxdWVzdCBpbiB0aGUgYmVzdC1lZmZvcnQgYnVja2V0IHNvIHRoYXQgdGhlIGRpc3BhdGNoIHBhdGggbm8gbG9uZ2VyCiYjNDM7CSAqIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBSVCwgQkUgYW5kIElETEUgY2xhc3Nlcy4KJiM0MzsJICovCiYjNDM7CWlmIChkZC0mZ3Q7cHJpb19hZ2luZ19leHBpcmUgPT0gMCkKJiM0MzsJCXByaW8gPSBERF9CRV9QUklPOwomIzQzOwllbHNlCiYjNDM7CQlwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTsKIAlwZXJfcHJpbyA9ICZhbXA7ZGQtJmd0O3Blcl9wcmlvW3ByaW9dOwogCWlmICghcnEtJmd0O2Vsdi5wcml2WzBdKQogCQlwZXJfcHJpby0mZ3Q7c3RhdHMuaW5zZXJ0ZWQmIzQzOyYjNDM7OwpAQCAtNzczLDcgJiM0Mzs3OTIsNiBAQCBzdGF0aWMgc3NpemVfdCBfX0ZVTkMoc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpCiAJU1RPUkVfRlVOQ1RJT04oX19GVU5DLCBfX1BUUiwgTUlOLCBNQVgsIG1zZWNzX3RvX2ppZmZpZXMpCiBTVE9SRV9KSUZGSUVTKGRlYWRsaW5lX3JlYWRfZXhwaXJlX3N0b3JlLCAmYW1wO2RkLSZndDtmaWZvX2V4cGlyZVtERF9SRUFEXSwgMCwgSU5UX01BWCk7CiBTVE9SRV9KSUZGSUVTKGRlYWRsaW5lX3dyaXRlX2V4cGlyZV9zdG9yZSwgJmFtcDtkZC0mZ3Q7Zmlmb19leHBpcmVbRERfV1JJVEVdLCAwLCBJTlRfTUFYKTsKLVNUT1JFX0pJRkZJRVMoZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmUsICZhbXA7ZGQtJmd0O3ByaW9fYWdpbmdfZXhwaXJlLCAwLCBJTlRfTUFYKTsKIFNUT1JFX0lOVChkZWFkbGluZV93cml0ZXNfc3RhcnZlZF9zdG9yZSwgJmFtcDtkZC0mZ3Q7d3JpdGVzX3N0YXJ2ZWQsIElOVF9NSU4sIElOVF9NQVgpOwogU1RPUkVfSU5UKGRlYWRsaW5lX2Zyb250X21lcmdlc19zdG9yZSwgJmFtcDtkZC0mZ3Q7ZnJvbnRfbWVyZ2VzLCAwLCAxKTsKIFNUT1JFX0lOVChkZWFkbGluZV9maWZvX2JhdGNoX3N0b3JlLCAmYW1wO2RkLSZndDtmaWZvX2JhdGNoLCAwLCBJTlRfTUFYKTsKQEAgLTc4MSw2ICYjNDM7Nzk5LDQ2IEBAIFNUT1JFX0lOVChkZWFkbGluZV9maWZvX2JhdGNoX3N0b3JlLCAmYW1wO2RkLSZndDtmaWZvX2JhdGNoLCAwLCBJTlRfTUFYKTsKICN1bmRlZiBTVE9SRV9JTlQKICN1bmRlZiBTVE9SRV9KSUZGSUVTCiAKJiM0MzsvKgomIzQzOyAqIFdyaXRpbmcgemVybyB0byBwcmlvX2FnaW5nX2V4cGlyZSBkaXNhYmxlcyBJL08gcHJpb3JpdHk6IGFsbCByZXF1ZXN0cyBhcmUKJiM0MzsgKiB0cmVhdGVkIGFzIGJlc3QtZWZmb3J0LiBUbyBhdm9pZCBwcmlvcml0eSBpbnZlcnNpb24gd2hpbGUgdGhlIG1vZGUgaXMgYmVpbmcKJiM0MzsgKiBzd2l0Y2hlZCwgZmlyc3QgZHJhaW4gYWxsIGluLWZsaWdodCBJL08gYnkgZm9sbG93aW5nIHRoZSBzYW1lIHNlcXVlbmNlIHVzZWQKJiM0MzsgKiBieSBlbGV2YXRvcl9zd2l0Y2goKTogZnJlZXplIHRoZSBxdWV1ZSBzbyB0aGF0IG5ldyB1cHBlci1sYXllciBJL08gaXMKJiM0MzsgKiBibG9ja2VkIGFuZCBhbGwgb3V0c3RhbmRpbmcgcmVxdWVzdHMgY29tcGxldGUsIHF1aWVzY2UgdGhlIHF1ZXVlIHNvIHRoYXQgbm8KJiM0MzsgKiBkaXNwYXRjaCBpcyBpbiBwcm9ncmVzcywgdGhlbiBmbGlwIHByaW9fYWdpbmdfZXhwaXJlIHRvIHplcm8uIE5ldyBJL08KJiM0MzsgKiBxdWV1ZWQgYWZ0ZXIgdGhlIHN3aXRjaCBsYW5kcyBpbiB0aGUgYmVzdC1lZmZvcnQgYnVja2V0LgomIzQzOyAqIFdyaXRpbmcgYSBub24temVybyB2YWx1ZSAocmUtKWVuYWJsZXMgcHJpb3JpdHkgd2l0aG91dCBkcmFpbmluZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3NpemVfdCBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZShzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUsCiYjNDM7CQkJCQkJIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IGUtJmd0O2VsZXZhdG9yX2RhdGE7CiYjNDM7CWludCB2YWwsIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0ga3N0cnRvaW50KHBhZ2UsIDAsICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXZhbCA9IDA7CiYjNDM7CWVsc2UgaWYgKHZhbCAmZ3Q7IElOVF9NQVgpCiYjNDM7CQl2YWwgPSBJTlRfTUFYOwomIzQzOwl2YWwgPSBtc2Vjc190b19qaWZmaWVzKHZhbCk7CiYjNDM7CiYjNDM7CWlmICh2YWwgPT0gMCAmYW1wOyZhbXA7IGRkLSZndDtwcmlvX2FnaW5nX2V4cGlyZSAhPSAwKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7CiYjNDM7CiYjNDM7CQltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUoZGQtJmd0O3EpOwomIzQzOwkJYmxrX21xX3F1aWVzY2VfcXVldWUoZGQtJmd0O3EpOwomIzQzOwkJZGQtJmd0O3ByaW9fYWdpbmdfZXhwaXJlID0gMDsKJiM0MzsJCWJsa19tcV91bnF1aWVzY2VfcXVldWUoZGQtJmd0O3EpOwomIzQzOwkJYmxrX21xX3VuZnJlZXplX3F1ZXVlKGRkLSZndDtxLCBtZW1mbGFncyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlkZC0mZ3Q7cHJpb19hZ2luZ19leHBpcmUgPSB2YWw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKICNkZWZpbmUgRERfQVRUUihuYW1lKSBcCiAJX19BVFRSKG5hbWUsIDA2NDQsIGRlYWRsaW5lXyMjbmFtZSMjX3Nob3csIGRlYWRsaW5lXyMjbmFtZSMjX3N0b3JlKQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTVEtRGVhZGxpbmUgU2NoZWR1bGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgbXEtZGVhZGxpbmUuY2AgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgcHJpb19hZ2luZ19leHBpcmVgIGJlaGF2aW9yLiBJdCBsb29rcyBsaWtlIGl0IGludHJvZHVjZXMgYSBtb2R1bGUgcGFyYW1ldGVyLCBgcHJpb19hZ2luZ19leHBpcmVgLCBhbmQgdGhlbiBtb2RpZmllcyB0aGUgYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaGVyZSBpcyB0aGF0IHdoZW4gYHByaW9fYWdpbmdfZXhwaXJlYCBpcyBzZXQgdG8gemVybyDigJMgZXNzZW50aWFsbHkgZGlzYWJsaW5nIEkvTyBwcmlvcml0eSDigJMgdGhlIGNvZGUgbm93IGZyZWV6ZXMgYW5kIHF1aWVzY2VzIHRoZSBxdWV1ZS4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIHBvaW50IG9mIGludGVyZXN0LCBjb25jdXJyZW5jeS13aXNlLiBJdCBhbHNvIGNoYW5nZXMgaG93IHJlcXVlc3RzIGdldCBpbnNlcnRlZCBhbmQgbWVyZ2VkLCBlc3NlbnRpYWxseSBmdW5uZWxpbmcgZXZlcnl0aGluZyBpbnRvIHRoZSBgRERfQkVfUFJJT2AgYnVja2V0IHdoZW4gcHJpb3JpdHkgaXMgb2ZmLgoKTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGlzIGV2ZW4gcmVhY2hhYmxlIGFuZCBpZiBpdCYjMzk7cyB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmcuIFRoZSBnb29kIG5ld3MgaXMsIHRoZSBtcS1kZWFkbGluZSBzY2hlZHVsZXIgaXMgYSAqY29yZSogYmxvY2sgbGF5ZXIgY29tcG9uZW50LiBUaGF0IG1ha2VzIGl0IGEgcHJpbWUgdGFyZ2V0LiBBbmQsIHllcCwgdGhlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCBgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVgLCBpcyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggYC9zeXMvYmxvY2svJmx0O2RldiZndDsvcXVldWUvaW9zY2hlZC9wcmlvX2FnaW5nX2V4cGlyZWAuIFBlcmZlY3QuIFRoYXQgbWFrZXMgaXQgZWFzeSB0byB0cmlnZ2VyIHRoZSBuZXcgYmVoYXZpb3IuIFBsdXMsIGBkZF9pbnNlcnRfcmVxdWVzdGAsIGBkZF9yZXF1ZXN0X21lcmdlYCwgYGRkX21lcmdlZF9yZXF1ZXN0c2AsIGFuZCBgZGRfcmVxdWVzdF9tZXJnZWRgIGFyZSBhbGwgdG91Y2hlZCBkdXJpbmcgbm9ybWFsIGJsb2NrIEkvTyBvcGVyYXRpb25zLCBtZWFuaW5nIHdlIGRvbiYjMzk7dCBuZWVkIHNvbWUgb2JzY3VyZSBzZXQgb2YgY2lyY3Vtc3RhbmNlcyB0byB0cmlnZ2VyIHRoZSBjb2RlLgoKSXMgaXQgZnV6emFibGU/IEFic29sdXRlbHkuIFRoaXMgcGF0Y2ggaXMgbWVzc2luZyB3aXRoIHRoZSAqY29yZSogYmxvY2sgbGF5ZXIgc2NoZWR1bGVyIGxvZ2ljLCBhbmQgaXQmIzM5O3MgdGhlIGRlZmF1bHQgZm9yIGEgbG90IG9mIGJsb2NrIGRldmljZXMuIFRoZSBmcmVlemluZyBhbmQgcXVpZXNjaW5nIG9mIHRoZSBxdWV1ZSBzcGVjaWZpY2FsbHkgc2NyZWFtcyBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWNoIGFyZSBhbHdheXMgZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoaWNoIGNvbmZpZyBvcHRpb24gaXMgbmVlZGVkIHRvIGVuYWJsZSB0aGUgbXEtZGVhZGxpbmUgc2NoZWR1bGVyLiBJdCBhcHBlYXJzIHRvIGJlIGBDT05GSUdfTVFfSU9TQ0hFRF9ERUFETElORWAuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBgYmxvY2svS2NvbmZpZy5pb3NjaGVkYCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1RX0lPU0NIRURfREVBRExJTkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZy5pb3NjaGVkPTI9bWVudSBcJiMzNDtJTyBTY2hlZHVsZXJzXCYjMzQ7XG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMy1cbmJsb2NrL0tjb25maWcuaW9zY2hlZDo0OmNvbmZpZyBNUV9JT1NDSEVEX0RFQURMSU5FXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtNS1cdHRyaXN0YXRlIFwmIzM0O01RIGRlYWRsaW5lIEkvTyBzY2hlZHVsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzM1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXM6IERlYWRsaW5lIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBpcyBgTVFfSU9TQ0hFRF9ERUFETElORWAuIFJpZ2h0LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGVyZSB3ZSBzaG91bGQgYmUgZGlyZWN0aW5nIG91ciBmdXp6aW5nIGVmZm9ydHMuIExldCYjMzk7cyBzZWUgd2hhdCBmdW5jdGlvbnMgd2VyZSBtb2RpZmllZCByZWNlbnRseSBpbiB0aGlzIGNvbnRleHQuIEFoLCBoZXJlJiMzOTtzIHRoZSBsaXN0OiBgZGRfcmVxdWVzdF9tZXJnZWRgLCBgZGRfbWVyZ2VkX3JlcXVlc3RzYCwgYGRkX2Rpc3BhdGNoX3ByaW9fYWdlZF9yZXF1ZXN0c2AsIGBkZF9pbml0X3NjaGVkYCwgYGRkX3JlcXVlc3RfbWVyZ2VgLCBhbmQgYGRkX2luc2VydF9yZXF1ZXN0YCwgYW5kIHRoYXQgaW50ZXJlc3Rpbmcgb25lLCBgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVgLgoKYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCBpcyBpbW1lZGlhdGVseSBncmFiYmluZyBteSBhdHRlbnRpb24uIEl0JiMzOTtzIGludm9sdmVkIGluIHRyaWdnZXJpbmcgdGhlIGZyZWV6ZS9xdWllc2NlIGxvZ2ljLCB3aGljaCBpcyBhbHdheXMgYW4gaW50ZXJlc3RpbmcgdGFyZ2V0IGZvciBmaW5kaW5nIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgcG90ZW50aWFsIGRlYWRsb2Nrcy4gRGVmaW5pdGVseSBhIHN0cm9uZyBjYW5kaWRhdGUuIFRoZW4gd2UgaGF2ZSBgZGRfaW5zZXJ0X3JlcXVlc3RgIGFuZCBgZGRfcmVxdWVzdF9tZXJnZWAgd2hpY2ggYXJlIGxpa2VseSBob3QtcGF0aCBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIGdvaW5nIHRvIGJlIGV4ZXJjaXNlZCBmcmVxdWVudGx5LCB3aGljaCBtZWFucyBtb3JlIHBvdGVudGlhbCBmb3IgZmluZGluZyBidWdzLiBgZGRfZGlzcGF0Y2hfcHJpb19hZ2VkX3JlcXVlc3RzYCBpcyBpbiB0aGF0IHNhbWUgc3BoZXJlLCBidXQgbGlrZWx5IGxlc3MgaG90IHRoYW4gdGhlIGluc2VydCBhbmQgbWVyZ2UuIEhtbSwgd2FpdCBhIHNlY29uZCwgb24gZnVydGhlciByZWZsZWN0aW9uLCBJJiMzOTttIHRoaW5raW5nIHRoYXQgYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCBpcyB0aGUgbW9yZSBpbnRlcmVzdGluZyBvbmUgdG8gaGl0IGVhcmx5LCBzaW5jZSBpdCBpcyBub3QgaG90LXBhdGggYW5kIG1pZ2h0IGhhdmUgZGlmZmVyZW50IGVycm9yIGhhbmRsaW5nLgoKQnV0IGJlZm9yZSBJIGNvbW1pdCB0byB0aG9zZSwgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgd2UgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMgaW4gdGhlIG1vZGlmaWNhdGlvbiBzZXQuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svbXEtZGVhZGxpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9tcS1kZWFkbGluZS5jPTc5Nz1TVE9SRV9JTlQoZGVhZGxpbmVfZmlmb19iYXRjaF9zdG9yZSwgXHUwMDI2ZGQtXHUwMDNlZmlmb19iYXRjaCwgMCwgSU5UX01BWCk7XG4tLVxuYmxvY2svbXEtZGVhZGxpbmUuYy04MTEtICovXG5ibG9jay9tcS1kZWFkbGluZS5jOjgxMjpzdGF0aWMgc3NpemVfdCBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZShzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUsXG5ibG9jay9tcS1kZWFkbGluZS5jLTgxMy1cdFx0XHRcdFx0XHQgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNTYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipGdXp6aW5nIHRoZSBEZWFkbGluZSBTY2hlZHVsZXImIzM5O3MgRXhwaXJ5IE1lY2hhbmlzbSoqCgpBbHJpZ2h0LCBzbyBgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVgLi4uIHRoYXQmIzM5O3MgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0JiMzNDsgdG8gbWUuIEl0JiMzOTtzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciB1bmNvdmVyaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciByZWxhdGVkIHRvIGhvdyB0aGUgRGVhZGxpbmUgSS9PIHNjaGVkdWxlciBtYW5hZ2VzIGl0cyBwcmlvcml0eSBhZ2luZyBhbmQgZXhwaXJhdGlvbiBsb2dpYy4gSSYjMzk7ZCBleHBlY3QgYW4gaW50ZXJhY3RpdmUgdXNlciB0byBoYXZlIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucyBoZXJlLgoKTXkgbmV4dCBpbW1lZGlhdGUgc3RlcCB3b3VsZCBiZSB0byByYXBpZGx5IGRldGVybWluZSBhbnkgZGVwZW5kZW5jaWVzLCBhcyBJ4oCZZCBleHBlY3QgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZlYXR1cmUgdG8gYmUgc2lnbmlmaWNhbnQgb24gYW55dGhpbmcgdGhhdCBkZXBlbmRzIG9uIGl0LiBTcGVjaWZpY2FsbHksIGlzIGBNUV9JT1NDSEVEX0RFQURMSU5FYCBhIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgZmVhdHVyZT8gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyBvciBtb2R1bGVzIHRoYXQgbmVlZCB0byBiZSBsb2FkZWQgb3IgZW5hYmxlZCBmb3IgdGhpcyB0byBmdW5jdGlvbj8gQW55IGRlcGVuZGVuY2llcyBoZXJlIHdpbGwgZGV0ZXJtaW5lIGhvdyBJIGZvY3VzIHRoZSBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnLmlvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZy5pb3NjaGVkPTMwPWNvbmZpZyBCRlFfR1JPVVBfSU9TQ0hFRFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkLTMxLSAgICAgICBib29sIFwmIzM0O0JGUSBoaWVyYXJjaGljYWwgc2NoZWR1bGluZyBzdXBwb3J0XCYjMzQ7XG5ibG9jay9LY29uZmlnLmlvc2NoZWQ6MzI6ICAgICAgIGRlcGVuZHMgb24gSU9TQ0hFRF9CRlEgXHUwMDI2XHUwMDI2IEJMS19DR1JPVVBcbmJsb2NrL0tjb25maWcuaW9zY2hlZC0zMy0gICAgICAgZGVmYXVsdCB5XG4tLVxuYmxvY2svS2NvbmZpZy5pb3NjaGVkPTQwPWNvbmZpZyBCRlFfQ0dST1VQX0RFQlVHXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtNDEtXHRib29sIFwmIzM0O0JGUSBJTyBjb250cm9sbGVyIGRlYnVnZ2luZ1wmIzM0O1xuYmxvY2svS2NvbmZpZy5pb3NjaGVkOjQyOlx0ZGVwZW5kcyBvbiBCRlFfR1JPVVBfSU9TQ0hFRFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkLTQzLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gdGhlIERlYWRsaW5lIEkvTyBTY2hlZHVsZXIqKgoKSG1tLCBzbyBgTVFfSU9TQ0hFRF9ERUFETElORWAgaXNuJiMzOTt0IHNob3dpbmcgYW55IGV4cGxpY2l0IGBkZXBlbmRzIG9uYCBjbGF1c2VzLiBUaGF0JiMzOTtzIGEgbGl0dGxlIHVudXN1YWwsIEkmIzM5O2QgZXhwZWN0ICpzb21ldGhpbmcqIHRoZXJlLiBUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCwgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGNvbnRyb2xsaW5nIGl0cyBidWlsZCBjb25maWd1cmF0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgaXMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IGBibG9jay9LY29uZmlnLmlvc2NoZWRgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgc2NoZWR1bGVyIG9wdGlvbnMgYXJlIGRlZmluZWQgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgbGFpZCBvdXQuIFRpbWUgdG8gb3BlbiB0aGF0IHVwIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb3Zlcm5pbmcgdGhlIGluY2x1c2lvbiBvZiBgTVFfSU9TQ0hFRF9ERUFETElORWAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBmZWF0dXJlcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZmlndXJpbmcgb3V0IGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyB0aGF0IGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBtYWluIGNvbmZpZyBzdHJ1Y3R1cmUuIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIHRlYXNlIG91dCB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9LY29uZmlnLmlvc2NoZWQmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0bWVudSBcJiMzNDtJTyBTY2hlZHVsZXJzXCYjMzQ7XG4gICAzOlx0XG4gICA0Olx0Y29uZmlnIE1RX0lPU0NIRURfREVBRExJTkVcbiAgIDU6XHRcdHRyaXN0YXRlIFwmIzM0O01RIGRlYWRsaW5lIEkvTyBzY2hlZHVsZXJcJiMzNDtcbiAgIDY6XHRcdGRlZmF1bHQgeVxuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBNUSB2ZXJzaW9uIG9mIHRoZSBkZWFkbGluZSBJTyBzY2hlZHVsZXIuXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIE1RX0lPU0NIRURfS1lCRVJcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O0t5YmVyIEkvTyBzY2hlZHVsZXJcJiMzNDtcbiAgMTI6XHRcdGRlZmF1bHQgeVxuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0ICBUaGUgS3liZXIgSS9PIHNjaGVkdWxlciBpcyBhIGxvdy1vdmVyaGVhZCBzY2hlZHVsZXIgc3VpdGFibGUgZm9yXG4gIDE1Olx0XHQgIG11bHRpcXVldWUgYW5kIG90aGVyIGZhc3QgZGV2aWNlcy4gR2l2ZW4gdGFyZ2V0IGxhdGVuY2llcyBmb3IgcmVhZHMgYW5kXG4gIDE2Olx0XHQgIHN5bmNocm9ub3VzIHdyaXRlcywgaXQgd2lsbCBzZWxmLXR1bmUgcXVldWUgZGVwdGhzIHRvIGFjaGlldmUgdGhhdFxuICAxNzpcdFx0ICBnb2FsLlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBJT1NDSEVEX0JGUVxuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7QkZRIEkvTyBzY2hlZHVsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA2MAoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiAyOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBJL08gU2NoZWR1bGVyIFBhdGNoKioKCk9rYXksIHNvIGBNUV9JT1NDSEVEX0RFQURMSU5FYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBpdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGRlcGVuZCBvbiBhbnl0aGluZyBlbHNlLiBHb29kLiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgaW4gYGJsb2NrL21xLWRlYWRsaW5lLmNgLiBJJiMzOTttIHNlZWluZyBtb2RpZmljYXRpb25zIHRvIHF1aXRlIGEgZmV3IGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBkZF9yZXF1ZXN0X21lcmdlZGAsIGBkZF9tZXJnZWRfcmVxdWVzdHNgLCBgZGRfZGlzcGF0Y2hfcHJpb19hZ2VkX3JlcXVlc3RzYCwgYGRkX2luaXRfc2NoZWRgLCBgZGRfcmVxdWVzdF9tZXJnZWAsIGBkZF9pbnNlcnRfcmVxdWVzdGAsIGFuZCB0aGF0IGtleSBvbmUsIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAuCgpBaCwgdGhlcmUgaXQgaXMhIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAgaXMgdGhlIGx5bmNocGluIGhlcmUuIFRoaXMgaXMgd2hlcmUgdGhlIHF1ZXVlIGZyZWV6ZS9xdWllc2NlIGxvZ2ljIGlzIHRyaWdnZXJlZCwgYWxsIHJlbGF0ZWQgdG8gdGhlIG5ldyBhYmlsaXR5IHRvIGRpc2FibGUgSS9PIHByaW9yaXR5IGJ5IHNldHRpbmcgYHByaW9fYWdpbmdfZXhwaXJlYCB0byB6ZXJvLiBBbHNvLCBgZGRfaW5pdF9zY2hlZGAgaGFzIGEgbW9kaWZpY2F0aW9uIHNldHRpbmcgYGRkLSZndDtxID0gcTtgLgoKUmlnaHQsIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAgZ2V0cyBteSBhdHRlbnRpb247IHRoYXQmIzM5O3MgdGhlIHByaW1hcnkgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCYjMzk7cyB0aGUgcG9pbnQgb2YgZW50cnkgZm9yIHRoZSBuZXcgc3lzZnMgaW50ZXJmYWNlIHRoYXQmIzM5O3MgaW50cm9kdWNlZCB3aXRoIHRoaXMgcGF0Y2guIEkgd2lsbCBiZSBmb2N1c2luZyBteSBmdXp6aW5nIGVmZm9ydHMgaGVyZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRoYXQgYEZvY3VzU3ltYm9sc2AgaXMgc2V0IHRvIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAuIEFuZCwgb2YgY291cnNlLCB0aGUgY29uZmlndXJhdGlvbiBgRW5hYmxlQ29uZmlnc2Agd2lsbCBiZSBzZXQgdG8gYE1RX0lPU0NIRURfREVBRExJTkVgIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCgpUaGlzIHBhdGNoIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgaW50cm9kdWNlcyBuZXcgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiB3aXRoaW4gdGhlIGJsb2NrIGxheWVyIHRoYXQgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHN5c2ZzLCBhbmQgdGhlcmVmb3JlIHJpcGUgZm9yIGZ1enppbmcuIEkgY2FuIHNlZSB0aGUgcG90ZW50aWFsIGZvciBleHBsb2l0YWJsZSByYWNlIGNvbmRpdGlvbnMgd2hlbiB3ZSBhbGxvdyB1c2Vyc3BhY2UgdG8gY29udHJvbCBxdWV1ZSBiZWhhdmlvciB0aGlzIHdheS4gVGltZSB0byBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01RX0lPU0NIRURfREVBRExJTkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbXEtZGVhZGxpbmUgSS9PIHNjaGVkdWxlciB0byBzdXBwb3J0IGRpc2FibGluZyBJL08gcHJpb3JpdHkgYnkgc2V0dGluZyBgcHJpb19hZ2luZ19leHBpcmVgIHRvIDAuIEl0IGFkZHMgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiBgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVgIHdoaWNoIGZyZWV6ZXMgYW5kIHF1aWVzY2VzIHRoZSByZXF1ZXN0IHF1ZXVlIHRvIHNhZmVseSBzd2l0Y2ggdGhlIG1vZGUuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiB0aGUgYmxvY2sgbGF5ZXIgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2ZzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUV9JT1NDSEVEX0RFQURMSU5FJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1xLWRlYWRsaW5lIEkvTyBzY2hlZHVsZXIgdG8gc3VwcG9ydCBkaXNhYmxpbmcgSS9PIHByaW9yaXR5IGJ5IHNldHRpbmcgYHByaW9fYWdpbmdfZXhwaXJlYCB0byAwLiBJdCBhZGRzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24gYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCB3aGljaCBmcmVlemVzIGFuZCBxdWllc2NlcyB0aGUgcmVxdWVzdCBxdWV1ZSB0byBzYWZlbHkgc3dpdGNoIHRoZSBtb2RlLiBUaGlzIGludHJvZHVjZXMgbmV3IGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGJsb2NrIGxheWVyIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbXEtZGVhZGxpbmUgYmxvY2sgZWxldmF0b3IgdG8gYWxsb3cgZGlzYWJsaW5nIEkvTyBwcmlvcml0eSBieSBzZXR0aW5nIGBwcmlvX2FnaW5nX2V4cGlyZWAgdG8gMC4gSXQgaW50cm9kdWNlcyBsb2dpYyBjaGFuZ2VzIHRvIHJvdXRlIGFsbCByZXF1ZXN0cyB0byB0aGUgYmVzdC1lZmZvcnQgYnVja2V0IHdoZW4gcHJpb3JpdHkgaXMgZGlzYWJsZWQsIGFuZCBvcHRpbWl6ZXMgcHJpb3JpdHkgbG9va3VwcyBieSB1c2luZyB0aGUgY2FjaGVkIGByZXEtXHUwMDNlZWx2LnByaXZbMF1gIHBvaW50ZXIgaW5zdGVhZCBvZiByZWNhbGN1bGF0aW5nIGl0LiBUaGUgYHJlcS1cdTAwM2VlbHYucHJpdlswXWAgZmllbGQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBOVUxMIGluIGBkZF9wcmVwYXJlX3JlcXVlc3RgIGFuZCBwb3B1bGF0ZWQgaW4gYGRkX2luc2VydF9yZXF1ZXN0YCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGhhbmRsaW5nIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMgZHVyaW5nIHF1ZXVlIGZyZWV6ZS9xdWllc2NlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NjU3OTdlZTQ4NDkzMzE1YmJhODcxZWU4ZmU2NmQ3MDQxMTgwYmExCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMDI6NDE6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9tcS1kZWFkbGluZS5jIGIvYmxvY2svbXEtZGVhZGxpbmUuYwppbmRleCA4MjRiZmMxN2IyYzY4Li45NWEwMGE2NzNiZTU1IDEwMDY0NAotLS0gYS9ibG9jay9tcS1kZWFkbGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL21xLWRlYWRsaW5lLmMKQEAgLTMzLDcgJiM0MzszMywxMCBAQCBzdGF0aWMgY29uc3QgaW50IHdyaXRlX2V4cGlyZSA9IDUgKiBIWjsgLyogZGl0dG8gZm9yIHdyaXRlcywgdGhlc2UgbGltaXRzIGFyZSBTTwogICogVGltZSBhZnRlciB3aGljaCB0byBkaXNwYXRjaCBsb3dlciBwcmlvcml0eSByZXF1ZXN0cyBldmVuIGlmIGhpZ2hlcgogICogcHJpb3JpdHkgcmVxdWVzdHMgYXJlIHBlbmRpbmcuCiAgKi8KLXN0YXRpYyBjb25zdCBpbnQgcHJpb19hZ2luZ19leHBpcmUgPSAxMCAqIEhaOwomIzQzO3N0YXRpYyBpbnQgcHJpb19hZ2luZ19leHBpcmUgPSAxMCAqIE1TRUNfUEVSX1NFQzsKJiM0Mzttb2R1bGVfcGFyYW0ocHJpb19hZ2luZ19leHBpcmUsIGludCwgMDY0NCk7CiYjNDM7TU9EVUxFX1BBUk1fREVTQyhwcmlvX2FnaW5nX2V4cGlyZSwKJiM0MzsJCSAmIzM0O0RlZmF1bHQgcHJpb19hZ2luZ19leHBpcmUgaW4gbWlsbGlzZWNvbmRzOyAwIGRpc2FibGVzIEkvTyBwcmlvcml0eS4mIzM0Oyk7CiBzdGF0aWMgY29uc3QgaW50IHdyaXRlc19zdGFydmVkID0gMjsgICAgLyogbWF4IHRpbWVzIHJlYWRzIGNhbiBzdGFydmUgYSB3cml0ZSAqLwogc3RhdGljIGNvbnN0IGludCBmaWZvX2JhdGNoID0gMTY7ICAgICAgIC8qICMgb2Ygc2VxdWVudGlhbCByZXF1ZXN0cyB0cmVhdGVkIGFzIG9uZQogCQkJCSAgICAgYnkgdGhlIGFib3ZlIHBhcmFtZXRlcnMuIEZvciB0aHJvdWdocHV0LiAqLwpAQCAtODMsNiAmIzQzOzg2LDcgQEAgc3RydWN0IGRlYWRsaW5lX2RhdGEgewogCSAqIHJ1biB0aW1lIGRhdGEKIAkgKi8KIAomIzQzOwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsJLyogYXNzb2NpYXRlZCByZXF1ZXN0IHF1ZXVlICovCiAJc3RydWN0IGxpc3RfaGVhZCBkaXNwYXRjaDsKIAlzdHJ1Y3QgZGRfcGVyX3ByaW8gcGVyX3ByaW9bRERfUFJJT19DT1VOVF07CiAKQEAgLTE4NCwxMCAmIzQzOzE4OCw3IEBAIHN0YXRpYyB2b2lkIGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogc3RhdGljIHZvaWQgZGRfcmVxdWVzdF9tZXJnZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsCiAJCQkgICAgICBlbnVtIGVsdl9tZXJnZSB0eXBlKQogewotCXN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IHEtJmd0O2VsZXZhdG9yLSZndDtlbGV2YXRvcl9kYXRhOwotCWNvbnN0IHU4IGlvcHJpb19jbGFzcyA9IGRkX3JxX2lvY2xhc3MocmVxKTsKLQljb25zdCBlbnVtIGRkX3ByaW8gcHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107Ci0Jc3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9ICZhbXA7ZGQtJmd0O3Blcl9wcmlvW3ByaW9dOwomIzQzOwlzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gcmVxLSZndDtlbHYucHJpdlswXTsKIAogCS8qCiAJICogaWYgdGhlIG1lcmdlIHdhcyBhIGZyb250IG1lcmdlLCB3ZSBuZWVkIHRvIHJlcG9zaXRpb24gcmVxdWVzdApAQCAtMjA1LDEyICYjNDM7MjA2LDExIEBAIHN0YXRpYyB2b2lkIGRkX21lcmdlZF9yZXF1ZXN0cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSwKIAkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqbmV4dCkKIHsKIAlzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLSZndDtlbGV2YXRvci0mZ3Q7ZWxldmF0b3JfZGF0YTsKLQljb25zdCB1OCBpb3ByaW9fY2xhc3MgPSBkZF9ycV9pb2NsYXNzKG5leHQpOwotCWNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTsKJiM0MzsJc3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IG5leHQtJmd0O2Vsdi5wcml2WzBdOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2RkLSZndDtsb2NrKTsKIAotCWRkLSZndDtwZXJfcHJpb1twcmlvXS5zdGF0cy5tZXJnZWQmIzQzOyYjNDM7OwomIzQzOwlwZXJfcHJpby0mZ3Q7c3RhdHMubWVyZ2VkJiM0MzsmIzQzOzsKIAogCS8qCiAJICogaWYgbmV4dCBleHBpcmVzIGJlZm9yZSBycSwgYXNzaWduIGl0cyBleHBpcmUgdGltZSB0byBycQpAQCAtMjI3LDcgJiM0MzsyMjcsNyBAQCBzdGF0aWMgdm9pZCBkZF9tZXJnZWRfcmVxdWVzdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsCiAJLyoKIAkgKiBraWxsIGtub3dsZWRnZSBvZiBuZXh0LCB0aGlzIG9uZSBpcyBhIGdvbmVyCiAJICovCi0JZGVhZGxpbmVfcmVtb3ZlX3JlcXVlc3QocSwgJmFtcDtkZC0mZ3Q7cGVyX3ByaW9bcHJpb10sIG5leHQpOwomIzQzOwlkZWFkbGluZV9yZW1vdmVfcmVxdWVzdChxLCBwZXJfcHJpbywgbmV4dCk7CiB9CiAKIC8qCkBAIC00MjYsNiAmIzQzOzQyNiwxNSBAQCBzdGF0aWMgc3RydWN0IHJlcXVlc3QgKmRkX2Rpc3BhdGNoX3ByaW9fYWdlZF9yZXF1ZXN0cyhzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQsCiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7ZGQtJmd0O2xvY2spOwogCiYjNDM7CS8qCiYjNDM7CSAqIEEgcHJpb19hZ2luZ19leHBpcmUgb2YgemVybyBkaXNhYmxlcyBJL08gcHJpb3JpdHk6IGFsbCByZXF1ZXN0cyBhcmUKJiM0MzsJICogZmlsZWQgaW4gdGhlIEREX0JFX1BSSU8gYnVja2V0IGFuZCBtdXN0IG5ldmVyIGJlIGRpc3BhdGNoZWQgYWhlYWQgb2YKJiM0MzsJICogaGlnaGVyIHByaW9yaXR5IHJlcXVlc3RzIHRocm91Z2ggdGhpcyBhZ2luZyBwYXRoLCB3aGljaCB3b3VsZCBjYXVzZQomIzQzOwkgKiBwcmlvcml0eSBpbnZlcnNpb24uCiYjNDM7CSAqLwomIzQzOwlpZiAoZGQtJmd0O3ByaW9fYWdpbmdfZXhwaXJlID09IDApCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKIAlwcmlvX2NudCA9ICEhZGRfcXVldWVkKGRkLCBERF9SVF9QUklPKSAmIzQzOyAhIWRkX3F1ZXVlZChkZCwgRERfQkVfUFJJTykgJiM0MzsKIAkJICAgISFkZF9xdWV1ZWQoZGQsIEREX0lETEVfUFJJTyk7CiAJaWYgKHByaW9fY250ICZsdDsgMikKQEAgLTUzNiw2ICYjNDM7NTQ1LDcgQEAgc3RhdGljIGludCBkZF9pbml0X3NjaGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWVxLSZndDtlbGV2YXRvcl9kYXRhID0gZGQ7CiYjNDM7CWRkLSZndDtxID0gcTsKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7ZGQtJmd0O2Rpc3BhdGNoKTsKIAlmb3IgKHByaW8gPSAwOyBwcmlvICZsdDs9IEREX1BSSU9fTUFYOyBwcmlvJiM0MzsmIzQzOykgewpAQCAtNTUyLDcgJiM0Mzs1NjIsNyBAQCBzdGF0aWMgaW50IGRkX2luaXRfc2NoZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZXEpCiAJZGQtJmd0O2Zyb250X21lcmdlcyA9IDE7CiAJZGQtJmd0O2xhc3RfZGlyID0gRERfV1JJVEU7CiAJZGQtJmd0O2ZpZm9fYmF0Y2ggPSBmaWZvX2JhdGNoOwotCWRkLSZndDtwcmlvX2FnaW5nX2V4cGlyZSA9IHByaW9fYWdpbmdfZXhwaXJlOwomIzQzOwlkZC0mZ3Q7cHJpb19hZ2luZ19leHBpcmUgPSBtc2Vjc190b19qaWZmaWVzKHByaW9fYWdpbmdfZXhwaXJlKTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2RkLSZndDtsb2NrKTsKIAogCS8qIFdlIGRpc3BhdGNoIGZyb20gcmVxdWVzdCBxdWV1ZSB3aWRlIGluc3RlYWQgb2YgaHcgcXVldWUgKi8KQEAgLTU3Myw3ICYjNDM7NTgzLDggQEAgc3RhdGljIGludCBkZF9yZXF1ZXN0X21lcmdlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqKnJxLAogewogCXN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IHEtJmd0O2VsZXZhdG9yLSZndDtlbGV2YXRvcl9kYXRhOwogCWNvbnN0IHU4IGlvcHJpb19jbGFzcyA9IElPUFJJT19QUklPX0NMQVNTKGJpby0mZ3Q7YmlfaW9wcmlvKTsKLQljb25zdCBlbnVtIGRkX3ByaW8gcHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107CiYjNDM7CWNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gZGQtJmd0O3ByaW9fYWdpbmdfZXhwaXJlID09IDAgPyBERF9CRV9QUklPIDoKJiM0MzsJCQkJCSAgaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTsKIAlzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gJmFtcDtkZC0mZ3Q7cGVyX3ByaW9bcHJpb107CiAJc2VjdG9yX3Qgc2VjdG9yID0gYmlvX2VuZF9zZWN0b3IoYmlvKTsKIAlzdHJ1Y3QgcmVxdWVzdCAqX19ycTsKQEAgLTYzMyw3ICYjNDM7NjQ0LDE1IEBAIHN0YXRpYyB2b2lkIGRkX2luc2VydF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7ZGQtJmd0O2xvY2spOwogCi0JcHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107CiYjNDM7CS8qCiYjNDM7CSAqIFdoZW4gcHJpb19hZ2luZ19leHBpcmUgaXMgemVybywgSS9PIHByaW9yaXR5IGlzIGRpc2FibGVkOiBmaWxlIGV2ZXJ5CiYjNDM7CSAqIHJlcXVlc3QgaW4gdGhlIGJlc3QtZWZmb3J0IGJ1Y2tldCBzbyB0aGF0IHRoZSBkaXNwYXRjaCBwYXRoIG5vIGxvbmdlcgomIzQzOwkgKiBkaXN0aW5ndWlzaGVzIGJldHdlZW4gUlQsIEJFIGFuZCBJRExFIGNsYXNzZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoZGQtJmd0O3ByaW9fYWdpbmdfZXhwaXJlID09IDApCiYjNDM7CQlwcmlvID0gRERfQkVfUFJJTzsKJiM0MzsJZWxzZQomIzQzOwkJcHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107CiAJcGVyX3ByaW8gPSAmYW1wO2RkLSZndDtwZXJfcHJpb1twcmlvXTsKIAlpZiAoIXJxLSZndDtlbHYucHJpdlswXSkKIAkJcGVyX3ByaW8tJmd0O3N0YXRzLmluc2VydGVkJiM0MzsmIzQzOzsKQEAgLTc3Myw3ICYjNDM7NzkyLDYgQEAgc3RhdGljIHNzaXplX3QgX19GVU5DKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KQogCVNUT1JFX0ZVTkNUSU9OKF9fRlVOQywgX19QVFIsIE1JTiwgTUFYLCBtc2Vjc190b19qaWZmaWVzKQogU1RPUkVfSklGRklFUyhkZWFkbGluZV9yZWFkX2V4cGlyZV9zdG9yZSwgJmFtcDtkZC0mZ3Q7Zmlmb19leHBpcmVbRERfUkVBRF0sIDAsIElOVF9NQVgpOwogU1RPUkVfSklGRklFUyhkZWFkbGluZV93cml0ZV9leHBpcmVfc3RvcmUsICZhbXA7ZGQtJmd0O2ZpZm9fZXhwaXJlW0REX1dSSVRFXSwgMCwgSU5UX01BWCk7Ci1TVE9SRV9KSUZGSUVTKGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlLCAmYW1wO2RkLSZndDtwcmlvX2FnaW5nX2V4cGlyZSwgMCwgSU5UX01BWCk7CiBTVE9SRV9JTlQoZGVhZGxpbmVfd3JpdGVzX3N0YXJ2ZWRfc3RvcmUsICZhbXA7ZGQtJmd0O3dyaXRlc19zdGFydmVkLCBJTlRfTUlOLCBJTlRfTUFYKTsKIFNUT1JFX0lOVChkZWFkbGluZV9mcm9udF9tZXJnZXNfc3RvcmUsICZhbXA7ZGQtJmd0O2Zyb250X21lcmdlcywgMCwgMSk7CiBTVE9SRV9JTlQoZGVhZGxpbmVfZmlmb19iYXRjaF9zdG9yZSwgJmFtcDtkZC0mZ3Q7Zmlmb19iYXRjaCwgMCwgSU5UX01BWCk7CkBAIC03ODEsNiAmIzQzOzc5OSw0NiBAQCBTVE9SRV9JTlQoZGVhZGxpbmVfZmlmb19iYXRjaF9zdG9yZSwgJmFtcDtkZC0mZ3Q7Zmlmb19iYXRjaCwgMCwgSU5UX01BWCk7CiAjdW5kZWYgU1RPUkVfSU5UCiAjdW5kZWYgU1RPUkVfSklGRklFUwogCiYjNDM7LyoKJiM0MzsgKiBXcml0aW5nIHplcm8gdG8gcHJpb19hZ2luZ19leHBpcmUgZGlzYWJsZXMgSS9PIHByaW9yaXR5OiBhbGwgcmVxdWVzdHMgYXJlCiYjNDM7ICogdHJlYXRlZCBhcyBiZXN0LWVmZm9ydC4gVG8gYXZvaWQgcHJpb3JpdHkgaW52ZXJzaW9uIHdoaWxlIHRoZSBtb2RlIGlzIGJlaW5nCiYjNDM7ICogc3dpdGNoZWQsIGZpcnN0IGRyYWluIGFsbCBpbi1mbGlnaHQgSS9PIGJ5IGZvbGxvd2luZyB0aGUgc2FtZSBzZXF1ZW5jZSB1c2VkCiYjNDM7ICogYnkgZWxldmF0b3Jfc3dpdGNoKCk6IGZyZWV6ZSB0aGUgcXVldWUgc28gdGhhdCBuZXcgdXBwZXItbGF5ZXIgSS9PIGlzCiYjNDM7ICogYmxvY2tlZCBhbmQgYWxsIG91dHN0YW5kaW5nIHJlcXVlc3RzIGNvbXBsZXRlLCBxdWllc2NlIHRoZSBxdWV1ZSBzbyB0aGF0IG5vCiYjNDM7ICogZGlzcGF0Y2ggaXMgaW4gcHJvZ3Jlc3MsIHRoZW4gZmxpcCBwcmlvX2FnaW5nX2V4cGlyZSB0byB6ZXJvLiBOZXcgSS9PCiYjNDM7ICogcXVldWVkIGFmdGVyIHRoZSBzd2l0Y2ggbGFuZHMgaW4gdGhlIGJlc3QtZWZmb3J0IGJ1Y2tldC4KJiM0MzsgKiBXcml0aW5nIGEgbm9uLXplcm8gdmFsdWUgKHJlLSllbmFibGVzIHByaW9yaXR5IHdpdGhvdXQgZHJhaW5pbmcuCiYjNDM7ICovCiYjNDM7c3RhdGljIHNzaXplX3QgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmUoc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplLAomIzQzOwkJCQkJCSBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBlLSZndDtlbGV2YXRvcl9kYXRhOwomIzQzOwlpbnQgdmFsLCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzdHJ0b2ludChwYWdlLCAwLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQl2YWwgPSAwOwomIzQzOwllbHNlIGlmICh2YWwgJmd0OyBJTlRfTUFYKQomIzQzOwkJdmFsID0gSU5UX01BWDsKJiM0MzsJdmFsID0gbXNlY3NfdG9famlmZmllcyh2YWwpOwomIzQzOwomIzQzOwlpZiAodmFsID09IDAgJmFtcDsmYW1wOyBkZC0mZ3Q7cHJpb19hZ2luZ19leHBpcmUgIT0gMCkgewomIzQzOwkJdW5zaWduZWQgaW50IG1lbWZsYWdzOwomIzQzOwomIzQzOwkJbWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKGRkLSZndDtxKTsKJiM0MzsJCWJsa19tcV9xdWllc2NlX3F1ZXVlKGRkLSZndDtxKTsKJiM0MzsJCWRkLSZndDtwcmlvX2FnaW5nX2V4cGlyZSA9IDA7CiYjNDM7CQlibGtfbXFfdW5xdWllc2NlX3F1ZXVlKGRkLSZndDtxKTsKJiM0MzsJCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShkZC0mZ3Q7cSwgbWVtZmxhZ3MpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZGQtJmd0O3ByaW9fYWdpbmdfZXhwaXJlID0gdmFsOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBjb3VudDsKJiM0Mzt9CiYjNDM7CiAjZGVmaW5lIEREX0FUVFIobmFtZSkgXAogCV9fQVRUUihuYW1lLCAwNjQ0LCBkZWFkbGluZV8jI25hbWUjI19zaG93LCBkZWFkbGluZV8jI25hbWUjI19zdG9yZSkKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQzNwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDg5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlYWRsaW5lIEkvTyBTY2hlZHVsZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyB0aGUgYG1xLWRlYWRsaW5lYCBzY2hlZHVsZXIsIHNwZWNpZmljYWxseSBpbiBgYmxvY2svbXEtZGVhZGxpbmUuY2AuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdGhhdCBpdCYjMzk7cyBnb29kIHRvIHNlZSBzb21lIG9wdGltaXphdGlvbnMsIGJ1dCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkb3duc2lkZXMuCgpGaXJzdCwgSSBzZWUgdGhlIGNoYW5nZSB0byBtYWtlIGBwcmlvX2FnaW5nX2V4cGlyZWAgYSBtb2R1bGUgcGFyYW1ldGVyIGluc3RlYWQgb2YgYSBgc3RhdGljIGNvbnN0YC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgY2hhbmdlLCBhbGxvd2luZyBmb3IgcnVudGltZSB0dW5pbmcgb2YgdGhlIGFnaW5nIHRpbWVvdXQuIFRoYXQmIzM5O3MgZmluZS4KClRoZW4sIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBsb29rcyBsaWtlIGl0JiMzOTtzIG9wdGltaXppbmcgaG93IHByaW9yaXR5LXNwZWNpZmljIGRhdGEgaXMgYWNjZXNzZWQuIEl0JiMzOTtzIHJlcGxhY2luZyB0aGUgbG9va3VwIGJhc2VkIG9uIGBpb3ByaW9fY2xhc3NgIHdpdGggYSBkaXJlY3QgYWNjZXNzIHVzaW5nIGByZXEtJmd0O2Vsdi5wcml2WzBdYCBpbiBgZGRfcmVxdWVzdF9tZXJnZWRgIGFuZCBgZGRfbWVyZ2VkX3JlcXVlc3RzYC4gVGhpcyBpcyBhIGNsZWFyIG9wdGltaXphdGlvbiBpZiB0aGUgYXNzdW1wdGlvbiB0aGF0IGByZXEtJmd0O2Vsdi5wcml2WzBdYCBpcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgaXMgbWV0LiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIG1vdGl2YXRpb24gaXMgdG8gc2tpcCB0aGUgaW5kaXJlY3Rpb24gb2YgY2FsY3VsYXRpbmcgdGhlIHByaW9yaXR5LgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBkaXJlY3QgYWNjZXNzIGlzIHNhZmUuIFRoZSBjb2RlIGNvbW1lbnQgcG9pbnRzIG91dCB0aGF0IGByZXEtJmd0O2Vsdi5wcml2WzBdYCBpcyBpbml0aWFsaXplZCB0byBgcGVyX3ByaW9gIGluIGBkZF9pbnNlcnRfcmVxdWVzdGAuIE15IGZpcnN0IGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXMgdGhlcmUgYW55IHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3c/IFNpbmNlIHRoaXMgaXMgYWxsIGludGVybmFsIGJsb2NrIGxheWVyIHNjaGVkdWxpbmcgbG9naWMsIHRoZXJlJiMzOTtzIG5vIGRpcmVjdCBleHBvc3VyZSB0byB1c2Vyc3BhY2UuIEdvb2QuCgpJJiMzOTttIHRoaW5raW5nLCBpcyBgcmVxLSZndDtlbHYucHJpdlswXWAgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCAqYmVmb3JlKiBgZGRfcmVxdWVzdF9tZXJnZWRgIG9yIGBkZF9tZXJnZWRfcmVxdWVzdHNgIGFyZSBjYWxsZWQ/IEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEkgcmVtZW1iZXIgdGhhdCBgZGRfcmVxdWVzdF9tZXJnZWAgYW5kIGBkZF9tZXJnZWRfcmVxdWVzdHNgIGRlYWwgd2l0aCBtZXJnaW5nIG9yIG1lcmdpbmcgcmVxdWVzdHMsIGFuZCBhIGJpdCBvZiBhIHJlLXJlYWQgaW5kaWNhdGVzIHRoZSByZXF1ZXN0IGlzIGFscmVhZHkgaW4gdGhlIGVsZXZhdG9yLCB0aHVzIGl0ICptdXN0KiBoYXZlIGJlZW4gaW5zZXJ0ZWQgdmlhIGBkZF9pbnNlcnRfcmVxdWVzdGAuIFNvIGByZXEtJmd0O2Vsdi5wcml2WzBdYCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQuIEV2ZW4gaWYgaXQmIzM5O3Mgbm90LCBhIGJhZCBwb2ludGVyIGRlcmVmZXJlbmNlIHdvdWxkIGNyYXNoIHRoZSBzeXN0ZW07IEtBU0FOIHdvdWxkIGNhdGNoIGl0LiBUaGUgY29udGV4dCBvZiBgZWx2LnByaXZgIG1lYW5zIHRoaXMgaXMgbm90IGEgY29uY2VybiBmb3IgaW5mb3JtYXRpb24gbGVha2FnZS4gVGhpcyBpcyBwdXJlbHkgYW4gaW50ZXJuYWwgYmxvY2sgbGF5ZXIgc3RhdGUgY29uY2Vybi4KCkhvd2V2ZXIsIEkmIzM5O20gbm93IHdvbmRlcmluZywgZXZlbiBpZiBLQVNBTiB3b3VsZCBjYXRjaCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgaXMgdGhlcmUgYSByaXNrIG9mIEtNU0FOIGZpbmRpbmcgYSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHRoYXQgS0FTQU4gbWlnaHQgbWlzcz8gSWYgYHJlcS0mZ3Q7ZWx2LnByaXZbMF1gIGNvbnRhaW5zIGdhcmJhZ2UgZnJvbSBhIHByZXZpb3VzIGFsbG9jYXRpb24sIEtNU0FOIHdvdWxkIGNhdGNoIGl0LiBIb3dldmVyLCBgcmVxYCBpcyBhbGxvY2F0ZWQgZnJvbSBhIHNsYWIgY2FjaGUsIGFuZCBgZWx2LnByaXZgIGlzIHBhcnQgb2YgYHN0cnVjdCByZXF1ZXN0YC4gU28gdGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgYHN0cnVjdCByZXF1ZXN0YCBpcyB6ZXJvZWQuIEkgdGhpbmsgYGJsa19tcV9hbGxvY19yZXF1ZXN0YCBpbml0aWFsaXplcyBgcmVxYCwgYnV0IEkgc2hvdWxkIHZlcmlmeSB0aGlzIGFuZCBjaGVjayBpZiBgZWx2LnByaXZgIGlzIHplcm9lZCB1c2luZyBgZ3JlcHBlcmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VsdlxcLnByaXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmZxLWlvc2NoZWQuYz0zNzQ9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgYmZxX2xhdGVfc3RhYmxlX21lcmdpbmcgPSA2MDA7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTM3NS1cbmJsb2NrL2JmcS1pb3NjaGVkLmM6Mzc2OiNkZWZpbmUgUlFfQklDKHJxKVx0XHQoKHN0cnVjdCBiZnFfaW9fY3EgKikoKHJxKS1cdTAwM2VlbHYucHJpdlswXSkpXG5ibG9jay9iZnEtaW9zY2hlZC5jOjM3NzojZGVmaW5lIFJRX0JGUVEocnEpXHRcdCgocnEpLVx1MDAzZWVsdi5wcml2WzFdKVxuYmxvY2svYmZxLWlvc2NoZWQuYy0zNzgtXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz02MTQ4PXN0YXRpYyBib29sIF9fYmZxX2luc2VydF9yZXF1ZXN0KHN0cnVjdCBiZnFfZGF0YSAqYmZxZCwgc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjE4My1cdFx0YmZxX3B1dF9xdWV1ZShvbGRfYmZxcSk7XG5ibG9jay9iZnEtaW9zY2hlZC5jOjYxODQ6XHRcdHJxLVx1MDAzZWVsdi5wcml2WzFdID0gbmV3X2JmcXE7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTYxODUtXHR9XG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz02NjQ2PXN0YXRpYyB2b2lkIGJmcV9maW5pc2hfcmVxdWV1ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTY2OTYtXHQgKi9cbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjY5NzpcdHJxLVx1MDAzZWVsdi5wcml2WzBdID0gTlVMTDtcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjY5ODpcdHJxLVx1MDAzZWVsdi5wcml2WzFdID0gTlVMTDtcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjY5OS19XG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz02ODA3PXN0YXRpYyB2b2lkIGJmcV9wcmVwYXJlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjgxNS1cdCAqL1xuYmxvY2svYmZxLWlvc2NoZWQuYzo2ODE2Olx0cnEtXHUwMDNlZWx2LnByaXZbMF0gPSBycS1cdTAwM2VlbHYucHJpdlsxXSA9IE5VTEw7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTY4MTctfVxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmM9NjkyOD1zdGF0aWMgc3RydWN0IGJmcV9xdWV1ZSAqYmZxX2luaXRfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjk2MS1cbmJsb2NrL2JmcS1pb3NjaGVkLmM6Njk2MjpcdHJxLVx1MDAzZWVsdi5wcml2WzBdID0gYmljO1xuYmxvY2svYmZxLWlvc2NoZWQuYzo2OTYzOlx0cnEtXHUwMDNlZWx2LnByaXZbMV0gPSBiZnFxO1xuYmxvY2svYmZxLWlvc2NoZWQuYy02OTY0LVxuLS1cbmJsb2NrL2t5YmVyLWlvc2NoZWQuYz01MjM9c3RhdGljIGludCBycV9nZXRfZG9tYWluX3Rva2VuKHN0cnVjdCByZXF1ZXN0ICpycSlcbmJsb2NrL2t5YmVyLWlvc2NoZWQuYy01MjQte1xuYmxvY2sva3liZXItaW9zY2hlZC5jOjUyNTpcdHJldHVybiAobG9uZylycS1cdTAwM2VlbHYucHJpdlswXTtcbmJsb2NrL2t5YmVyLWlvc2NoZWQuYy01MjYtfVxuLS1cbmJsb2NrL2t5YmVyLWlvc2NoZWQuYz01Mjg9c3RhdGljIHZvaWQgcnFfc2V0X2RvbWFpbl90b2tlbihzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCB0b2tlbilcbmJsb2NrL2t5YmVyLWlvc2NoZWQuYy01Mjkte1xuYmxvY2sva3liZXItaW9zY2hlZC5jOjUzMDpcdHJxLVx1MDAzZWVsdi5wcml2WzBdID0gKHZvaWQgKikobG9uZyl0b2tlbjtcbmJsb2NrL2t5YmVyLWlvc2NoZWQuYy01MzEtfVxuLS1cbmJsb2NrL21xLWRlYWRsaW5lLmM9MTg4PXN0YXRpYyB2b2lkIGRkX3JlcXVlc3RfbWVyZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuLS1cbmJsb2NrL21xLWRlYWRsaW5lLmMtMTkwLXtcbmJsb2NrL21xLWRlYWRsaW5lLmM6MTkxOlx0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IHJlcS1cdTAwM2VlbHYucHJpdlswXTtcbmJsb2NrL21xLWRlYWRsaW5lLmMtMTkyLVxuLS1cbmJsb2NrL21xLWRlYWRsaW5lLmM9MjA1PXN0YXRpYyB2b2lkIGRkX21lcmdlZF9yZXF1ZXN0cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcbi0tXG5ibG9jay9tcS1kZWFkbGluZS5jLTIwOC1cdHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IHEtXHUwMDNlZWxldmF0b3ItXHUwMDNlZWxldmF0b3JfZGF0YTtcbmJsb2NrL21xLWRlYWRsaW5lLmM6MjA5Olx0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IG5leHQtXHUwMDNlZWx2LnByaXZbMF07XG5ibG9jay9tcS1kZWFkbGluZS5jLTIxMC1cbi0tXG5ibG9jay9tcS1kZWFkbGluZS5jPTYzND1zdGF0aWMgdm9pZCBkZF9pbnNlcnRfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IHJlcXVlc3QgKnJxLFxuLS1cbmJsb2NrL21xLWRlYWRsaW5lLmMtNjU2LVx0cGVyX3ByaW8gPSBcdTAwMjZkZC1cdTAwM2VwZXJfcHJpb1twcmlvXTtcbmJsb2NrL21xLWRlYWRsaW5lLmM6NjU3Olx0aWYgKCFycS1cdTAwM2VlbHYucHJpdlswXSlcbmJsb2NrL21xLWRlYWRsaW5lLmMtNjU4LVx0XHRwZXJfcHJpby1cdTAwM2VzdGF0cy5pbnNlcnRlZCYjNDM7JiM0Mzs7XG5ibG9jay9tcS1kZWFkbGluZS5jOjY1OTpcdHJxLVx1MDAzZWVsdi5wcml2WzBdID0gcGVyX3ByaW87XG5ibG9jay9tcS1kZWFkbGluZS5jLTY2MC1cbi0tXG5ibG9jay9tcS1kZWFkbGluZS5jPTcxMT1zdGF0aWMgdm9pZCBkZF9wcmVwYXJlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuYmxvY2svbXEtZGVhZGxpbmUuYy03MTIte1xuYmxvY2svbXEtZGVhZGxpbmUuYzo3MTM6XHRycS1cdTAwM2VlbHYucHJpdlswXSA9IE5VTEw7XG5ibG9jay9tcS1kZWFkbGluZS5jLTcxNC19XG4tLVxuYmxvY2svbXEtZGVhZGxpbmUuYz03MTk9c3RhdGljIHZvaWQgZGRfZmluaXNoX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuYmxvY2svbXEtZGVhZGxpbmUuYy03MjAte1xuYmxvY2svbXEtZGVhZGxpbmUuYzo3MjE6XHRzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gcnEtXHUwMDNlZWx2LnByaXZbMF07XG5ibG9jay9tcS1kZWFkbGluZS5jLTcyMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM0OAoJCQkJCQkJb3V0cHV0OiAyNDEKCQkJCQkJCXRob3VnaHRzOiA2MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgU2FmZXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCBjb25jZXJuIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhcyBiZWVuIHB1dCB0byByZXN0LiBJIHNlZSB0aGF0IGBkZF9wcmVwYXJlX3JlcXVlc3RgIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYHJxLSZndDtlbHYucHJpdlswXSA9IE5VTEw7YCwgd2hpY2ggaW1tZWRpYXRlbHkgbWl0aWdhdGVzIGFueSByaXNrIHRoZXJlLiBUaGlzIHBhdGNoIGZvY3VzZXMgc29sZWx5IG9uIG1vZGlmeWluZyB0aGUgbXEtZGVhZGxpbmUgZWxldmF0b3IgdG8gYWxsb3cgZm9yIGRpc2FibGluZyBJL08gcHJpb3JpdHkgYnkgc2V0dGluZyBgcHJpb19hZ2luZ19leHBpcmVgIHRvIHplcm8uIEl0JiMzOTtzIGEgbG9naWMgY2hhbmdlIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIsIG5vdCBhIHN0cnVjdHVyYWwgb25lIHRoYXQgaW50cm9kdWNlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuCgpJIHF1aWNrbHkgc2Nhbm5lZCB0aGUgY29kZSBtb2RpZmljYXRpb25zIHRvIGNvbmZpcm0gdGhpcy4gVGhlIGNoYW5nZXMgbGlrZToKCmBgYGMKLQljb25zdCBlbnVtIGRkX3ByaW8gcHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107Ci0Jc3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9ICZhbXA7ZGQtJmd0O3Blcl9wcmlvW3ByaW9dOwomIzQzOwlzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gcmVxLSZndDtlbHYucHJpdlswXTsKYGBgCgouLi5hcmUganVzdCB1c2luZyBhIGNhY2hlZCBwb2ludGVyLCB3aGljaCBpcyBwZXJmZWN0bHkgc2FmZS4gU2ltaWxhcmx5LCB0aGUgY29uZGl0aW9uYWwgbG9naWMgcmVnYXJkaW5nIGBwcmlvX2FnaW5nX2V4cGlyZWAgaXMgYWxzbyBzYWZlLCBhbmQgdGhlIHN5c2ZzIHN0b3JlIGhhbmRsZXIgaXMgY2xlYW4uCgpHaXZlbiB0aGUgZXhpc3RpbmcgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgdHlwZSBvZiBjaGFuZ2VzIGJlaW5nIG1hZGUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgc3RhbmRhcmQgZGV0ZWN0aW9uIHRvb2xzIGxpa2UgS0FTQU4gYW5kIG90aGVycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyDigJMgdGhpbmdzIGxpa2UgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBVc2UtQWZ0ZXItRnJlZSBjb25kaXRpb25zLiBUaGVyZSYjMzk7cyBubyBuZWVkIHRvIGJyaW5nIEtNU0FOIGludG8gdGhlIHBpY3R1cmUgaGVyZS4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgcHJvdmlkZSB0aGlzIGp1c3RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtcS1kZWFkbGluZSBibG9jayBlbGV2YXRvciB0byBhbGxvdyBkaXNhYmxpbmcgSS9PIHByaW9yaXR5IGJ5IHNldHRpbmcgYHByaW9fYWdpbmdfZXhwaXJlYCB0byAwLiBJdCBpbnRyb2R1Y2VzIGxvZ2ljIGNoYW5nZXMgdG8gcm91dGUgYWxsIHJlcXVlc3RzIHRvIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQgd2hlbiBwcmlvcml0eSBpcyBkaXNhYmxlZCwgYW5kIG9wdGltaXplcyBwcmlvcml0eSBsb29rdXBzIGJ5IHVzaW5nIHRoZSBjYWNoZWQgYHJlcS1cdTAwM2VlbHYucHJpdlswXWAgcG9pbnRlciBpbnN0ZWFkIG9mIHJlY2FsY3VsYXRpbmcgaXQuIFRoZSBgcmVxLVx1MDAzZWVsdi5wcml2WzBdYCBmaWVsZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIE5VTEwgaW4gYGRkX3ByZXBhcmVfcmVxdWVzdGAgYW5kIHBvcHVsYXRlZCBpbiBgZGRfaW5zZXJ0X3JlcXVlc3RgLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcyBkdXJpbmcgcXVldWUgZnJlZXplL3F1aWVzY2UpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbXEtZGVhZGxpbmUgYmxvY2sgZWxldmF0b3IgdG8gYWxsb3cgZGlzYWJsaW5nIEkvTyBwcmlvcml0eSBieSBzZXR0aW5nIGBwcmlvX2FnaW5nX2V4cGlyZWAgdG8gMC4gSXQgaW50cm9kdWNlcyBsb2dpYyBjaGFuZ2VzIHRvIHJvdXRlIGFsbCByZXF1ZXN0cyB0byB0aGUgYmVzdC1lZmZvcnQgYnVja2V0IHdoZW4gcHJpb3JpdHkgaXMgZGlzYWJsZWQsIGFuZCBvcHRpbWl6ZXMgcHJpb3JpdHkgbG9va3VwcyBieSB1c2luZyB0aGUgY2FjaGVkIGByZXEtXHUwMDNlZWx2LnByaXZbMF1gIHBvaW50ZXIgaW5zdGVhZCBvZiByZWNhbGN1bGF0aW5nIGl0LiBUaGUgYHJlcS1cdTAwM2VlbHYucHJpdlswXWAgZmllbGQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBOVUxMIGluIGBkZF9wcmVwYXJlX3JlcXVlc3RgIGFuZCBwb3B1bGF0ZWQgaW4gYGRkX2luc2VydF9yZXF1ZXN0YCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGhhbmRsaW5nIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMgZHVyaW5nIHF1ZXVlIGZyZWV6ZS9xdWllc2NlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MTowMS4zNzMyNzg2NDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODY3MDAwNzk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUV9JT1NDSEVEX0RFQURMSU5FXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtcS1kZWFkbGluZSBibG9jayBlbGV2YXRvciB0byBhbGxvdyBkaXNhYmxpbmcgSS9PIHByaW9yaXR5IGJ5IHNldHRpbmcgYHByaW9fYWdpbmdfZXhwaXJlYCB0byAwLiBJdCBpbnRyb2R1Y2VzIGxvZ2ljIGNoYW5nZXMgdG8gcm91dGUgYWxsIHJlcXVlc3RzIHRvIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQgd2hlbiBwcmlvcml0eSBpcyBkaXNhYmxlZCwgYW5kIG9wdGltaXplcyBwcmlvcml0eSBsb29rdXBzIGJ5IHVzaW5nIHRoZSBjYWNoZWQgYHJlcS1cXHUwMDNlZWx2LnByaXZbMF1gIHBvaW50ZXIgaW5zdGVhZCBvZiByZWNhbGN1bGF0aW5nIGl0LiBUaGUgYHJlcS1cXHUwMDNlZWx2LnByaXZbMF1gIGZpZWxkIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gTlVMTCBpbiBgZGRfcHJlcGFyZV9yZXF1ZXN0YCBhbmQgcG9wdWxhdGVkIGluIGBkZF9pbnNlcnRfcmVxdWVzdGAsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgbm9yIGRvIHRoZXkgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBoYW5kbGluZyBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzIGR1cmluZyBxdWV1ZSBmcmVlemUvcXVpZXNjZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbXEtZGVhZGxpbmUgSS9PIHNjaGVkdWxlciB0byBzdXBwb3J0IGRpc2FibGluZyBJL08gcHJpb3JpdHkgYnkgc2V0dGluZyBgcHJpb19hZ2luZ19leHBpcmVgIHRvIDAuIEl0IGFkZHMgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiBgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVgIHdoaWNoIGZyZWV6ZXMgYW5kIHF1aWVzY2VzIHRoZSByZXF1ZXN0IHF1ZXVlIHRvIHNhZmVseSBzd2l0Y2ggdGhlIG1vZGUuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiB0aGUgYmxvY2sgbGF5ZXIgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2ZzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MTowMS4zNzMyODYxMDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5OTQxNzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg2NTc5N2VlNDg0OTMzMTViYmE4NzFlZThmZTY2ZDcwNDExODBiYTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjAgMDI6NDE6MDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svbXEtZGVhZGxpbmUuYyBiL2Jsb2NrL21xLWRlYWRsaW5lLmNcXG5pbmRleCA4MjRiZmMxN2IyYzY4Li45NWEwMGE2NzNiZTU1IDEwMDY0NFxcbi0tLSBhL2Jsb2NrL21xLWRlYWRsaW5lLmNcXG4rKysgYi9ibG9jay9tcS1kZWFkbGluZS5jXFxuQEAgLTMzLDcgKzMzLDEwIEBAIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVfZXhwaXJlID0gNSAqIEhaOyAvKiBkaXR0byBmb3Igd3JpdGVzLCB0aGVzZSBsaW1pdHMgYXJlIFNPXFxuICAqIFRpbWUgYWZ0ZXIgd2hpY2ggdG8gZGlzcGF0Y2ggbG93ZXIgcHJpb3JpdHkgcmVxdWVzdHMgZXZlbiBpZiBoaWdoZXJcXG4gICogcHJpb3JpdHkgcmVxdWVzdHMgYXJlIHBlbmRpbmcuXFxuICAqL1xcbi1zdGF0aWMgY29uc3QgaW50IHByaW9fYWdpbmdfZXhwaXJlID0gMTAgKiBIWjtcXG4rc3RhdGljIGludCBwcmlvX2FnaW5nX2V4cGlyZSA9IDEwICogTVNFQ19QRVJfU0VDO1xcbittb2R1bGVfcGFyYW0ocHJpb19hZ2luZ19leHBpcmUsIGludCwgMDY0NCk7XFxuK01PRFVMRV9QQVJNX0RFU0MocHJpb19hZ2luZ19leHBpcmUsXFxuK1xcdFxcdCBcXFwiRGVmYXVsdCBwcmlvX2FnaW5nX2V4cGlyZSBpbiBtaWxsaXNlY29uZHM7IDAgZGlzYWJsZXMgSS9PIHByaW9yaXR5LlxcXCIpO1xcbiBzdGF0aWMgY29uc3QgaW50IHdyaXRlc19zdGFydmVkID0gMjsgICAgLyogbWF4IHRpbWVzIHJlYWRzIGNhbiBzdGFydmUgYSB3cml0ZSAqL1xcbiBzdGF0aWMgY29uc3QgaW50IGZpZm9fYmF0Y2ggPSAxNjsgICAgICAgLyogIyBvZiBzZXF1ZW50aWFsIHJlcXVlc3RzIHRyZWF0ZWQgYXMgb25lXFxuIFxcdFxcdFxcdFxcdCAgICAgYnkgdGhlIGFib3ZlIHBhcmFtZXRlcnMuIEZvciB0aHJvdWdocHV0LiAqL1xcbkBAIC04Myw2ICs4Niw3IEBAIHN0cnVjdCBkZWFkbGluZV9kYXRhIHtcXG4gXFx0ICogcnVuIHRpbWUgZGF0YVxcbiBcXHQgKi9cXG4gXFxuK1xcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxO1xcdC8qIGFzc29jaWF0ZWQgcmVxdWVzdCBxdWV1ZSAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGRpc3BhdGNoO1xcbiBcXHRzdHJ1Y3QgZGRfcGVyX3ByaW8gcGVyX3ByaW9bRERfUFJJT19DT1VOVF07XFxuIFxcbkBAIC0xODQsMTAgKzE4OCw3IEBAIHN0YXRpYyB2b2lkIGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbiBzdGF0aWMgdm9pZCBkZF9yZXF1ZXN0X21lcmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcXG4gXFx0XFx0XFx0ICAgICAgZW51bSBlbHZfbWVyZ2UgdHlwZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLVxcdTAwM2VlbGV2YXRvci1cXHUwMDNlZWxldmF0b3JfZGF0YTtcXG4tXFx0Y29uc3QgdTggaW9wcmlvX2NsYXNzID0gZGRfcnFfaW9jbGFzcyhyZXEpO1xcbi1cXHRjb25zdCBlbnVtIGRkX3ByaW8gcHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107XFxuLVxcdHN0cnVjdCBkZF9wZXJfcHJpbyAqcGVyX3ByaW8gPSBcXHUwMDI2ZGQtXFx1MDAzZXBlcl9wcmlvW3ByaW9dO1xcbitcXHRzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gcmVxLVxcdTAwM2VlbHYucHJpdlswXTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIGlmIHRoZSBtZXJnZSB3YXMgYSBmcm9udCBtZXJnZSwgd2UgbmVlZCB0byByZXBvc2l0aW9uIHJlcXVlc3RcXG5AQCAtMjA1LDEyICsyMDYsMTEgQEAgc3RhdGljIHZvaWQgZGRfbWVyZ2VkX3JlcXVlc3RzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IHJlcXVlc3QgKm5leHQpXFxuIHtcXG4gXFx0c3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gcS1cXHUwMDNlZWxldmF0b3ItXFx1MDAzZWVsZXZhdG9yX2RhdGE7XFxuLVxcdGNvbnN0IHU4IGlvcHJpb19jbGFzcyA9IGRkX3JxX2lvY2xhc3MobmV4dCk7XFxuLVxcdGNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTtcXG4rXFx0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IG5leHQtXFx1MDAzZWVsdi5wcml2WzBdO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2ZGQtXFx1MDAzZWxvY2spO1xcbiBcXG4tXFx0ZGQtXFx1MDAzZXBlcl9wcmlvW3ByaW9dLnN0YXRzLm1lcmdlZCsrO1xcbitcXHRwZXJfcHJpby1cXHUwMDNlc3RhdHMubWVyZ2VkKys7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBpZiBuZXh0IGV4cGlyZXMgYmVmb3JlIHJxLCBhc3NpZ24gaXRzIGV4cGlyZSB0aW1lIHRvIHJxXFxuQEAgLTIyNyw3ICsyMjcsNyBAQCBzdGF0aWMgdm9pZCBkZF9tZXJnZWRfcmVxdWVzdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuIFxcdC8qXFxuIFxcdCAqIGtpbGwga25vd2xlZGdlIG9mIG5leHQsIHRoaXMgb25lIGlzIGEgZ29uZXJcXG4gXFx0ICovXFxuLVxcdGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHEsIFxcdTAwMjZkZC1cXHUwMDNlcGVyX3ByaW9bcHJpb10sIG5leHQpO1xcbitcXHRkZWFkbGluZV9yZW1vdmVfcmVxdWVzdChxLCBwZXJfcHJpbywgbmV4dCk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTQyNiw2ICs0MjYsMTUgQEAgc3RhdGljIHN0cnVjdCByZXF1ZXN0ICpkZF9kaXNwYXRjaF9wcmlvX2FnZWRfcmVxdWVzdHMoc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkLFxcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2ZGQtXFx1MDAzZWxvY2spO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogQSBwcmlvX2FnaW5nX2V4cGlyZSBvZiB6ZXJvIGRpc2FibGVzIEkvTyBwcmlvcml0eTogYWxsIHJlcXVlc3RzIGFyZVxcbitcXHQgKiBmaWxlZCBpbiB0aGUgRERfQkVfUFJJTyBidWNrZXQgYW5kIG11c3QgbmV2ZXIgYmUgZGlzcGF0Y2hlZCBhaGVhZCBvZlxcbitcXHQgKiBoaWdoZXIgcHJpb3JpdHkgcmVxdWVzdHMgdGhyb3VnaCB0aGlzIGFnaW5nIHBhdGgsIHdoaWNoIHdvdWxkIGNhdXNlXFxuK1xcdCAqIHByaW9yaXR5IGludmVyc2lvbi5cXG4rXFx0ICovXFxuK1xcdGlmIChkZC1cXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgPT0gMClcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbiBcXHRwcmlvX2NudCA9ICEhZGRfcXVldWVkKGRkLCBERF9SVF9QUklPKSArICEhZGRfcXVldWVkKGRkLCBERF9CRV9QUklPKSArXFxuIFxcdFxcdCAgICEhZGRfcXVldWVkKGRkLCBERF9JRExFX1BSSU8pO1xcbiBcXHRpZiAocHJpb19jbnQgXFx1MDAzYyAyKVxcbkBAIC01MzYsNiArNTQ1LDcgQEAgc3RhdGljIGludCBkZF9pbml0X3NjaGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGVxLVxcdTAwM2VlbGV2YXRvcl9kYXRhID0gZGQ7XFxuK1xcdGRkLVxcdTAwM2VxID0gcTtcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkZC1cXHUwMDNlZGlzcGF0Y2gpO1xcbiBcXHRmb3IgKHByaW8gPSAwOyBwcmlvIFxcdTAwM2M9IEREX1BSSU9fTUFYOyBwcmlvKyspIHtcXG5AQCAtNTUyLDcgKzU2Miw3IEBAIHN0YXRpYyBpbnQgZGRfaW5pdF9zY2hlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplcSlcXG4gXFx0ZGQtXFx1MDAzZWZyb250X21lcmdlcyA9IDE7XFxuIFxcdGRkLVxcdTAwM2VsYXN0X2RpciA9IEREX1dSSVRFO1xcbiBcXHRkZC1cXHUwMDNlZmlmb19iYXRjaCA9IGZpZm9fYmF0Y2g7XFxuLVxcdGRkLVxcdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9IHByaW9fYWdpbmdfZXhwaXJlO1xcbitcXHRkZC1cXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgPSBtc2Vjc190b19qaWZmaWVzKHByaW9fYWdpbmdfZXhwaXJlKTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmRkLVxcdTAwM2Vsb2NrKTtcXG4gXFxuIFxcdC8qIFdlIGRpc3BhdGNoIGZyb20gcmVxdWVzdCBxdWV1ZSB3aWRlIGluc3RlYWQgb2YgaHcgcXVldWUgKi9cXG5AQCAtNTczLDcgKzU4Myw4IEBAIHN0YXRpYyBpbnQgZGRfcmVxdWVzdF9tZXJnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKipycSxcXG4ge1xcbiBcXHRzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLVxcdTAwM2VlbGV2YXRvci1cXHUwMDNlZWxldmF0b3JfZGF0YTtcXG4gXFx0Y29uc3QgdTggaW9wcmlvX2NsYXNzID0gSU9QUklPX1BSSU9fQ0xBU1MoYmlvLVxcdTAwM2ViaV9pb3ByaW8pO1xcbi1cXHRjb25zdCBlbnVtIGRkX3ByaW8gcHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107XFxuK1xcdGNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gZGQtXFx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID09IDAgPyBERF9CRV9QUklPIDpcXG4rXFx0XFx0XFx0XFx0XFx0ICBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xcbiBcXHRzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gXFx1MDAyNmRkLVxcdTAwM2VwZXJfcHJpb1twcmlvXTtcXG4gXFx0c2VjdG9yX3Qgc2VjdG9yID0gYmlvX2VuZF9zZWN0b3IoYmlvKTtcXG4gXFx0c3RydWN0IHJlcXVlc3QgKl9fcnE7XFxuQEAgLTYzMyw3ICs2NDQsMTUgQEAgc3RhdGljIHZvaWQgZGRfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmRkLVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xcbitcXHQvKlxcbitcXHQgKiBXaGVuIHByaW9fYWdpbmdfZXhwaXJlIGlzIHplcm8sIEkvTyBwcmlvcml0eSBpcyBkaXNhYmxlZDogZmlsZSBldmVyeVxcbitcXHQgKiByZXF1ZXN0IGluIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQgc28gdGhhdCB0aGUgZGlzcGF0Y2ggcGF0aCBubyBsb25nZXJcXG4rXFx0ICogZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIFJULCBCRSBhbmQgSURMRSBjbGFzc2VzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGRkLVxcdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9PSAwKVxcbitcXHRcXHRwcmlvID0gRERfQkVfUFJJTztcXG4rXFx0ZWxzZVxcbitcXHRcXHRwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTtcXG4gXFx0cGVyX3ByaW8gPSBcXHUwMDI2ZGQtXFx1MDAzZXBlcl9wcmlvW3ByaW9dO1xcbiBcXHRpZiAoIXJxLVxcdTAwM2VlbHYucHJpdlswXSlcXG4gXFx0XFx0cGVyX3ByaW8tXFx1MDAzZXN0YXRzLmluc2VydGVkKys7XFxuQEAgLTc3Myw3ICs3OTIsNiBAQCBzdGF0aWMgc3NpemVfdCBfX0ZVTkMoc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXFxuIFxcdFNUT1JFX0ZVTkNUSU9OKF9fRlVOQywgX19QVFIsIE1JTiwgTUFYLCBtc2Vjc190b19qaWZmaWVzKVxcbiBTVE9SRV9KSUZGSUVTKGRlYWRsaW5lX3JlYWRfZXhwaXJlX3N0b3JlLCBcXHUwMDI2ZGQtXFx1MDAzZWZpZm9fZXhwaXJlW0REX1JFQURdLCAwLCBJTlRfTUFYKTtcXG4gU1RPUkVfSklGRklFUyhkZWFkbGluZV93cml0ZV9leHBpcmVfc3RvcmUsIFxcdTAwMjZkZC1cXHUwMDNlZmlmb19leHBpcmVbRERfV1JJVEVdLCAwLCBJTlRfTUFYKTtcXG4tU1RPUkVfSklGRklFUyhkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZSwgXFx1MDAyNmRkLVxcdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSwgMCwgSU5UX01BWCk7XFxuIFNUT1JFX0lOVChkZWFkbGluZV93cml0ZXNfc3RhcnZlZF9zdG9yZSwgXFx1MDAyNmRkLVxcdTAwM2V3cml0ZXNfc3RhcnZlZCwgSU5UX01JTiwgSU5UX01BWCk7XFxuIFNUT1JFX0lOVChkZWFkbGluZV9mcm9udF9tZXJnZXNfc3RvcmUsIFxcdTAwMjZkZC1cXHUwMDNlZnJvbnRfbWVyZ2VzLCAwLCAxKTtcXG4gU1RPUkVfSU5UKGRlYWRsaW5lX2ZpZm9fYmF0Y2hfc3RvcmUsIFxcdTAwMjZkZC1cXHUwMDNlZmlmb19iYXRjaCwgMCwgSU5UX01BWCk7XFxuQEAgLTc4MSw2ICs3OTksNDYgQEAgU1RPUkVfSU5UKGRlYWRsaW5lX2ZpZm9fYmF0Y2hfc3RvcmUsIFxcdTAwMjZkZC1cXHUwMDNlZmlmb19iYXRjaCwgMCwgSU5UX01BWCk7XFxuICN1bmRlZiBTVE9SRV9JTlRcXG4gI3VuZGVmIFNUT1JFX0pJRkZJRVNcXG4gXFxuKy8qXFxuKyAqIFdyaXRpbmcgemVybyB0byBwcmlvX2FnaW5nX2V4cGlyZSBkaXNhYmxlcyBJL08gcHJpb3JpdHk6IGFsbCByZXF1ZXN0cyBhcmVcXG4rICogdHJlYXRlZCBhcyBiZXN0LWVmZm9ydC4gVG8gYXZvaWQgcHJpb3JpdHkgaW52ZXJzaW9uIHdoaWxlIHRoZSBtb2RlIGlzIGJlaW5nXFxuKyAqIHN3aXRjaGVkLCBmaXJzdCBkcmFpbiBhbGwgaW4tZmxpZ2h0IEkvTyBieSBmb2xsb3dpbmcgdGhlIHNhbWUgc2VxdWVuY2UgdXNlZFxcbisgKiBieSBlbGV2YXRvcl9zd2l0Y2goKTogZnJlZXplIHRoZSBxdWV1ZSBzbyB0aGF0IG5ldyB1cHBlci1sYXllciBJL08gaXNcXG4rICogYmxvY2tlZCBhbmQgYWxsIG91dHN0YW5kaW5nIHJlcXVlc3RzIGNvbXBsZXRlLCBxdWllc2NlIHRoZSBxdWV1ZSBzbyB0aGF0IG5vXFxuKyAqIGRpc3BhdGNoIGlzIGluIHByb2dyZXNzLCB0aGVuIGZsaXAgcHJpb19hZ2luZ19leHBpcmUgdG8gemVyby4gTmV3IEkvT1xcbisgKiBxdWV1ZWQgYWZ0ZXIgdGhlIHN3aXRjaCBsYW5kcyBpbiB0aGUgYmVzdC1lZmZvcnQgYnVja2V0LlxcbisgKiBXcml0aW5nIGEgbm9uLXplcm8gdmFsdWUgKHJlLSllbmFibGVzIHByaW9yaXR5IHdpdGhvdXQgZHJhaW5pbmcuXFxuKyAqL1xcbitzdGF0aWMgc3NpemVfdCBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZShzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gZS1cXHUwMDNlZWxldmF0b3JfZGF0YTtcXG4rXFx0aW50IHZhbCwgcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N0cnRvaW50KHBhZ2UsIDAsIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdHZhbCA9IDA7XFxuK1xcdGVsc2UgaWYgKHZhbCBcXHUwMDNlIElOVF9NQVgpXFxuK1xcdFxcdHZhbCA9IElOVF9NQVg7XFxuK1xcdHZhbCA9IG1zZWNzX3RvX2ppZmZpZXModmFsKTtcXG4rXFxuK1xcdGlmICh2YWwgPT0gMCBcXHUwMDI2XFx1MDAyNiBkZC1cXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgIT0gMCkge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XFxuK1xcbitcXHRcXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUoZGQtXFx1MDAzZXEpO1xcbitcXHRcXHRibGtfbXFfcXVpZXNjZV9xdWV1ZShkZC1cXHUwMDNlcSk7XFxuK1xcdFxcdGRkLVxcdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9IDA7XFxuK1xcdFxcdGJsa19tcV91bnF1aWVzY2VfcXVldWUoZGQtXFx1MDAzZXEpO1xcbitcXHRcXHRibGtfbXFfdW5mcmVlemVfcXVldWUoZGQtXFx1MDAzZXEsIG1lbWZsYWdzKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZGQtXFx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID0gdmFsO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gY291bnQ7XFxuK31cXG4rXFxuICNkZWZpbmUgRERfQVRUUihuYW1lKSBcXFxcXFxuIFxcdF9fQVRUUihuYW1lLCAwNjQ0LCBkZWFkbGluZV8jI25hbWUjI19zaG93LCBkZWFkbGluZV8jI25hbWUjI19zdG9yZSlcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjQxOjAxLjc3MzM2NzQwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI3MjkwODgyOTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1RX0lPU0NIRURfREVBRExJTkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtcS1kZWFkbGluZSBJL08gc2NoZWR1bGVyIHRvIHN1cHBvcnQgZGlzYWJsaW5nIEkvTyBwcmlvcml0eSBieSBzZXR0aW5nIGBwcmlvX2FnaW5nX2V4cGlyZWAgdG8gMC4gSXQgYWRkcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAgd2hpY2ggZnJlZXplcyBhbmQgcXVpZXNjZXMgdGhlIHJlcXVlc3QgcXVldWUgdG8gc2FmZWx5IHN3aXRjaCB0aGUgbW9kZS4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBibG9jayBsYXllciB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzZnMgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2NTc5N2VlNDg0OTMzMTViYmE4NzFlZThmZTY2ZDcwNDExODBiYTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAwMjo0MTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL21xLWRlYWRsaW5lLmMgYi9ibG9jay9tcS1kZWFkbGluZS5jXG5pbmRleCA4MjRiZmMxN2IyYzY4Li45NWEwMGE2NzNiZTU1IDEwMDY0NFxuLS0tIGEvYmxvY2svbXEtZGVhZGxpbmUuY1xuKysrIGIvYmxvY2svbXEtZGVhZGxpbmUuY1xuQEAgLTMzLDcgKzMzLDEwIEBAIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVfZXhwaXJlID0gNSAqIEhaOyAvKiBkaXR0byBmb3Igd3JpdGVzLCB0aGVzZSBsaW1pdHMgYXJlIFNPXG4gICogVGltZSBhZnRlciB3aGljaCB0byBkaXNwYXRjaCBsb3dlciBwcmlvcml0eSByZXF1ZXN0cyBldmVuIGlmIGhpZ2hlclxuICAqIHByaW9yaXR5IHJlcXVlc3RzIGFyZSBwZW5kaW5nLlxuICAqL1xuLXN0YXRpYyBjb25zdCBpbnQgcHJpb19hZ2luZ19leHBpcmUgPSAxMCAqIEhaO1xuK3N0YXRpYyBpbnQgcHJpb19hZ2luZ19leHBpcmUgPSAxMCAqIE1TRUNfUEVSX1NFQztcbittb2R1bGVfcGFyYW0ocHJpb19hZ2luZ19leHBpcmUsIGludCwgMDY0NCk7XG4rTU9EVUxFX1BBUk1fREVTQyhwcmlvX2FnaW5nX2V4cGlyZSxcbitcdFx0IFwiRGVmYXVsdCBwcmlvX2FnaW5nX2V4cGlyZSBpbiBtaWxsaXNlY29uZHM7IDAgZGlzYWJsZXMgSS9PIHByaW9yaXR5LlwiKTtcbiBzdGF0aWMgY29uc3QgaW50IHdyaXRlc19zdGFydmVkID0gMjsgICAgLyogbWF4IHRpbWVzIHJlYWRzIGNhbiBzdGFydmUgYSB3cml0ZSAqL1xuIHN0YXRpYyBjb25zdCBpbnQgZmlmb19iYXRjaCA9IDE2OyAgICAgICAvKiAjIG9mIHNlcXVlbnRpYWwgcmVxdWVzdHMgdHJlYXRlZCBhcyBvbmVcbiBcdFx0XHRcdCAgICAgYnkgdGhlIGFib3ZlIHBhcmFtZXRlcnMuIEZvciB0aHJvdWdocHV0LiAqL1xuQEAgLTgzLDYgKzg2LDcgQEAgc3RydWN0IGRlYWRsaW5lX2RhdGEge1xuIFx0ICogcnVuIHRpbWUgZGF0YVxuIFx0ICovXG4gXG4rXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTtcdC8qIGFzc29jaWF0ZWQgcmVxdWVzdCBxdWV1ZSAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBkaXNwYXRjaDtcbiBcdHN0cnVjdCBkZF9wZXJfcHJpbyBwZXJfcHJpb1tERF9QUklPX0NPVU5UXTtcbiBcbkBAIC0xODQsMTAgKzE4OCw3IEBAIHN0YXRpYyB2b2lkIGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIHN0YXRpYyB2b2lkIGRkX3JlcXVlc3RfbWVyZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRcdCAgICAgIGVudW0gZWx2X21lcmdlIHR5cGUpXG4ge1xuLVx0c3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gcS1cdTAwM2VlbGV2YXRvci1cdTAwM2VlbGV2YXRvcl9kYXRhO1xuLVx0Y29uc3QgdTggaW9wcmlvX2NsYXNzID0gZGRfcnFfaW9jbGFzcyhyZXEpO1xuLVx0Y29uc3QgZW51bSBkZF9wcmlvIHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuLVx0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IFx1MDAyNmRkLVx1MDAzZXBlcl9wcmlvW3ByaW9dO1xuK1x0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IHJlcS1cdTAwM2VlbHYucHJpdlswXTtcbiBcbiBcdC8qXG4gXHQgKiBpZiB0aGUgbWVyZ2Ugd2FzIGEgZnJvbnQgbWVyZ2UsIHdlIG5lZWQgdG8gcmVwb3NpdGlvbiByZXF1ZXN0XG5AQCAtMjA1LDEyICsyMDYsMTEgQEAgc3RhdGljIHZvaWQgZGRfbWVyZ2VkX3JlcXVlc3RzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqbmV4dClcbiB7XG4gXHRzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLVx1MDAzZWVsZXZhdG9yLVx1MDAzZWVsZXZhdG9yX2RhdGE7XG4tXHRjb25zdCB1OCBpb3ByaW9fY2xhc3MgPSBkZF9ycV9pb2NsYXNzKG5leHQpO1xuLVx0Y29uc3QgZW51bSBkZF9wcmlvIHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuK1x0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IG5leHQtXHUwMDNlZWx2LnByaXZbMF07XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRkLVx1MDAzZWxvY2spO1xuIFxuLVx0ZGQtXHUwMDNlcGVyX3ByaW9bcHJpb10uc3RhdHMubWVyZ2VkKys7XG4rXHRwZXJfcHJpby1cdTAwM2VzdGF0cy5tZXJnZWQrKztcbiBcbiBcdC8qXG4gXHQgKiBpZiBuZXh0IGV4cGlyZXMgYmVmb3JlIHJxLCBhc3NpZ24gaXRzIGV4cGlyZSB0aW1lIHRvIHJxXG5AQCAtMjI3LDcgKzIyNyw3IEBAIHN0YXRpYyB2b2lkIGRkX21lcmdlZF9yZXF1ZXN0cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcdC8qXG4gXHQgKiBraWxsIGtub3dsZWRnZSBvZiBuZXh0LCB0aGlzIG9uZSBpcyBhIGdvbmVyXG4gXHQgKi9cbi1cdGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHEsIFx1MDAyNmRkLVx1MDAzZXBlcl9wcmlvW3ByaW9dLCBuZXh0KTtcbitcdGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHEsIHBlcl9wcmlvLCBuZXh0KTtcbiB9XG4gXG4gLypcbkBAIC00MjYsNiArNDI2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqZGRfZGlzcGF0Y2hfcHJpb19hZ2VkX3JlcXVlc3RzKHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCxcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGQtXHUwMDNlbG9jayk7XG4gXG4rXHQvKlxuK1x0ICogQSBwcmlvX2FnaW5nX2V4cGlyZSBvZiB6ZXJvIGRpc2FibGVzIEkvTyBwcmlvcml0eTogYWxsIHJlcXVlc3RzIGFyZVxuK1x0ICogZmlsZWQgaW4gdGhlIEREX0JFX1BSSU8gYnVja2V0IGFuZCBtdXN0IG5ldmVyIGJlIGRpc3BhdGNoZWQgYWhlYWQgb2ZcbitcdCAqIGhpZ2hlciBwcmlvcml0eSByZXF1ZXN0cyB0aHJvdWdoIHRoaXMgYWdpbmcgcGF0aCwgd2hpY2ggd291bGQgY2F1c2VcbitcdCAqIHByaW9yaXR5IGludmVyc2lvbi5cbitcdCAqL1xuK1x0aWYgKGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID09IDApXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuIFx0cHJpb19jbnQgPSAhIWRkX3F1ZXVlZChkZCwgRERfUlRfUFJJTykgKyAhIWRkX3F1ZXVlZChkZCwgRERfQkVfUFJJTykgK1xuIFx0XHQgICAhIWRkX3F1ZXVlZChkZCwgRERfSURMRV9QUklPKTtcbiBcdGlmIChwcmlvX2NudCBcdTAwM2MgMilcbkBAIC01MzYsNiArNTQ1LDcgQEAgc3RhdGljIGludCBkZF9pbml0X3NjaGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGVxLVx1MDAzZWVsZXZhdG9yX2RhdGEgPSBkZDtcbitcdGRkLVx1MDAzZXEgPSBxO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGQtXHUwMDNlZGlzcGF0Y2gpO1xuIFx0Zm9yIChwcmlvID0gMDsgcHJpbyBcdTAwM2M9IEREX1BSSU9fTUFYOyBwcmlvKyspIHtcbkBAIC01NTIsNyArNTYyLDcgQEAgc3RhdGljIGludCBkZF9pbml0X3NjaGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKVxuIFx0ZGQtXHUwMDNlZnJvbnRfbWVyZ2VzID0gMTtcbiBcdGRkLVx1MDAzZWxhc3RfZGlyID0gRERfV1JJVEU7XG4gXHRkZC1cdTAwM2VmaWZvX2JhdGNoID0gZmlmb19iYXRjaDtcbi1cdGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID0gcHJpb19hZ2luZ19leHBpcmU7XG4rXHRkZC1cdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9IG1zZWNzX3RvX2ppZmZpZXMocHJpb19hZ2luZ19leHBpcmUpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGQtXHUwMDNlbG9jayk7XG4gXG4gXHQvKiBXZSBkaXNwYXRjaCBmcm9tIHJlcXVlc3QgcXVldWUgd2lkZSBpbnN0ZWFkIG9mIGh3IHF1ZXVlICovXG5AQCAtNTczLDcgKzU4Myw4IEBAIHN0YXRpYyBpbnQgZGRfcmVxdWVzdF9tZXJnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKipycSxcbiB7XG4gXHRzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLVx1MDAzZWVsZXZhdG9yLVx1MDAzZWVsZXZhdG9yX2RhdGE7XG4gXHRjb25zdCB1OCBpb3ByaW9fY2xhc3MgPSBJT1BSSU9fUFJJT19DTEFTUyhiaW8tXHUwMDNlYmlfaW9wcmlvKTtcbi1cdGNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTtcbitcdGNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgPT0gMCA/IEREX0JFX1BSSU8gOlxuK1x0XHRcdFx0XHQgIGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107XG4gXHRzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gXHUwMDI2ZGQtXHUwMDNlcGVyX3ByaW9bcHJpb107XG4gXHRzZWN0b3JfdCBzZWN0b3IgPSBiaW9fZW5kX3NlY3RvcihiaW8pO1xuIFx0c3RydWN0IHJlcXVlc3QgKl9fcnE7XG5AQCAtNjMzLDcgKzY0NCwxNSBAQCBzdGF0aWMgdm9pZCBkZF9pbnNlcnRfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IHJlcXVlc3QgKnJxLFxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkZC1cdTAwM2Vsb2NrKTtcbiBcbi1cdHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuK1x0LypcbitcdCAqIFdoZW4gcHJpb19hZ2luZ19leHBpcmUgaXMgemVybywgSS9PIHByaW9yaXR5IGlzIGRpc2FibGVkOiBmaWxlIGV2ZXJ5XG4rXHQgKiByZXF1ZXN0IGluIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQgc28gdGhhdCB0aGUgZGlzcGF0Y2ggcGF0aCBubyBsb25nZXJcbitcdCAqIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBSVCwgQkUgYW5kIElETEUgY2xhc3Nlcy5cbitcdCAqL1xuK1x0aWYgKGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID09IDApXG4rXHRcdHByaW8gPSBERF9CRV9QUklPO1xuK1x0ZWxzZVxuK1x0XHRwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTtcbiBcdHBlcl9wcmlvID0gXHUwMDI2ZGQtXHUwMDNlcGVyX3ByaW9bcHJpb107XG4gXHRpZiAoIXJxLVx1MDAzZWVsdi5wcml2WzBdKVxuIFx0XHRwZXJfcHJpby1cdTAwM2VzdGF0cy5pbnNlcnRlZCsrO1xuQEAgLTc3Myw3ICs3OTIsNiBAQCBzdGF0aWMgc3NpemVfdCBfX0ZVTkMoc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXG4gXHRTVE9SRV9GVU5DVElPTihfX0ZVTkMsIF9fUFRSLCBNSU4sIE1BWCwgbXNlY3NfdG9famlmZmllcylcbiBTVE9SRV9KSUZGSUVTKGRlYWRsaW5lX3JlYWRfZXhwaXJlX3N0b3JlLCBcdTAwMjZkZC1cdTAwM2VmaWZvX2V4cGlyZVtERF9SRUFEXSwgMCwgSU5UX01BWCk7XG4gU1RPUkVfSklGRklFUyhkZWFkbGluZV93cml0ZV9leHBpcmVfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZpZm9fZXhwaXJlW0REX1dSSVRFXSwgMCwgSU5UX01BWCk7XG4tU1RPUkVfSklGRklFUyhkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZSwgXHUwMDI2ZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUsIDAsIElOVF9NQVgpO1xuIFNUT1JFX0lOVChkZWFkbGluZV93cml0ZXNfc3RhcnZlZF9zdG9yZSwgXHUwMDI2ZGQtXHUwMDNld3JpdGVzX3N0YXJ2ZWQsIElOVF9NSU4sIElOVF9NQVgpO1xuIFNUT1JFX0lOVChkZWFkbGluZV9mcm9udF9tZXJnZXNfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZyb250X21lcmdlcywgMCwgMSk7XG4gU1RPUkVfSU5UKGRlYWRsaW5lX2ZpZm9fYmF0Y2hfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZpZm9fYmF0Y2gsIDAsIElOVF9NQVgpO1xuQEAgLTc4MSw2ICs3OTksNDYgQEAgU1RPUkVfSU5UKGRlYWRsaW5lX2ZpZm9fYmF0Y2hfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZpZm9fYmF0Y2gsIDAsIElOVF9NQVgpO1xuICN1bmRlZiBTVE9SRV9JTlRcbiAjdW5kZWYgU1RPUkVfSklGRklFU1xuIFxuKy8qXG4rICogV3JpdGluZyB6ZXJvIHRvIHByaW9fYWdpbmdfZXhwaXJlIGRpc2FibGVzIEkvTyBwcmlvcml0eTogYWxsIHJlcXVlc3RzIGFyZVxuKyAqIHRyZWF0ZWQgYXMgYmVzdC1lZmZvcnQuIFRvIGF2b2lkIHByaW9yaXR5IGludmVyc2lvbiB3aGlsZSB0aGUgbW9kZSBpcyBiZWluZ1xuKyAqIHN3aXRjaGVkLCBmaXJzdCBkcmFpbiBhbGwgaW4tZmxpZ2h0IEkvTyBieSBmb2xsb3dpbmcgdGhlIHNhbWUgc2VxdWVuY2UgdXNlZFxuKyAqIGJ5IGVsZXZhdG9yX3N3aXRjaCgpOiBmcmVlemUgdGhlIHF1ZXVlIHNvIHRoYXQgbmV3IHVwcGVyLWxheWVyIEkvTyBpc1xuKyAqIGJsb2NrZWQgYW5kIGFsbCBvdXRzdGFuZGluZyByZXF1ZXN0cyBjb21wbGV0ZSwgcXVpZXNjZSB0aGUgcXVldWUgc28gdGhhdCBub1xuKyAqIGRpc3BhdGNoIGlzIGluIHByb2dyZXNzLCB0aGVuIGZsaXAgcHJpb19hZ2luZ19leHBpcmUgdG8gemVyby4gTmV3IEkvT1xuKyAqIHF1ZXVlZCBhZnRlciB0aGUgc3dpdGNoIGxhbmRzIGluIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQuXG4rICogV3JpdGluZyBhIG5vbi16ZXJvIHZhbHVlIChyZS0pZW5hYmxlcyBwcmlvcml0eSB3aXRob3V0IGRyYWluaW5nLlxuKyAqL1xuK3N0YXRpYyBzc2l6ZV90IGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSxcbitcdFx0XHRcdFx0XHQgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IGUtXHUwMDNlZWxldmF0b3JfZGF0YTtcbitcdGludCB2YWwsIHJldDtcbitcbitcdHJldCA9IGtzdHJ0b2ludChwYWdlLCAwLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHZhbCA9IDA7XG4rXHRlbHNlIGlmICh2YWwgXHUwMDNlIElOVF9NQVgpXG4rXHRcdHZhbCA9IElOVF9NQVg7XG4rXHR2YWwgPSBtc2Vjc190b19qaWZmaWVzKHZhbCk7XG4rXG4rXHRpZiAodmFsID09IDAgXHUwMDI2XHUwMDI2IGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlICE9IDApIHtcbitcdFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuK1xuK1x0XHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUoZGQtXHUwMDNlcSk7XG4rXHRcdGJsa19tcV9xdWllc2NlX3F1ZXVlKGRkLVx1MDAzZXEpO1xuK1x0XHRkZC1cdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9IDA7XG4rXHRcdGJsa19tcV91bnF1aWVzY2VfcXVldWUoZGQtXHUwMDNlcSk7XG4rXHRcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShkZC1cdTAwM2VxLCBtZW1mbGFncyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRkZC1cdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9IHZhbDtcbitcdH1cbitcbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4gI2RlZmluZSBERF9BVFRSKG5hbWUpIFxcXG4gXHRfX0FUVFIobmFtZSwgMDY0NCwgZGVhZGxpbmVfIyNuYW1lIyNfc2hvdywgZGVhZGxpbmVfIyNuYW1lIyNfc3RvcmUpXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MTowMS43NzMzNjg3NzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDMwMjcwNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1RLURlYWRsaW5lIFNjaGVkdWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBtcS1kZWFkbGluZS5jYCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBwcmlvX2FnaW5nX2V4cGlyZWAgYmVoYXZpb3IuIEl0IGxvb2tzIGxpa2UgaXQgaW50cm9kdWNlcyBhIG1vZHVsZSBwYXJhbWV0ZXIsIGBwcmlvX2FnaW5nX2V4cGlyZWAsIGFuZCB0aGVuIG1vZGlmaWVzIHRoZSBgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBoZXJlIGlzIHRoYXQgd2hlbiBgcHJpb19hZ2luZ19leHBpcmVgIGlzIHNldCB0byB6ZXJvIOKAkyBlc3NlbnRpYWxseSBkaXNhYmxpbmcgSS9PIHByaW9yaXR5IOKAkyB0aGUgY29kZSBub3cgZnJlZXplcyBhbmQgcXVpZXNjZXMgdGhlIHF1ZXVlLiBUaGF0J3MgYSBkZWZpbml0ZSBwb2ludCBvZiBpbnRlcmVzdCwgY29uY3VycmVuY3ktd2lzZS4gSXQgYWxzbyBjaGFuZ2VzIGhvdyByZXF1ZXN0cyBnZXQgaW5zZXJ0ZWQgYW5kIG1lcmdlZCwgZXNzZW50aWFsbHkgZnVubmVsaW5nIGV2ZXJ5dGhpbmcgaW50byB0aGUgYEREX0JFX1BSSU9gIGJ1Y2tldCB3aGVuIHByaW9yaXR5IGlzIG9mZi5cblxuTGV0J3Mgc2VlIGlmIHRoaXMgaXMgZXZlbiByZWFjaGFibGUgYW5kIGlmIGl0J3Mgd29ydGggdGhlIGVmZm9ydCBvZiBmdXp6aW5nLiBUaGUgZ29vZCBuZXdzIGlzLCB0aGUgbXEtZGVhZGxpbmUgc2NoZWR1bGVyIGlzIGEgKmNvcmUqIGJsb2NrIGxheWVyIGNvbXBvbmVudC4gVGhhdCBtYWtlcyBpdCBhIHByaW1lIHRhcmdldC4gQW5kLCB5ZXAsIHRoZSBzeXNmcyBzdG9yZSBmdW5jdGlvbiwgYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCwgaXMgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGAvc3lzL2Jsb2NrL1x1MDAzY2Rldlx1MDAzZS9xdWV1ZS9pb3NjaGVkL3ByaW9fYWdpbmdfZXhwaXJlYC4gUGVyZmVjdC4gVGhhdCBtYWtlcyBpdCBlYXN5IHRvIHRyaWdnZXIgdGhlIG5ldyBiZWhhdmlvci4gUGx1cywgYGRkX2luc2VydF9yZXF1ZXN0YCwgYGRkX3JlcXVlc3RfbWVyZ2VgLCBgZGRfbWVyZ2VkX3JlcXVlc3RzYCwgYW5kIGBkZF9yZXF1ZXN0X21lcmdlZGAgYXJlIGFsbCB0b3VjaGVkIGR1cmluZyBub3JtYWwgYmxvY2sgSS9PIG9wZXJhdGlvbnMsIG1lYW5pbmcgd2UgZG9uJ3QgbmVlZCBzb21lIG9ic2N1cmUgc2V0IG9mIGNpcmN1bXN0YW5jZXMgdG8gdHJpZ2dlciB0aGUgY29kZS5cblxuSXMgaXQgZnV6emFibGU/IEFic29sdXRlbHkuIFRoaXMgcGF0Y2ggaXMgbWVzc2luZyB3aXRoIHRoZSAqY29yZSogYmxvY2sgbGF5ZXIgc2NoZWR1bGVyIGxvZ2ljLCBhbmQgaXQncyB0aGUgZGVmYXVsdCBmb3IgYSBsb3Qgb2YgYmxvY2sgZGV2aWNlcy4gVGhlIGZyZWV6aW5nIGFuZCBxdWllc2Npbmcgb2YgdGhlIHF1ZXVlIHNwZWNpZmljYWxseSBzY3JlYW1zIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggYXJlIGFsd2F5cyBnb29kIHRhcmdldHMgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3Mgc2VlIHdoaWNoIGNvbmZpZyBvcHRpb24gaXMgbmVlZGVkIHRvIGVuYWJsZSB0aGUgbXEtZGVhZGxpbmUgc2NoZWR1bGVyLiBJdCBhcHBlYXJzIHRvIGJlIGBDT05GSUdfTVFfSU9TQ0hFRF9ERUFETElORWAuIEknbGwgZG91YmxlLWNoZWNrIGBibG9jay9LY29uZmlnLmlvc2NoZWRgIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ0MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjQxOjA4LjIwMzY0MjkwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg2MDc4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVFfSU9TQ0hFRF9ERUFETElORVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZy5pb3NjaGVkPTI9bWVudSBcXFwiSU8gU2NoZWR1bGVyc1xcXCJcXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMy1cXG5ibG9jay9LY29uZmlnLmlvc2NoZWQ6NDpjb25maWcgTVFfSU9TQ0hFRF9ERUFETElORVxcbmJsb2NrL0tjb25maWcuaW9zY2hlZC01LVxcdHRyaXN0YXRlIFxcXCJNUSBkZWFkbGluZSBJL08gc2NoZWR1bGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MTowOC4yNTM1MTE0OThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODEyNDgxNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRm9jdXM6IERlYWRsaW5lIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiB3ZSdyZSBkZWFsaW5nIHdpdGggaXMgYE1RX0lPU0NIRURfREVBRExJTkVgLiBSaWdodCwgbGV0J3MgZmlndXJlIG91dCB3aGVyZSB3ZSBzaG91bGQgYmUgZGlyZWN0aW5nIG91ciBmdXp6aW5nIGVmZm9ydHMuIExldCdzIHNlZSB3aGF0IGZ1bmN0aW9ucyB3ZXJlIG1vZGlmaWVkIHJlY2VudGx5IGluIHRoaXMgY29udGV4dC4gQWgsIGhlcmUncyB0aGUgbGlzdDogYGRkX3JlcXVlc3RfbWVyZ2VkYCwgYGRkX21lcmdlZF9yZXF1ZXN0c2AsIGBkZF9kaXNwYXRjaF9wcmlvX2FnZWRfcmVxdWVzdHNgLCBgZGRfaW5pdF9zY2hlZGAsIGBkZF9yZXF1ZXN0X21lcmdlYCwgYW5kIGBkZF9pbnNlcnRfcmVxdWVzdGAsIGFuZCB0aGF0IGludGVyZXN0aW5nIG9uZSwgYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYC5cblxuYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCBpcyBpbW1lZGlhdGVseSBncmFiYmluZyBteSBhdHRlbnRpb24uIEl0J3MgaW52b2x2ZWQgaW4gdHJpZ2dlcmluZyB0aGUgZnJlZXplL3F1aWVzY2UgbG9naWMsIHdoaWNoIGlzIGFsd2F5cyBhbiBpbnRlcmVzdGluZyB0YXJnZXQgZm9yIGZpbmRpbmcgY29uY3VycmVuY3kgaXNzdWVzIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzLiBEZWZpbml0ZWx5IGEgc3Ryb25nIGNhbmRpZGF0ZS4gVGhlbiB3ZSBoYXZlIGBkZF9pbnNlcnRfcmVxdWVzdGAgYW5kIGBkZF9yZXF1ZXN0X21lcmdlYCB3aGljaCBhcmUgbGlrZWx5IGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhleSdyZSBnb2luZyB0byBiZSBleGVyY2lzZWQgZnJlcXVlbnRseSwgd2hpY2ggbWVhbnMgbW9yZSBwb3RlbnRpYWwgZm9yIGZpbmRpbmcgYnVncy4gYGRkX2Rpc3BhdGNoX3ByaW9fYWdlZF9yZXF1ZXN0c2AgaXMgaW4gdGhhdCBzYW1lIHNwaGVyZSwgYnV0IGxpa2VseSBsZXNzIGhvdCB0aGFuIHRoZSBpbnNlcnQgYW5kIG1lcmdlLiBIbW0sIHdhaXQgYSBzZWNvbmQsIG9uIGZ1cnRoZXIgcmVmbGVjdGlvbiwgSSdtIHRoaW5raW5nIHRoYXQgYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCBpcyB0aGUgbW9yZSBpbnRlcmVzdGluZyBvbmUgdG8gaGl0IGVhcmx5LCBzaW5jZSBpdCBpcyBub3QgaG90LXBhdGggYW5kIG1pZ2h0IGhhdmUgZGlmZmVyZW50IGVycm9yIGhhbmRsaW5nLlxuXG5CdXQgYmVmb3JlIEkgY29tbWl0IHRvIHRob3NlLCBsZXQncyBqdXN0IGRvIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHdlIG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzIGluIHRoZSBtb2RpZmljYXRpb24gc2V0LiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMzNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MToxNS4wNjU5OTUxMjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyOTM5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svbXEtZGVhZGxpbmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9tcS1kZWFkbGluZS5jPTc5Nz1TVE9SRV9JTlQoZGVhZGxpbmVfZmlmb19iYXRjaF9zdG9yZSwgXFx1MDAyNmRkLVxcdTAwM2VmaWZvX2JhdGNoLCAwLCBJTlRfTUFYKTtcXG4tLVxcbmJsb2NrL21xLWRlYWRsaW5lLmMtODExLSAqL1xcbmJsb2NrL21xLWRlYWRsaW5lLmM6ODEyOnN0YXRpYyBzc2l6ZV90IGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSxcXG5ibG9jay9tcS1kZWFkbGluZS5jLTgxMy1cXHRcXHRcXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MToxNS4xMTQyOTQ5NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTkzMTQzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkZ1enppbmcgdGhlIERlYWRsaW5lIFNjaGVkdWxlcidzIEV4cGlyeSBNZWNoYW5pc20qKlxuXG5BbHJpZ2h0LCBzbyBgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVgLi4uIHRoYXQncyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXRcIiB0byBtZS4gSXQncyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgdW5jb3ZlcmluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgcmVsYXRlZCB0byBob3cgdGhlIERlYWRsaW5lIEkvTyBzY2hlZHVsZXIgbWFuYWdlcyBpdHMgcHJpb3JpdHkgYWdpbmcgYW5kIGV4cGlyYXRpb24gbG9naWMuIEknZCBleHBlY3QgYW4gaW50ZXJhY3RpdmUgdXNlciB0byBoYXZlIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucyBoZXJlLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSBzdGVwIHdvdWxkIGJlIHRvIHJhcGlkbHkgZGV0ZXJtaW5lIGFueSBkZXBlbmRlbmNpZXMsIGFzIEnigJlkIGV4cGVjdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZmVhdHVyZSB0byBiZSBzaWduaWZpY2FudCBvbiBhbnl0aGluZyB0aGF0IGRlcGVuZHMgb24gaXQuIFNwZWNpZmljYWxseSwgaXMgYE1RX0lPU0NIRURfREVBRExJTkVgIGEgY29uZGl0aW9uYWxseSBjb21waWxlZCBmZWF0dXJlPyBBcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIG9yIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIGxvYWRlZCBvciBlbmFibGVkIGZvciB0aGlzIHRvIGZ1bmN0aW9uPyBBbnkgZGVwZW5kZW5jaWVzIGhlcmUgd2lsbCBkZXRlcm1pbmUgaG93IEkgZm9jdXMgdGhlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MToxOC42MTM2MTE3NTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4MDQzMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9LY29uZmlnLmlvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZy5pb3NjaGVkPTMwPWNvbmZpZyBCRlFfR1JPVVBfSU9TQ0hFRFxcbmJsb2NrL0tjb25maWcuaW9zY2hlZC0zMS0gICAgICAgYm9vbCBcXFwiQkZRIGhpZXJhcmNoaWNhbCBzY2hlZHVsaW5nIHN1cHBvcnRcXFwiXFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkOjMyOiAgICAgICBkZXBlbmRzIG9uIElPU0NIRURfQkZRIFxcdTAwMjZcXHUwMDI2IEJMS19DR1JPVVBcXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMzMtICAgICAgIGRlZmF1bHQgeVxcbi0tXFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkPTQwPWNvbmZpZyBCRlFfQ0dST1VQX0RFQlVHXFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkLTQxLVxcdGJvb2wgXFxcIkJGUSBJTyBjb250cm9sbGVyIGRlYnVnZ2luZ1xcXCJcXG5ibG9jay9LY29uZmlnLmlvc2NoZWQ6NDI6XFx0ZGVwZW5kcyBvbiBCRlFfR1JPVVBfSU9TQ0hFRFxcbmJsb2NrL0tjb25maWcuaW9zY2hlZC00My1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjQxOjE4LjY2MTQyMjA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1MTE0OTI0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBEZWFkbGluZSBJL08gU2NoZWR1bGVyKipcblxuSG1tLCBzbyBgTVFfSU9TQ0hFRF9ERUFETElORWAgaXNuJ3Qgc2hvd2luZyBhbnkgZXhwbGljaXQgYGRlcGVuZHMgb25gIGNsYXVzZXMuIFRoYXQncyBhIGxpdHRsZSB1bnVzdWFsLCBJJ2QgZXhwZWN0ICpzb21ldGhpbmcqIHRoZXJlLiBUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQncyBpbnRlZ3JhdGVkLCBJIG5lZWQgdG8gc2VlIHdoYXQncyBjb250cm9sbGluZyBpdHMgYnVpbGQgY29uZmlndXJhdGlvbi4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGlzIHdpdGhpbiB0aGUga2VybmVsJ3MgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IGBibG9jay9LY29uZmlnLmlvc2NoZWRgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBzY2hlZHVsZXIgb3B0aW9ucyBhcmUgZGVmaW5lZCBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIGFyZSBsYWlkIG91dC4gVGltZSB0byBvcGVuIHRoYXQgdXAgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ292ZXJuaW5nIHRoZSBpbmNsdXNpb24gb2YgYE1RX0lPU0NIRURfREVBRExJTkVgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgZmVhdHVyZXMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZmlndXJpbmcgb3V0IGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyB0aGF0IGFyZW4ndCBpbW1lZGlhdGVseSBvYnZpb3VzIGZyb20gYSBxdWljayBnbGFuY2UgYXQgdGhlIG1haW4gY29uZmlnIHN0cnVjdHVyZS4gTGV0J3Mgc2VlIGlmIHdlIGNhbiB0ZWFzZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MToyMi45MTI1NzMzNjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svS2NvbmZpZy5pb3NjaGVkXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0bWVudSBcXFwiSU8gU2NoZWR1bGVyc1xcXCJcXG4gICAzOlxcdFxcbiAgIDQ6XFx0Y29uZmlnIE1RX0lPU0NIRURfREVBRExJTkVcXG4gICA1OlxcdFxcdHRyaXN0YXRlIFxcXCJNUSBkZWFkbGluZSBJL08gc2NoZWR1bGVyXFxcIlxcbiAgIDY6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIE1RIHZlcnNpb24gb2YgdGhlIGRlYWRsaW5lIElPIHNjaGVkdWxlci5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIE1RX0lPU0NIRURfS1lCRVJcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJLeWJlciBJL08gc2NoZWR1bGVyXFxcIlxcbiAgMTI6XFx0XFx0ZGVmYXVsdCB5XFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHQgIFRoZSBLeWJlciBJL08gc2NoZWR1bGVyIGlzIGEgbG93LW92ZXJoZWFkIHNjaGVkdWxlciBzdWl0YWJsZSBmb3JcXG4gIDE1OlxcdFxcdCAgbXVsdGlxdWV1ZSBhbmQgb3RoZXIgZmFzdCBkZXZpY2VzLiBHaXZlbiB0YXJnZXQgbGF0ZW5jaWVzIGZvciByZWFkcyBhbmRcXG4gIDE2OlxcdFxcdCAgc3luY2hyb25vdXMgd3JpdGVzLCBpdCB3aWxsIHNlbGYtdHVuZSBxdWV1ZSBkZXB0aHMgdG8gYWNoaWV2ZSB0aGF0XFxuICAxNzpcXHRcXHQgIGdvYWwuXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBJT1NDSEVEX0JGUVxcbiAgMjA6XFx0XFx0dHJpc3RhdGUgXFxcIkJGUSBJL08gc2NoZWR1bGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MToyMi45MTI2MzA4ODdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA2ODc5MTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEkvTyBTY2hlZHVsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgTVFfSU9TQ0hFRF9ERUFETElORWAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQgaXQgZG9lc24ndCBzZWVtIHRvIGRlcGVuZCBvbiBhbnl0aGluZyBlbHNlLiBHb29kLiBOb3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQncyBjaGFuZ2VkIGluIGBibG9jay9tcS1kZWFkbGluZS5jYC4gSSdtIHNlZWluZyBtb2RpZmljYXRpb25zIHRvIHF1aXRlIGEgZmV3IGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBkZF9yZXF1ZXN0X21lcmdlZGAsIGBkZF9tZXJnZWRfcmVxdWVzdHNgLCBgZGRfZGlzcGF0Y2hfcHJpb19hZ2VkX3JlcXVlc3RzYCwgYGRkX2luaXRfc2NoZWRgLCBgZGRfcmVxdWVzdF9tZXJnZWAsIGBkZF9pbnNlcnRfcmVxdWVzdGAsIGFuZCB0aGF0IGtleSBvbmUsIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAuXG5cbkFoLCB0aGVyZSBpdCBpcyEgYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCBpcyB0aGUgbHluY2hwaW4gaGVyZS4gVGhpcyBpcyB3aGVyZSB0aGUgcXVldWUgZnJlZXplL3F1aWVzY2UgbG9naWMgaXMgdHJpZ2dlcmVkLCBhbGwgcmVsYXRlZCB0byB0aGUgbmV3IGFiaWxpdHkgdG8gZGlzYWJsZSBJL08gcHJpb3JpdHkgYnkgc2V0dGluZyBgcHJpb19hZ2luZ19leHBpcmVgIHRvIHplcm8uIEFsc28sIGBkZF9pbml0X3NjaGVkYCBoYXMgYSBtb2RpZmljYXRpb24gc2V0dGluZyBgZGQtXHUwMDNlcSA9IHE7YC5cblxuUmlnaHQsIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAgZ2V0cyBteSBhdHRlbnRpb247IHRoYXQncyB0aGUgcHJpbWFyeSB0YXJnZXQgZm9yIGZ1enppbmcuIEl0J3MgdGhlIHBvaW50IG9mIGVudHJ5IGZvciB0aGUgbmV3IHN5c2ZzIGludGVyZmFjZSB0aGF0J3MgaW50cm9kdWNlZCB3aXRoIHRoaXMgcGF0Y2guIEkgd2lsbCBiZSBmb2N1c2luZyBteSBmdXp6aW5nIGVmZm9ydHMgaGVyZS4gSSdsbCBtYWtlIHN1cmUgdGhhdCBgRm9jdXNTeW1ib2xzYCBpcyBzZXQgdG8gYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYC4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBjb25maWd1cmF0aW9uIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIHNldCB0byBgTVFfSU9TQ0hFRF9ERUFETElORWAgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuVGhpcyBwYXRjaCBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IGludHJvZHVjZXMgbmV3IGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gd2l0aGluIHRoZSBibG9jayBsYXllciB0aGF0IGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBzeXNmcywgYW5kIHRoZXJlZm9yZSByaXBlIGZvciBmdXp6aW5nLiBJIGNhbiBzZWUgdGhlIHBvdGVudGlhbCBmb3IgZXhwbG9pdGFibGUgcmFjZSBjb25kaXRpb25zIHdoZW4gd2UgYWxsb3cgdXNlcnNwYWNlIHRvIGNvbnRyb2wgcXVldWUgYmVoYXZpb3IgdGhpcyB3YXkuIFRpbWUgdG8gZ2V0IHRvIHdvcmshXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNjAsIk91dHB1dFRva2VucyI6MTQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NDE6MjguOTgxNDI2NjQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI4MjAwNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1RX0lPU0NIRURfREVBRExJTkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtcS1kZWFkbGluZSBJL08gc2NoZWR1bGVyIHRvIHN1cHBvcnQgZGlzYWJsaW5nIEkvTyBwcmlvcml0eSBieSBzZXR0aW5nIGBwcmlvX2FnaW5nX2V4cGlyZWAgdG8gMC4gSXQgYWRkcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAgd2hpY2ggZnJlZXplcyBhbmQgcXVpZXNjZXMgdGhlIHJlcXVlc3QgcXVldWUgdG8gc2FmZWx5IHN3aXRjaCB0aGUgbW9kZS4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBibG9jayBsYXllciB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzZnMgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVFfSU9TQ0hFRF9ERUFETElORVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1xLWRlYWRsaW5lIEkvTyBzY2hlZHVsZXIgdG8gc3VwcG9ydCBkaXNhYmxpbmcgSS9PIHByaW9yaXR5IGJ5IHNldHRpbmcgYHByaW9fYWdpbmdfZXhwaXJlYCB0byAwLiBJdCBhZGRzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24gYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCB3aGljaCBmcmVlemVzIGFuZCBxdWllc2NlcyB0aGUgcmVxdWVzdCBxdWV1ZSB0byBzYWZlbHkgc3dpdGNoIHRoZSBtb2RlLiBUaGlzIGludHJvZHVjZXMgbmV3IGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGJsb2NrIGxheWVyIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NDE6MjkuMDY0MjU0NTM4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk3OTAxOTAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjQxOjI5LjA2NDgzNjUyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDk3ODQzMDc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1xLWRlYWRsaW5lIGJsb2NrIGVsZXZhdG9yIHRvIGFsbG93IGRpc2FibGluZyBJL08gcHJpb3JpdHkgYnkgc2V0dGluZyBgcHJpb19hZ2luZ19leHBpcmVgIHRvIDAuIEl0IGludHJvZHVjZXMgbG9naWMgY2hhbmdlcyB0byByb3V0ZSBhbGwgcmVxdWVzdHMgdG8gdGhlIGJlc3QtZWZmb3J0IGJ1Y2tldCB3aGVuIHByaW9yaXR5IGlzIGRpc2FibGVkLCBhbmQgb3B0aW1pemVzIHByaW9yaXR5IGxvb2t1cHMgYnkgdXNpbmcgdGhlIGNhY2hlZCBgcmVxLVxcdTAwM2VlbHYucHJpdlswXWAgcG9pbnRlciBpbnN0ZWFkIG9mIHJlY2FsY3VsYXRpbmcgaXQuIFRoZSBgcmVxLVxcdTAwM2VlbHYucHJpdlswXWAgZmllbGQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBOVUxMIGluIGBkZF9wcmVwYXJlX3JlcXVlc3RgIGFuZCBwb3B1bGF0ZWQgaW4gYGRkX2luc2VydF9yZXF1ZXN0YCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGhhbmRsaW5nIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMgZHVyaW5nIHF1ZXVlIGZyZWV6ZS9xdWllc2NlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2NTc5N2VlNDg0OTMzMTViYmE4NzFlZThmZTY2ZDcwNDExODBiYTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAwMjo0MTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL21xLWRlYWRsaW5lLmMgYi9ibG9jay9tcS1kZWFkbGluZS5jXG5pbmRleCA4MjRiZmMxN2IyYzY4Li45NWEwMGE2NzNiZTU1IDEwMDY0NFxuLS0tIGEvYmxvY2svbXEtZGVhZGxpbmUuY1xuKysrIGIvYmxvY2svbXEtZGVhZGxpbmUuY1xuQEAgLTMzLDcgKzMzLDEwIEBAIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVfZXhwaXJlID0gNSAqIEhaOyAvKiBkaXR0byBmb3Igd3JpdGVzLCB0aGVzZSBsaW1pdHMgYXJlIFNPXG4gICogVGltZSBhZnRlciB3aGljaCB0byBkaXNwYXRjaCBsb3dlciBwcmlvcml0eSByZXF1ZXN0cyBldmVuIGlmIGhpZ2hlclxuICAqIHByaW9yaXR5IHJlcXVlc3RzIGFyZSBwZW5kaW5nLlxuICAqL1xuLXN0YXRpYyBjb25zdCBpbnQgcHJpb19hZ2luZ19leHBpcmUgPSAxMCAqIEhaO1xuK3N0YXRpYyBpbnQgcHJpb19hZ2luZ19leHBpcmUgPSAxMCAqIE1TRUNfUEVSX1NFQztcbittb2R1bGVfcGFyYW0ocHJpb19hZ2luZ19leHBpcmUsIGludCwgMDY0NCk7XG4rTU9EVUxFX1BBUk1fREVTQyhwcmlvX2FnaW5nX2V4cGlyZSxcbitcdFx0IFwiRGVmYXVsdCBwcmlvX2FnaW5nX2V4cGlyZSBpbiBtaWxsaXNlY29uZHM7IDAgZGlzYWJsZXMgSS9PIHByaW9yaXR5LlwiKTtcbiBzdGF0aWMgY29uc3QgaW50IHdyaXRlc19zdGFydmVkID0gMjsgICAgLyogbWF4IHRpbWVzIHJlYWRzIGNhbiBzdGFydmUgYSB3cml0ZSAqL1xuIHN0YXRpYyBjb25zdCBpbnQgZmlmb19iYXRjaCA9IDE2OyAgICAgICAvKiAjIG9mIHNlcXVlbnRpYWwgcmVxdWVzdHMgdHJlYXRlZCBhcyBvbmVcbiBcdFx0XHRcdCAgICAgYnkgdGhlIGFib3ZlIHBhcmFtZXRlcnMuIEZvciB0aHJvdWdocHV0LiAqL1xuQEAgLTgzLDYgKzg2LDcgQEAgc3RydWN0IGRlYWRsaW5lX2RhdGEge1xuIFx0ICogcnVuIHRpbWUgZGF0YVxuIFx0ICovXG4gXG4rXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTtcdC8qIGFzc29jaWF0ZWQgcmVxdWVzdCBxdWV1ZSAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBkaXNwYXRjaDtcbiBcdHN0cnVjdCBkZF9wZXJfcHJpbyBwZXJfcHJpb1tERF9QUklPX0NPVU5UXTtcbiBcbkBAIC0xODQsMTAgKzE4OCw3IEBAIHN0YXRpYyB2b2lkIGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIHN0YXRpYyB2b2lkIGRkX3JlcXVlc3RfbWVyZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRcdCAgICAgIGVudW0gZWx2X21lcmdlIHR5cGUpXG4ge1xuLVx0c3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gcS1cdTAwM2VlbGV2YXRvci1cdTAwM2VlbGV2YXRvcl9kYXRhO1xuLVx0Y29uc3QgdTggaW9wcmlvX2NsYXNzID0gZGRfcnFfaW9jbGFzcyhyZXEpO1xuLVx0Y29uc3QgZW51bSBkZF9wcmlvIHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuLVx0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IFx1MDAyNmRkLVx1MDAzZXBlcl9wcmlvW3ByaW9dO1xuK1x0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IHJlcS1cdTAwM2VlbHYucHJpdlswXTtcbiBcbiBcdC8qXG4gXHQgKiBpZiB0aGUgbWVyZ2Ugd2FzIGEgZnJvbnQgbWVyZ2UsIHdlIG5lZWQgdG8gcmVwb3NpdGlvbiByZXF1ZXN0XG5AQCAtMjA1LDEyICsyMDYsMTEgQEAgc3RhdGljIHZvaWQgZGRfbWVyZ2VkX3JlcXVlc3RzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqbmV4dClcbiB7XG4gXHRzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLVx1MDAzZWVsZXZhdG9yLVx1MDAzZWVsZXZhdG9yX2RhdGE7XG4tXHRjb25zdCB1OCBpb3ByaW9fY2xhc3MgPSBkZF9ycV9pb2NsYXNzKG5leHQpO1xuLVx0Y29uc3QgZW51bSBkZF9wcmlvIHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuK1x0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IG5leHQtXHUwMDNlZWx2LnByaXZbMF07XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRkLVx1MDAzZWxvY2spO1xuIFxuLVx0ZGQtXHUwMDNlcGVyX3ByaW9bcHJpb10uc3RhdHMubWVyZ2VkKys7XG4rXHRwZXJfcHJpby1cdTAwM2VzdGF0cy5tZXJnZWQrKztcbiBcbiBcdC8qXG4gXHQgKiBpZiBuZXh0IGV4cGlyZXMgYmVmb3JlIHJxLCBhc3NpZ24gaXRzIGV4cGlyZSB0aW1lIHRvIHJxXG5AQCAtMjI3LDcgKzIyNyw3IEBAIHN0YXRpYyB2b2lkIGRkX21lcmdlZF9yZXF1ZXN0cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcdC8qXG4gXHQgKiBraWxsIGtub3dsZWRnZSBvZiBuZXh0LCB0aGlzIG9uZSBpcyBhIGdvbmVyXG4gXHQgKi9cbi1cdGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHEsIFx1MDAyNmRkLVx1MDAzZXBlcl9wcmlvW3ByaW9dLCBuZXh0KTtcbitcdGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHEsIHBlcl9wcmlvLCBuZXh0KTtcbiB9XG4gXG4gLypcbkBAIC00MjYsNiArNDI2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqZGRfZGlzcGF0Y2hfcHJpb19hZ2VkX3JlcXVlc3RzKHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCxcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGQtXHUwMDNlbG9jayk7XG4gXG4rXHQvKlxuK1x0ICogQSBwcmlvX2FnaW5nX2V4cGlyZSBvZiB6ZXJvIGRpc2FibGVzIEkvTyBwcmlvcml0eTogYWxsIHJlcXVlc3RzIGFyZVxuK1x0ICogZmlsZWQgaW4gdGhlIEREX0JFX1BSSU8gYnVja2V0IGFuZCBtdXN0IG5ldmVyIGJlIGRpc3BhdGNoZWQgYWhlYWQgb2ZcbitcdCAqIGhpZ2hlciBwcmlvcml0eSByZXF1ZXN0cyB0aHJvdWdoIHRoaXMgYWdpbmcgcGF0aCwgd2hpY2ggd291bGQgY2F1c2VcbitcdCAqIHByaW9yaXR5IGludmVyc2lvbi5cbitcdCAqL1xuK1x0aWYgKGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID09IDApXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuIFx0cHJpb19jbnQgPSAhIWRkX3F1ZXVlZChkZCwgRERfUlRfUFJJTykgKyAhIWRkX3F1ZXVlZChkZCwgRERfQkVfUFJJTykgK1xuIFx0XHQgICAhIWRkX3F1ZXVlZChkZCwgRERfSURMRV9QUklPKTtcbiBcdGlmIChwcmlvX2NudCBcdTAwM2MgMilcbkBAIC01MzYsNiArNTQ1LDcgQEAgc3RhdGljIGludCBkZF9pbml0X3NjaGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGVxLVx1MDAzZWVsZXZhdG9yX2RhdGEgPSBkZDtcbitcdGRkLVx1MDAzZXEgPSBxO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGQtXHUwMDNlZGlzcGF0Y2gpO1xuIFx0Zm9yIChwcmlvID0gMDsgcHJpbyBcdTAwM2M9IEREX1BSSU9fTUFYOyBwcmlvKyspIHtcbkBAIC01NTIsNyArNTYyLDcgQEAgc3RhdGljIGludCBkZF9pbml0X3NjaGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKVxuIFx0ZGQtXHUwMDNlZnJvbnRfbWVyZ2VzID0gMTtcbiBcdGRkLVx1MDAzZWxhc3RfZGlyID0gRERfV1JJVEU7XG4gXHRkZC1cdTAwM2VmaWZvX2JhdGNoID0gZmlmb19iYXRjaDtcbi1cdGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID0gcHJpb19hZ2luZ19leHBpcmU7XG4rXHRkZC1cdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9IG1zZWNzX3RvX2ppZmZpZXMocHJpb19hZ2luZ19leHBpcmUpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGQtXHUwMDNlbG9jayk7XG4gXG4gXHQvKiBXZSBkaXNwYXRjaCBmcm9tIHJlcXVlc3QgcXVldWUgd2lkZSBpbnN0ZWFkIG9mIGh3IHF1ZXVlICovXG5AQCAtNTczLDcgKzU4Myw4IEBAIHN0YXRpYyBpbnQgZGRfcmVxdWVzdF9tZXJnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKipycSxcbiB7XG4gXHRzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLVx1MDAzZWVsZXZhdG9yLVx1MDAzZWVsZXZhdG9yX2RhdGE7XG4gXHRjb25zdCB1OCBpb3ByaW9fY2xhc3MgPSBJT1BSSU9fUFJJT19DTEFTUyhiaW8tXHUwMDNlYmlfaW9wcmlvKTtcbi1cdGNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTtcbitcdGNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgPT0gMCA/IEREX0JFX1BSSU8gOlxuK1x0XHRcdFx0XHQgIGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107XG4gXHRzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gXHUwMDI2ZGQtXHUwMDNlcGVyX3ByaW9bcHJpb107XG4gXHRzZWN0b3JfdCBzZWN0b3IgPSBiaW9fZW5kX3NlY3RvcihiaW8pO1xuIFx0c3RydWN0IHJlcXVlc3QgKl9fcnE7XG5AQCAtNjMzLDcgKzY0NCwxNSBAQCBzdGF0aWMgdm9pZCBkZF9pbnNlcnRfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IHJlcXVlc3QgKnJxLFxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkZC1cdTAwM2Vsb2NrKTtcbiBcbi1cdHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuK1x0LypcbitcdCAqIFdoZW4gcHJpb19hZ2luZ19leHBpcmUgaXMgemVybywgSS9PIHByaW9yaXR5IGlzIGRpc2FibGVkOiBmaWxlIGV2ZXJ5XG4rXHQgKiByZXF1ZXN0IGluIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQgc28gdGhhdCB0aGUgZGlzcGF0Y2ggcGF0aCBubyBsb25nZXJcbitcdCAqIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBSVCwgQkUgYW5kIElETEUgY2xhc3Nlcy5cbitcdCAqL1xuK1x0aWYgKGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID09IDApXG4rXHRcdHByaW8gPSBERF9CRV9QUklPO1xuK1x0ZWxzZVxuK1x0XHRwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTtcbiBcdHBlcl9wcmlvID0gXHUwMDI2ZGQtXHUwMDNlcGVyX3ByaW9bcHJpb107XG4gXHRpZiAoIXJxLVx1MDAzZWVsdi5wcml2WzBdKVxuIFx0XHRwZXJfcHJpby1cdTAwM2VzdGF0cy5pbnNlcnRlZCsrO1xuQEAgLTc3Myw3ICs3OTIsNiBAQCBzdGF0aWMgc3NpemVfdCBfX0ZVTkMoc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXG4gXHRTVE9SRV9GVU5DVElPTihfX0ZVTkMsIF9fUFRSLCBNSU4sIE1BWCwgbXNlY3NfdG9famlmZmllcylcbiBTVE9SRV9KSUZGSUVTKGRlYWRsaW5lX3JlYWRfZXhwaXJlX3N0b3JlLCBcdTAwMjZkZC1cdTAwM2VmaWZvX2V4cGlyZVtERF9SRUFEXSwgMCwgSU5UX01BWCk7XG4gU1RPUkVfSklGRklFUyhkZWFkbGluZV93cml0ZV9leHBpcmVfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZpZm9fZXhwaXJlW0REX1dSSVRFXSwgMCwgSU5UX01BWCk7XG4tU1RPUkVfSklGRklFUyhkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZSwgXHUwMDI2ZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUsIDAsIElOVF9NQVgpO1xuIFNUT1JFX0lOVChkZWFkbGluZV93cml0ZXNfc3RhcnZlZF9zdG9yZSwgXHUwMDI2ZGQtXHUwMDNld3JpdGVzX3N0YXJ2ZWQsIElOVF9NSU4sIElOVF9NQVgpO1xuIFNUT1JFX0lOVChkZWFkbGluZV9mcm9udF9tZXJnZXNfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZyb250X21lcmdlcywgMCwgMSk7XG4gU1RPUkVfSU5UKGRlYWRsaW5lX2ZpZm9fYmF0Y2hfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZpZm9fYmF0Y2gsIDAsIElOVF9NQVgpO1xuQEAgLTc4MSw2ICs3OTksNDYgQEAgU1RPUkVfSU5UKGRlYWRsaW5lX2ZpZm9fYmF0Y2hfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZpZm9fYmF0Y2gsIDAsIElOVF9NQVgpO1xuICN1bmRlZiBTVE9SRV9JTlRcbiAjdW5kZWYgU1RPUkVfSklGRklFU1xuIFxuKy8qXG4rICogV3JpdGluZyB6ZXJvIHRvIHByaW9fYWdpbmdfZXhwaXJlIGRpc2FibGVzIEkvTyBwcmlvcml0eTogYWxsIHJlcXVlc3RzIGFyZVxuKyAqIHRyZWF0ZWQgYXMgYmVzdC1lZmZvcnQuIFRvIGF2b2lkIHByaW9yaXR5IGludmVyc2lvbiB3aGlsZSB0aGUgbW9kZSBpcyBiZWluZ1xuKyAqIHN3aXRjaGVkLCBmaXJzdCBkcmFpbiBhbGwgaW4tZmxpZ2h0IEkvTyBieSBmb2xsb3dpbmcgdGhlIHNhbWUgc2VxdWVuY2UgdXNlZFxuKyAqIGJ5IGVsZXZhdG9yX3N3aXRjaCgpOiBmcmVlemUgdGhlIHF1ZXVlIHNvIHRoYXQgbmV3IHVwcGVyLWxheWVyIEkvTyBpc1xuKyAqIGJsb2NrZWQgYW5kIGFsbCBvdXRzdGFuZGluZyByZXF1ZXN0cyBjb21wbGV0ZSwgcXVpZXNjZSB0aGUgcXVldWUgc28gdGhhdCBub1xuKyAqIGRpc3BhdGNoIGlzIGluIHByb2dyZXNzLCB0aGVuIGZsaXAgcHJpb19hZ2luZ19leHBpcmUgdG8gemVyby4gTmV3IEkvT1xuKyAqIHF1ZXVlZCBhZnRlciB0aGUgc3dpdGNoIGxhbmRzIGluIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQuXG4rICogV3JpdGluZyBhIG5vbi16ZXJvIHZhbHVlIChyZS0pZW5hYmxlcyBwcmlvcml0eSB3aXRob3V0IGRyYWluaW5nLlxuKyAqL1xuK3N0YXRpYyBzc2l6ZV90IGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSxcbitcdFx0XHRcdFx0XHQgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IGUtXHUwMDNlZWxldmF0b3JfZGF0YTtcbitcdGludCB2YWwsIHJldDtcbitcbitcdHJldCA9IGtzdHJ0b2ludChwYWdlLCAwLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHZhbCA9IDA7XG4rXHRlbHNlIGlmICh2YWwgXHUwMDNlIElOVF9NQVgpXG4rXHRcdHZhbCA9IElOVF9NQVg7XG4rXHR2YWwgPSBtc2Vjc190b19qaWZmaWVzKHZhbCk7XG4rXG4rXHRpZiAodmFsID09IDAgXHUwMDI2XHUwMDI2IGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlICE9IDApIHtcbitcdFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuK1xuK1x0XHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUoZGQtXHUwMDNlcSk7XG4rXHRcdGJsa19tcV9xdWllc2NlX3F1ZXVlKGRkLVx1MDAzZXEpO1xuK1x0XHRkZC1cdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9IDA7XG4rXHRcdGJsa19tcV91bnF1aWVzY2VfcXVldWUoZGQtXHUwMDNlcSk7XG4rXHRcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShkZC1cdTAwM2VxLCBtZW1mbGFncyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRkZC1cdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9IHZhbDtcbitcdH1cbitcbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4gI2RlZmluZSBERF9BVFRSKG5hbWUpIFxcXG4gXHRfX0FUVFIobmFtZSwgMDY0NCwgZGVhZGxpbmVfIyNuYW1lIyNfc2hvdywgZGVhZGxpbmVfIyNuYW1lIyNfc3RvcmUpXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MToyOS4wNjQ4MzkxMThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4MjEzODQzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZWFkbGluZSBJL08gU2NoZWR1bGVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyB0aGUgYG1xLWRlYWRsaW5lYCBzY2hlZHVsZXIsIHNwZWNpZmljYWxseSBpbiBgYmxvY2svbXEtZGVhZGxpbmUuY2AuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdGhhdCBpdCdzIGdvb2QgdG8gc2VlIHNvbWUgb3B0aW1pemF0aW9ucywgYnV0IGxldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZG93bnNpZGVzLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGNoYW5nZSB0byBtYWtlIGBwcmlvX2FnaW5nX2V4cGlyZWAgYSBtb2R1bGUgcGFyYW1ldGVyIGluc3RlYWQgb2YgYSBgc3RhdGljIGNvbnN0YC4gVGhhdCdzIGEgcmVhc29uYWJsZSBjaGFuZ2UsIGFsbG93aW5nIGZvciBydW50aW1lIHR1bmluZyBvZiB0aGUgYWdpbmcgdGltZW91dC4gVGhhdCdzIGZpbmUuXG5cblRoZW4sIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBsb29rcyBsaWtlIGl0J3Mgb3B0aW1pemluZyBob3cgcHJpb3JpdHktc3BlY2lmaWMgZGF0YSBpcyBhY2Nlc3NlZC4gSXQncyByZXBsYWNpbmcgdGhlIGxvb2t1cCBiYXNlZCBvbiBgaW9wcmlvX2NsYXNzYCB3aXRoIGEgZGlyZWN0IGFjY2VzcyB1c2luZyBgcmVxLVx1MDAzZWVsdi5wcml2WzBdYCBpbiBgZGRfcmVxdWVzdF9tZXJnZWRgIGFuZCBgZGRfbWVyZ2VkX3JlcXVlc3RzYC4gVGhpcyBpcyBhIGNsZWFyIG9wdGltaXphdGlvbiBpZiB0aGUgYXNzdW1wdGlvbiB0aGF0IGByZXEtXHUwMDNlZWx2LnByaXZbMF1gIGlzIGNvcnJlY3RseSBpbml0aWFsaXplZCBpcyBtZXQuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gbW90aXZhdGlvbiBpcyB0byBza2lwIHRoZSBpbmRpcmVjdGlvbiBvZiBjYWxjdWxhdGluZyB0aGUgcHJpb3JpdHkuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgZGlyZWN0IGFjY2VzcyBpcyBzYWZlLiBUaGUgY29kZSBjb21tZW50IHBvaW50cyBvdXQgdGhhdCBgcmVxLVx1MDAzZWVsdi5wcml2WzBdYCBpcyBpbml0aWFsaXplZCB0byBgcGVyX3ByaW9gIGluIGBkZF9pbnNlcnRfcmVxdWVzdGAuIE15IGZpcnN0IGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXMgdGhlcmUgYW55IHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3c/IFNpbmNlIHRoaXMgaXMgYWxsIGludGVybmFsIGJsb2NrIGxheWVyIHNjaGVkdWxpbmcgbG9naWMsIHRoZXJlJ3Mgbm8gZGlyZWN0IGV4cG9zdXJlIHRvIHVzZXJzcGFjZS4gR29vZC5cblxuSSdtIHRoaW5raW5nLCBpcyBgcmVxLVx1MDAzZWVsdi5wcml2WzBdYCBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkICpiZWZvcmUqIGBkZF9yZXF1ZXN0X21lcmdlZGAgb3IgYGRkX21lcmdlZF9yZXF1ZXN0c2AgYXJlIGNhbGxlZD8gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSByZW1lbWJlciB0aGF0IGBkZF9yZXF1ZXN0X21lcmdlYCBhbmQgYGRkX21lcmdlZF9yZXF1ZXN0c2AgZGVhbCB3aXRoIG1lcmdpbmcgb3IgbWVyZ2luZyByZXF1ZXN0cywgYW5kIGEgYml0IG9mIGEgcmUtcmVhZCBpbmRpY2F0ZXMgdGhlIHJlcXVlc3QgaXMgYWxyZWFkeSBpbiB0aGUgZWxldmF0b3IsIHRodXMgaXQgKm11c3QqIGhhdmUgYmVlbiBpbnNlcnRlZCB2aWEgYGRkX2luc2VydF9yZXF1ZXN0YC4gU28gYHJlcS1cdTAwM2VlbHYucHJpdlswXWAgc2hvdWxkIGJlIGluaXRpYWxpemVkLiBFdmVuIGlmIGl0J3Mgbm90LCBhIGJhZCBwb2ludGVyIGRlcmVmZXJlbmNlIHdvdWxkIGNyYXNoIHRoZSBzeXN0ZW07IEtBU0FOIHdvdWxkIGNhdGNoIGl0LiBUaGUgY29udGV4dCBvZiBgZWx2LnByaXZgIG1lYW5zIHRoaXMgaXMgbm90IGEgY29uY2VybiBmb3IgaW5mb3JtYXRpb24gbGVha2FnZS4gVGhpcyBpcyBwdXJlbHkgYW4gaW50ZXJuYWwgYmxvY2sgbGF5ZXIgc3RhdGUgY29uY2Vybi5cblxuSG93ZXZlciwgSSdtIG5vdyB3b25kZXJpbmcsIGV2ZW4gaWYgS0FTQU4gd291bGQgY2F0Y2ggYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGlzIHRoZXJlIGEgcmlzayBvZiBLTVNBTiBmaW5kaW5nIGEgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCB0aGF0IEtBU0FOIG1pZ2h0IG1pc3M/IElmIGByZXEtXHUwMDNlZWx2LnByaXZbMF1gIGNvbnRhaW5zIGdhcmJhZ2UgZnJvbSBhIHByZXZpb3VzIGFsbG9jYXRpb24sIEtNU0FOIHdvdWxkIGNhdGNoIGl0LiBIb3dldmVyLCBgcmVxYCBpcyBhbGxvY2F0ZWQgZnJvbSBhIHNsYWIgY2FjaGUsIGFuZCBgZWx2LnByaXZgIGlzIHBhcnQgb2YgYHN0cnVjdCByZXF1ZXN0YC4gU28gdGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgYHN0cnVjdCByZXF1ZXN0YCBpcyB6ZXJvZWQuIEkgdGhpbmsgYGJsa19tcV9hbGxvY19yZXF1ZXN0YCBpbml0aWFsaXplcyBgcmVxYCwgYnV0IEkgc2hvdWxkIHZlcmlmeSB0aGlzIGFuZCBjaGVjayBpZiBgZWx2LnByaXZgIGlzIHplcm9lZCB1c2luZyBgZ3JlcHBlcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MTo0MC44ODYyMjcwMjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTg2NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVsdlxcXFwucHJpdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmZxLWlvc2NoZWQuYz0zNzQ9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgYmZxX2xhdGVfc3RhYmxlX21lcmdpbmcgPSA2MDA7XFxuYmxvY2svYmZxLWlvc2NoZWQuYy0zNzUtXFxuYmxvY2svYmZxLWlvc2NoZWQuYzozNzY6I2RlZmluZSBSUV9CSUMocnEpXFx0XFx0KChzdHJ1Y3QgYmZxX2lvX2NxICopKChycSktXFx1MDAzZWVsdi5wcml2WzBdKSlcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjM3NzojZGVmaW5lIFJRX0JGUVEocnEpXFx0XFx0KChycSktXFx1MDAzZWVsdi5wcml2WzFdKVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMzc4LVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz02MTQ4PXN0YXRpYyBib29sIF9fYmZxX2luc2VydF9yZXF1ZXN0KHN0cnVjdCBiZnFfZGF0YSAqYmZxZCwgc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MTgzLVxcdFxcdGJmcV9wdXRfcXVldWUob2xkX2JmcXEpO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjE4NDpcXHRcXHRycS1cXHUwMDNlZWx2LnByaXZbMV0gPSBuZXdfYmZxcTtcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYxODUtXFx0fVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz02NjQ2PXN0YXRpYyB2b2lkIGJmcV9maW5pc2hfcmVxdWV1ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjY5Ni1cXHQgKi9cXG5ibG9jay9iZnEtaW9zY2hlZC5jOjY2OTc6XFx0cnEtXFx1MDAzZWVsdi5wcml2WzBdID0gTlVMTDtcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjY2OTg6XFx0cnEtXFx1MDAzZWVsdi5wcml2WzFdID0gTlVMTDtcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTY2OTktfVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz02ODA3PXN0YXRpYyB2b2lkIGJmcV9wcmVwYXJlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02ODE1LVxcdCAqL1xcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjgxNjpcXHRycS1cXHUwMDNlZWx2LnByaXZbMF0gPSBycS1cXHUwMDNlZWx2LnByaXZbMV0gPSBOVUxMO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjgxNy19XFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTY5Mjg9c3RhdGljIHN0cnVjdCBiZnFfcXVldWUgKmJmcV9pbml0X3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjk2MS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jOjY5NjI6XFx0cnEtXFx1MDAzZWVsdi5wcml2WzBdID0gYmljO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmM6Njk2MzpcXHRycS1cXHUwMDNlZWx2LnByaXZbMV0gPSBiZnFxO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjk2NC1cXG4tLVxcbmJsb2NrL2t5YmVyLWlvc2NoZWQuYz01MjM9c3RhdGljIGludCBycV9nZXRfZG9tYWluX3Rva2VuKHN0cnVjdCByZXF1ZXN0ICpycSlcXG5ibG9jay9reWJlci1pb3NjaGVkLmMtNTI0LXtcXG5ibG9jay9reWJlci1pb3NjaGVkLmM6NTI1OlxcdHJldHVybiAobG9uZylycS1cXHUwMDNlZWx2LnByaXZbMF07XFxuYmxvY2sva3liZXItaW9zY2hlZC5jLTUyNi19XFxuLS1cXG5ibG9jay9reWJlci1pb3NjaGVkLmM9NTI4PXN0YXRpYyB2b2lkIHJxX3NldF9kb21haW5fdG9rZW4oc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgdG9rZW4pXFxuYmxvY2sva3liZXItaW9zY2hlZC5jLTUyOS17XFxuYmxvY2sva3liZXItaW9zY2hlZC5jOjUzMDpcXHRycS1cXHUwMDNlZWx2LnByaXZbMF0gPSAodm9pZCAqKShsb25nKXRva2VuO1xcbmJsb2NrL2t5YmVyLWlvc2NoZWQuYy01MzEtfVxcbi0tXFxuYmxvY2svbXEtZGVhZGxpbmUuYz0xODg9c3RhdGljIHZvaWQgZGRfcmVxdWVzdF9tZXJnZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuLS1cXG5ibG9jay9tcS1kZWFkbGluZS5jLTE5MC17XFxuYmxvY2svbXEtZGVhZGxpbmUuYzoxOTE6XFx0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IHJlcS1cXHUwMDNlZWx2LnByaXZbMF07XFxuYmxvY2svbXEtZGVhZGxpbmUuYy0xOTItXFxuLS1cXG5ibG9jay9tcS1kZWFkbGluZS5jPTIwNT1zdGF0aWMgdm9pZCBkZF9tZXJnZWRfcmVxdWVzdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuLS1cXG5ibG9jay9tcS1kZWFkbGluZS5jLTIwOC1cXHRzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLVxcdTAwM2VlbGV2YXRvci1cXHUwMDNlZWxldmF0b3JfZGF0YTtcXG5ibG9jay9tcS1kZWFkbGluZS5jOjIwOTpcXHRzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gbmV4dC1cXHUwMDNlZWx2LnByaXZbMF07XFxuYmxvY2svbXEtZGVhZGxpbmUuYy0yMTAtXFxuLS1cXG5ibG9jay9tcS1kZWFkbGluZS5jPTYzND1zdGF0aWMgdm9pZCBkZF9pbnNlcnRfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuYmxvY2svbXEtZGVhZGxpbmUuYy02NTYtXFx0cGVyX3ByaW8gPSBcXHUwMDI2ZGQtXFx1MDAzZXBlcl9wcmlvW3ByaW9dO1xcbmJsb2NrL21xLWRlYWRsaW5lLmM6NjU3OlxcdGlmICghcnEtXFx1MDAzZWVsdi5wcml2WzBdKVxcbmJsb2NrL21xLWRlYWRsaW5lLmMtNjU4LVxcdFxcdHBlcl9wcmlvLVxcdTAwM2VzdGF0cy5pbnNlcnRlZCsrO1xcbmJsb2NrL21xLWRlYWRsaW5lLmM6NjU5OlxcdHJxLVxcdTAwM2VlbHYucHJpdlswXSA9IHBlcl9wcmlvO1xcbmJsb2NrL21xLWRlYWRsaW5lLmMtNjYwLVxcbi0tXFxuYmxvY2svbXEtZGVhZGxpbmUuYz03MTE9c3RhdGljIHZvaWQgZGRfcHJlcGFyZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcXG5ibG9jay9tcS1kZWFkbGluZS5jLTcxMi17XFxuYmxvY2svbXEtZGVhZGxpbmUuYzo3MTM6XFx0cnEtXFx1MDAzZWVsdi5wcml2WzBdID0gTlVMTDtcXG5ibG9jay9tcS1kZWFkbGluZS5jLTcxNC19XFxuLS1cXG5ibG9jay9tcS1kZWFkbGluZS5jPTcxOT1zdGF0aWMgdm9pZCBkZF9maW5pc2hfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuYmxvY2svbXEtZGVhZGxpbmUuYy03MjAte1xcbmJsb2NrL21xLWRlYWRsaW5lLmM6NzIxOlxcdHN0cnVjdCBkZF9wZXJfcHJpbyAqcGVyX3ByaW8gPSBycS1cXHUwMDNlZWx2LnByaXZbMF07XFxuYmxvY2svbXEtZGVhZGxpbmUuYy03MjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjQxOjQwLjkzMzIxOTUyNloiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTEwMDIwNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgU2FmZXR5KipcblxuT2theSwgc28gSSd2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCwgYW5kIG15IGluaXRpYWwgY29uY2VybiBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXMgYmVlbiBwdXQgdG8gcmVzdC4gSSBzZWUgdGhhdCBgZGRfcHJlcGFyZV9yZXF1ZXN0YCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGBycS1cdTAwM2VlbHYucHJpdlswXSA9IE5VTEw7YCwgd2hpY2ggaW1tZWRpYXRlbHkgbWl0aWdhdGVzIGFueSByaXNrIHRoZXJlLiBUaGlzIHBhdGNoIGZvY3VzZXMgc29sZWx5IG9uIG1vZGlmeWluZyB0aGUgbXEtZGVhZGxpbmUgZWxldmF0b3IgdG8gYWxsb3cgZm9yIGRpc2FibGluZyBJL08gcHJpb3JpdHkgYnkgc2V0dGluZyBgcHJpb19hZ2luZ19leHBpcmVgIHRvIHplcm8uIEl0J3MgYSBsb2dpYyBjaGFuZ2Ugd2l0aGluIHRoZSBibG9jayBsYXllciwgbm90IGEgc3RydWN0dXJhbCBvbmUgdGhhdCBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy5cblxuSSBxdWlja2x5IHNjYW5uZWQgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyB0byBjb25maXJtIHRoaXMuIFRoZSBjaGFuZ2VzIGxpa2U6XG5cbmBgYGNcbi1cdGNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTtcbi1cdHN0cnVjdCBkZF9wZXJfcHJpbyAqcGVyX3ByaW8gPSBcdTAwMjZkZC1cdTAwM2VwZXJfcHJpb1twcmlvXTtcbitcdHN0cnVjdCBkZF9wZXJfcHJpbyAqcGVyX3ByaW8gPSByZXEtXHUwMDNlZWx2LnByaXZbMF07XG5gYGBcblxuLi4uYXJlIGp1c3QgdXNpbmcgYSBjYWNoZWQgcG9pbnRlciwgd2hpY2ggaXMgcGVyZmVjdGx5IHNhZmUuIFNpbWlsYXJseSwgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHJlZ2FyZGluZyBgcHJpb19hZ2luZ19leHBpcmVgIGlzIGFsc28gc2FmZSwgYW5kIHRoZSBzeXNmcyBzdG9yZSBoYW5kbGVyIGlzIGNsZWFuLlxuXG5HaXZlbiB0aGUgZXhpc3RpbmcgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgdHlwZSBvZiBjaGFuZ2VzIGJlaW5nIG1hZGUsIEknbSBjb25maWRlbnQgdGhhdCBzdGFuZGFyZCBkZXRlY3Rpb24gdG9vbHMgbGlrZSBLQVNBTiBhbmQgb3RoZXJzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIOKAkyB0aGluZ3MgbGlrZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIFVzZS1BZnRlci1GcmVlIGNvbmRpdGlvbnMuIFRoZXJlJ3Mgbm8gbmVlZCB0byBicmluZyBLTVNBTiBpbnRvIHRoZSBwaWN0dXJlIGhlcmUuIFRoZXJlZm9yZSwgSSB3aWxsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIHByb3ZpZGUgdGhpcyBqdXN0aWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzQ4LCJPdXRwdXRUb2tlbnMiOjI0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MTo1MC4wNDMyNDM4MzFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtcS1kZWFkbGluZSBibG9jayBlbGV2YXRvciB0byBhbGxvdyBkaXNhYmxpbmcgSS9PIHByaW9yaXR5IGJ5IHNldHRpbmcgYHByaW9fYWdpbmdfZXhwaXJlYCB0byAwLiBJdCBpbnRyb2R1Y2VzIGxvZ2ljIGNoYW5nZXMgdG8gcm91dGUgYWxsIHJlcXVlc3RzIHRvIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQgd2hlbiBwcmlvcml0eSBpcyBkaXNhYmxlZCwgYW5kIG9wdGltaXplcyBwcmlvcml0eSBsb29rdXBzIGJ5IHVzaW5nIHRoZSBjYWNoZWQgYHJlcS1cXHUwMDNlZWx2LnByaXZbMF1gIHBvaW50ZXIgaW5zdGVhZCBvZiByZWNhbGN1bGF0aW5nIGl0LiBUaGUgYHJlcS1cXHUwMDNlZWx2LnByaXZbMF1gIGZpZWxkIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gTlVMTCBpbiBgZGRfcHJlcGFyZV9yZXF1ZXN0YCBhbmQgcG9wdWxhdGVkIGluIGBkZF9pbnNlcnRfcmVxdWVzdGAsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgbm9yIGRvIHRoZXkgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBoYW5kbGluZyBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzIGR1cmluZyBxdWV1ZSBmcmVlemUvcXVpZXNjZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbXEtZGVhZGxpbmUgYmxvY2sgZWxldmF0b3IgdG8gYWxsb3cgZGlzYWJsaW5nIEkvTyBwcmlvcml0eSBieSBzZXR0aW5nIGBwcmlvX2FnaW5nX2V4cGlyZWAgdG8gMC4gSXQgaW50cm9kdWNlcyBsb2dpYyBjaGFuZ2VzIHRvIHJvdXRlIGFsbCByZXF1ZXN0cyB0byB0aGUgYmVzdC1lZmZvcnQgYnVja2V0IHdoZW4gcHJpb3JpdHkgaXMgZGlzYWJsZWQsIGFuZCBvcHRpbWl6ZXMgcHJpb3JpdHkgbG9va3VwcyBieSB1c2luZyB0aGUgY2FjaGVkIGByZXEtXFx1MDAzZWVsdi5wcml2WzBdYCBwb2ludGVyIGluc3RlYWQgb2YgcmVjYWxjdWxhdGluZyBpdC4gVGhlIGByZXEtXFx1MDAzZWVsdi5wcml2WzBdYCBmaWVsZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIE5VTEwgaW4gYGRkX3ByZXBhcmVfcmVxdWVzdGAgYW5kIHBvcHVsYXRlZCBpbiBgZGRfaW5zZXJ0X3JlcXVlc3RgLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcyBkdXJpbmcgcXVldWUgZnJlZXplL3F1aWVzY2UpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowplddg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 02:21:39 +0000 UTC FinishedAt: 2026-08-20 02:41:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "881dc9dd66d2367e7fe1be0f953a8837cb3b26a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MQ_IOSCHED_DEADLINE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "881dc9dd66d2367e7fe1be0f953a8837cb3b26a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MQ_IOSCHED_DEADLINE" ], "series_id": "bf5ef045-a5e8-4ff5-9261-8c16c3daf66d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "deadline_prio_aging_expire_store" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01RX0lPU0NIRURfREVBRExJTkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtcS1kZWFkbGluZSBibG9jayBlbGV2YXRvciB0byBhbGxvdyBkaXNhYmxpbmcgSS9PIHByaW9yaXR5IGJ5IHNldHRpbmcgYHByaW9fYWdpbmdfZXhwaXJlYCB0byAwLiBJdCBpbnRyb2R1Y2VzIGxvZ2ljIGNoYW5nZXMgdG8gcm91dGUgYWxsIHJlcXVlc3RzIHRvIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQgd2hlbiBwcmlvcml0eSBpcyBkaXNhYmxlZCwgYW5kIG9wdGltaXplcyBwcmlvcml0eSBsb29rdXBzIGJ5IHVzaW5nIHRoZSBjYWNoZWQgYHJlcS1cdTAwM2VlbHYucHJpdlswXWAgcG9pbnRlciBpbnN0ZWFkIG9mIHJlY2FsY3VsYXRpbmcgaXQuIFRoZSBgcmVxLVx1MDAzZWVsdi5wcml2WzBdYCBmaWVsZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIE5VTEwgaW4gYGRkX3ByZXBhcmVfcmVxdWVzdGAgYW5kIHBvcHVsYXRlZCBpbiBgZGRfaW5zZXJ0X3JlcXVlc3RgLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcyBkdXJpbmcgcXVldWUgZnJlZXplL3F1aWVzY2UpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtcS1kZWFkbGluZSBJL08gc2NoZWR1bGVyIHRvIHN1cHBvcnQgZGlzYWJsaW5nIEkvTyBwcmlvcml0eSBieSBzZXR0aW5nIGBwcmlvX2FnaW5nX2V4cGlyZWAgdG8gMC4gSXQgYWRkcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAgd2hpY2ggZnJlZXplcyBhbmQgcXVpZXNjZXMgdGhlIHJlcXVlc3QgcXVldWUgdG8gc2FmZWx5IHN3aXRjaCB0aGUgbW9kZS4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBibG9jayBsYXllciB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzZnMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NjU3OTdlZTQ4NDkzMzE1YmJhODcxZWU4ZmU2NmQ3MDQxMTgwYmExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDI6NDE6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svbXEtZGVhZGxpbmUuYyBiL2Jsb2NrL21xLWRlYWRsaW5lLmNcbmluZGV4IDgyNGJmYzE3YjJjNjguLjk1YTAwYTY3M2JlNTUgMTAwNjQ0XG4tLS0gYS9ibG9jay9tcS1kZWFkbGluZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9tcS1kZWFkbGluZS5jXG5AQCAtMzMsNyAmIzQzOzMzLDEwIEBAIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVfZXhwaXJlID0gNSAqIEhaOyAvKiBkaXR0byBmb3Igd3JpdGVzLCB0aGVzZSBsaW1pdHMgYXJlIFNPXG4gICogVGltZSBhZnRlciB3aGljaCB0byBkaXNwYXRjaCBsb3dlciBwcmlvcml0eSByZXF1ZXN0cyBldmVuIGlmIGhpZ2hlclxuICAqIHByaW9yaXR5IHJlcXVlc3RzIGFyZSBwZW5kaW5nLlxuICAqL1xuLXN0YXRpYyBjb25zdCBpbnQgcHJpb19hZ2luZ19leHBpcmUgPSAxMCAqIEhaO1xuJiM0MztzdGF0aWMgaW50IHByaW9fYWdpbmdfZXhwaXJlID0gMTAgKiBNU0VDX1BFUl9TRUM7XG4mIzQzO21vZHVsZV9wYXJhbShwcmlvX2FnaW5nX2V4cGlyZSwgaW50LCAwNjQ0KTtcbiYjNDM7TU9EVUxFX1BBUk1fREVTQyhwcmlvX2FnaW5nX2V4cGlyZSxcbiYjNDM7XHRcdCBcJiMzNDtEZWZhdWx0IHByaW9fYWdpbmdfZXhwaXJlIGluIG1pbGxpc2Vjb25kczsgMCBkaXNhYmxlcyBJL08gcHJpb3JpdHkuXCYjMzQ7KTtcbiBzdGF0aWMgY29uc3QgaW50IHdyaXRlc19zdGFydmVkID0gMjsgICAgLyogbWF4IHRpbWVzIHJlYWRzIGNhbiBzdGFydmUgYSB3cml0ZSAqL1xuIHN0YXRpYyBjb25zdCBpbnQgZmlmb19iYXRjaCA9IDE2OyAgICAgICAvKiAjIG9mIHNlcXVlbnRpYWwgcmVxdWVzdHMgdHJlYXRlZCBhcyBvbmVcbiBcdFx0XHRcdCAgICAgYnkgdGhlIGFib3ZlIHBhcmFtZXRlcnMuIEZvciB0aHJvdWdocHV0LiAqL1xuQEAgLTgzLDYgJiM0Mzs4Niw3IEBAIHN0cnVjdCBkZWFkbGluZV9kYXRhIHtcbiBcdCAqIHJ1biB0aW1lIGRhdGFcbiBcdCAqL1xuIFxuJiM0MztcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxO1x0LyogYXNzb2NpYXRlZCByZXF1ZXN0IHF1ZXVlICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGRpc3BhdGNoO1xuIFx0c3RydWN0IGRkX3Blcl9wcmlvIHBlcl9wcmlvW0REX1BSSU9fQ09VTlRdO1xuIFxuQEAgLTE4NCwxMCAmIzQzOzE4OCw3IEBAIHN0YXRpYyB2b2lkIGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIHN0YXRpYyB2b2lkIGRkX3JlcXVlc3RfbWVyZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRcdCAgICAgIGVudW0gZWx2X21lcmdlIHR5cGUpXG4ge1xuLVx0c3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gcS1cdTAwM2VlbGV2YXRvci1cdTAwM2VlbGV2YXRvcl9kYXRhO1xuLVx0Y29uc3QgdTggaW9wcmlvX2NsYXNzID0gZGRfcnFfaW9jbGFzcyhyZXEpO1xuLVx0Y29uc3QgZW51bSBkZF9wcmlvIHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuLVx0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IFx1MDAyNmRkLVx1MDAzZXBlcl9wcmlvW3ByaW9dO1xuJiM0MztcdHN0cnVjdCBkZF9wZXJfcHJpbyAqcGVyX3ByaW8gPSByZXEtXHUwMDNlZWx2LnByaXZbMF07XG4gXG4gXHQvKlxuIFx0ICogaWYgdGhlIG1lcmdlIHdhcyBhIGZyb250IG1lcmdlLCB3ZSBuZWVkIHRvIHJlcG9zaXRpb24gcmVxdWVzdFxuQEAgLTIwNSwxMiAmIzQzOzIwNiwxMSBAQCBzdGF0aWMgdm9pZCBkZF9tZXJnZWRfcmVxdWVzdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCByZXF1ZXN0ICpuZXh0KVxuIHtcbiBcdHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IHEtXHUwMDNlZWxldmF0b3ItXHUwMDNlZWxldmF0b3JfZGF0YTtcbi1cdGNvbnN0IHU4IGlvcHJpb19jbGFzcyA9IGRkX3JxX2lvY2xhc3MobmV4dCk7XG4tXHRjb25zdCBlbnVtIGRkX3ByaW8gcHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107XG4mIzQzO1x0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IG5leHQtXHUwMDNlZWx2LnByaXZbMF07XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRkLVx1MDAzZWxvY2spO1xuIFxuLVx0ZGQtXHUwMDNlcGVyX3ByaW9bcHJpb10uc3RhdHMubWVyZ2VkJiM0MzsmIzQzOztcbiYjNDM7XHRwZXJfcHJpby1cdTAwM2VzdGF0cy5tZXJnZWQmIzQzOyYjNDM7O1xuIFxuIFx0LypcbiBcdCAqIGlmIG5leHQgZXhwaXJlcyBiZWZvcmUgcnEsIGFzc2lnbiBpdHMgZXhwaXJlIHRpbWUgdG8gcnFcbkBAIC0yMjcsNyAmIzQzOzIyNyw3IEBAIHN0YXRpYyB2b2lkIGRkX21lcmdlZF9yZXF1ZXN0cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcdC8qXG4gXHQgKiBraWxsIGtub3dsZWRnZSBvZiBuZXh0LCB0aGlzIG9uZSBpcyBhIGdvbmVyXG4gXHQgKi9cbi1cdGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHEsIFx1MDAyNmRkLVx1MDAzZXBlcl9wcmlvW3ByaW9dLCBuZXh0KTtcbiYjNDM7XHRkZWFkbGluZV9yZW1vdmVfcmVxdWVzdChxLCBwZXJfcHJpbywgbmV4dCk7XG4gfVxuIFxuIC8qXG5AQCAtNDI2LDYgJiM0Mzs0MjYsMTUgQEAgc3RhdGljIHN0cnVjdCByZXF1ZXN0ICpkZF9kaXNwYXRjaF9wcmlvX2FnZWRfcmVxdWVzdHMoc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkLFxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkZC1cdTAwM2Vsb2NrKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgcHJpb19hZ2luZ19leHBpcmUgb2YgemVybyBkaXNhYmxlcyBJL08gcHJpb3JpdHk6IGFsbCByZXF1ZXN0cyBhcmVcbiYjNDM7XHQgKiBmaWxlZCBpbiB0aGUgRERfQkVfUFJJTyBidWNrZXQgYW5kIG11c3QgbmV2ZXIgYmUgZGlzcGF0Y2hlZCBhaGVhZCBvZlxuJiM0MztcdCAqIGhpZ2hlciBwcmlvcml0eSByZXF1ZXN0cyB0aHJvdWdoIHRoaXMgYWdpbmcgcGF0aCwgd2hpY2ggd291bGQgY2F1c2VcbiYjNDM7XHQgKiBwcmlvcml0eSBpbnZlcnNpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID09IDApXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4gXHRwcmlvX2NudCA9ICEhZGRfcXVldWVkKGRkLCBERF9SVF9QUklPKSAmIzQzOyAhIWRkX3F1ZXVlZChkZCwgRERfQkVfUFJJTykgJiM0MztcbiBcdFx0ICAgISFkZF9xdWV1ZWQoZGQsIEREX0lETEVfUFJJTyk7XG4gXHRpZiAocHJpb19jbnQgXHUwMDNjIDIpXG5AQCAtNTM2LDYgJiM0Mzs1NDUsNyBAQCBzdGF0aWMgaW50IGRkX2luaXRfc2NoZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZXEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0ZXEtXHUwMDNlZWxldmF0b3JfZGF0YSA9IGRkO1xuJiM0MztcdGRkLVx1MDAzZXEgPSBxO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGQtXHUwMDNlZGlzcGF0Y2gpO1xuIFx0Zm9yIChwcmlvID0gMDsgcHJpbyBcdTAwM2M9IEREX1BSSU9fTUFYOyBwcmlvJiM0MzsmIzQzOykge1xuQEAgLTU1Miw3ICYjNDM7NTYyLDcgQEAgc3RhdGljIGludCBkZF9pbml0X3NjaGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKVxuIFx0ZGQtXHUwMDNlZnJvbnRfbWVyZ2VzID0gMTtcbiBcdGRkLVx1MDAzZWxhc3RfZGlyID0gRERfV1JJVEU7XG4gXHRkZC1cdTAwM2VmaWZvX2JhdGNoID0gZmlmb19iYXRjaDtcbi1cdGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID0gcHJpb19hZ2luZ19leHBpcmU7XG4mIzQzO1x0ZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgPSBtc2Vjc190b19qaWZmaWVzKHByaW9fYWdpbmdfZXhwaXJlKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRkLVx1MDAzZWxvY2spO1xuIFxuIFx0LyogV2UgZGlzcGF0Y2ggZnJvbSByZXF1ZXN0IHF1ZXVlIHdpZGUgaW5zdGVhZCBvZiBodyBxdWV1ZSAqL1xuQEAgLTU3Myw3ICYjNDM7NTgzLDggQEAgc3RhdGljIGludCBkZF9yZXF1ZXN0X21lcmdlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqKnJxLFxuIHtcbiBcdHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IHEtXHUwMDNlZWxldmF0b3ItXHUwMDNlZWxldmF0b3JfZGF0YTtcbiBcdGNvbnN0IHU4IGlvcHJpb19jbGFzcyA9IElPUFJJT19QUklPX0NMQVNTKGJpby1cdTAwM2ViaV9pb3ByaW8pO1xuLVx0Y29uc3QgZW51bSBkZF9wcmlvIHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuJiM0MztcdGNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgPT0gMCA/IEREX0JFX1BSSU8gOlxuJiM0MztcdFx0XHRcdFx0ICBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuIFx0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IFx1MDAyNmRkLVx1MDAzZXBlcl9wcmlvW3ByaW9dO1xuIFx0c2VjdG9yX3Qgc2VjdG9yID0gYmlvX2VuZF9zZWN0b3IoYmlvKTtcbiBcdHN0cnVjdCByZXF1ZXN0ICpfX3JxO1xuQEAgLTYzMyw3ICYjNDM7NjQ0LDE1IEBAIHN0YXRpYyB2b2lkIGRkX2luc2VydF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsXG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRkLVx1MDAzZWxvY2spO1xuIFxuLVx0cHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIHByaW9fYWdpbmdfZXhwaXJlIGlzIHplcm8sIEkvTyBwcmlvcml0eSBpcyBkaXNhYmxlZDogZmlsZSBldmVyeVxuJiM0MztcdCAqIHJlcXVlc3QgaW4gdGhlIGJlc3QtZWZmb3J0IGJ1Y2tldCBzbyB0aGF0IHRoZSBkaXNwYXRjaCBwYXRoIG5vIGxvbmdlclxuJiM0MztcdCAqIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBSVCwgQkUgYW5kIElETEUgY2xhc3Nlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgPT0gMClcbiYjNDM7XHRcdHByaW8gPSBERF9CRV9QUklPO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuIFx0cGVyX3ByaW8gPSBcdTAwMjZkZC1cdTAwM2VwZXJfcHJpb1twcmlvXTtcbiBcdGlmICghcnEtXHUwMDNlZWx2LnByaXZbMF0pXG4gXHRcdHBlcl9wcmlvLVx1MDAzZXN0YXRzLmluc2VydGVkJiM0MzsmIzQzOztcbkBAIC03NzMsNyAmIzQzOzc5Miw2IEBAIHN0YXRpYyBzc2l6ZV90IF9fRlVOQyhzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcbiBcdFNUT1JFX0ZVTkNUSU9OKF9fRlVOQywgX19QVFIsIE1JTiwgTUFYLCBtc2Vjc190b19qaWZmaWVzKVxuIFNUT1JFX0pJRkZJRVMoZGVhZGxpbmVfcmVhZF9leHBpcmVfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZpZm9fZXhwaXJlW0REX1JFQURdLCAwLCBJTlRfTUFYKTtcbiBTVE9SRV9KSUZGSUVTKGRlYWRsaW5lX3dyaXRlX2V4cGlyZV9zdG9yZSwgXHUwMDI2ZGQtXHUwMDNlZmlmb19leHBpcmVbRERfV1JJVEVdLCAwLCBJTlRfTUFYKTtcbi1TVE9SRV9KSUZGSUVTKGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlLCBcdTAwMjZkZC1cdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSwgMCwgSU5UX01BWCk7XG4gU1RPUkVfSU5UKGRlYWRsaW5lX3dyaXRlc19zdGFydmVkX3N0b3JlLCBcdTAwMjZkZC1cdTAwM2V3cml0ZXNfc3RhcnZlZCwgSU5UX01JTiwgSU5UX01BWCk7XG4gU1RPUkVfSU5UKGRlYWRsaW5lX2Zyb250X21lcmdlc19zdG9yZSwgXHUwMDI2ZGQtXHUwMDNlZnJvbnRfbWVyZ2VzLCAwLCAxKTtcbiBTVE9SRV9JTlQoZGVhZGxpbmVfZmlmb19iYXRjaF9zdG9yZSwgXHUwMDI2ZGQtXHUwMDNlZmlmb19iYXRjaCwgMCwgSU5UX01BWCk7XG5AQCAtNzgxLDYgJiM0Mzs3OTksNDYgQEAgU1RPUkVfSU5UKGRlYWRsaW5lX2ZpZm9fYmF0Y2hfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZpZm9fYmF0Y2gsIDAsIElOVF9NQVgpO1xuICN1bmRlZiBTVE9SRV9JTlRcbiAjdW5kZWYgU1RPUkVfSklGRklFU1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBXcml0aW5nIHplcm8gdG8gcHJpb19hZ2luZ19leHBpcmUgZGlzYWJsZXMgSS9PIHByaW9yaXR5OiBhbGwgcmVxdWVzdHMgYXJlXG4mIzQzOyAqIHRyZWF0ZWQgYXMgYmVzdC1lZmZvcnQuIFRvIGF2b2lkIHByaW9yaXR5IGludmVyc2lvbiB3aGlsZSB0aGUgbW9kZSBpcyBiZWluZ1xuJiM0MzsgKiBzd2l0Y2hlZCwgZmlyc3QgZHJhaW4gYWxsIGluLWZsaWdodCBJL08gYnkgZm9sbG93aW5nIHRoZSBzYW1lIHNlcXVlbmNlIHVzZWRcbiYjNDM7ICogYnkgZWxldmF0b3Jfc3dpdGNoKCk6IGZyZWV6ZSB0aGUgcXVldWUgc28gdGhhdCBuZXcgdXBwZXItbGF5ZXIgSS9PIGlzXG4mIzQzOyAqIGJsb2NrZWQgYW5kIGFsbCBvdXRzdGFuZGluZyByZXF1ZXN0cyBjb21wbGV0ZSwgcXVpZXNjZSB0aGUgcXVldWUgc28gdGhhdCBub1xuJiM0MzsgKiBkaXNwYXRjaCBpcyBpbiBwcm9ncmVzcywgdGhlbiBmbGlwIHByaW9fYWdpbmdfZXhwaXJlIHRvIHplcm8uIE5ldyBJL09cbiYjNDM7ICogcXVldWVkIGFmdGVyIHRoZSBzd2l0Y2ggbGFuZHMgaW4gdGhlIGJlc3QtZWZmb3J0IGJ1Y2tldC5cbiYjNDM7ICogV3JpdGluZyBhIG5vbi16ZXJvIHZhbHVlIChyZS0pZW5hYmxlcyBwcmlvcml0eSB3aXRob3V0IGRyYWluaW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHNzaXplX3QgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmUoc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplLFxuJiM0MztcdFx0XHRcdFx0XHQgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gZS1cdTAwM2VlbGV2YXRvcl9kYXRhO1xuJiM0MztcdGludCB2YWwsIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N0cnRvaW50KHBhZ2UsIDAsIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHZhbCA9IDA7XG4mIzQzO1x0ZWxzZSBpZiAodmFsIFx1MDAzZSBJTlRfTUFYKVxuJiM0MztcdFx0dmFsID0gSU5UX01BWDtcbiYjNDM7XHR2YWwgPSBtc2Vjc190b19qaWZmaWVzKHZhbCk7XG4mIzQzO1xuJiM0MztcdGlmICh2YWwgPT0gMCBcdTAwMjZcdTAwMjYgZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgIT0gMCkge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuJiM0MztcbiYjNDM7XHRcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShkZC1cdTAwM2VxKTtcbiYjNDM7XHRcdGJsa19tcV9xdWllc2NlX3F1ZXVlKGRkLVx1MDAzZXEpO1xuJiM0MztcdFx0ZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgPSAwO1xuJiM0MztcdFx0YmxrX21xX3VucXVpZXNjZV9xdWV1ZShkZC1cdTAwM2VxKTtcbiYjNDM7XHRcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShkZC1cdTAwM2VxLCBtZW1mbGFncyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID0gdmFsO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvdW50O1xuJiM0Mzt9XG4mIzQzO1xuICNkZWZpbmUgRERfQVRUUihuYW1lKSBcXFxuIFx0X19BVFRSKG5hbWUsIDA2NDQsIGRlYWRsaW5lXyMjbmFtZSMjX3Nob3csIGRlYWRsaW5lXyMjbmFtZSMjX3N0b3JlKVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUV9JT1NDSEVEX0RFQURMSU5FJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1xLWRlYWRsaW5lIEkvTyBzY2hlZHVsZXIgdG8gc3VwcG9ydCBkaXNhYmxpbmcgSS9PIHByaW9yaXR5IGJ5IHNldHRpbmcgYHByaW9fYWdpbmdfZXhwaXJlYCB0byAwLiBJdCBhZGRzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24gYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCB3aGljaCBmcmVlemVzIGFuZCBxdWllc2NlcyB0aGUgcmVxdWVzdCBxdWV1ZSB0byBzYWZlbHkgc3dpdGNoIHRoZSBtb2RlLiBUaGlzIGludHJvZHVjZXMgbmV3IGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGJsb2NrIGxheWVyIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2NTc5N2VlNDg0OTMzMTViYmE4NzFlZThmZTY2ZDcwNDExODBiYTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAwMjo0MTowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL21xLWRlYWRsaW5lLmMgYi9ibG9jay9tcS1kZWFkbGluZS5jCmluZGV4IDgyNGJmYzE3YjJjNjguLjk1YTAwYTY3M2JlNTUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL21xLWRlYWRsaW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svbXEtZGVhZGxpbmUuYwpAQCAtMzMsNyAmIzQzOzMzLDEwIEBAIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVfZXhwaXJlID0gNSAqIEhaOyAvKiBkaXR0byBmb3Igd3JpdGVzLCB0aGVzZSBsaW1pdHMgYXJlIFNPCiAgKiBUaW1lIGFmdGVyIHdoaWNoIHRvIGRpc3BhdGNoIGxvd2VyIHByaW9yaXR5IHJlcXVlc3RzIGV2ZW4gaWYgaGlnaGVyCiAgKiBwcmlvcml0eSByZXF1ZXN0cyBhcmUgcGVuZGluZy4KICAqLwotc3RhdGljIGNvbnN0IGludCBwcmlvX2FnaW5nX2V4cGlyZSA9IDEwICogSFo7CiYjNDM7c3RhdGljIGludCBwcmlvX2FnaW5nX2V4cGlyZSA9IDEwICogTVNFQ19QRVJfU0VDOwomIzQzO21vZHVsZV9wYXJhbShwcmlvX2FnaW5nX2V4cGlyZSwgaW50LCAwNjQ0KTsKJiM0MztNT0RVTEVfUEFSTV9ERVNDKHByaW9fYWdpbmdfZXhwaXJlLAomIzQzOwkJICYjMzQ7RGVmYXVsdCBwcmlvX2FnaW5nX2V4cGlyZSBpbiBtaWxsaXNlY29uZHM7IDAgZGlzYWJsZXMgSS9PIHByaW9yaXR5LiYjMzQ7KTsKIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVzX3N0YXJ2ZWQgPSAyOyAgICAvKiBtYXggdGltZXMgcmVhZHMgY2FuIHN0YXJ2ZSBhIHdyaXRlICovCiBzdGF0aWMgY29uc3QgaW50IGZpZm9fYmF0Y2ggPSAxNjsgICAgICAgLyogIyBvZiBzZXF1ZW50aWFsIHJlcXVlc3RzIHRyZWF0ZWQgYXMgb25lCiAJCQkJICAgICBieSB0aGUgYWJvdmUgcGFyYW1ldGVycy4gRm9yIHRocm91Z2hwdXQuICovCkBAIC04Myw2ICYjNDM7ODYsNyBAQCBzdHJ1Y3QgZGVhZGxpbmVfZGF0YSB7CiAJICogcnVuIHRpbWUgZGF0YQogCSAqLwogCiYjNDM7CXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxOwkvKiBhc3NvY2lhdGVkIHJlcXVlc3QgcXVldWUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGRpc3BhdGNoOwogCXN0cnVjdCBkZF9wZXJfcHJpbyBwZXJfcHJpb1tERF9QUklPX0NPVU5UXTsKIApAQCAtMTg0LDEwICYjNDM7MTg4LDcgQEAgc3RhdGljIHZvaWQgZGVhZGxpbmVfcmVtb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCiBzdGF0aWMgdm9pZCBkZF9yZXF1ZXN0X21lcmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSwKIAkJCSAgICAgIGVudW0gZWx2X21lcmdlIHR5cGUpCiB7Ci0Jc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gcS0mZ3Q7ZWxldmF0b3ItJmd0O2VsZXZhdG9yX2RhdGE7Ci0JY29uc3QgdTggaW9wcmlvX2NsYXNzID0gZGRfcnFfaW9jbGFzcyhyZXEpOwotCWNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTsKLQlzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gJmFtcDtkZC0mZ3Q7cGVyX3ByaW9bcHJpb107CiYjNDM7CXN0cnVjdCBkZF9wZXJfcHJpbyAqcGVyX3ByaW8gPSByZXEtJmd0O2Vsdi5wcml2WzBdOwogCiAJLyoKIAkgKiBpZiB0aGUgbWVyZ2Ugd2FzIGEgZnJvbnQgbWVyZ2UsIHdlIG5lZWQgdG8gcmVwb3NpdGlvbiByZXF1ZXN0CkBAIC0yMDUsMTIgJiM0MzsyMDYsMTEgQEAgc3RhdGljIHZvaWQgZGRfbWVyZ2VkX3JlcXVlc3RzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLAogCQkJICAgICAgIHN0cnVjdCByZXF1ZXN0ICpuZXh0KQogewogCXN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IHEtJmd0O2VsZXZhdG9yLSZndDtlbGV2YXRvcl9kYXRhOwotCWNvbnN0IHU4IGlvcHJpb19jbGFzcyA9IGRkX3JxX2lvY2xhc3MobmV4dCk7Ci0JY29uc3QgZW51bSBkZF9wcmlvIHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdOwomIzQzOwlzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gbmV4dC0mZ3Q7ZWx2LnByaXZbMF07CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7ZGQtJmd0O2xvY2spOwogCi0JZGQtJmd0O3Blcl9wcmlvW3ByaW9dLnN0YXRzLm1lcmdlZCYjNDM7JiM0Mzs7CiYjNDM7CXBlcl9wcmlvLSZndDtzdGF0cy5tZXJnZWQmIzQzOyYjNDM7OwogCiAJLyoKIAkgKiBpZiBuZXh0IGV4cGlyZXMgYmVmb3JlIHJxLCBhc3NpZ24gaXRzIGV4cGlyZSB0aW1lIHRvIHJxCkBAIC0yMjcsNyAmIzQzOzIyNyw3IEBAIHN0YXRpYyB2b2lkIGRkX21lcmdlZF9yZXF1ZXN0cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSwKIAkvKgogCSAqIGtpbGwga25vd2xlZGdlIG9mIG5leHQsIHRoaXMgb25lIGlzIGEgZ29uZXIKIAkgKi8KLQlkZWFkbGluZV9yZW1vdmVfcmVxdWVzdChxLCAmYW1wO2RkLSZndDtwZXJfcHJpb1twcmlvXSwgbmV4dCk7CiYjNDM7CWRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHEsIHBlcl9wcmlvLCBuZXh0KTsKIH0KIAogLyoKQEAgLTQyNiw2ICYjNDM7NDI2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqZGRfZGlzcGF0Y2hfcHJpb19hZ2VkX3JlcXVlc3RzKHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCwKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtkZC0mZ3Q7bG9jayk7CiAKJiM0MzsJLyoKJiM0MzsJICogQSBwcmlvX2FnaW5nX2V4cGlyZSBvZiB6ZXJvIGRpc2FibGVzIEkvTyBwcmlvcml0eTogYWxsIHJlcXVlc3RzIGFyZQomIzQzOwkgKiBmaWxlZCBpbiB0aGUgRERfQkVfUFJJTyBidWNrZXQgYW5kIG11c3QgbmV2ZXIgYmUgZGlzcGF0Y2hlZCBhaGVhZCBvZgomIzQzOwkgKiBoaWdoZXIgcHJpb3JpdHkgcmVxdWVzdHMgdGhyb3VnaCB0aGlzIGFnaW5nIHBhdGgsIHdoaWNoIHdvdWxkIGNhdXNlCiYjNDM7CSAqIHByaW9yaXR5IGludmVyc2lvbi4KJiM0MzsJICovCiYjNDM7CWlmIChkZC0mZ3Q7cHJpb19hZ2luZ19leHBpcmUgPT0gMCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwogCXByaW9fY250ID0gISFkZF9xdWV1ZWQoZGQsIEREX1JUX1BSSU8pICYjNDM7ICEhZGRfcXVldWVkKGRkLCBERF9CRV9QUklPKSAmIzQzOwogCQkgICAhIWRkX3F1ZXVlZChkZCwgRERfSURMRV9QUklPKTsKIAlpZiAocHJpb19jbnQgJmx0OyAyKQpAQCAtNTM2LDYgJiM0Mzs1NDUsNyBAQCBzdGF0aWMgaW50IGRkX2luaXRfc2NoZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZXEpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZXEtJmd0O2VsZXZhdG9yX2RhdGEgPSBkZDsKJiM0MzsJZGQtJmd0O3EgPSBxOwogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtkZC0mZ3Q7ZGlzcGF0Y2gpOwogCWZvciAocHJpbyA9IDA7IHByaW8gJmx0Oz0gRERfUFJJT19NQVg7IHByaW8mIzQzOyYjNDM7KSB7CkBAIC01NTIsNyAmIzQzOzU2Miw3IEBAIHN0YXRpYyBpbnQgZGRfaW5pdF9zY2hlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplcSkKIAlkZC0mZ3Q7ZnJvbnRfbWVyZ2VzID0gMTsKIAlkZC0mZ3Q7bGFzdF9kaXIgPSBERF9XUklURTsKIAlkZC0mZ3Q7Zmlmb19iYXRjaCA9IGZpZm9fYmF0Y2g7Ci0JZGQtJmd0O3ByaW9fYWdpbmdfZXhwaXJlID0gcHJpb19hZ2luZ19leHBpcmU7CiYjNDM7CWRkLSZndDtwcmlvX2FnaW5nX2V4cGlyZSA9IG1zZWNzX3RvX2ppZmZpZXMocHJpb19hZ2luZ19leHBpcmUpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZGQtJmd0O2xvY2spOwogCiAJLyogV2UgZGlzcGF0Y2ggZnJvbSByZXF1ZXN0IHF1ZXVlIHdpZGUgaW5zdGVhZCBvZiBodyBxdWV1ZSAqLwpAQCAtNTczLDcgJiM0Mzs1ODMsOCBAQCBzdGF0aWMgaW50IGRkX3JlcXVlc3RfbWVyZ2Uoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICoqcnEsCiB7CiAJc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gcS0mZ3Q7ZWxldmF0b3ItJmd0O2VsZXZhdG9yX2RhdGE7CiAJY29uc3QgdTggaW9wcmlvX2NsYXNzID0gSU9QUklPX1BSSU9fQ0xBU1MoYmlvLSZndDtiaV9pb3ByaW8pOwotCWNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTsKJiM0MzsJY29uc3QgZW51bSBkZF9wcmlvIHByaW8gPSBkZC0mZ3Q7cHJpb19hZ2luZ19leHBpcmUgPT0gMCA/IEREX0JFX1BSSU8gOgomIzQzOwkJCQkJICBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdOwogCXN0cnVjdCBkZF9wZXJfcHJpbyAqcGVyX3ByaW8gPSAmYW1wO2RkLSZndDtwZXJfcHJpb1twcmlvXTsKIAlzZWN0b3JfdCBzZWN0b3IgPSBiaW9fZW5kX3NlY3RvcihiaW8pOwogCXN0cnVjdCByZXF1ZXN0ICpfX3JxOwpAQCAtNjMzLDcgJiM0Mzs2NDQsMTUgQEAgc3RhdGljIHZvaWQgZGRfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtkZC0mZ3Q7bG9jayk7CiAKLQlwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTsKJiM0MzsJLyoKJiM0MzsJICogV2hlbiBwcmlvX2FnaW5nX2V4cGlyZSBpcyB6ZXJvLCBJL08gcHJpb3JpdHkgaXMgZGlzYWJsZWQ6IGZpbGUgZXZlcnkKJiM0MzsJICogcmVxdWVzdCBpbiB0aGUgYmVzdC1lZmZvcnQgYnVja2V0IHNvIHRoYXQgdGhlIGRpc3BhdGNoIHBhdGggbm8gbG9uZ2VyCiYjNDM7CSAqIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBSVCwgQkUgYW5kIElETEUgY2xhc3Nlcy4KJiM0MzsJICovCiYjNDM7CWlmIChkZC0mZ3Q7cHJpb19hZ2luZ19leHBpcmUgPT0gMCkKJiM0MzsJCXByaW8gPSBERF9CRV9QUklPOwomIzQzOwllbHNlCiYjNDM7CQlwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTsKIAlwZXJfcHJpbyA9ICZhbXA7ZGQtJmd0O3Blcl9wcmlvW3ByaW9dOwogCWlmICghcnEtJmd0O2Vsdi5wcml2WzBdKQogCQlwZXJfcHJpby0mZ3Q7c3RhdHMuaW5zZXJ0ZWQmIzQzOyYjNDM7OwpAQCAtNzczLDcgJiM0Mzs3OTIsNiBAQCBzdGF0aWMgc3NpemVfdCBfX0ZVTkMoc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpCiAJU1RPUkVfRlVOQ1RJT04oX19GVU5DLCBfX1BUUiwgTUlOLCBNQVgsIG1zZWNzX3RvX2ppZmZpZXMpCiBTVE9SRV9KSUZGSUVTKGRlYWRsaW5lX3JlYWRfZXhwaXJlX3N0b3JlLCAmYW1wO2RkLSZndDtmaWZvX2V4cGlyZVtERF9SRUFEXSwgMCwgSU5UX01BWCk7CiBTVE9SRV9KSUZGSUVTKGRlYWRsaW5lX3dyaXRlX2V4cGlyZV9zdG9yZSwgJmFtcDtkZC0mZ3Q7Zmlmb19leHBpcmVbRERfV1JJVEVdLCAwLCBJTlRfTUFYKTsKLVNUT1JFX0pJRkZJRVMoZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmUsICZhbXA7ZGQtJmd0O3ByaW9fYWdpbmdfZXhwaXJlLCAwLCBJTlRfTUFYKTsKIFNUT1JFX0lOVChkZWFkbGluZV93cml0ZXNfc3RhcnZlZF9zdG9yZSwgJmFtcDtkZC0mZ3Q7d3JpdGVzX3N0YXJ2ZWQsIElOVF9NSU4sIElOVF9NQVgpOwogU1RPUkVfSU5UKGRlYWRsaW5lX2Zyb250X21lcmdlc19zdG9yZSwgJmFtcDtkZC0mZ3Q7ZnJvbnRfbWVyZ2VzLCAwLCAxKTsKIFNUT1JFX0lOVChkZWFkbGluZV9maWZvX2JhdGNoX3N0b3JlLCAmYW1wO2RkLSZndDtmaWZvX2JhdGNoLCAwLCBJTlRfTUFYKTsKQEAgLTc4MSw2ICYjNDM7Nzk5LDQ2IEBAIFNUT1JFX0lOVChkZWFkbGluZV9maWZvX2JhdGNoX3N0b3JlLCAmYW1wO2RkLSZndDtmaWZvX2JhdGNoLCAwLCBJTlRfTUFYKTsKICN1bmRlZiBTVE9SRV9JTlQKICN1bmRlZiBTVE9SRV9KSUZGSUVTCiAKJiM0MzsvKgomIzQzOyAqIFdyaXRpbmcgemVybyB0byBwcmlvX2FnaW5nX2V4cGlyZSBkaXNhYmxlcyBJL08gcHJpb3JpdHk6IGFsbCByZXF1ZXN0cyBhcmUKJiM0MzsgKiB0cmVhdGVkIGFzIGJlc3QtZWZmb3J0LiBUbyBhdm9pZCBwcmlvcml0eSBpbnZlcnNpb24gd2hpbGUgdGhlIG1vZGUgaXMgYmVpbmcKJiM0MzsgKiBzd2l0Y2hlZCwgZmlyc3QgZHJhaW4gYWxsIGluLWZsaWdodCBJL08gYnkgZm9sbG93aW5nIHRoZSBzYW1lIHNlcXVlbmNlIHVzZWQKJiM0MzsgKiBieSBlbGV2YXRvcl9zd2l0Y2goKTogZnJlZXplIHRoZSBxdWV1ZSBzbyB0aGF0IG5ldyB1cHBlci1sYXllciBJL08gaXMKJiM0MzsgKiBibG9ja2VkIGFuZCBhbGwgb3V0c3RhbmRpbmcgcmVxdWVzdHMgY29tcGxldGUsIHF1aWVzY2UgdGhlIHF1ZXVlIHNvIHRoYXQgbm8KJiM0MzsgKiBkaXNwYXRjaCBpcyBpbiBwcm9ncmVzcywgdGhlbiBmbGlwIHByaW9fYWdpbmdfZXhwaXJlIHRvIHplcm8uIE5ldyBJL08KJiM0MzsgKiBxdWV1ZWQgYWZ0ZXIgdGhlIHN3aXRjaCBsYW5kcyBpbiB0aGUgYmVzdC1lZmZvcnQgYnVja2V0LgomIzQzOyAqIFdyaXRpbmcgYSBub24temVybyB2YWx1ZSAocmUtKWVuYWJsZXMgcHJpb3JpdHkgd2l0aG91dCBkcmFpbmluZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3NpemVfdCBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZShzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUsCiYjNDM7CQkJCQkJIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IGUtJmd0O2VsZXZhdG9yX2RhdGE7CiYjNDM7CWludCB2YWwsIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0ga3N0cnRvaW50KHBhZ2UsIDAsICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXZhbCA9IDA7CiYjNDM7CWVsc2UgaWYgKHZhbCAmZ3Q7IElOVF9NQVgpCiYjNDM7CQl2YWwgPSBJTlRfTUFYOwomIzQzOwl2YWwgPSBtc2Vjc190b19qaWZmaWVzKHZhbCk7CiYjNDM7CiYjNDM7CWlmICh2YWwgPT0gMCAmYW1wOyZhbXA7IGRkLSZndDtwcmlvX2FnaW5nX2V4cGlyZSAhPSAwKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7CiYjNDM7CiYjNDM7CQltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUoZGQtJmd0O3EpOwomIzQzOwkJYmxrX21xX3F1aWVzY2VfcXVldWUoZGQtJmd0O3EpOwomIzQzOwkJZGQtJmd0O3ByaW9fYWdpbmdfZXhwaXJlID0gMDsKJiM0MzsJCWJsa19tcV91bnF1aWVzY2VfcXVldWUoZGQtJmd0O3EpOwomIzQzOwkJYmxrX21xX3VuZnJlZXplX3F1ZXVlKGRkLSZndDtxLCBtZW1mbGFncyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlkZC0mZ3Q7cHJpb19hZ2luZ19leHBpcmUgPSB2YWw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKICNkZWZpbmUgRERfQVRUUihuYW1lKSBcCiAJX19BVFRSKG5hbWUsIDA2NDQsIGRlYWRsaW5lXyMjbmFtZSMjX3Nob3csIGRlYWRsaW5lXyMjbmFtZSMjX3N0b3JlKQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTVEtRGVhZGxpbmUgU2NoZWR1bGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgbXEtZGVhZGxpbmUuY2AgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgcHJpb19hZ2luZ19leHBpcmVgIGJlaGF2aW9yLiBJdCBsb29rcyBsaWtlIGl0IGludHJvZHVjZXMgYSBtb2R1bGUgcGFyYW1ldGVyLCBgcHJpb19hZ2luZ19leHBpcmVgLCBhbmQgdGhlbiBtb2RpZmllcyB0aGUgYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaGVyZSBpcyB0aGF0IHdoZW4gYHByaW9fYWdpbmdfZXhwaXJlYCBpcyBzZXQgdG8gemVybyDigJMgZXNzZW50aWFsbHkgZGlzYWJsaW5nIEkvTyBwcmlvcml0eSDigJMgdGhlIGNvZGUgbm93IGZyZWV6ZXMgYW5kIHF1aWVzY2VzIHRoZSBxdWV1ZS4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIHBvaW50IG9mIGludGVyZXN0LCBjb25jdXJyZW5jeS13aXNlLiBJdCBhbHNvIGNoYW5nZXMgaG93IHJlcXVlc3RzIGdldCBpbnNlcnRlZCBhbmQgbWVyZ2VkLCBlc3NlbnRpYWxseSBmdW5uZWxpbmcgZXZlcnl0aGluZyBpbnRvIHRoZSBgRERfQkVfUFJJT2AgYnVja2V0IHdoZW4gcHJpb3JpdHkgaXMgb2ZmLgoKTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGlzIGV2ZW4gcmVhY2hhYmxlIGFuZCBpZiBpdCYjMzk7cyB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmcuIFRoZSBnb29kIG5ld3MgaXMsIHRoZSBtcS1kZWFkbGluZSBzY2hlZHVsZXIgaXMgYSAqY29yZSogYmxvY2sgbGF5ZXIgY29tcG9uZW50LiBUaGF0IG1ha2VzIGl0IGEgcHJpbWUgdGFyZ2V0LiBBbmQsIHllcCwgdGhlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCBgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVgLCBpcyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggYC9zeXMvYmxvY2svJmx0O2RldiZndDsvcXVldWUvaW9zY2hlZC9wcmlvX2FnaW5nX2V4cGlyZWAuIFBlcmZlY3QuIFRoYXQgbWFrZXMgaXQgZWFzeSB0byB0cmlnZ2VyIHRoZSBuZXcgYmVoYXZpb3IuIFBsdXMsIGBkZF9pbnNlcnRfcmVxdWVzdGAsIGBkZF9yZXF1ZXN0X21lcmdlYCwgYGRkX21lcmdlZF9yZXF1ZXN0c2AsIGFuZCBgZGRfcmVxdWVzdF9tZXJnZWRgIGFyZSBhbGwgdG91Y2hlZCBkdXJpbmcgbm9ybWFsIGJsb2NrIEkvTyBvcGVyYXRpb25zLCBtZWFuaW5nIHdlIGRvbiYjMzk7dCBuZWVkIHNvbWUgb2JzY3VyZSBzZXQgb2YgY2lyY3Vtc3RhbmNlcyB0byB0cmlnZ2VyIHRoZSBjb2RlLgoKSXMgaXQgZnV6emFibGU/IEFic29sdXRlbHkuIFRoaXMgcGF0Y2ggaXMgbWVzc2luZyB3aXRoIHRoZSAqY29yZSogYmxvY2sgbGF5ZXIgc2NoZWR1bGVyIGxvZ2ljLCBhbmQgaXQmIzM5O3MgdGhlIGRlZmF1bHQgZm9yIGEgbG90IG9mIGJsb2NrIGRldmljZXMuIFRoZSBmcmVlemluZyBhbmQgcXVpZXNjaW5nIG9mIHRoZSBxdWV1ZSBzcGVjaWZpY2FsbHkgc2NyZWFtcyBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWNoIGFyZSBhbHdheXMgZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoaWNoIGNvbmZpZyBvcHRpb24gaXMgbmVlZGVkIHRvIGVuYWJsZSB0aGUgbXEtZGVhZGxpbmUgc2NoZWR1bGVyLiBJdCBhcHBlYXJzIHRvIGJlIGBDT05GSUdfTVFfSU9TQ0hFRF9ERUFETElORWAuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBgYmxvY2svS2NvbmZpZy5pb3NjaGVkYCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1RX0lPU0NIRURfREVBRExJTkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZy5pb3NjaGVkPTI9bWVudSBcJiMzNDtJTyBTY2hlZHVsZXJzXCYjMzQ7XG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMy1cbmJsb2NrL0tjb25maWcuaW9zY2hlZDo0OmNvbmZpZyBNUV9JT1NDSEVEX0RFQURMSU5FXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtNS1cdHRyaXN0YXRlIFwmIzM0O01RIGRlYWRsaW5lIEkvTyBzY2hlZHVsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzM1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXM6IERlYWRsaW5lIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBpcyBgTVFfSU9TQ0hFRF9ERUFETElORWAuIFJpZ2h0LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGVyZSB3ZSBzaG91bGQgYmUgZGlyZWN0aW5nIG91ciBmdXp6aW5nIGVmZm9ydHMuIExldCYjMzk7cyBzZWUgd2hhdCBmdW5jdGlvbnMgd2VyZSBtb2RpZmllZCByZWNlbnRseSBpbiB0aGlzIGNvbnRleHQuIEFoLCBoZXJlJiMzOTtzIHRoZSBsaXN0OiBgZGRfcmVxdWVzdF9tZXJnZWRgLCBgZGRfbWVyZ2VkX3JlcXVlc3RzYCwgYGRkX2Rpc3BhdGNoX3ByaW9fYWdlZF9yZXF1ZXN0c2AsIGBkZF9pbml0X3NjaGVkYCwgYGRkX3JlcXVlc3RfbWVyZ2VgLCBhbmQgYGRkX2luc2VydF9yZXF1ZXN0YCwgYW5kIHRoYXQgaW50ZXJlc3Rpbmcgb25lLCBgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVgLgoKYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCBpcyBpbW1lZGlhdGVseSBncmFiYmluZyBteSBhdHRlbnRpb24uIEl0JiMzOTtzIGludm9sdmVkIGluIHRyaWdnZXJpbmcgdGhlIGZyZWV6ZS9xdWllc2NlIGxvZ2ljLCB3aGljaCBpcyBhbHdheXMgYW4gaW50ZXJlc3RpbmcgdGFyZ2V0IGZvciBmaW5kaW5nIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgcG90ZW50aWFsIGRlYWRsb2Nrcy4gRGVmaW5pdGVseSBhIHN0cm9uZyBjYW5kaWRhdGUuIFRoZW4gd2UgaGF2ZSBgZGRfaW5zZXJ0X3JlcXVlc3RgIGFuZCBgZGRfcmVxdWVzdF9tZXJnZWAgd2hpY2ggYXJlIGxpa2VseSBob3QtcGF0aCBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIGdvaW5nIHRvIGJlIGV4ZXJjaXNlZCBmcmVxdWVudGx5LCB3aGljaCBtZWFucyBtb3JlIHBvdGVudGlhbCBmb3IgZmluZGluZyBidWdzLiBgZGRfZGlzcGF0Y2hfcHJpb19hZ2VkX3JlcXVlc3RzYCBpcyBpbiB0aGF0IHNhbWUgc3BoZXJlLCBidXQgbGlrZWx5IGxlc3MgaG90IHRoYW4gdGhlIGluc2VydCBhbmQgbWVyZ2UuIEhtbSwgd2FpdCBhIHNlY29uZCwgb24gZnVydGhlciByZWZsZWN0aW9uLCBJJiMzOTttIHRoaW5raW5nIHRoYXQgYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCBpcyB0aGUgbW9yZSBpbnRlcmVzdGluZyBvbmUgdG8gaGl0IGVhcmx5LCBzaW5jZSBpdCBpcyBub3QgaG90LXBhdGggYW5kIG1pZ2h0IGhhdmUgZGlmZmVyZW50IGVycm9yIGhhbmRsaW5nLgoKQnV0IGJlZm9yZSBJIGNvbW1pdCB0byB0aG9zZSwgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBjaGVjayB0byBzZWUgaWYgd2UgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMgaW4gdGhlIG1vZGlmaWNhdGlvbiBzZXQuIEdvdHRhIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svbXEtZGVhZGxpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9tcS1kZWFkbGluZS5jPTc5Nz1TVE9SRV9JTlQoZGVhZGxpbmVfZmlmb19iYXRjaF9zdG9yZSwgXHUwMDI2ZGQtXHUwMDNlZmlmb19iYXRjaCwgMCwgSU5UX01BWCk7XG4tLVxuYmxvY2svbXEtZGVhZGxpbmUuYy04MTEtICovXG5ibG9jay9tcS1kZWFkbGluZS5jOjgxMjpzdGF0aWMgc3NpemVfdCBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZShzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUsXG5ibG9jay9tcS1kZWFkbGluZS5jLTgxMy1cdFx0XHRcdFx0XHQgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNTYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipGdXp6aW5nIHRoZSBEZWFkbGluZSBTY2hlZHVsZXImIzM5O3MgRXhwaXJ5IE1lY2hhbmlzbSoqCgpBbHJpZ2h0LCBzbyBgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVgLi4uIHRoYXQmIzM5O3MgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0JiMzNDsgdG8gbWUuIEl0JiMzOTtzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciB1bmNvdmVyaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciByZWxhdGVkIHRvIGhvdyB0aGUgRGVhZGxpbmUgSS9PIHNjaGVkdWxlciBtYW5hZ2VzIGl0cyBwcmlvcml0eSBhZ2luZyBhbmQgZXhwaXJhdGlvbiBsb2dpYy4gSSYjMzk7ZCBleHBlY3QgYW4gaW50ZXJhY3RpdmUgdXNlciB0byBoYXZlIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucyBoZXJlLgoKTXkgbmV4dCBpbW1lZGlhdGUgc3RlcCB3b3VsZCBiZSB0byByYXBpZGx5IGRldGVybWluZSBhbnkgZGVwZW5kZW5jaWVzLCBhcyBJ4oCZZCBleHBlY3QgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZlYXR1cmUgdG8gYmUgc2lnbmlmaWNhbnQgb24gYW55dGhpbmcgdGhhdCBkZXBlbmRzIG9uIGl0LiBTcGVjaWZpY2FsbHksIGlzIGBNUV9JT1NDSEVEX0RFQURMSU5FYCBhIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgZmVhdHVyZT8gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyBvciBtb2R1bGVzIHRoYXQgbmVlZCB0byBiZSBsb2FkZWQgb3IgZW5hYmxlZCBmb3IgdGhpcyB0byBmdW5jdGlvbj8gQW55IGRlcGVuZGVuY2llcyBoZXJlIHdpbGwgZGV0ZXJtaW5lIGhvdyBJIGZvY3VzIHRoZSBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnLmlvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZy5pb3NjaGVkPTMwPWNvbmZpZyBCRlFfR1JPVVBfSU9TQ0hFRFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkLTMxLSAgICAgICBib29sIFwmIzM0O0JGUSBoaWVyYXJjaGljYWwgc2NoZWR1bGluZyBzdXBwb3J0XCYjMzQ7XG5ibG9jay9LY29uZmlnLmlvc2NoZWQ6MzI6ICAgICAgIGRlcGVuZHMgb24gSU9TQ0hFRF9CRlEgXHUwMDI2XHUwMDI2IEJMS19DR1JPVVBcbmJsb2NrL0tjb25maWcuaW9zY2hlZC0zMy0gICAgICAgZGVmYXVsdCB5XG4tLVxuYmxvY2svS2NvbmZpZy5pb3NjaGVkPTQwPWNvbmZpZyBCRlFfQ0dST1VQX0RFQlVHXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtNDEtXHRib29sIFwmIzM0O0JGUSBJTyBjb250cm9sbGVyIGRlYnVnZ2luZ1wmIzM0O1xuYmxvY2svS2NvbmZpZy5pb3NjaGVkOjQyOlx0ZGVwZW5kcyBvbiBCRlFfR1JPVVBfSU9TQ0hFRFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkLTQzLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gdGhlIERlYWRsaW5lIEkvTyBTY2hlZHVsZXIqKgoKSG1tLCBzbyBgTVFfSU9TQ0hFRF9ERUFETElORWAgaXNuJiMzOTt0IHNob3dpbmcgYW55IGV4cGxpY2l0IGBkZXBlbmRzIG9uYCBjbGF1c2VzLiBUaGF0JiMzOTtzIGEgbGl0dGxlIHVudXN1YWwsIEkmIzM5O2QgZXhwZWN0ICpzb21ldGhpbmcqIHRoZXJlLiBUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCwgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIGNvbnRyb2xsaW5nIGl0cyBidWlsZCBjb25maWd1cmF0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGxvb2sgaXMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IGBibG9jay9LY29uZmlnLmlvc2NoZWRgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgc2NoZWR1bGVyIG9wdGlvbnMgYXJlIGRlZmluZWQgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgbGFpZCBvdXQuIFRpbWUgdG8gb3BlbiB0aGF0IHVwIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb3Zlcm5pbmcgdGhlIGluY2x1c2lvbiBvZiBgTVFfSU9TQ0hFRF9ERUFETElORWAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBmZWF0dXJlcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZmlndXJpbmcgb3V0IGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyB0aGF0IGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBtYWluIGNvbmZpZyBzdHJ1Y3R1cmUuIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIHRlYXNlIG91dCB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9LY29uZmlnLmlvc2NoZWQmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0bWVudSBcJiMzNDtJTyBTY2hlZHVsZXJzXCYjMzQ7XG4gICAzOlx0XG4gICA0Olx0Y29uZmlnIE1RX0lPU0NIRURfREVBRExJTkVcbiAgIDU6XHRcdHRyaXN0YXRlIFwmIzM0O01RIGRlYWRsaW5lIEkvTyBzY2hlZHVsZXJcJiMzNDtcbiAgIDY6XHRcdGRlZmF1bHQgeVxuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBNUSB2ZXJzaW9uIG9mIHRoZSBkZWFkbGluZSBJTyBzY2hlZHVsZXIuXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIE1RX0lPU0NIRURfS1lCRVJcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O0t5YmVyIEkvTyBzY2hlZHVsZXJcJiMzNDtcbiAgMTI6XHRcdGRlZmF1bHQgeVxuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0ICBUaGUgS3liZXIgSS9PIHNjaGVkdWxlciBpcyBhIGxvdy1vdmVyaGVhZCBzY2hlZHVsZXIgc3VpdGFibGUgZm9yXG4gIDE1Olx0XHQgIG11bHRpcXVldWUgYW5kIG90aGVyIGZhc3QgZGV2aWNlcy4gR2l2ZW4gdGFyZ2V0IGxhdGVuY2llcyBmb3IgcmVhZHMgYW5kXG4gIDE2Olx0XHQgIHN5bmNocm9ub3VzIHdyaXRlcywgaXQgd2lsbCBzZWxmLXR1bmUgcXVldWUgZGVwdGhzIHRvIGFjaGlldmUgdGhhdFxuICAxNzpcdFx0ICBnb2FsLlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBJT1NDSEVEX0JGUVxuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7QkZRIEkvTyBzY2hlZHVsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA2MAoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiAyOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBJL08gU2NoZWR1bGVyIFBhdGNoKioKCk9rYXksIHNvIGBNUV9JT1NDSEVEX0RFQURMSU5FYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBpdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGRlcGVuZCBvbiBhbnl0aGluZyBlbHNlLiBHb29kLiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgaW4gYGJsb2NrL21xLWRlYWRsaW5lLmNgLiBJJiMzOTttIHNlZWluZyBtb2RpZmljYXRpb25zIHRvIHF1aXRlIGEgZmV3IGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBkZF9yZXF1ZXN0X21lcmdlZGAsIGBkZF9tZXJnZWRfcmVxdWVzdHNgLCBgZGRfZGlzcGF0Y2hfcHJpb19hZ2VkX3JlcXVlc3RzYCwgYGRkX2luaXRfc2NoZWRgLCBgZGRfcmVxdWVzdF9tZXJnZWAsIGBkZF9pbnNlcnRfcmVxdWVzdGAsIGFuZCB0aGF0IGtleSBvbmUsIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAuCgpBaCwgdGhlcmUgaXQgaXMhIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAgaXMgdGhlIGx5bmNocGluIGhlcmUuIFRoaXMgaXMgd2hlcmUgdGhlIHF1ZXVlIGZyZWV6ZS9xdWllc2NlIGxvZ2ljIGlzIHRyaWdnZXJlZCwgYWxsIHJlbGF0ZWQgdG8gdGhlIG5ldyBhYmlsaXR5IHRvIGRpc2FibGUgSS9PIHByaW9yaXR5IGJ5IHNldHRpbmcgYHByaW9fYWdpbmdfZXhwaXJlYCB0byB6ZXJvLiBBbHNvLCBgZGRfaW5pdF9zY2hlZGAgaGFzIGEgbW9kaWZpY2F0aW9uIHNldHRpbmcgYGRkLSZndDtxID0gcTtgLgoKUmlnaHQsIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAgZ2V0cyBteSBhdHRlbnRpb247IHRoYXQmIzM5O3MgdGhlIHByaW1hcnkgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCYjMzk7cyB0aGUgcG9pbnQgb2YgZW50cnkgZm9yIHRoZSBuZXcgc3lzZnMgaW50ZXJmYWNlIHRoYXQmIzM5O3MgaW50cm9kdWNlZCB3aXRoIHRoaXMgcGF0Y2guIEkgd2lsbCBiZSBmb2N1c2luZyBteSBmdXp6aW5nIGVmZm9ydHMgaGVyZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRoYXQgYEZvY3VzU3ltYm9sc2AgaXMgc2V0IHRvIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAuIEFuZCwgb2YgY291cnNlLCB0aGUgY29uZmlndXJhdGlvbiBgRW5hYmxlQ29uZmlnc2Agd2lsbCBiZSBzZXQgdG8gYE1RX0lPU0NIRURfREVBRExJTkVgIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCgpUaGlzIHBhdGNoIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgaW50cm9kdWNlcyBuZXcgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiB3aXRoaW4gdGhlIGJsb2NrIGxheWVyIHRoYXQgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHN5c2ZzLCBhbmQgdGhlcmVmb3JlIHJpcGUgZm9yIGZ1enppbmcuIEkgY2FuIHNlZSB0aGUgcG90ZW50aWFsIGZvciBleHBsb2l0YWJsZSByYWNlIGNvbmRpdGlvbnMgd2hlbiB3ZSBhbGxvdyB1c2Vyc3BhY2UgdG8gY29udHJvbCBxdWV1ZSBiZWhhdmlvciB0aGlzIHdheS4gVGltZSB0byBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01RX0lPU0NIRURfREVBRExJTkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbXEtZGVhZGxpbmUgSS9PIHNjaGVkdWxlciB0byBzdXBwb3J0IGRpc2FibGluZyBJL08gcHJpb3JpdHkgYnkgc2V0dGluZyBgcHJpb19hZ2luZ19leHBpcmVgIHRvIDAuIEl0IGFkZHMgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiBgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVgIHdoaWNoIGZyZWV6ZXMgYW5kIHF1aWVzY2VzIHRoZSByZXF1ZXN0IHF1ZXVlIHRvIHNhZmVseSBzd2l0Y2ggdGhlIG1vZGUuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiB0aGUgYmxvY2sgbGF5ZXIgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2ZzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUV9JT1NDSEVEX0RFQURMSU5FJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1xLWRlYWRsaW5lIEkvTyBzY2hlZHVsZXIgdG8gc3VwcG9ydCBkaXNhYmxpbmcgSS9PIHByaW9yaXR5IGJ5IHNldHRpbmcgYHByaW9fYWdpbmdfZXhwaXJlYCB0byAwLiBJdCBhZGRzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24gYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCB3aGljaCBmcmVlemVzIGFuZCBxdWllc2NlcyB0aGUgcmVxdWVzdCBxdWV1ZSB0byBzYWZlbHkgc3dpdGNoIHRoZSBtb2RlLiBUaGlzIGludHJvZHVjZXMgbmV3IGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGJsb2NrIGxheWVyIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwMjo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbXEtZGVhZGxpbmUgYmxvY2sgZWxldmF0b3IgdG8gYWxsb3cgZGlzYWJsaW5nIEkvTyBwcmlvcml0eSBieSBzZXR0aW5nIGBwcmlvX2FnaW5nX2V4cGlyZWAgdG8gMC4gSXQgaW50cm9kdWNlcyBsb2dpYyBjaGFuZ2VzIHRvIHJvdXRlIGFsbCByZXF1ZXN0cyB0byB0aGUgYmVzdC1lZmZvcnQgYnVja2V0IHdoZW4gcHJpb3JpdHkgaXMgZGlzYWJsZWQsIGFuZCBvcHRpbWl6ZXMgcHJpb3JpdHkgbG9va3VwcyBieSB1c2luZyB0aGUgY2FjaGVkIGByZXEtXHUwMDNlZWx2LnByaXZbMF1gIHBvaW50ZXIgaW5zdGVhZCBvZiByZWNhbGN1bGF0aW5nIGl0LiBUaGUgYHJlcS1cdTAwM2VlbHYucHJpdlswXWAgZmllbGQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBOVUxMIGluIGBkZF9wcmVwYXJlX3JlcXVlc3RgIGFuZCBwb3B1bGF0ZWQgaW4gYGRkX2luc2VydF9yZXF1ZXN0YCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGhhbmRsaW5nIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMgZHVyaW5nIHF1ZXVlIGZyZWV6ZS9xdWllc2NlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NjU3OTdlZTQ4NDkzMzE1YmJhODcxZWU4ZmU2NmQ3MDQxMTgwYmExCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMDI6NDE6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9tcS1kZWFkbGluZS5jIGIvYmxvY2svbXEtZGVhZGxpbmUuYwppbmRleCA4MjRiZmMxN2IyYzY4Li45NWEwMGE2NzNiZTU1IDEwMDY0NAotLS0gYS9ibG9jay9tcS1kZWFkbGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL21xLWRlYWRsaW5lLmMKQEAgLTMzLDcgJiM0MzszMywxMCBAQCBzdGF0aWMgY29uc3QgaW50IHdyaXRlX2V4cGlyZSA9IDUgKiBIWjsgLyogZGl0dG8gZm9yIHdyaXRlcywgdGhlc2UgbGltaXRzIGFyZSBTTwogICogVGltZSBhZnRlciB3aGljaCB0byBkaXNwYXRjaCBsb3dlciBwcmlvcml0eSByZXF1ZXN0cyBldmVuIGlmIGhpZ2hlcgogICogcHJpb3JpdHkgcmVxdWVzdHMgYXJlIHBlbmRpbmcuCiAgKi8KLXN0YXRpYyBjb25zdCBpbnQgcHJpb19hZ2luZ19leHBpcmUgPSAxMCAqIEhaOwomIzQzO3N0YXRpYyBpbnQgcHJpb19hZ2luZ19leHBpcmUgPSAxMCAqIE1TRUNfUEVSX1NFQzsKJiM0Mzttb2R1bGVfcGFyYW0ocHJpb19hZ2luZ19leHBpcmUsIGludCwgMDY0NCk7CiYjNDM7TU9EVUxFX1BBUk1fREVTQyhwcmlvX2FnaW5nX2V4cGlyZSwKJiM0MzsJCSAmIzM0O0RlZmF1bHQgcHJpb19hZ2luZ19leHBpcmUgaW4gbWlsbGlzZWNvbmRzOyAwIGRpc2FibGVzIEkvTyBwcmlvcml0eS4mIzM0Oyk7CiBzdGF0aWMgY29uc3QgaW50IHdyaXRlc19zdGFydmVkID0gMjsgICAgLyogbWF4IHRpbWVzIHJlYWRzIGNhbiBzdGFydmUgYSB3cml0ZSAqLwogc3RhdGljIGNvbnN0IGludCBmaWZvX2JhdGNoID0gMTY7ICAgICAgIC8qICMgb2Ygc2VxdWVudGlhbCByZXF1ZXN0cyB0cmVhdGVkIGFzIG9uZQogCQkJCSAgICAgYnkgdGhlIGFib3ZlIHBhcmFtZXRlcnMuIEZvciB0aHJvdWdocHV0LiAqLwpAQCAtODMsNiAmIzQzOzg2LDcgQEAgc3RydWN0IGRlYWRsaW5lX2RhdGEgewogCSAqIHJ1biB0aW1lIGRhdGEKIAkgKi8KIAomIzQzOwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsJLyogYXNzb2NpYXRlZCByZXF1ZXN0IHF1ZXVlICovCiAJc3RydWN0IGxpc3RfaGVhZCBkaXNwYXRjaDsKIAlzdHJ1Y3QgZGRfcGVyX3ByaW8gcGVyX3ByaW9bRERfUFJJT19DT1VOVF07CiAKQEAgLTE4NCwxMCAmIzQzOzE4OCw3IEBAIHN0YXRpYyB2b2lkIGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogc3RhdGljIHZvaWQgZGRfcmVxdWVzdF9tZXJnZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsCiAJCQkgICAgICBlbnVtIGVsdl9tZXJnZSB0eXBlKQogewotCXN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IHEtJmd0O2VsZXZhdG9yLSZndDtlbGV2YXRvcl9kYXRhOwotCWNvbnN0IHU4IGlvcHJpb19jbGFzcyA9IGRkX3JxX2lvY2xhc3MocmVxKTsKLQljb25zdCBlbnVtIGRkX3ByaW8gcHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107Ci0Jc3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9ICZhbXA7ZGQtJmd0O3Blcl9wcmlvW3ByaW9dOwomIzQzOwlzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gcmVxLSZndDtlbHYucHJpdlswXTsKIAogCS8qCiAJICogaWYgdGhlIG1lcmdlIHdhcyBhIGZyb250IG1lcmdlLCB3ZSBuZWVkIHRvIHJlcG9zaXRpb24gcmVxdWVzdApAQCAtMjA1LDEyICYjNDM7MjA2LDExIEBAIHN0YXRpYyB2b2lkIGRkX21lcmdlZF9yZXF1ZXN0cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSwKIAkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqbmV4dCkKIHsKIAlzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLSZndDtlbGV2YXRvci0mZ3Q7ZWxldmF0b3JfZGF0YTsKLQljb25zdCB1OCBpb3ByaW9fY2xhc3MgPSBkZF9ycV9pb2NsYXNzKG5leHQpOwotCWNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTsKJiM0MzsJc3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IG5leHQtJmd0O2Vsdi5wcml2WzBdOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2RkLSZndDtsb2NrKTsKIAotCWRkLSZndDtwZXJfcHJpb1twcmlvXS5zdGF0cy5tZXJnZWQmIzQzOyYjNDM7OwomIzQzOwlwZXJfcHJpby0mZ3Q7c3RhdHMubWVyZ2VkJiM0MzsmIzQzOzsKIAogCS8qCiAJICogaWYgbmV4dCBleHBpcmVzIGJlZm9yZSBycSwgYXNzaWduIGl0cyBleHBpcmUgdGltZSB0byBycQpAQCAtMjI3LDcgJiM0MzsyMjcsNyBAQCBzdGF0aWMgdm9pZCBkZF9tZXJnZWRfcmVxdWVzdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsCiAJLyoKIAkgKiBraWxsIGtub3dsZWRnZSBvZiBuZXh0LCB0aGlzIG9uZSBpcyBhIGdvbmVyCiAJICovCi0JZGVhZGxpbmVfcmVtb3ZlX3JlcXVlc3QocSwgJmFtcDtkZC0mZ3Q7cGVyX3ByaW9bcHJpb10sIG5leHQpOwomIzQzOwlkZWFkbGluZV9yZW1vdmVfcmVxdWVzdChxLCBwZXJfcHJpbywgbmV4dCk7CiB9CiAKIC8qCkBAIC00MjYsNiAmIzQzOzQyNiwxNSBAQCBzdGF0aWMgc3RydWN0IHJlcXVlc3QgKmRkX2Rpc3BhdGNoX3ByaW9fYWdlZF9yZXF1ZXN0cyhzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQsCiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7ZGQtJmd0O2xvY2spOwogCiYjNDM7CS8qCiYjNDM7CSAqIEEgcHJpb19hZ2luZ19leHBpcmUgb2YgemVybyBkaXNhYmxlcyBJL08gcHJpb3JpdHk6IGFsbCByZXF1ZXN0cyBhcmUKJiM0MzsJICogZmlsZWQgaW4gdGhlIEREX0JFX1BSSU8gYnVja2V0IGFuZCBtdXN0IG5ldmVyIGJlIGRpc3BhdGNoZWQgYWhlYWQgb2YKJiM0MzsJICogaGlnaGVyIHByaW9yaXR5IHJlcXVlc3RzIHRocm91Z2ggdGhpcyBhZ2luZyBwYXRoLCB3aGljaCB3b3VsZCBjYXVzZQomIzQzOwkgKiBwcmlvcml0eSBpbnZlcnNpb24uCiYjNDM7CSAqLwomIzQzOwlpZiAoZGQtJmd0O3ByaW9fYWdpbmdfZXhwaXJlID09IDApCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKIAlwcmlvX2NudCA9ICEhZGRfcXVldWVkKGRkLCBERF9SVF9QUklPKSAmIzQzOyAhIWRkX3F1ZXVlZChkZCwgRERfQkVfUFJJTykgJiM0MzsKIAkJICAgISFkZF9xdWV1ZWQoZGQsIEREX0lETEVfUFJJTyk7CiAJaWYgKHByaW9fY250ICZsdDsgMikKQEAgLTUzNiw2ICYjNDM7NTQ1LDcgQEAgc3RhdGljIGludCBkZF9pbml0X3NjaGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWVxLSZndDtlbGV2YXRvcl9kYXRhID0gZGQ7CiYjNDM7CWRkLSZndDtxID0gcTsKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7ZGQtJmd0O2Rpc3BhdGNoKTsKIAlmb3IgKHByaW8gPSAwOyBwcmlvICZsdDs9IEREX1BSSU9fTUFYOyBwcmlvJiM0MzsmIzQzOykgewpAQCAtNTUyLDcgJiM0Mzs1NjIsNyBAQCBzdGF0aWMgaW50IGRkX2luaXRfc2NoZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZXEpCiAJZGQtJmd0O2Zyb250X21lcmdlcyA9IDE7CiAJZGQtJmd0O2xhc3RfZGlyID0gRERfV1JJVEU7CiAJZGQtJmd0O2ZpZm9fYmF0Y2ggPSBmaWZvX2JhdGNoOwotCWRkLSZndDtwcmlvX2FnaW5nX2V4cGlyZSA9IHByaW9fYWdpbmdfZXhwaXJlOwomIzQzOwlkZC0mZ3Q7cHJpb19hZ2luZ19leHBpcmUgPSBtc2Vjc190b19qaWZmaWVzKHByaW9fYWdpbmdfZXhwaXJlKTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2RkLSZndDtsb2NrKTsKIAogCS8qIFdlIGRpc3BhdGNoIGZyb20gcmVxdWVzdCBxdWV1ZSB3aWRlIGluc3RlYWQgb2YgaHcgcXVldWUgKi8KQEAgLTU3Myw3ICYjNDM7NTgzLDggQEAgc3RhdGljIGludCBkZF9yZXF1ZXN0X21lcmdlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqKnJxLAogewogCXN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IHEtJmd0O2VsZXZhdG9yLSZndDtlbGV2YXRvcl9kYXRhOwogCWNvbnN0IHU4IGlvcHJpb19jbGFzcyA9IElPUFJJT19QUklPX0NMQVNTKGJpby0mZ3Q7YmlfaW9wcmlvKTsKLQljb25zdCBlbnVtIGRkX3ByaW8gcHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107CiYjNDM7CWNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gZGQtJmd0O3ByaW9fYWdpbmdfZXhwaXJlID09IDAgPyBERF9CRV9QUklPIDoKJiM0MzsJCQkJCSAgaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTsKIAlzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gJmFtcDtkZC0mZ3Q7cGVyX3ByaW9bcHJpb107CiAJc2VjdG9yX3Qgc2VjdG9yID0gYmlvX2VuZF9zZWN0b3IoYmlvKTsKIAlzdHJ1Y3QgcmVxdWVzdCAqX19ycTsKQEAgLTYzMyw3ICYjNDM7NjQ0LDE1IEBAIHN0YXRpYyB2b2lkIGRkX2luc2VydF9yZXF1ZXN0KHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7ZGQtJmd0O2xvY2spOwogCi0JcHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107CiYjNDM7CS8qCiYjNDM7CSAqIFdoZW4gcHJpb19hZ2luZ19leHBpcmUgaXMgemVybywgSS9PIHByaW9yaXR5IGlzIGRpc2FibGVkOiBmaWxlIGV2ZXJ5CiYjNDM7CSAqIHJlcXVlc3QgaW4gdGhlIGJlc3QtZWZmb3J0IGJ1Y2tldCBzbyB0aGF0IHRoZSBkaXNwYXRjaCBwYXRoIG5vIGxvbmdlcgomIzQzOwkgKiBkaXN0aW5ndWlzaGVzIGJldHdlZW4gUlQsIEJFIGFuZCBJRExFIGNsYXNzZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoZGQtJmd0O3ByaW9fYWdpbmdfZXhwaXJlID09IDApCiYjNDM7CQlwcmlvID0gRERfQkVfUFJJTzsKJiM0MzsJZWxzZQomIzQzOwkJcHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107CiAJcGVyX3ByaW8gPSAmYW1wO2RkLSZndDtwZXJfcHJpb1twcmlvXTsKIAlpZiAoIXJxLSZndDtlbHYucHJpdlswXSkKIAkJcGVyX3ByaW8tJmd0O3N0YXRzLmluc2VydGVkJiM0MzsmIzQzOzsKQEAgLTc3Myw3ICYjNDM7NzkyLDYgQEAgc3RhdGljIHNzaXplX3QgX19GVU5DKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KQogCVNUT1JFX0ZVTkNUSU9OKF9fRlVOQywgX19QVFIsIE1JTiwgTUFYLCBtc2Vjc190b19qaWZmaWVzKQogU1RPUkVfSklGRklFUyhkZWFkbGluZV9yZWFkX2V4cGlyZV9zdG9yZSwgJmFtcDtkZC0mZ3Q7Zmlmb19leHBpcmVbRERfUkVBRF0sIDAsIElOVF9NQVgpOwogU1RPUkVfSklGRklFUyhkZWFkbGluZV93cml0ZV9leHBpcmVfc3RvcmUsICZhbXA7ZGQtJmd0O2ZpZm9fZXhwaXJlW0REX1dSSVRFXSwgMCwgSU5UX01BWCk7Ci1TVE9SRV9KSUZGSUVTKGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlLCAmYW1wO2RkLSZndDtwcmlvX2FnaW5nX2V4cGlyZSwgMCwgSU5UX01BWCk7CiBTVE9SRV9JTlQoZGVhZGxpbmVfd3JpdGVzX3N0YXJ2ZWRfc3RvcmUsICZhbXA7ZGQtJmd0O3dyaXRlc19zdGFydmVkLCBJTlRfTUlOLCBJTlRfTUFYKTsKIFNUT1JFX0lOVChkZWFkbGluZV9mcm9udF9tZXJnZXNfc3RvcmUsICZhbXA7ZGQtJmd0O2Zyb250X21lcmdlcywgMCwgMSk7CiBTVE9SRV9JTlQoZGVhZGxpbmVfZmlmb19iYXRjaF9zdG9yZSwgJmFtcDtkZC0mZ3Q7Zmlmb19iYXRjaCwgMCwgSU5UX01BWCk7CkBAIC03ODEsNiAmIzQzOzc5OSw0NiBAQCBTVE9SRV9JTlQoZGVhZGxpbmVfZmlmb19iYXRjaF9zdG9yZSwgJmFtcDtkZC0mZ3Q7Zmlmb19iYXRjaCwgMCwgSU5UX01BWCk7CiAjdW5kZWYgU1RPUkVfSU5UCiAjdW5kZWYgU1RPUkVfSklGRklFUwogCiYjNDM7LyoKJiM0MzsgKiBXcml0aW5nIHplcm8gdG8gcHJpb19hZ2luZ19leHBpcmUgZGlzYWJsZXMgSS9PIHByaW9yaXR5OiBhbGwgcmVxdWVzdHMgYXJlCiYjNDM7ICogdHJlYXRlZCBhcyBiZXN0LWVmZm9ydC4gVG8gYXZvaWQgcHJpb3JpdHkgaW52ZXJzaW9uIHdoaWxlIHRoZSBtb2RlIGlzIGJlaW5nCiYjNDM7ICogc3dpdGNoZWQsIGZpcnN0IGRyYWluIGFsbCBpbi1mbGlnaHQgSS9PIGJ5IGZvbGxvd2luZyB0aGUgc2FtZSBzZXF1ZW5jZSB1c2VkCiYjNDM7ICogYnkgZWxldmF0b3Jfc3dpdGNoKCk6IGZyZWV6ZSB0aGUgcXVldWUgc28gdGhhdCBuZXcgdXBwZXItbGF5ZXIgSS9PIGlzCiYjNDM7ICogYmxvY2tlZCBhbmQgYWxsIG91dHN0YW5kaW5nIHJlcXVlc3RzIGNvbXBsZXRlLCBxdWllc2NlIHRoZSBxdWV1ZSBzbyB0aGF0IG5vCiYjNDM7ICogZGlzcGF0Y2ggaXMgaW4gcHJvZ3Jlc3MsIHRoZW4gZmxpcCBwcmlvX2FnaW5nX2V4cGlyZSB0byB6ZXJvLiBOZXcgSS9PCiYjNDM7ICogcXVldWVkIGFmdGVyIHRoZSBzd2l0Y2ggbGFuZHMgaW4gdGhlIGJlc3QtZWZmb3J0IGJ1Y2tldC4KJiM0MzsgKiBXcml0aW5nIGEgbm9uLXplcm8gdmFsdWUgKHJlLSllbmFibGVzIHByaW9yaXR5IHdpdGhvdXQgZHJhaW5pbmcuCiYjNDM7ICovCiYjNDM7c3RhdGljIHNzaXplX3QgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmUoc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplLAomIzQzOwkJCQkJCSBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBlLSZndDtlbGV2YXRvcl9kYXRhOwomIzQzOwlpbnQgdmFsLCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzdHJ0b2ludChwYWdlLCAwLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQl2YWwgPSAwOwomIzQzOwllbHNlIGlmICh2YWwgJmd0OyBJTlRfTUFYKQomIzQzOwkJdmFsID0gSU5UX01BWDsKJiM0MzsJdmFsID0gbXNlY3NfdG9famlmZmllcyh2YWwpOwomIzQzOwomIzQzOwlpZiAodmFsID09IDAgJmFtcDsmYW1wOyBkZC0mZ3Q7cHJpb19hZ2luZ19leHBpcmUgIT0gMCkgewomIzQzOwkJdW5zaWduZWQgaW50IG1lbWZsYWdzOwomIzQzOwomIzQzOwkJbWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKGRkLSZndDtxKTsKJiM0MzsJCWJsa19tcV9xdWllc2NlX3F1ZXVlKGRkLSZndDtxKTsKJiM0MzsJCWRkLSZndDtwcmlvX2FnaW5nX2V4cGlyZSA9IDA7CiYjNDM7CQlibGtfbXFfdW5xdWllc2NlX3F1ZXVlKGRkLSZndDtxKTsKJiM0MzsJCWJsa19tcV91bmZyZWV6ZV9xdWV1ZShkZC0mZ3Q7cSwgbWVtZmxhZ3MpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZGQtJmd0O3ByaW9fYWdpbmdfZXhwaXJlID0gdmFsOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBjb3VudDsKJiM0Mzt9CiYjNDM7CiAjZGVmaW5lIEREX0FUVFIobmFtZSkgXAogCV9fQVRUUihuYW1lLCAwNjQ0LCBkZWFkbGluZV8jI25hbWUjI19zaG93LCBkZWFkbGluZV8jI25hbWUjI19zdG9yZSkKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQzNwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDg5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlYWRsaW5lIEkvTyBTY2hlZHVsZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyB0aGUgYG1xLWRlYWRsaW5lYCBzY2hlZHVsZXIsIHNwZWNpZmljYWxseSBpbiBgYmxvY2svbXEtZGVhZGxpbmUuY2AuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdGhhdCBpdCYjMzk7cyBnb29kIHRvIHNlZSBzb21lIG9wdGltaXphdGlvbnMsIGJ1dCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkb3duc2lkZXMuCgpGaXJzdCwgSSBzZWUgdGhlIGNoYW5nZSB0byBtYWtlIGBwcmlvX2FnaW5nX2V4cGlyZWAgYSBtb2R1bGUgcGFyYW1ldGVyIGluc3RlYWQgb2YgYSBgc3RhdGljIGNvbnN0YC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgY2hhbmdlLCBhbGxvd2luZyBmb3IgcnVudGltZSB0dW5pbmcgb2YgdGhlIGFnaW5nIHRpbWVvdXQuIFRoYXQmIzM5O3MgZmluZS4KClRoZW4sIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBsb29rcyBsaWtlIGl0JiMzOTtzIG9wdGltaXppbmcgaG93IHByaW9yaXR5LXNwZWNpZmljIGRhdGEgaXMgYWNjZXNzZWQuIEl0JiMzOTtzIHJlcGxhY2luZyB0aGUgbG9va3VwIGJhc2VkIG9uIGBpb3ByaW9fY2xhc3NgIHdpdGggYSBkaXJlY3QgYWNjZXNzIHVzaW5nIGByZXEtJmd0O2Vsdi5wcml2WzBdYCBpbiBgZGRfcmVxdWVzdF9tZXJnZWRgIGFuZCBgZGRfbWVyZ2VkX3JlcXVlc3RzYC4gVGhpcyBpcyBhIGNsZWFyIG9wdGltaXphdGlvbiBpZiB0aGUgYXNzdW1wdGlvbiB0aGF0IGByZXEtJmd0O2Vsdi5wcml2WzBdYCBpcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgaXMgbWV0LiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIG1vdGl2YXRpb24gaXMgdG8gc2tpcCB0aGUgaW5kaXJlY3Rpb24gb2YgY2FsY3VsYXRpbmcgdGhlIHByaW9yaXR5LgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBkaXJlY3QgYWNjZXNzIGlzIHNhZmUuIFRoZSBjb2RlIGNvbW1lbnQgcG9pbnRzIG91dCB0aGF0IGByZXEtJmd0O2Vsdi5wcml2WzBdYCBpcyBpbml0aWFsaXplZCB0byBgcGVyX3ByaW9gIGluIGBkZF9pbnNlcnRfcmVxdWVzdGAuIE15IGZpcnN0IGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXMgdGhlcmUgYW55IHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3c/IFNpbmNlIHRoaXMgaXMgYWxsIGludGVybmFsIGJsb2NrIGxheWVyIHNjaGVkdWxpbmcgbG9naWMsIHRoZXJlJiMzOTtzIG5vIGRpcmVjdCBleHBvc3VyZSB0byB1c2Vyc3BhY2UuIEdvb2QuCgpJJiMzOTttIHRoaW5raW5nLCBpcyBgcmVxLSZndDtlbHYucHJpdlswXWAgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCAqYmVmb3JlKiBgZGRfcmVxdWVzdF9tZXJnZWRgIG9yIGBkZF9tZXJnZWRfcmVxdWVzdHNgIGFyZSBjYWxsZWQ/IEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEkgcmVtZW1iZXIgdGhhdCBgZGRfcmVxdWVzdF9tZXJnZWAgYW5kIGBkZF9tZXJnZWRfcmVxdWVzdHNgIGRlYWwgd2l0aCBtZXJnaW5nIG9yIG1lcmdpbmcgcmVxdWVzdHMsIGFuZCBhIGJpdCBvZiBhIHJlLXJlYWQgaW5kaWNhdGVzIHRoZSByZXF1ZXN0IGlzIGFscmVhZHkgaW4gdGhlIGVsZXZhdG9yLCB0aHVzIGl0ICptdXN0KiBoYXZlIGJlZW4gaW5zZXJ0ZWQgdmlhIGBkZF9pbnNlcnRfcmVxdWVzdGAuIFNvIGByZXEtJmd0O2Vsdi5wcml2WzBdYCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQuIEV2ZW4gaWYgaXQmIzM5O3Mgbm90LCBhIGJhZCBwb2ludGVyIGRlcmVmZXJlbmNlIHdvdWxkIGNyYXNoIHRoZSBzeXN0ZW07IEtBU0FOIHdvdWxkIGNhdGNoIGl0LiBUaGUgY29udGV4dCBvZiBgZWx2LnByaXZgIG1lYW5zIHRoaXMgaXMgbm90IGEgY29uY2VybiBmb3IgaW5mb3JtYXRpb24gbGVha2FnZS4gVGhpcyBpcyBwdXJlbHkgYW4gaW50ZXJuYWwgYmxvY2sgbGF5ZXIgc3RhdGUgY29uY2Vybi4KCkhvd2V2ZXIsIEkmIzM5O20gbm93IHdvbmRlcmluZywgZXZlbiBpZiBLQVNBTiB3b3VsZCBjYXRjaCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgaXMgdGhlcmUgYSByaXNrIG9mIEtNU0FOIGZpbmRpbmcgYSBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHRoYXQgS0FTQU4gbWlnaHQgbWlzcz8gSWYgYHJlcS0mZ3Q7ZWx2LnByaXZbMF1gIGNvbnRhaW5zIGdhcmJhZ2UgZnJvbSBhIHByZXZpb3VzIGFsbG9jYXRpb24sIEtNU0FOIHdvdWxkIGNhdGNoIGl0LiBIb3dldmVyLCBgcmVxYCBpcyBhbGxvY2F0ZWQgZnJvbSBhIHNsYWIgY2FjaGUsIGFuZCBgZWx2LnByaXZgIGlzIHBhcnQgb2YgYHN0cnVjdCByZXF1ZXN0YC4gU28gdGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgYHN0cnVjdCByZXF1ZXN0YCBpcyB6ZXJvZWQuIEkgdGhpbmsgYGJsa19tcV9hbGxvY19yZXF1ZXN0YCBpbml0aWFsaXplcyBgcmVxYCwgYnV0IEkgc2hvdWxkIHZlcmlmeSB0aGlzIGFuZCBjaGVjayBpZiBgZWx2LnByaXZgIGlzIHplcm9lZCB1c2luZyBgZ3JlcHBlcmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VsdlxcLnByaXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmZxLWlvc2NoZWQuYz0zNzQ9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgYmZxX2xhdGVfc3RhYmxlX21lcmdpbmcgPSA2MDA7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTM3NS1cbmJsb2NrL2JmcS1pb3NjaGVkLmM6Mzc2OiNkZWZpbmUgUlFfQklDKHJxKVx0XHQoKHN0cnVjdCBiZnFfaW9fY3EgKikoKHJxKS1cdTAwM2VlbHYucHJpdlswXSkpXG5ibG9jay9iZnEtaW9zY2hlZC5jOjM3NzojZGVmaW5lIFJRX0JGUVEocnEpXHRcdCgocnEpLVx1MDAzZWVsdi5wcml2WzFdKVxuYmxvY2svYmZxLWlvc2NoZWQuYy0zNzgtXG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz02MTQ4PXN0YXRpYyBib29sIF9fYmZxX2luc2VydF9yZXF1ZXN0KHN0cnVjdCBiZnFfZGF0YSAqYmZxZCwgc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjE4My1cdFx0YmZxX3B1dF9xdWV1ZShvbGRfYmZxcSk7XG5ibG9jay9iZnEtaW9zY2hlZC5jOjYxODQ6XHRcdHJxLVx1MDAzZWVsdi5wcml2WzFdID0gbmV3X2JmcXE7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTYxODUtXHR9XG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz02NjQ2PXN0YXRpYyB2b2lkIGJmcV9maW5pc2hfcmVxdWV1ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcbi0tXG5ibG9jay9iZnEtaW9zY2hlZC5jLTY2OTYtXHQgKi9cbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjY5NzpcdHJxLVx1MDAzZWVsdi5wcml2WzBdID0gTlVMTDtcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjY5ODpcdHJxLVx1MDAzZWVsdi5wcml2WzFdID0gTlVMTDtcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjY5OS19XG4tLVxuYmxvY2svYmZxLWlvc2NoZWQuYz02ODA3PXN0YXRpYyB2b2lkIGJmcV9wcmVwYXJlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjgxNS1cdCAqL1xuYmxvY2svYmZxLWlvc2NoZWQuYzo2ODE2Olx0cnEtXHUwMDNlZWx2LnByaXZbMF0gPSBycS1cdTAwM2VlbHYucHJpdlsxXSA9IE5VTEw7XG5ibG9jay9iZnEtaW9zY2hlZC5jLTY4MTctfVxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmM9NjkyOD1zdGF0aWMgc3RydWN0IGJmcV9xdWV1ZSAqYmZxX2luaXRfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjk2MS1cbmJsb2NrL2JmcS1pb3NjaGVkLmM6Njk2MjpcdHJxLVx1MDAzZWVsdi5wcml2WzBdID0gYmljO1xuYmxvY2svYmZxLWlvc2NoZWQuYzo2OTYzOlx0cnEtXHUwMDNlZWx2LnByaXZbMV0gPSBiZnFxO1xuYmxvY2svYmZxLWlvc2NoZWQuYy02OTY0LVxuLS1cbmJsb2NrL2t5YmVyLWlvc2NoZWQuYz01MjM9c3RhdGljIGludCBycV9nZXRfZG9tYWluX3Rva2VuKHN0cnVjdCByZXF1ZXN0ICpycSlcbmJsb2NrL2t5YmVyLWlvc2NoZWQuYy01MjQte1xuYmxvY2sva3liZXItaW9zY2hlZC5jOjUyNTpcdHJldHVybiAobG9uZylycS1cdTAwM2VlbHYucHJpdlswXTtcbmJsb2NrL2t5YmVyLWlvc2NoZWQuYy01MjYtfVxuLS1cbmJsb2NrL2t5YmVyLWlvc2NoZWQuYz01Mjg9c3RhdGljIHZvaWQgcnFfc2V0X2RvbWFpbl90b2tlbihzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCB0b2tlbilcbmJsb2NrL2t5YmVyLWlvc2NoZWQuYy01Mjkte1xuYmxvY2sva3liZXItaW9zY2hlZC5jOjUzMDpcdHJxLVx1MDAzZWVsdi5wcml2WzBdID0gKHZvaWQgKikobG9uZyl0b2tlbjtcbmJsb2NrL2t5YmVyLWlvc2NoZWQuYy01MzEtfVxuLS1cbmJsb2NrL21xLWRlYWRsaW5lLmM9MTg4PXN0YXRpYyB2b2lkIGRkX3JlcXVlc3RfbWVyZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuLS1cbmJsb2NrL21xLWRlYWRsaW5lLmMtMTkwLXtcbmJsb2NrL21xLWRlYWRsaW5lLmM6MTkxOlx0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IHJlcS1cdTAwM2VlbHYucHJpdlswXTtcbmJsb2NrL21xLWRlYWRsaW5lLmMtMTkyLVxuLS1cbmJsb2NrL21xLWRlYWRsaW5lLmM9MjA1PXN0YXRpYyB2b2lkIGRkX21lcmdlZF9yZXF1ZXN0cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcbi0tXG5ibG9jay9tcS1kZWFkbGluZS5jLTIwOC1cdHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IHEtXHUwMDNlZWxldmF0b3ItXHUwMDNlZWxldmF0b3JfZGF0YTtcbmJsb2NrL21xLWRlYWRsaW5lLmM6MjA5Olx0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IG5leHQtXHUwMDNlZWx2LnByaXZbMF07XG5ibG9jay9tcS1kZWFkbGluZS5jLTIxMC1cbi0tXG5ibG9jay9tcS1kZWFkbGluZS5jPTYzND1zdGF0aWMgdm9pZCBkZF9pbnNlcnRfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IHJlcXVlc3QgKnJxLFxuLS1cbmJsb2NrL21xLWRlYWRsaW5lLmMtNjU2LVx0cGVyX3ByaW8gPSBcdTAwMjZkZC1cdTAwM2VwZXJfcHJpb1twcmlvXTtcbmJsb2NrL21xLWRlYWRsaW5lLmM6NjU3Olx0aWYgKCFycS1cdTAwM2VlbHYucHJpdlswXSlcbmJsb2NrL21xLWRlYWRsaW5lLmMtNjU4LVx0XHRwZXJfcHJpby1cdTAwM2VzdGF0cy5pbnNlcnRlZCYjNDM7JiM0Mzs7XG5ibG9jay9tcS1kZWFkbGluZS5jOjY1OTpcdHJxLVx1MDAzZWVsdi5wcml2WzBdID0gcGVyX3ByaW87XG5ibG9jay9tcS1kZWFkbGluZS5jLTY2MC1cbi0tXG5ibG9jay9tcS1kZWFkbGluZS5jPTcxMT1zdGF0aWMgdm9pZCBkZF9wcmVwYXJlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuYmxvY2svbXEtZGVhZGxpbmUuYy03MTIte1xuYmxvY2svbXEtZGVhZGxpbmUuYzo3MTM6XHRycS1cdTAwM2VlbHYucHJpdlswXSA9IE5VTEw7XG5ibG9jay9tcS1kZWFkbGluZS5jLTcxNC19XG4tLVxuYmxvY2svbXEtZGVhZGxpbmUuYz03MTk9c3RhdGljIHZvaWQgZGRfZmluaXNoX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxuYmxvY2svbXEtZGVhZGxpbmUuYy03MjAte1xuYmxvY2svbXEtZGVhZGxpbmUuYzo3MjE6XHRzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gcnEtXHUwMDNlZWx2LnByaXZbMF07XG5ibG9jay9tcS1kZWFkbGluZS5jLTcyMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM0OAoJCQkJCQkJb3V0cHV0OiAyNDEKCQkJCQkJCXRob3VnaHRzOiA2MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgU2FmZXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCBjb25jZXJuIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhcyBiZWVuIHB1dCB0byByZXN0LiBJIHNlZSB0aGF0IGBkZF9wcmVwYXJlX3JlcXVlc3RgIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYHJxLSZndDtlbHYucHJpdlswXSA9IE5VTEw7YCwgd2hpY2ggaW1tZWRpYXRlbHkgbWl0aWdhdGVzIGFueSByaXNrIHRoZXJlLiBUaGlzIHBhdGNoIGZvY3VzZXMgc29sZWx5IG9uIG1vZGlmeWluZyB0aGUgbXEtZGVhZGxpbmUgZWxldmF0b3IgdG8gYWxsb3cgZm9yIGRpc2FibGluZyBJL08gcHJpb3JpdHkgYnkgc2V0dGluZyBgcHJpb19hZ2luZ19leHBpcmVgIHRvIHplcm8uIEl0JiMzOTtzIGEgbG9naWMgY2hhbmdlIHdpdGhpbiB0aGUgYmxvY2sgbGF5ZXIsIG5vdCBhIHN0cnVjdHVyYWwgb25lIHRoYXQgaW50cm9kdWNlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuCgpJIHF1aWNrbHkgc2Nhbm5lZCB0aGUgY29kZSBtb2RpZmljYXRpb25zIHRvIGNvbmZpcm0gdGhpcy4gVGhlIGNoYW5nZXMgbGlrZToKCmBgYGMKLQljb25zdCBlbnVtIGRkX3ByaW8gcHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107Ci0Jc3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9ICZhbXA7ZGQtJmd0O3Blcl9wcmlvW3ByaW9dOwomIzQzOwlzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gcmVxLSZndDtlbHYucHJpdlswXTsKYGBgCgouLi5hcmUganVzdCB1c2luZyBhIGNhY2hlZCBwb2ludGVyLCB3aGljaCBpcyBwZXJmZWN0bHkgc2FmZS4gU2ltaWxhcmx5LCB0aGUgY29uZGl0aW9uYWwgbG9naWMgcmVnYXJkaW5nIGBwcmlvX2FnaW5nX2V4cGlyZWAgaXMgYWxzbyBzYWZlLCBhbmQgdGhlIHN5c2ZzIHN0b3JlIGhhbmRsZXIgaXMgY2xlYW4uCgpHaXZlbiB0aGUgZXhpc3RpbmcgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgdHlwZSBvZiBjaGFuZ2VzIGJlaW5nIG1hZGUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgc3RhbmRhcmQgZGV0ZWN0aW9uIHRvb2xzIGxpa2UgS0FTQU4gYW5kIG90aGVycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyDigJMgdGhpbmdzIGxpa2UgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBVc2UtQWZ0ZXItRnJlZSBjb25kaXRpb25zLiBUaGVyZSYjMzk7cyBubyBuZWVkIHRvIGJyaW5nIEtNU0FOIGludG8gdGhlIHBpY3R1cmUgaGVyZS4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgcHJvdmlkZSB0aGlzIGp1c3RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDAyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtcS1kZWFkbGluZSBibG9jayBlbGV2YXRvciB0byBhbGxvdyBkaXNhYmxpbmcgSS9PIHByaW9yaXR5IGJ5IHNldHRpbmcgYHByaW9fYWdpbmdfZXhwaXJlYCB0byAwLiBJdCBpbnRyb2R1Y2VzIGxvZ2ljIGNoYW5nZXMgdG8gcm91dGUgYWxsIHJlcXVlc3RzIHRvIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQgd2hlbiBwcmlvcml0eSBpcyBkaXNhYmxlZCwgYW5kIG9wdGltaXplcyBwcmlvcml0eSBsb29rdXBzIGJ5IHVzaW5nIHRoZSBjYWNoZWQgYHJlcS1cdTAwM2VlbHYucHJpdlswXWAgcG9pbnRlciBpbnN0ZWFkIG9mIHJlY2FsY3VsYXRpbmcgaXQuIFRoZSBgcmVxLVx1MDAzZWVsdi5wcml2WzBdYCBmaWVsZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIE5VTEwgaW4gYGRkX3ByZXBhcmVfcmVxdWVzdGAgYW5kIHBvcHVsYXRlZCBpbiBgZGRfaW5zZXJ0X3JlcXVlc3RgLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcyBkdXJpbmcgcXVldWUgZnJlZXplL3F1aWVzY2UpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbXEtZGVhZGxpbmUgYmxvY2sgZWxldmF0b3IgdG8gYWxsb3cgZGlzYWJsaW5nIEkvTyBwcmlvcml0eSBieSBzZXR0aW5nIGBwcmlvX2FnaW5nX2V4cGlyZWAgdG8gMC4gSXQgaW50cm9kdWNlcyBsb2dpYyBjaGFuZ2VzIHRvIHJvdXRlIGFsbCByZXF1ZXN0cyB0byB0aGUgYmVzdC1lZmZvcnQgYnVja2V0IHdoZW4gcHJpb3JpdHkgaXMgZGlzYWJsZWQsIGFuZCBvcHRpbWl6ZXMgcHJpb3JpdHkgbG9va3VwcyBieSB1c2luZyB0aGUgY2FjaGVkIGByZXEtXHUwMDNlZWx2LnByaXZbMF1gIHBvaW50ZXIgaW5zdGVhZCBvZiByZWNhbGN1bGF0aW5nIGl0LiBUaGUgYHJlcS1cdTAwM2VlbHYucHJpdlswXWAgZmllbGQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBOVUxMIGluIGBkZF9wcmVwYXJlX3JlcXVlc3RgIGFuZCBwb3B1bGF0ZWQgaW4gYGRkX2luc2VydF9yZXF1ZXN0YCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGhhbmRsaW5nIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMgZHVyaW5nIHF1ZXVlIGZyZWV6ZS9xdWllc2NlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MTowMS4zNzMyNzg2NDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODY3MDAwNzk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUV9JT1NDSEVEX0RFQURMSU5FXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtcS1kZWFkbGluZSBibG9jayBlbGV2YXRvciB0byBhbGxvdyBkaXNhYmxpbmcgSS9PIHByaW9yaXR5IGJ5IHNldHRpbmcgYHByaW9fYWdpbmdfZXhwaXJlYCB0byAwLiBJdCBpbnRyb2R1Y2VzIGxvZ2ljIGNoYW5nZXMgdG8gcm91dGUgYWxsIHJlcXVlc3RzIHRvIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQgd2hlbiBwcmlvcml0eSBpcyBkaXNhYmxlZCwgYW5kIG9wdGltaXplcyBwcmlvcml0eSBsb29rdXBzIGJ5IHVzaW5nIHRoZSBjYWNoZWQgYHJlcS1cXHUwMDNlZWx2LnByaXZbMF1gIHBvaW50ZXIgaW5zdGVhZCBvZiByZWNhbGN1bGF0aW5nIGl0LiBUaGUgYHJlcS1cXHUwMDNlZWx2LnByaXZbMF1gIGZpZWxkIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gTlVMTCBpbiBgZGRfcHJlcGFyZV9yZXF1ZXN0YCBhbmQgcG9wdWxhdGVkIGluIGBkZF9pbnNlcnRfcmVxdWVzdGAsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgbm9yIGRvIHRoZXkgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBoYW5kbGluZyBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzIGR1cmluZyBxdWV1ZSBmcmVlemUvcXVpZXNjZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbXEtZGVhZGxpbmUgSS9PIHNjaGVkdWxlciB0byBzdXBwb3J0IGRpc2FibGluZyBJL08gcHJpb3JpdHkgYnkgc2V0dGluZyBgcHJpb19hZ2luZ19leHBpcmVgIHRvIDAuIEl0IGFkZHMgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiBgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVgIHdoaWNoIGZyZWV6ZXMgYW5kIHF1aWVzY2VzIHRoZSByZXF1ZXN0IHF1ZXVlIHRvIHNhZmVseSBzd2l0Y2ggdGhlIG1vZGUuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiB0aGUgYmxvY2sgbGF5ZXIgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2ZzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MTowMS4zNzMyODYxMDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5OTQxNzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg2NTc5N2VlNDg0OTMzMTViYmE4NzFlZThmZTY2ZDcwNDExODBiYTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjAgMDI6NDE6MDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svbXEtZGVhZGxpbmUuYyBiL2Jsb2NrL21xLWRlYWRsaW5lLmNcXG5pbmRleCA4MjRiZmMxN2IyYzY4Li45NWEwMGE2NzNiZTU1IDEwMDY0NFxcbi0tLSBhL2Jsb2NrL21xLWRlYWRsaW5lLmNcXG4rKysgYi9ibG9jay9tcS1kZWFkbGluZS5jXFxuQEAgLTMzLDcgKzMzLDEwIEBAIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVfZXhwaXJlID0gNSAqIEhaOyAvKiBkaXR0byBmb3Igd3JpdGVzLCB0aGVzZSBsaW1pdHMgYXJlIFNPXFxuICAqIFRpbWUgYWZ0ZXIgd2hpY2ggdG8gZGlzcGF0Y2ggbG93ZXIgcHJpb3JpdHkgcmVxdWVzdHMgZXZlbiBpZiBoaWdoZXJcXG4gICogcHJpb3JpdHkgcmVxdWVzdHMgYXJlIHBlbmRpbmcuXFxuICAqL1xcbi1zdGF0aWMgY29uc3QgaW50IHByaW9fYWdpbmdfZXhwaXJlID0gMTAgKiBIWjtcXG4rc3RhdGljIGludCBwcmlvX2FnaW5nX2V4cGlyZSA9IDEwICogTVNFQ19QRVJfU0VDO1xcbittb2R1bGVfcGFyYW0ocHJpb19hZ2luZ19leHBpcmUsIGludCwgMDY0NCk7XFxuK01PRFVMRV9QQVJNX0RFU0MocHJpb19hZ2luZ19leHBpcmUsXFxuK1xcdFxcdCBcXFwiRGVmYXVsdCBwcmlvX2FnaW5nX2V4cGlyZSBpbiBtaWxsaXNlY29uZHM7IDAgZGlzYWJsZXMgSS9PIHByaW9yaXR5LlxcXCIpO1xcbiBzdGF0aWMgY29uc3QgaW50IHdyaXRlc19zdGFydmVkID0gMjsgICAgLyogbWF4IHRpbWVzIHJlYWRzIGNhbiBzdGFydmUgYSB3cml0ZSAqL1xcbiBzdGF0aWMgY29uc3QgaW50IGZpZm9fYmF0Y2ggPSAxNjsgICAgICAgLyogIyBvZiBzZXF1ZW50aWFsIHJlcXVlc3RzIHRyZWF0ZWQgYXMgb25lXFxuIFxcdFxcdFxcdFxcdCAgICAgYnkgdGhlIGFib3ZlIHBhcmFtZXRlcnMuIEZvciB0aHJvdWdocHV0LiAqL1xcbkBAIC04Myw2ICs4Niw3IEBAIHN0cnVjdCBkZWFkbGluZV9kYXRhIHtcXG4gXFx0ICogcnVuIHRpbWUgZGF0YVxcbiBcXHQgKi9cXG4gXFxuK1xcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxO1xcdC8qIGFzc29jaWF0ZWQgcmVxdWVzdCBxdWV1ZSAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGRpc3BhdGNoO1xcbiBcXHRzdHJ1Y3QgZGRfcGVyX3ByaW8gcGVyX3ByaW9bRERfUFJJT19DT1VOVF07XFxuIFxcbkBAIC0xODQsMTAgKzE4OCw3IEBAIHN0YXRpYyB2b2lkIGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbiBzdGF0aWMgdm9pZCBkZF9yZXF1ZXN0X21lcmdlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcXG4gXFx0XFx0XFx0ICAgICAgZW51bSBlbHZfbWVyZ2UgdHlwZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLVxcdTAwM2VlbGV2YXRvci1cXHUwMDNlZWxldmF0b3JfZGF0YTtcXG4tXFx0Y29uc3QgdTggaW9wcmlvX2NsYXNzID0gZGRfcnFfaW9jbGFzcyhyZXEpO1xcbi1cXHRjb25zdCBlbnVtIGRkX3ByaW8gcHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107XFxuLVxcdHN0cnVjdCBkZF9wZXJfcHJpbyAqcGVyX3ByaW8gPSBcXHUwMDI2ZGQtXFx1MDAzZXBlcl9wcmlvW3ByaW9dO1xcbitcXHRzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gcmVxLVxcdTAwM2VlbHYucHJpdlswXTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIGlmIHRoZSBtZXJnZSB3YXMgYSBmcm9udCBtZXJnZSwgd2UgbmVlZCB0byByZXBvc2l0aW9uIHJlcXVlc3RcXG5AQCAtMjA1LDEyICsyMDYsMTEgQEAgc3RhdGljIHZvaWQgZGRfbWVyZ2VkX3JlcXVlc3RzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IHJlcXVlc3QgKm5leHQpXFxuIHtcXG4gXFx0c3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gcS1cXHUwMDNlZWxldmF0b3ItXFx1MDAzZWVsZXZhdG9yX2RhdGE7XFxuLVxcdGNvbnN0IHU4IGlvcHJpb19jbGFzcyA9IGRkX3JxX2lvY2xhc3MobmV4dCk7XFxuLVxcdGNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTtcXG4rXFx0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IG5leHQtXFx1MDAzZWVsdi5wcml2WzBdO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2ZGQtXFx1MDAzZWxvY2spO1xcbiBcXG4tXFx0ZGQtXFx1MDAzZXBlcl9wcmlvW3ByaW9dLnN0YXRzLm1lcmdlZCsrO1xcbitcXHRwZXJfcHJpby1cXHUwMDNlc3RhdHMubWVyZ2VkKys7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBpZiBuZXh0IGV4cGlyZXMgYmVmb3JlIHJxLCBhc3NpZ24gaXRzIGV4cGlyZSB0aW1lIHRvIHJxXFxuQEAgLTIyNyw3ICsyMjcsNyBAQCBzdGF0aWMgdm9pZCBkZF9tZXJnZWRfcmVxdWVzdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuIFxcdC8qXFxuIFxcdCAqIGtpbGwga25vd2xlZGdlIG9mIG5leHQsIHRoaXMgb25lIGlzIGEgZ29uZXJcXG4gXFx0ICovXFxuLVxcdGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHEsIFxcdTAwMjZkZC1cXHUwMDNlcGVyX3ByaW9bcHJpb10sIG5leHQpO1xcbitcXHRkZWFkbGluZV9yZW1vdmVfcmVxdWVzdChxLCBwZXJfcHJpbywgbmV4dCk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTQyNiw2ICs0MjYsMTUgQEAgc3RhdGljIHN0cnVjdCByZXF1ZXN0ICpkZF9kaXNwYXRjaF9wcmlvX2FnZWRfcmVxdWVzdHMoc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkLFxcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2ZGQtXFx1MDAzZWxvY2spO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogQSBwcmlvX2FnaW5nX2V4cGlyZSBvZiB6ZXJvIGRpc2FibGVzIEkvTyBwcmlvcml0eTogYWxsIHJlcXVlc3RzIGFyZVxcbitcXHQgKiBmaWxlZCBpbiB0aGUgRERfQkVfUFJJTyBidWNrZXQgYW5kIG11c3QgbmV2ZXIgYmUgZGlzcGF0Y2hlZCBhaGVhZCBvZlxcbitcXHQgKiBoaWdoZXIgcHJpb3JpdHkgcmVxdWVzdHMgdGhyb3VnaCB0aGlzIGFnaW5nIHBhdGgsIHdoaWNoIHdvdWxkIGNhdXNlXFxuK1xcdCAqIHByaW9yaXR5IGludmVyc2lvbi5cXG4rXFx0ICovXFxuK1xcdGlmIChkZC1cXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgPT0gMClcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbiBcXHRwcmlvX2NudCA9ICEhZGRfcXVldWVkKGRkLCBERF9SVF9QUklPKSArICEhZGRfcXVldWVkKGRkLCBERF9CRV9QUklPKSArXFxuIFxcdFxcdCAgICEhZGRfcXVldWVkKGRkLCBERF9JRExFX1BSSU8pO1xcbiBcXHRpZiAocHJpb19jbnQgXFx1MDAzYyAyKVxcbkBAIC01MzYsNiArNTQ1LDcgQEAgc3RhdGljIGludCBkZF9pbml0X3NjaGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGVxLVxcdTAwM2VlbGV2YXRvcl9kYXRhID0gZGQ7XFxuK1xcdGRkLVxcdTAwM2VxID0gcTtcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkZC1cXHUwMDNlZGlzcGF0Y2gpO1xcbiBcXHRmb3IgKHByaW8gPSAwOyBwcmlvIFxcdTAwM2M9IEREX1BSSU9fTUFYOyBwcmlvKyspIHtcXG5AQCAtNTUyLDcgKzU2Miw3IEBAIHN0YXRpYyBpbnQgZGRfaW5pdF9zY2hlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplcSlcXG4gXFx0ZGQtXFx1MDAzZWZyb250X21lcmdlcyA9IDE7XFxuIFxcdGRkLVxcdTAwM2VsYXN0X2RpciA9IEREX1dSSVRFO1xcbiBcXHRkZC1cXHUwMDNlZmlmb19iYXRjaCA9IGZpZm9fYmF0Y2g7XFxuLVxcdGRkLVxcdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9IHByaW9fYWdpbmdfZXhwaXJlO1xcbitcXHRkZC1cXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgPSBtc2Vjc190b19qaWZmaWVzKHByaW9fYWdpbmdfZXhwaXJlKTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmRkLVxcdTAwM2Vsb2NrKTtcXG4gXFxuIFxcdC8qIFdlIGRpc3BhdGNoIGZyb20gcmVxdWVzdCBxdWV1ZSB3aWRlIGluc3RlYWQgb2YgaHcgcXVldWUgKi9cXG5AQCAtNTczLDcgKzU4Myw4IEBAIHN0YXRpYyBpbnQgZGRfcmVxdWVzdF9tZXJnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKipycSxcXG4ge1xcbiBcXHRzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLVxcdTAwM2VlbGV2YXRvci1cXHUwMDNlZWxldmF0b3JfZGF0YTtcXG4gXFx0Y29uc3QgdTggaW9wcmlvX2NsYXNzID0gSU9QUklPX1BSSU9fQ0xBU1MoYmlvLVxcdTAwM2ViaV9pb3ByaW8pO1xcbi1cXHRjb25zdCBlbnVtIGRkX3ByaW8gcHJpbyA9IGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107XFxuK1xcdGNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gZGQtXFx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID09IDAgPyBERF9CRV9QUklPIDpcXG4rXFx0XFx0XFx0XFx0XFx0ICBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xcbiBcXHRzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gXFx1MDAyNmRkLVxcdTAwM2VwZXJfcHJpb1twcmlvXTtcXG4gXFx0c2VjdG9yX3Qgc2VjdG9yID0gYmlvX2VuZF9zZWN0b3IoYmlvKTtcXG4gXFx0c3RydWN0IHJlcXVlc3QgKl9fcnE7XFxuQEAgLTYzMyw3ICs2NDQsMTUgQEAgc3RhdGljIHZvaWQgZGRfaW5zZXJ0X3JlcXVlc3Qoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIHN0cnVjdCByZXF1ZXN0ICpycSxcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmRkLVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xcbitcXHQvKlxcbitcXHQgKiBXaGVuIHByaW9fYWdpbmdfZXhwaXJlIGlzIHplcm8sIEkvTyBwcmlvcml0eSBpcyBkaXNhYmxlZDogZmlsZSBldmVyeVxcbitcXHQgKiByZXF1ZXN0IGluIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQgc28gdGhhdCB0aGUgZGlzcGF0Y2ggcGF0aCBubyBsb25nZXJcXG4rXFx0ICogZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIFJULCBCRSBhbmQgSURMRSBjbGFzc2VzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGRkLVxcdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9PSAwKVxcbitcXHRcXHRwcmlvID0gRERfQkVfUFJJTztcXG4rXFx0ZWxzZVxcbitcXHRcXHRwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTtcXG4gXFx0cGVyX3ByaW8gPSBcXHUwMDI2ZGQtXFx1MDAzZXBlcl9wcmlvW3ByaW9dO1xcbiBcXHRpZiAoIXJxLVxcdTAwM2VlbHYucHJpdlswXSlcXG4gXFx0XFx0cGVyX3ByaW8tXFx1MDAzZXN0YXRzLmluc2VydGVkKys7XFxuQEAgLTc3Myw3ICs3OTIsNiBAQCBzdGF0aWMgc3NpemVfdCBfX0ZVTkMoc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXFxuIFxcdFNUT1JFX0ZVTkNUSU9OKF9fRlVOQywgX19QVFIsIE1JTiwgTUFYLCBtc2Vjc190b19qaWZmaWVzKVxcbiBTVE9SRV9KSUZGSUVTKGRlYWRsaW5lX3JlYWRfZXhwaXJlX3N0b3JlLCBcXHUwMDI2ZGQtXFx1MDAzZWZpZm9fZXhwaXJlW0REX1JFQURdLCAwLCBJTlRfTUFYKTtcXG4gU1RPUkVfSklGRklFUyhkZWFkbGluZV93cml0ZV9leHBpcmVfc3RvcmUsIFxcdTAwMjZkZC1cXHUwMDNlZmlmb19leHBpcmVbRERfV1JJVEVdLCAwLCBJTlRfTUFYKTtcXG4tU1RPUkVfSklGRklFUyhkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZSwgXFx1MDAyNmRkLVxcdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSwgMCwgSU5UX01BWCk7XFxuIFNUT1JFX0lOVChkZWFkbGluZV93cml0ZXNfc3RhcnZlZF9zdG9yZSwgXFx1MDAyNmRkLVxcdTAwM2V3cml0ZXNfc3RhcnZlZCwgSU5UX01JTiwgSU5UX01BWCk7XFxuIFNUT1JFX0lOVChkZWFkbGluZV9mcm9udF9tZXJnZXNfc3RvcmUsIFxcdTAwMjZkZC1cXHUwMDNlZnJvbnRfbWVyZ2VzLCAwLCAxKTtcXG4gU1RPUkVfSU5UKGRlYWRsaW5lX2ZpZm9fYmF0Y2hfc3RvcmUsIFxcdTAwMjZkZC1cXHUwMDNlZmlmb19iYXRjaCwgMCwgSU5UX01BWCk7XFxuQEAgLTc4MSw2ICs3OTksNDYgQEAgU1RPUkVfSU5UKGRlYWRsaW5lX2ZpZm9fYmF0Y2hfc3RvcmUsIFxcdTAwMjZkZC1cXHUwMDNlZmlmb19iYXRjaCwgMCwgSU5UX01BWCk7XFxuICN1bmRlZiBTVE9SRV9JTlRcXG4gI3VuZGVmIFNUT1JFX0pJRkZJRVNcXG4gXFxuKy8qXFxuKyAqIFdyaXRpbmcgemVybyB0byBwcmlvX2FnaW5nX2V4cGlyZSBkaXNhYmxlcyBJL08gcHJpb3JpdHk6IGFsbCByZXF1ZXN0cyBhcmVcXG4rICogdHJlYXRlZCBhcyBiZXN0LWVmZm9ydC4gVG8gYXZvaWQgcHJpb3JpdHkgaW52ZXJzaW9uIHdoaWxlIHRoZSBtb2RlIGlzIGJlaW5nXFxuKyAqIHN3aXRjaGVkLCBmaXJzdCBkcmFpbiBhbGwgaW4tZmxpZ2h0IEkvTyBieSBmb2xsb3dpbmcgdGhlIHNhbWUgc2VxdWVuY2UgdXNlZFxcbisgKiBieSBlbGV2YXRvcl9zd2l0Y2goKTogZnJlZXplIHRoZSBxdWV1ZSBzbyB0aGF0IG5ldyB1cHBlci1sYXllciBJL08gaXNcXG4rICogYmxvY2tlZCBhbmQgYWxsIG91dHN0YW5kaW5nIHJlcXVlc3RzIGNvbXBsZXRlLCBxdWllc2NlIHRoZSBxdWV1ZSBzbyB0aGF0IG5vXFxuKyAqIGRpc3BhdGNoIGlzIGluIHByb2dyZXNzLCB0aGVuIGZsaXAgcHJpb19hZ2luZ19leHBpcmUgdG8gemVyby4gTmV3IEkvT1xcbisgKiBxdWV1ZWQgYWZ0ZXIgdGhlIHN3aXRjaCBsYW5kcyBpbiB0aGUgYmVzdC1lZmZvcnQgYnVja2V0LlxcbisgKiBXcml0aW5nIGEgbm9uLXplcm8gdmFsdWUgKHJlLSllbmFibGVzIHByaW9yaXR5IHdpdGhvdXQgZHJhaW5pbmcuXFxuKyAqL1xcbitzdGF0aWMgc3NpemVfdCBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZShzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gZS1cXHUwMDNlZWxldmF0b3JfZGF0YTtcXG4rXFx0aW50IHZhbCwgcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N0cnRvaW50KHBhZ2UsIDAsIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdHZhbCA9IDA7XFxuK1xcdGVsc2UgaWYgKHZhbCBcXHUwMDNlIElOVF9NQVgpXFxuK1xcdFxcdHZhbCA9IElOVF9NQVg7XFxuK1xcdHZhbCA9IG1zZWNzX3RvX2ppZmZpZXModmFsKTtcXG4rXFxuK1xcdGlmICh2YWwgPT0gMCBcXHUwMDI2XFx1MDAyNiBkZC1cXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgIT0gMCkge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XFxuK1xcbitcXHRcXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUoZGQtXFx1MDAzZXEpO1xcbitcXHRcXHRibGtfbXFfcXVpZXNjZV9xdWV1ZShkZC1cXHUwMDNlcSk7XFxuK1xcdFxcdGRkLVxcdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9IDA7XFxuK1xcdFxcdGJsa19tcV91bnF1aWVzY2VfcXVldWUoZGQtXFx1MDAzZXEpO1xcbitcXHRcXHRibGtfbXFfdW5mcmVlemVfcXVldWUoZGQtXFx1MDAzZXEsIG1lbWZsYWdzKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZGQtXFx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID0gdmFsO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gY291bnQ7XFxuK31cXG4rXFxuICNkZWZpbmUgRERfQVRUUihuYW1lKSBcXFxcXFxuIFxcdF9fQVRUUihuYW1lLCAwNjQ0LCBkZWFkbGluZV8jI25hbWUjI19zaG93LCBkZWFkbGluZV8jI25hbWUjI19zdG9yZSlcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjQxOjAxLjc3MzM2NzQwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI3MjkwODgyOTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1RX0lPU0NIRURfREVBRExJTkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtcS1kZWFkbGluZSBJL08gc2NoZWR1bGVyIHRvIHN1cHBvcnQgZGlzYWJsaW5nIEkvTyBwcmlvcml0eSBieSBzZXR0aW5nIGBwcmlvX2FnaW5nX2V4cGlyZWAgdG8gMC4gSXQgYWRkcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAgd2hpY2ggZnJlZXplcyBhbmQgcXVpZXNjZXMgdGhlIHJlcXVlc3QgcXVldWUgdG8gc2FmZWx5IHN3aXRjaCB0aGUgbW9kZS4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBibG9jayBsYXllciB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzZnMgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2NTc5N2VlNDg0OTMzMTViYmE4NzFlZThmZTY2ZDcwNDExODBiYTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAwMjo0MTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL21xLWRlYWRsaW5lLmMgYi9ibG9jay9tcS1kZWFkbGluZS5jXG5pbmRleCA4MjRiZmMxN2IyYzY4Li45NWEwMGE2NzNiZTU1IDEwMDY0NFxuLS0tIGEvYmxvY2svbXEtZGVhZGxpbmUuY1xuKysrIGIvYmxvY2svbXEtZGVhZGxpbmUuY1xuQEAgLTMzLDcgKzMzLDEwIEBAIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVfZXhwaXJlID0gNSAqIEhaOyAvKiBkaXR0byBmb3Igd3JpdGVzLCB0aGVzZSBsaW1pdHMgYXJlIFNPXG4gICogVGltZSBhZnRlciB3aGljaCB0byBkaXNwYXRjaCBsb3dlciBwcmlvcml0eSByZXF1ZXN0cyBldmVuIGlmIGhpZ2hlclxuICAqIHByaW9yaXR5IHJlcXVlc3RzIGFyZSBwZW5kaW5nLlxuICAqL1xuLXN0YXRpYyBjb25zdCBpbnQgcHJpb19hZ2luZ19leHBpcmUgPSAxMCAqIEhaO1xuK3N0YXRpYyBpbnQgcHJpb19hZ2luZ19leHBpcmUgPSAxMCAqIE1TRUNfUEVSX1NFQztcbittb2R1bGVfcGFyYW0ocHJpb19hZ2luZ19leHBpcmUsIGludCwgMDY0NCk7XG4rTU9EVUxFX1BBUk1fREVTQyhwcmlvX2FnaW5nX2V4cGlyZSxcbitcdFx0IFwiRGVmYXVsdCBwcmlvX2FnaW5nX2V4cGlyZSBpbiBtaWxsaXNlY29uZHM7IDAgZGlzYWJsZXMgSS9PIHByaW9yaXR5LlwiKTtcbiBzdGF0aWMgY29uc3QgaW50IHdyaXRlc19zdGFydmVkID0gMjsgICAgLyogbWF4IHRpbWVzIHJlYWRzIGNhbiBzdGFydmUgYSB3cml0ZSAqL1xuIHN0YXRpYyBjb25zdCBpbnQgZmlmb19iYXRjaCA9IDE2OyAgICAgICAvKiAjIG9mIHNlcXVlbnRpYWwgcmVxdWVzdHMgdHJlYXRlZCBhcyBvbmVcbiBcdFx0XHRcdCAgICAgYnkgdGhlIGFib3ZlIHBhcmFtZXRlcnMuIEZvciB0aHJvdWdocHV0LiAqL1xuQEAgLTgzLDYgKzg2LDcgQEAgc3RydWN0IGRlYWRsaW5lX2RhdGEge1xuIFx0ICogcnVuIHRpbWUgZGF0YVxuIFx0ICovXG4gXG4rXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTtcdC8qIGFzc29jaWF0ZWQgcmVxdWVzdCBxdWV1ZSAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBkaXNwYXRjaDtcbiBcdHN0cnVjdCBkZF9wZXJfcHJpbyBwZXJfcHJpb1tERF9QUklPX0NPVU5UXTtcbiBcbkBAIC0xODQsMTAgKzE4OCw3IEBAIHN0YXRpYyB2b2lkIGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIHN0YXRpYyB2b2lkIGRkX3JlcXVlc3RfbWVyZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRcdCAgICAgIGVudW0gZWx2X21lcmdlIHR5cGUpXG4ge1xuLVx0c3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gcS1cdTAwM2VlbGV2YXRvci1cdTAwM2VlbGV2YXRvcl9kYXRhO1xuLVx0Y29uc3QgdTggaW9wcmlvX2NsYXNzID0gZGRfcnFfaW9jbGFzcyhyZXEpO1xuLVx0Y29uc3QgZW51bSBkZF9wcmlvIHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuLVx0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IFx1MDAyNmRkLVx1MDAzZXBlcl9wcmlvW3ByaW9dO1xuK1x0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IHJlcS1cdTAwM2VlbHYucHJpdlswXTtcbiBcbiBcdC8qXG4gXHQgKiBpZiB0aGUgbWVyZ2Ugd2FzIGEgZnJvbnQgbWVyZ2UsIHdlIG5lZWQgdG8gcmVwb3NpdGlvbiByZXF1ZXN0XG5AQCAtMjA1LDEyICsyMDYsMTEgQEAgc3RhdGljIHZvaWQgZGRfbWVyZ2VkX3JlcXVlc3RzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqbmV4dClcbiB7XG4gXHRzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLVx1MDAzZWVsZXZhdG9yLVx1MDAzZWVsZXZhdG9yX2RhdGE7XG4tXHRjb25zdCB1OCBpb3ByaW9fY2xhc3MgPSBkZF9ycV9pb2NsYXNzKG5leHQpO1xuLVx0Y29uc3QgZW51bSBkZF9wcmlvIHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuK1x0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IG5leHQtXHUwMDNlZWx2LnByaXZbMF07XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRkLVx1MDAzZWxvY2spO1xuIFxuLVx0ZGQtXHUwMDNlcGVyX3ByaW9bcHJpb10uc3RhdHMubWVyZ2VkKys7XG4rXHRwZXJfcHJpby1cdTAwM2VzdGF0cy5tZXJnZWQrKztcbiBcbiBcdC8qXG4gXHQgKiBpZiBuZXh0IGV4cGlyZXMgYmVmb3JlIHJxLCBhc3NpZ24gaXRzIGV4cGlyZSB0aW1lIHRvIHJxXG5AQCAtMjI3LDcgKzIyNyw3IEBAIHN0YXRpYyB2b2lkIGRkX21lcmdlZF9yZXF1ZXN0cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcdC8qXG4gXHQgKiBraWxsIGtub3dsZWRnZSBvZiBuZXh0LCB0aGlzIG9uZSBpcyBhIGdvbmVyXG4gXHQgKi9cbi1cdGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHEsIFx1MDAyNmRkLVx1MDAzZXBlcl9wcmlvW3ByaW9dLCBuZXh0KTtcbitcdGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHEsIHBlcl9wcmlvLCBuZXh0KTtcbiB9XG4gXG4gLypcbkBAIC00MjYsNiArNDI2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqZGRfZGlzcGF0Y2hfcHJpb19hZ2VkX3JlcXVlc3RzKHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCxcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGQtXHUwMDNlbG9jayk7XG4gXG4rXHQvKlxuK1x0ICogQSBwcmlvX2FnaW5nX2V4cGlyZSBvZiB6ZXJvIGRpc2FibGVzIEkvTyBwcmlvcml0eTogYWxsIHJlcXVlc3RzIGFyZVxuK1x0ICogZmlsZWQgaW4gdGhlIEREX0JFX1BSSU8gYnVja2V0IGFuZCBtdXN0IG5ldmVyIGJlIGRpc3BhdGNoZWQgYWhlYWQgb2ZcbitcdCAqIGhpZ2hlciBwcmlvcml0eSByZXF1ZXN0cyB0aHJvdWdoIHRoaXMgYWdpbmcgcGF0aCwgd2hpY2ggd291bGQgY2F1c2VcbitcdCAqIHByaW9yaXR5IGludmVyc2lvbi5cbitcdCAqL1xuK1x0aWYgKGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID09IDApXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuIFx0cHJpb19jbnQgPSAhIWRkX3F1ZXVlZChkZCwgRERfUlRfUFJJTykgKyAhIWRkX3F1ZXVlZChkZCwgRERfQkVfUFJJTykgK1xuIFx0XHQgICAhIWRkX3F1ZXVlZChkZCwgRERfSURMRV9QUklPKTtcbiBcdGlmIChwcmlvX2NudCBcdTAwM2MgMilcbkBAIC01MzYsNiArNTQ1LDcgQEAgc3RhdGljIGludCBkZF9pbml0X3NjaGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGVxLVx1MDAzZWVsZXZhdG9yX2RhdGEgPSBkZDtcbitcdGRkLVx1MDAzZXEgPSBxO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGQtXHUwMDNlZGlzcGF0Y2gpO1xuIFx0Zm9yIChwcmlvID0gMDsgcHJpbyBcdTAwM2M9IEREX1BSSU9fTUFYOyBwcmlvKyspIHtcbkBAIC01NTIsNyArNTYyLDcgQEAgc3RhdGljIGludCBkZF9pbml0X3NjaGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKVxuIFx0ZGQtXHUwMDNlZnJvbnRfbWVyZ2VzID0gMTtcbiBcdGRkLVx1MDAzZWxhc3RfZGlyID0gRERfV1JJVEU7XG4gXHRkZC1cdTAwM2VmaWZvX2JhdGNoID0gZmlmb19iYXRjaDtcbi1cdGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID0gcHJpb19hZ2luZ19leHBpcmU7XG4rXHRkZC1cdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9IG1zZWNzX3RvX2ppZmZpZXMocHJpb19hZ2luZ19leHBpcmUpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGQtXHUwMDNlbG9jayk7XG4gXG4gXHQvKiBXZSBkaXNwYXRjaCBmcm9tIHJlcXVlc3QgcXVldWUgd2lkZSBpbnN0ZWFkIG9mIGh3IHF1ZXVlICovXG5AQCAtNTczLDcgKzU4Myw4IEBAIHN0YXRpYyBpbnQgZGRfcmVxdWVzdF9tZXJnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKipycSxcbiB7XG4gXHRzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLVx1MDAzZWVsZXZhdG9yLVx1MDAzZWVsZXZhdG9yX2RhdGE7XG4gXHRjb25zdCB1OCBpb3ByaW9fY2xhc3MgPSBJT1BSSU9fUFJJT19DTEFTUyhiaW8tXHUwMDNlYmlfaW9wcmlvKTtcbi1cdGNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTtcbitcdGNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgPT0gMCA/IEREX0JFX1BSSU8gOlxuK1x0XHRcdFx0XHQgIGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107XG4gXHRzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gXHUwMDI2ZGQtXHUwMDNlcGVyX3ByaW9bcHJpb107XG4gXHRzZWN0b3JfdCBzZWN0b3IgPSBiaW9fZW5kX3NlY3RvcihiaW8pO1xuIFx0c3RydWN0IHJlcXVlc3QgKl9fcnE7XG5AQCAtNjMzLDcgKzY0NCwxNSBAQCBzdGF0aWMgdm9pZCBkZF9pbnNlcnRfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IHJlcXVlc3QgKnJxLFxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkZC1cdTAwM2Vsb2NrKTtcbiBcbi1cdHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuK1x0LypcbitcdCAqIFdoZW4gcHJpb19hZ2luZ19leHBpcmUgaXMgemVybywgSS9PIHByaW9yaXR5IGlzIGRpc2FibGVkOiBmaWxlIGV2ZXJ5XG4rXHQgKiByZXF1ZXN0IGluIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQgc28gdGhhdCB0aGUgZGlzcGF0Y2ggcGF0aCBubyBsb25nZXJcbitcdCAqIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBSVCwgQkUgYW5kIElETEUgY2xhc3Nlcy5cbitcdCAqL1xuK1x0aWYgKGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID09IDApXG4rXHRcdHByaW8gPSBERF9CRV9QUklPO1xuK1x0ZWxzZVxuK1x0XHRwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTtcbiBcdHBlcl9wcmlvID0gXHUwMDI2ZGQtXHUwMDNlcGVyX3ByaW9bcHJpb107XG4gXHRpZiAoIXJxLVx1MDAzZWVsdi5wcml2WzBdKVxuIFx0XHRwZXJfcHJpby1cdTAwM2VzdGF0cy5pbnNlcnRlZCsrO1xuQEAgLTc3Myw3ICs3OTIsNiBAQCBzdGF0aWMgc3NpemVfdCBfX0ZVTkMoc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXG4gXHRTVE9SRV9GVU5DVElPTihfX0ZVTkMsIF9fUFRSLCBNSU4sIE1BWCwgbXNlY3NfdG9famlmZmllcylcbiBTVE9SRV9KSUZGSUVTKGRlYWRsaW5lX3JlYWRfZXhwaXJlX3N0b3JlLCBcdTAwMjZkZC1cdTAwM2VmaWZvX2V4cGlyZVtERF9SRUFEXSwgMCwgSU5UX01BWCk7XG4gU1RPUkVfSklGRklFUyhkZWFkbGluZV93cml0ZV9leHBpcmVfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZpZm9fZXhwaXJlW0REX1dSSVRFXSwgMCwgSU5UX01BWCk7XG4tU1RPUkVfSklGRklFUyhkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZSwgXHUwMDI2ZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUsIDAsIElOVF9NQVgpO1xuIFNUT1JFX0lOVChkZWFkbGluZV93cml0ZXNfc3RhcnZlZF9zdG9yZSwgXHUwMDI2ZGQtXHUwMDNld3JpdGVzX3N0YXJ2ZWQsIElOVF9NSU4sIElOVF9NQVgpO1xuIFNUT1JFX0lOVChkZWFkbGluZV9mcm9udF9tZXJnZXNfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZyb250X21lcmdlcywgMCwgMSk7XG4gU1RPUkVfSU5UKGRlYWRsaW5lX2ZpZm9fYmF0Y2hfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZpZm9fYmF0Y2gsIDAsIElOVF9NQVgpO1xuQEAgLTc4MSw2ICs3OTksNDYgQEAgU1RPUkVfSU5UKGRlYWRsaW5lX2ZpZm9fYmF0Y2hfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZpZm9fYmF0Y2gsIDAsIElOVF9NQVgpO1xuICN1bmRlZiBTVE9SRV9JTlRcbiAjdW5kZWYgU1RPUkVfSklGRklFU1xuIFxuKy8qXG4rICogV3JpdGluZyB6ZXJvIHRvIHByaW9fYWdpbmdfZXhwaXJlIGRpc2FibGVzIEkvTyBwcmlvcml0eTogYWxsIHJlcXVlc3RzIGFyZVxuKyAqIHRyZWF0ZWQgYXMgYmVzdC1lZmZvcnQuIFRvIGF2b2lkIHByaW9yaXR5IGludmVyc2lvbiB3aGlsZSB0aGUgbW9kZSBpcyBiZWluZ1xuKyAqIHN3aXRjaGVkLCBmaXJzdCBkcmFpbiBhbGwgaW4tZmxpZ2h0IEkvTyBieSBmb2xsb3dpbmcgdGhlIHNhbWUgc2VxdWVuY2UgdXNlZFxuKyAqIGJ5IGVsZXZhdG9yX3N3aXRjaCgpOiBmcmVlemUgdGhlIHF1ZXVlIHNvIHRoYXQgbmV3IHVwcGVyLWxheWVyIEkvTyBpc1xuKyAqIGJsb2NrZWQgYW5kIGFsbCBvdXRzdGFuZGluZyByZXF1ZXN0cyBjb21wbGV0ZSwgcXVpZXNjZSB0aGUgcXVldWUgc28gdGhhdCBub1xuKyAqIGRpc3BhdGNoIGlzIGluIHByb2dyZXNzLCB0aGVuIGZsaXAgcHJpb19hZ2luZ19leHBpcmUgdG8gemVyby4gTmV3IEkvT1xuKyAqIHF1ZXVlZCBhZnRlciB0aGUgc3dpdGNoIGxhbmRzIGluIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQuXG4rICogV3JpdGluZyBhIG5vbi16ZXJvIHZhbHVlIChyZS0pZW5hYmxlcyBwcmlvcml0eSB3aXRob3V0IGRyYWluaW5nLlxuKyAqL1xuK3N0YXRpYyBzc2l6ZV90IGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSxcbitcdFx0XHRcdFx0XHQgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IGUtXHUwMDNlZWxldmF0b3JfZGF0YTtcbitcdGludCB2YWwsIHJldDtcbitcbitcdHJldCA9IGtzdHJ0b2ludChwYWdlLCAwLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHZhbCA9IDA7XG4rXHRlbHNlIGlmICh2YWwgXHUwMDNlIElOVF9NQVgpXG4rXHRcdHZhbCA9IElOVF9NQVg7XG4rXHR2YWwgPSBtc2Vjc190b19qaWZmaWVzKHZhbCk7XG4rXG4rXHRpZiAodmFsID09IDAgXHUwMDI2XHUwMDI2IGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlICE9IDApIHtcbitcdFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuK1xuK1x0XHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUoZGQtXHUwMDNlcSk7XG4rXHRcdGJsa19tcV9xdWllc2NlX3F1ZXVlKGRkLVx1MDAzZXEpO1xuK1x0XHRkZC1cdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9IDA7XG4rXHRcdGJsa19tcV91bnF1aWVzY2VfcXVldWUoZGQtXHUwMDNlcSk7XG4rXHRcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShkZC1cdTAwM2VxLCBtZW1mbGFncyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRkZC1cdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9IHZhbDtcbitcdH1cbitcbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4gI2RlZmluZSBERF9BVFRSKG5hbWUpIFxcXG4gXHRfX0FUVFIobmFtZSwgMDY0NCwgZGVhZGxpbmVfIyNuYW1lIyNfc2hvdywgZGVhZGxpbmVfIyNuYW1lIyNfc3RvcmUpXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MTowMS43NzMzNjg3NzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDMwMjcwNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1RLURlYWRsaW5lIFNjaGVkdWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBtcS1kZWFkbGluZS5jYCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBwcmlvX2FnaW5nX2V4cGlyZWAgYmVoYXZpb3IuIEl0IGxvb2tzIGxpa2UgaXQgaW50cm9kdWNlcyBhIG1vZHVsZSBwYXJhbWV0ZXIsIGBwcmlvX2FnaW5nX2V4cGlyZWAsIGFuZCB0aGVuIG1vZGlmaWVzIHRoZSBgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBoZXJlIGlzIHRoYXQgd2hlbiBgcHJpb19hZ2luZ19leHBpcmVgIGlzIHNldCB0byB6ZXJvIOKAkyBlc3NlbnRpYWxseSBkaXNhYmxpbmcgSS9PIHByaW9yaXR5IOKAkyB0aGUgY29kZSBub3cgZnJlZXplcyBhbmQgcXVpZXNjZXMgdGhlIHF1ZXVlLiBUaGF0J3MgYSBkZWZpbml0ZSBwb2ludCBvZiBpbnRlcmVzdCwgY29uY3VycmVuY3ktd2lzZS4gSXQgYWxzbyBjaGFuZ2VzIGhvdyByZXF1ZXN0cyBnZXQgaW5zZXJ0ZWQgYW5kIG1lcmdlZCwgZXNzZW50aWFsbHkgZnVubmVsaW5nIGV2ZXJ5dGhpbmcgaW50byB0aGUgYEREX0JFX1BSSU9gIGJ1Y2tldCB3aGVuIHByaW9yaXR5IGlzIG9mZi5cblxuTGV0J3Mgc2VlIGlmIHRoaXMgaXMgZXZlbiByZWFjaGFibGUgYW5kIGlmIGl0J3Mgd29ydGggdGhlIGVmZm9ydCBvZiBmdXp6aW5nLiBUaGUgZ29vZCBuZXdzIGlzLCB0aGUgbXEtZGVhZGxpbmUgc2NoZWR1bGVyIGlzIGEgKmNvcmUqIGJsb2NrIGxheWVyIGNvbXBvbmVudC4gVGhhdCBtYWtlcyBpdCBhIHByaW1lIHRhcmdldC4gQW5kLCB5ZXAsIHRoZSBzeXNmcyBzdG9yZSBmdW5jdGlvbiwgYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCwgaXMgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGAvc3lzL2Jsb2NrL1x1MDAzY2Rldlx1MDAzZS9xdWV1ZS9pb3NjaGVkL3ByaW9fYWdpbmdfZXhwaXJlYC4gUGVyZmVjdC4gVGhhdCBtYWtlcyBpdCBlYXN5IHRvIHRyaWdnZXIgdGhlIG5ldyBiZWhhdmlvci4gUGx1cywgYGRkX2luc2VydF9yZXF1ZXN0YCwgYGRkX3JlcXVlc3RfbWVyZ2VgLCBgZGRfbWVyZ2VkX3JlcXVlc3RzYCwgYW5kIGBkZF9yZXF1ZXN0X21lcmdlZGAgYXJlIGFsbCB0b3VjaGVkIGR1cmluZyBub3JtYWwgYmxvY2sgSS9PIG9wZXJhdGlvbnMsIG1lYW5pbmcgd2UgZG9uJ3QgbmVlZCBzb21lIG9ic2N1cmUgc2V0IG9mIGNpcmN1bXN0YW5jZXMgdG8gdHJpZ2dlciB0aGUgY29kZS5cblxuSXMgaXQgZnV6emFibGU/IEFic29sdXRlbHkuIFRoaXMgcGF0Y2ggaXMgbWVzc2luZyB3aXRoIHRoZSAqY29yZSogYmxvY2sgbGF5ZXIgc2NoZWR1bGVyIGxvZ2ljLCBhbmQgaXQncyB0aGUgZGVmYXVsdCBmb3IgYSBsb3Qgb2YgYmxvY2sgZGV2aWNlcy4gVGhlIGZyZWV6aW5nIGFuZCBxdWllc2Npbmcgb2YgdGhlIHF1ZXVlIHNwZWNpZmljYWxseSBzY3JlYW1zIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggYXJlIGFsd2F5cyBnb29kIHRhcmdldHMgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3Mgc2VlIHdoaWNoIGNvbmZpZyBvcHRpb24gaXMgbmVlZGVkIHRvIGVuYWJsZSB0aGUgbXEtZGVhZGxpbmUgc2NoZWR1bGVyLiBJdCBhcHBlYXJzIHRvIGJlIGBDT05GSUdfTVFfSU9TQ0hFRF9ERUFETElORWAuIEknbGwgZG91YmxlLWNoZWNrIGBibG9jay9LY29uZmlnLmlvc2NoZWRgIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ0MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjQxOjA4LjIwMzY0MjkwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTg2MDc4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVFfSU9TQ0hFRF9ERUFETElORVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZy5pb3NjaGVkPTI9bWVudSBcXFwiSU8gU2NoZWR1bGVyc1xcXCJcXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMy1cXG5ibG9jay9LY29uZmlnLmlvc2NoZWQ6NDpjb25maWcgTVFfSU9TQ0hFRF9ERUFETElORVxcbmJsb2NrL0tjb25maWcuaW9zY2hlZC01LVxcdHRyaXN0YXRlIFxcXCJNUSBkZWFkbGluZSBJL08gc2NoZWR1bGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MTowOC4yNTM1MTE0OThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODEyNDgxNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRm9jdXM6IERlYWRsaW5lIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiB3ZSdyZSBkZWFsaW5nIHdpdGggaXMgYE1RX0lPU0NIRURfREVBRExJTkVgLiBSaWdodCwgbGV0J3MgZmlndXJlIG91dCB3aGVyZSB3ZSBzaG91bGQgYmUgZGlyZWN0aW5nIG91ciBmdXp6aW5nIGVmZm9ydHMuIExldCdzIHNlZSB3aGF0IGZ1bmN0aW9ucyB3ZXJlIG1vZGlmaWVkIHJlY2VudGx5IGluIHRoaXMgY29udGV4dC4gQWgsIGhlcmUncyB0aGUgbGlzdDogYGRkX3JlcXVlc3RfbWVyZ2VkYCwgYGRkX21lcmdlZF9yZXF1ZXN0c2AsIGBkZF9kaXNwYXRjaF9wcmlvX2FnZWRfcmVxdWVzdHNgLCBgZGRfaW5pdF9zY2hlZGAsIGBkZF9yZXF1ZXN0X21lcmdlYCwgYW5kIGBkZF9pbnNlcnRfcmVxdWVzdGAsIGFuZCB0aGF0IGludGVyZXN0aW5nIG9uZSwgYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYC5cblxuYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCBpcyBpbW1lZGlhdGVseSBncmFiYmluZyBteSBhdHRlbnRpb24uIEl0J3MgaW52b2x2ZWQgaW4gdHJpZ2dlcmluZyB0aGUgZnJlZXplL3F1aWVzY2UgbG9naWMsIHdoaWNoIGlzIGFsd2F5cyBhbiBpbnRlcmVzdGluZyB0YXJnZXQgZm9yIGZpbmRpbmcgY29uY3VycmVuY3kgaXNzdWVzIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzLiBEZWZpbml0ZWx5IGEgc3Ryb25nIGNhbmRpZGF0ZS4gVGhlbiB3ZSBoYXZlIGBkZF9pbnNlcnRfcmVxdWVzdGAgYW5kIGBkZF9yZXF1ZXN0X21lcmdlYCB3aGljaCBhcmUgbGlrZWx5IGhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhleSdyZSBnb2luZyB0byBiZSBleGVyY2lzZWQgZnJlcXVlbnRseSwgd2hpY2ggbWVhbnMgbW9yZSBwb3RlbnRpYWwgZm9yIGZpbmRpbmcgYnVncy4gYGRkX2Rpc3BhdGNoX3ByaW9fYWdlZF9yZXF1ZXN0c2AgaXMgaW4gdGhhdCBzYW1lIHNwaGVyZSwgYnV0IGxpa2VseSBsZXNzIGhvdCB0aGFuIHRoZSBpbnNlcnQgYW5kIG1lcmdlLiBIbW0sIHdhaXQgYSBzZWNvbmQsIG9uIGZ1cnRoZXIgcmVmbGVjdGlvbiwgSSdtIHRoaW5raW5nIHRoYXQgYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCBpcyB0aGUgbW9yZSBpbnRlcmVzdGluZyBvbmUgdG8gaGl0IGVhcmx5LCBzaW5jZSBpdCBpcyBub3QgaG90LXBhdGggYW5kIG1pZ2h0IGhhdmUgZGlmZmVyZW50IGVycm9yIGhhbmRsaW5nLlxuXG5CdXQgYmVmb3JlIEkgY29tbWl0IHRvIHRob3NlLCBsZXQncyBqdXN0IGRvIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHdlIG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzIGluIHRoZSBtb2RpZmljYXRpb24gc2V0LiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMzNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MToxNS4wNjU5OTUxMjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyOTM5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svbXEtZGVhZGxpbmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9tcS1kZWFkbGluZS5jPTc5Nz1TVE9SRV9JTlQoZGVhZGxpbmVfZmlmb19iYXRjaF9zdG9yZSwgXFx1MDAyNmRkLVxcdTAwM2VmaWZvX2JhdGNoLCAwLCBJTlRfTUFYKTtcXG4tLVxcbmJsb2NrL21xLWRlYWRsaW5lLmMtODExLSAqL1xcbmJsb2NrL21xLWRlYWRsaW5lLmM6ODEyOnN0YXRpYyBzc2l6ZV90IGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSxcXG5ibG9jay9tcS1kZWFkbGluZS5jLTgxMy1cXHRcXHRcXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MToxNS4xMTQyOTQ5NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTkzMTQzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkZ1enppbmcgdGhlIERlYWRsaW5lIFNjaGVkdWxlcidzIEV4cGlyeSBNZWNoYW5pc20qKlxuXG5BbHJpZ2h0LCBzbyBgZGVhZGxpbmVfcHJpb19hZ2luZ19leHBpcmVfc3RvcmVgLi4uIHRoYXQncyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXRcIiB0byBtZS4gSXQncyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgdW5jb3ZlcmluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgcmVsYXRlZCB0byBob3cgdGhlIERlYWRsaW5lIEkvTyBzY2hlZHVsZXIgbWFuYWdlcyBpdHMgcHJpb3JpdHkgYWdpbmcgYW5kIGV4cGlyYXRpb24gbG9naWMuIEknZCBleHBlY3QgYW4gaW50ZXJhY3RpdmUgdXNlciB0byBoYXZlIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucyBoZXJlLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSBzdGVwIHdvdWxkIGJlIHRvIHJhcGlkbHkgZGV0ZXJtaW5lIGFueSBkZXBlbmRlbmNpZXMsIGFzIEnigJlkIGV4cGVjdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZmVhdHVyZSB0byBiZSBzaWduaWZpY2FudCBvbiBhbnl0aGluZyB0aGF0IGRlcGVuZHMgb24gaXQuIFNwZWNpZmljYWxseSwgaXMgYE1RX0lPU0NIRURfREVBRExJTkVgIGEgY29uZGl0aW9uYWxseSBjb21waWxlZCBmZWF0dXJlPyBBcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIG9yIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIGxvYWRlZCBvciBlbmFibGVkIGZvciB0aGlzIHRvIGZ1bmN0aW9uPyBBbnkgZGVwZW5kZW5jaWVzIGhlcmUgd2lsbCBkZXRlcm1pbmUgaG93IEkgZm9jdXMgdGhlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MToxOC42MTM2MTE3NTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4MDQzMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9LY29uZmlnLmlvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZy5pb3NjaGVkPTMwPWNvbmZpZyBCRlFfR1JPVVBfSU9TQ0hFRFxcbmJsb2NrL0tjb25maWcuaW9zY2hlZC0zMS0gICAgICAgYm9vbCBcXFwiQkZRIGhpZXJhcmNoaWNhbCBzY2hlZHVsaW5nIHN1cHBvcnRcXFwiXFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkOjMyOiAgICAgICBkZXBlbmRzIG9uIElPU0NIRURfQkZRIFxcdTAwMjZcXHUwMDI2IEJMS19DR1JPVVBcXG5ibG9jay9LY29uZmlnLmlvc2NoZWQtMzMtICAgICAgIGRlZmF1bHQgeVxcbi0tXFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkPTQwPWNvbmZpZyBCRlFfQ0dST1VQX0RFQlVHXFxuYmxvY2svS2NvbmZpZy5pb3NjaGVkLTQxLVxcdGJvb2wgXFxcIkJGUSBJTyBjb250cm9sbGVyIGRlYnVnZ2luZ1xcXCJcXG5ibG9jay9LY29uZmlnLmlvc2NoZWQ6NDI6XFx0ZGVwZW5kcyBvbiBCRlFfR1JPVVBfSU9TQ0hFRFxcbmJsb2NrL0tjb25maWcuaW9zY2hlZC00My1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjQxOjE4LjY2MTQyMjA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1MTE0OTI0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBEZWFkbGluZSBJL08gU2NoZWR1bGVyKipcblxuSG1tLCBzbyBgTVFfSU9TQ0hFRF9ERUFETElORWAgaXNuJ3Qgc2hvd2luZyBhbnkgZXhwbGljaXQgYGRlcGVuZHMgb25gIGNsYXVzZXMuIFRoYXQncyBhIGxpdHRsZSB1bnVzdWFsLCBJJ2QgZXhwZWN0ICpzb21ldGhpbmcqIHRoZXJlLiBUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQncyBpbnRlZ3JhdGVkLCBJIG5lZWQgdG8gc2VlIHdoYXQncyBjb250cm9sbGluZyBpdHMgYnVpbGQgY29uZmlndXJhdGlvbi4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBsb29rIGlzIHdpdGhpbiB0aGUga2VybmVsJ3MgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IGBibG9jay9LY29uZmlnLmlvc2NoZWRgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBzY2hlZHVsZXIgb3B0aW9ucyBhcmUgZGVmaW5lZCBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIGFyZSBsYWlkIG91dC4gVGltZSB0byBvcGVuIHRoYXQgdXAgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ292ZXJuaW5nIHRoZSBpbmNsdXNpb24gb2YgYE1RX0lPU0NIRURfREVBRExJTkVgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgZmVhdHVyZXMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZmlndXJpbmcgb3V0IGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyB0aGF0IGFyZW4ndCBpbW1lZGlhdGVseSBvYnZpb3VzIGZyb20gYSBxdWljayBnbGFuY2UgYXQgdGhlIG1haW4gY29uZmlnIHN0cnVjdHVyZS4gTGV0J3Mgc2VlIGlmIHdlIGNhbiB0ZWFzZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MToyMi45MTI1NzMzNjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svS2NvbmZpZy5pb3NjaGVkXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0bWVudSBcXFwiSU8gU2NoZWR1bGVyc1xcXCJcXG4gICAzOlxcdFxcbiAgIDQ6XFx0Y29uZmlnIE1RX0lPU0NIRURfREVBRExJTkVcXG4gICA1OlxcdFxcdHRyaXN0YXRlIFxcXCJNUSBkZWFkbGluZSBJL08gc2NoZWR1bGVyXFxcIlxcbiAgIDY6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIE1RIHZlcnNpb24gb2YgdGhlIGRlYWRsaW5lIElPIHNjaGVkdWxlci5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIE1RX0lPU0NIRURfS1lCRVJcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJLeWJlciBJL08gc2NoZWR1bGVyXFxcIlxcbiAgMTI6XFx0XFx0ZGVmYXVsdCB5XFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHQgIFRoZSBLeWJlciBJL08gc2NoZWR1bGVyIGlzIGEgbG93LW92ZXJoZWFkIHNjaGVkdWxlciBzdWl0YWJsZSBmb3JcXG4gIDE1OlxcdFxcdCAgbXVsdGlxdWV1ZSBhbmQgb3RoZXIgZmFzdCBkZXZpY2VzLiBHaXZlbiB0YXJnZXQgbGF0ZW5jaWVzIGZvciByZWFkcyBhbmRcXG4gIDE2OlxcdFxcdCAgc3luY2hyb25vdXMgd3JpdGVzLCBpdCB3aWxsIHNlbGYtdHVuZSBxdWV1ZSBkZXB0aHMgdG8gYWNoaWV2ZSB0aGF0XFxuICAxNzpcXHRcXHQgIGdvYWwuXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBJT1NDSEVEX0JGUVxcbiAgMjA6XFx0XFx0dHJpc3RhdGUgXFxcIkJGUSBJL08gc2NoZWR1bGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MToyMi45MTI2MzA4ODdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA2ODc5MTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEkvTyBTY2hlZHVsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgTVFfSU9TQ0hFRF9ERUFETElORWAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQgaXQgZG9lc24ndCBzZWVtIHRvIGRlcGVuZCBvbiBhbnl0aGluZyBlbHNlLiBHb29kLiBOb3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQncyBjaGFuZ2VkIGluIGBibG9jay9tcS1kZWFkbGluZS5jYC4gSSdtIHNlZWluZyBtb2RpZmljYXRpb25zIHRvIHF1aXRlIGEgZmV3IGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBkZF9yZXF1ZXN0X21lcmdlZGAsIGBkZF9tZXJnZWRfcmVxdWVzdHNgLCBgZGRfZGlzcGF0Y2hfcHJpb19hZ2VkX3JlcXVlc3RzYCwgYGRkX2luaXRfc2NoZWRgLCBgZGRfcmVxdWVzdF9tZXJnZWAsIGBkZF9pbnNlcnRfcmVxdWVzdGAsIGFuZCB0aGF0IGtleSBvbmUsIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAuXG5cbkFoLCB0aGVyZSBpdCBpcyEgYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCBpcyB0aGUgbHluY2hwaW4gaGVyZS4gVGhpcyBpcyB3aGVyZSB0aGUgcXVldWUgZnJlZXplL3F1aWVzY2UgbG9naWMgaXMgdHJpZ2dlcmVkLCBhbGwgcmVsYXRlZCB0byB0aGUgbmV3IGFiaWxpdHkgdG8gZGlzYWJsZSBJL08gcHJpb3JpdHkgYnkgc2V0dGluZyBgcHJpb19hZ2luZ19leHBpcmVgIHRvIHplcm8uIEFsc28sIGBkZF9pbml0X3NjaGVkYCBoYXMgYSBtb2RpZmljYXRpb24gc2V0dGluZyBgZGQtXHUwMDNlcSA9IHE7YC5cblxuUmlnaHQsIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAgZ2V0cyBteSBhdHRlbnRpb247IHRoYXQncyB0aGUgcHJpbWFyeSB0YXJnZXQgZm9yIGZ1enppbmcuIEl0J3MgdGhlIHBvaW50IG9mIGVudHJ5IGZvciB0aGUgbmV3IHN5c2ZzIGludGVyZmFjZSB0aGF0J3MgaW50cm9kdWNlZCB3aXRoIHRoaXMgcGF0Y2guIEkgd2lsbCBiZSBmb2N1c2luZyBteSBmdXp6aW5nIGVmZm9ydHMgaGVyZS4gSSdsbCBtYWtlIHN1cmUgdGhhdCBgRm9jdXNTeW1ib2xzYCBpcyBzZXQgdG8gYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYC4gQW5kLCBvZiBjb3Vyc2UsIHRoZSBjb25maWd1cmF0aW9uIGBFbmFibGVDb25maWdzYCB3aWxsIGJlIHNldCB0byBgTVFfSU9TQ0hFRF9ERUFETElORWAgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuVGhpcyBwYXRjaCBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IGludHJvZHVjZXMgbmV3IGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gd2l0aGluIHRoZSBibG9jayBsYXllciB0aGF0IGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBzeXNmcywgYW5kIHRoZXJlZm9yZSByaXBlIGZvciBmdXp6aW5nLiBJIGNhbiBzZWUgdGhlIHBvdGVudGlhbCBmb3IgZXhwbG9pdGFibGUgcmFjZSBjb25kaXRpb25zIHdoZW4gd2UgYWxsb3cgdXNlcnNwYWNlIHRvIGNvbnRyb2wgcXVldWUgYmVoYXZpb3IgdGhpcyB3YXkuIFRpbWUgdG8gZ2V0IHRvIHdvcmshXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNjAsIk91dHB1dFRva2VucyI6MTQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NDE6MjguOTgxNDI2NjQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI4MjAwNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1RX0lPU0NIRURfREVBRExJTkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtcS1kZWFkbGluZSBJL08gc2NoZWR1bGVyIHRvIHN1cHBvcnQgZGlzYWJsaW5nIEkvTyBwcmlvcml0eSBieSBzZXR0aW5nIGBwcmlvX2FnaW5nX2V4cGlyZWAgdG8gMC4gSXQgYWRkcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uIGBkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZWAgd2hpY2ggZnJlZXplcyBhbmQgcXVpZXNjZXMgdGhlIHJlcXVlc3QgcXVldWUgdG8gc2FmZWx5IHN3aXRjaCB0aGUgbW9kZS4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBibG9jayBsYXllciB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzZnMgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVFfSU9TQ0hFRF9ERUFETElORVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1xLWRlYWRsaW5lIEkvTyBzY2hlZHVsZXIgdG8gc3VwcG9ydCBkaXNhYmxpbmcgSS9PIHByaW9yaXR5IGJ5IHNldHRpbmcgYHByaW9fYWdpbmdfZXhwaXJlYCB0byAwLiBJdCBhZGRzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24gYGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlYCB3aGljaCBmcmVlemVzIGFuZCBxdWllc2NlcyB0aGUgcmVxdWVzdCBxdWV1ZSB0byBzYWZlbHkgc3dpdGNoIHRoZSBtb2RlLiBUaGlzIGludHJvZHVjZXMgbmV3IGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGJsb2NrIGxheWVyIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDI6NDE6MjkuMDY0MjU0NTM4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk3OTAxOTAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjQxOjI5LjA2NDgzNjUyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDk3ODQzMDc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1xLWRlYWRsaW5lIGJsb2NrIGVsZXZhdG9yIHRvIGFsbG93IGRpc2FibGluZyBJL08gcHJpb3JpdHkgYnkgc2V0dGluZyBgcHJpb19hZ2luZ19leHBpcmVgIHRvIDAuIEl0IGludHJvZHVjZXMgbG9naWMgY2hhbmdlcyB0byByb3V0ZSBhbGwgcmVxdWVzdHMgdG8gdGhlIGJlc3QtZWZmb3J0IGJ1Y2tldCB3aGVuIHByaW9yaXR5IGlzIGRpc2FibGVkLCBhbmQgb3B0aW1pemVzIHByaW9yaXR5IGxvb2t1cHMgYnkgdXNpbmcgdGhlIGNhY2hlZCBgcmVxLVxcdTAwM2VlbHYucHJpdlswXWAgcG9pbnRlciBpbnN0ZWFkIG9mIHJlY2FsY3VsYXRpbmcgaXQuIFRoZSBgcmVxLVxcdTAwM2VlbHYucHJpdlswXWAgZmllbGQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBOVUxMIGluIGBkZF9wcmVwYXJlX3JlcXVlc3RgIGFuZCBwb3B1bGF0ZWQgaW4gYGRkX2luc2VydF9yZXF1ZXN0YCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBub3IgZG8gdGhleSBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGhhbmRsaW5nIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMgZHVyaW5nIHF1ZXVlIGZyZWV6ZS9xdWllc2NlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2NTc5N2VlNDg0OTMzMTViYmE4NzFlZThmZTY2ZDcwNDExODBiYTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAwMjo0MTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL21xLWRlYWRsaW5lLmMgYi9ibG9jay9tcS1kZWFkbGluZS5jXG5pbmRleCA4MjRiZmMxN2IyYzY4Li45NWEwMGE2NzNiZTU1IDEwMDY0NFxuLS0tIGEvYmxvY2svbXEtZGVhZGxpbmUuY1xuKysrIGIvYmxvY2svbXEtZGVhZGxpbmUuY1xuQEAgLTMzLDcgKzMzLDEwIEBAIHN0YXRpYyBjb25zdCBpbnQgd3JpdGVfZXhwaXJlID0gNSAqIEhaOyAvKiBkaXR0byBmb3Igd3JpdGVzLCB0aGVzZSBsaW1pdHMgYXJlIFNPXG4gICogVGltZSBhZnRlciB3aGljaCB0byBkaXNwYXRjaCBsb3dlciBwcmlvcml0eSByZXF1ZXN0cyBldmVuIGlmIGhpZ2hlclxuICAqIHByaW9yaXR5IHJlcXVlc3RzIGFyZSBwZW5kaW5nLlxuICAqL1xuLXN0YXRpYyBjb25zdCBpbnQgcHJpb19hZ2luZ19leHBpcmUgPSAxMCAqIEhaO1xuK3N0YXRpYyBpbnQgcHJpb19hZ2luZ19leHBpcmUgPSAxMCAqIE1TRUNfUEVSX1NFQztcbittb2R1bGVfcGFyYW0ocHJpb19hZ2luZ19leHBpcmUsIGludCwgMDY0NCk7XG4rTU9EVUxFX1BBUk1fREVTQyhwcmlvX2FnaW5nX2V4cGlyZSxcbitcdFx0IFwiRGVmYXVsdCBwcmlvX2FnaW5nX2V4cGlyZSBpbiBtaWxsaXNlY29uZHM7IDAgZGlzYWJsZXMgSS9PIHByaW9yaXR5LlwiKTtcbiBzdGF0aWMgY29uc3QgaW50IHdyaXRlc19zdGFydmVkID0gMjsgICAgLyogbWF4IHRpbWVzIHJlYWRzIGNhbiBzdGFydmUgYSB3cml0ZSAqL1xuIHN0YXRpYyBjb25zdCBpbnQgZmlmb19iYXRjaCA9IDE2OyAgICAgICAvKiAjIG9mIHNlcXVlbnRpYWwgcmVxdWVzdHMgdHJlYXRlZCBhcyBvbmVcbiBcdFx0XHRcdCAgICAgYnkgdGhlIGFib3ZlIHBhcmFtZXRlcnMuIEZvciB0aHJvdWdocHV0LiAqL1xuQEAgLTgzLDYgKzg2LDcgQEAgc3RydWN0IGRlYWRsaW5lX2RhdGEge1xuIFx0ICogcnVuIHRpbWUgZGF0YVxuIFx0ICovXG4gXG4rXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTtcdC8qIGFzc29jaWF0ZWQgcmVxdWVzdCBxdWV1ZSAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBkaXNwYXRjaDtcbiBcdHN0cnVjdCBkZF9wZXJfcHJpbyBwZXJfcHJpb1tERF9QUklPX0NPVU5UXTtcbiBcbkBAIC0xODQsMTAgKzE4OCw3IEBAIHN0YXRpYyB2b2lkIGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIHN0YXRpYyB2b2lkIGRkX3JlcXVlc3RfbWVyZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRcdCAgICAgIGVudW0gZWx2X21lcmdlIHR5cGUpXG4ge1xuLVx0c3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gcS1cdTAwM2VlbGV2YXRvci1cdTAwM2VlbGV2YXRvcl9kYXRhO1xuLVx0Y29uc3QgdTggaW9wcmlvX2NsYXNzID0gZGRfcnFfaW9jbGFzcyhyZXEpO1xuLVx0Y29uc3QgZW51bSBkZF9wcmlvIHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuLVx0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IFx1MDAyNmRkLVx1MDAzZXBlcl9wcmlvW3ByaW9dO1xuK1x0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IHJlcS1cdTAwM2VlbHYucHJpdlswXTtcbiBcbiBcdC8qXG4gXHQgKiBpZiB0aGUgbWVyZ2Ugd2FzIGEgZnJvbnQgbWVyZ2UsIHdlIG5lZWQgdG8gcmVwb3NpdGlvbiByZXF1ZXN0XG5AQCAtMjA1LDEyICsyMDYsMTEgQEAgc3RhdGljIHZvaWQgZGRfbWVyZ2VkX3JlcXVlc3RzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqbmV4dClcbiB7XG4gXHRzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLVx1MDAzZWVsZXZhdG9yLVx1MDAzZWVsZXZhdG9yX2RhdGE7XG4tXHRjb25zdCB1OCBpb3ByaW9fY2xhc3MgPSBkZF9ycV9pb2NsYXNzKG5leHQpO1xuLVx0Y29uc3QgZW51bSBkZF9wcmlvIHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuK1x0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IG5leHQtXHUwMDNlZWx2LnByaXZbMF07XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRkLVx1MDAzZWxvY2spO1xuIFxuLVx0ZGQtXHUwMDNlcGVyX3ByaW9bcHJpb10uc3RhdHMubWVyZ2VkKys7XG4rXHRwZXJfcHJpby1cdTAwM2VzdGF0cy5tZXJnZWQrKztcbiBcbiBcdC8qXG4gXHQgKiBpZiBuZXh0IGV4cGlyZXMgYmVmb3JlIHJxLCBhc3NpZ24gaXRzIGV4cGlyZSB0aW1lIHRvIHJxXG5AQCAtMjI3LDcgKzIyNyw3IEBAIHN0YXRpYyB2b2lkIGRkX21lcmdlZF9yZXF1ZXN0cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcdC8qXG4gXHQgKiBraWxsIGtub3dsZWRnZSBvZiBuZXh0LCB0aGlzIG9uZSBpcyBhIGdvbmVyXG4gXHQgKi9cbi1cdGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHEsIFx1MDAyNmRkLVx1MDAzZXBlcl9wcmlvW3ByaW9dLCBuZXh0KTtcbitcdGRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHEsIHBlcl9wcmlvLCBuZXh0KTtcbiB9XG4gXG4gLypcbkBAIC00MjYsNiArNDI2LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqZGRfZGlzcGF0Y2hfcHJpb19hZ2VkX3JlcXVlc3RzKHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCxcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGQtXHUwMDNlbG9jayk7XG4gXG4rXHQvKlxuK1x0ICogQSBwcmlvX2FnaW5nX2V4cGlyZSBvZiB6ZXJvIGRpc2FibGVzIEkvTyBwcmlvcml0eTogYWxsIHJlcXVlc3RzIGFyZVxuK1x0ICogZmlsZWQgaW4gdGhlIEREX0JFX1BSSU8gYnVja2V0IGFuZCBtdXN0IG5ldmVyIGJlIGRpc3BhdGNoZWQgYWhlYWQgb2ZcbitcdCAqIGhpZ2hlciBwcmlvcml0eSByZXF1ZXN0cyB0aHJvdWdoIHRoaXMgYWdpbmcgcGF0aCwgd2hpY2ggd291bGQgY2F1c2VcbitcdCAqIHByaW9yaXR5IGludmVyc2lvbi5cbitcdCAqL1xuK1x0aWYgKGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID09IDApXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuIFx0cHJpb19jbnQgPSAhIWRkX3F1ZXVlZChkZCwgRERfUlRfUFJJTykgKyAhIWRkX3F1ZXVlZChkZCwgRERfQkVfUFJJTykgK1xuIFx0XHQgICAhIWRkX3F1ZXVlZChkZCwgRERfSURMRV9QUklPKTtcbiBcdGlmIChwcmlvX2NudCBcdTAwM2MgMilcbkBAIC01MzYsNiArNTQ1LDcgQEAgc3RhdGljIGludCBkZF9pbml0X3NjaGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGVxLVx1MDAzZWVsZXZhdG9yX2RhdGEgPSBkZDtcbitcdGRkLVx1MDAzZXEgPSBxO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGQtXHUwMDNlZGlzcGF0Y2gpO1xuIFx0Zm9yIChwcmlvID0gMDsgcHJpbyBcdTAwM2M9IEREX1BSSU9fTUFYOyBwcmlvKyspIHtcbkBAIC01NTIsNyArNTYyLDcgQEAgc3RhdGljIGludCBkZF9pbml0X3NjaGVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgKmVxKVxuIFx0ZGQtXHUwMDNlZnJvbnRfbWVyZ2VzID0gMTtcbiBcdGRkLVx1MDAzZWxhc3RfZGlyID0gRERfV1JJVEU7XG4gXHRkZC1cdTAwM2VmaWZvX2JhdGNoID0gZmlmb19iYXRjaDtcbi1cdGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID0gcHJpb19hZ2luZ19leHBpcmU7XG4rXHRkZC1cdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9IG1zZWNzX3RvX2ppZmZpZXMocHJpb19hZ2luZ19leHBpcmUpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGQtXHUwMDNlbG9jayk7XG4gXG4gXHQvKiBXZSBkaXNwYXRjaCBmcm9tIHJlcXVlc3QgcXVldWUgd2lkZSBpbnN0ZWFkIG9mIGh3IHF1ZXVlICovXG5AQCAtNTczLDcgKzU4Myw4IEBAIHN0YXRpYyBpbnQgZGRfcmVxdWVzdF9tZXJnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKipycSxcbiB7XG4gXHRzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLVx1MDAzZWVsZXZhdG9yLVx1MDAzZWVsZXZhdG9yX2RhdGE7XG4gXHRjb25zdCB1OCBpb3ByaW9fY2xhc3MgPSBJT1BSSU9fUFJJT19DTEFTUyhiaW8tXHUwMDNlYmlfaW9wcmlvKTtcbi1cdGNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTtcbitcdGNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUgPT0gMCA/IEREX0JFX1BSSU8gOlxuK1x0XHRcdFx0XHQgIGlvcHJpb19jbGFzc190b19wcmlvW2lvcHJpb19jbGFzc107XG4gXHRzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gXHUwMDI2ZGQtXHUwMDNlcGVyX3ByaW9bcHJpb107XG4gXHRzZWN0b3JfdCBzZWN0b3IgPSBiaW9fZW5kX3NlY3RvcihiaW8pO1xuIFx0c3RydWN0IHJlcXVlc3QgKl9fcnE7XG5AQCAtNjMzLDcgKzY0NCwxNSBAQCBzdGF0aWMgdm9pZCBkZF9pbnNlcnRfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IHJlcXVlc3QgKnJxLFxuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkZC1cdTAwM2Vsb2NrKTtcbiBcbi1cdHByaW8gPSBpb3ByaW9fY2xhc3NfdG9fcHJpb1tpb3ByaW9fY2xhc3NdO1xuK1x0LypcbitcdCAqIFdoZW4gcHJpb19hZ2luZ19leHBpcmUgaXMgemVybywgSS9PIHByaW9yaXR5IGlzIGRpc2FibGVkOiBmaWxlIGV2ZXJ5XG4rXHQgKiByZXF1ZXN0IGluIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQgc28gdGhhdCB0aGUgZGlzcGF0Y2ggcGF0aCBubyBsb25nZXJcbitcdCAqIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBSVCwgQkUgYW5kIElETEUgY2xhc3Nlcy5cbitcdCAqL1xuK1x0aWYgKGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlID09IDApXG4rXHRcdHByaW8gPSBERF9CRV9QUklPO1xuK1x0ZWxzZVxuK1x0XHRwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTtcbiBcdHBlcl9wcmlvID0gXHUwMDI2ZGQtXHUwMDNlcGVyX3ByaW9bcHJpb107XG4gXHRpZiAoIXJxLVx1MDAzZWVsdi5wcml2WzBdKVxuIFx0XHRwZXJfcHJpby1cdTAwM2VzdGF0cy5pbnNlcnRlZCsrO1xuQEAgLTc3Myw3ICs3OTIsNiBAQCBzdGF0aWMgc3NpemVfdCBfX0ZVTkMoc3RydWN0IGVsZXZhdG9yX3F1ZXVlICplLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXG4gXHRTVE9SRV9GVU5DVElPTihfX0ZVTkMsIF9fUFRSLCBNSU4sIE1BWCwgbXNlY3NfdG9famlmZmllcylcbiBTVE9SRV9KSUZGSUVTKGRlYWRsaW5lX3JlYWRfZXhwaXJlX3N0b3JlLCBcdTAwMjZkZC1cdTAwM2VmaWZvX2V4cGlyZVtERF9SRUFEXSwgMCwgSU5UX01BWCk7XG4gU1RPUkVfSklGRklFUyhkZWFkbGluZV93cml0ZV9leHBpcmVfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZpZm9fZXhwaXJlW0REX1dSSVRFXSwgMCwgSU5UX01BWCk7XG4tU1RPUkVfSklGRklFUyhkZWFkbGluZV9wcmlvX2FnaW5nX2V4cGlyZV9zdG9yZSwgXHUwMDI2ZGQtXHUwMDNlcHJpb19hZ2luZ19leHBpcmUsIDAsIElOVF9NQVgpO1xuIFNUT1JFX0lOVChkZWFkbGluZV93cml0ZXNfc3RhcnZlZF9zdG9yZSwgXHUwMDI2ZGQtXHUwMDNld3JpdGVzX3N0YXJ2ZWQsIElOVF9NSU4sIElOVF9NQVgpO1xuIFNUT1JFX0lOVChkZWFkbGluZV9mcm9udF9tZXJnZXNfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZyb250X21lcmdlcywgMCwgMSk7XG4gU1RPUkVfSU5UKGRlYWRsaW5lX2ZpZm9fYmF0Y2hfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZpZm9fYmF0Y2gsIDAsIElOVF9NQVgpO1xuQEAgLTc4MSw2ICs3OTksNDYgQEAgU1RPUkVfSU5UKGRlYWRsaW5lX2ZpZm9fYmF0Y2hfc3RvcmUsIFx1MDAyNmRkLVx1MDAzZWZpZm9fYmF0Y2gsIDAsIElOVF9NQVgpO1xuICN1bmRlZiBTVE9SRV9JTlRcbiAjdW5kZWYgU1RPUkVfSklGRklFU1xuIFxuKy8qXG4rICogV3JpdGluZyB6ZXJvIHRvIHByaW9fYWdpbmdfZXhwaXJlIGRpc2FibGVzIEkvTyBwcmlvcml0eTogYWxsIHJlcXVlc3RzIGFyZVxuKyAqIHRyZWF0ZWQgYXMgYmVzdC1lZmZvcnQuIFRvIGF2b2lkIHByaW9yaXR5IGludmVyc2lvbiB3aGlsZSB0aGUgbW9kZSBpcyBiZWluZ1xuKyAqIHN3aXRjaGVkLCBmaXJzdCBkcmFpbiBhbGwgaW4tZmxpZ2h0IEkvTyBieSBmb2xsb3dpbmcgdGhlIHNhbWUgc2VxdWVuY2UgdXNlZFxuKyAqIGJ5IGVsZXZhdG9yX3N3aXRjaCgpOiBmcmVlemUgdGhlIHF1ZXVlIHNvIHRoYXQgbmV3IHVwcGVyLWxheWVyIEkvTyBpc1xuKyAqIGJsb2NrZWQgYW5kIGFsbCBvdXRzdGFuZGluZyByZXF1ZXN0cyBjb21wbGV0ZSwgcXVpZXNjZSB0aGUgcXVldWUgc28gdGhhdCBub1xuKyAqIGRpc3BhdGNoIGlzIGluIHByb2dyZXNzLCB0aGVuIGZsaXAgcHJpb19hZ2luZ19leHBpcmUgdG8gemVyby4gTmV3IEkvT1xuKyAqIHF1ZXVlZCBhZnRlciB0aGUgc3dpdGNoIGxhbmRzIGluIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQuXG4rICogV3JpdGluZyBhIG5vbi16ZXJvIHZhbHVlIChyZS0pZW5hYmxlcyBwcmlvcml0eSB3aXRob3V0IGRyYWluaW5nLlxuKyAqL1xuK3N0YXRpYyBzc2l6ZV90IGRlYWRsaW5lX3ByaW9fYWdpbmdfZXhwaXJlX3N0b3JlKHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZSxcbitcdFx0XHRcdFx0XHQgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IGUtXHUwMDNlZWxldmF0b3JfZGF0YTtcbitcdGludCB2YWwsIHJldDtcbitcbitcdHJldCA9IGtzdHJ0b2ludChwYWdlLCAwLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHZhbCA9IDA7XG4rXHRlbHNlIGlmICh2YWwgXHUwMDNlIElOVF9NQVgpXG4rXHRcdHZhbCA9IElOVF9NQVg7XG4rXHR2YWwgPSBtc2Vjc190b19qaWZmaWVzKHZhbCk7XG4rXG4rXHRpZiAodmFsID09IDAgXHUwMDI2XHUwMDI2IGRkLVx1MDAzZXByaW9fYWdpbmdfZXhwaXJlICE9IDApIHtcbitcdFx0dW5zaWduZWQgaW50IG1lbWZsYWdzO1xuK1xuK1x0XHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUoZGQtXHUwMDNlcSk7XG4rXHRcdGJsa19tcV9xdWllc2NlX3F1ZXVlKGRkLVx1MDAzZXEpO1xuK1x0XHRkZC1cdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9IDA7XG4rXHRcdGJsa19tcV91bnF1aWVzY2VfcXVldWUoZGQtXHUwMDNlcSk7XG4rXHRcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShkZC1cdTAwM2VxLCBtZW1mbGFncyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRkZC1cdTAwM2VwcmlvX2FnaW5nX2V4cGlyZSA9IHZhbDtcbitcdH1cbitcbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4gI2RlZmluZSBERF9BVFRSKG5hbWUpIFxcXG4gXHRfX0FUVFIobmFtZSwgMDY0NCwgZGVhZGxpbmVfIyNuYW1lIyNfc2hvdywgZGVhZGxpbmVfIyNuYW1lIyNfc3RvcmUpXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MToyOS4wNjQ4MzkxMThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4MjEzODQzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZWFkbGluZSBJL08gU2NoZWR1bGVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyB0aGUgYG1xLWRlYWRsaW5lYCBzY2hlZHVsZXIsIHNwZWNpZmljYWxseSBpbiBgYmxvY2svbXEtZGVhZGxpbmUuY2AuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdGhhdCBpdCdzIGdvb2QgdG8gc2VlIHNvbWUgb3B0aW1pemF0aW9ucywgYnV0IGxldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZG93bnNpZGVzLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGNoYW5nZSB0byBtYWtlIGBwcmlvX2FnaW5nX2V4cGlyZWAgYSBtb2R1bGUgcGFyYW1ldGVyIGluc3RlYWQgb2YgYSBgc3RhdGljIGNvbnN0YC4gVGhhdCdzIGEgcmVhc29uYWJsZSBjaGFuZ2UsIGFsbG93aW5nIGZvciBydW50aW1lIHR1bmluZyBvZiB0aGUgYWdpbmcgdGltZW91dC4gVGhhdCdzIGZpbmUuXG5cblRoZW4sIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCBsb29rcyBsaWtlIGl0J3Mgb3B0aW1pemluZyBob3cgcHJpb3JpdHktc3BlY2lmaWMgZGF0YSBpcyBhY2Nlc3NlZC4gSXQncyByZXBsYWNpbmcgdGhlIGxvb2t1cCBiYXNlZCBvbiBgaW9wcmlvX2NsYXNzYCB3aXRoIGEgZGlyZWN0IGFjY2VzcyB1c2luZyBgcmVxLVx1MDAzZWVsdi5wcml2WzBdYCBpbiBgZGRfcmVxdWVzdF9tZXJnZWRgIGFuZCBgZGRfbWVyZ2VkX3JlcXVlc3RzYC4gVGhpcyBpcyBhIGNsZWFyIG9wdGltaXphdGlvbiBpZiB0aGUgYXNzdW1wdGlvbiB0aGF0IGByZXEtXHUwMDNlZWx2LnByaXZbMF1gIGlzIGNvcnJlY3RseSBpbml0aWFsaXplZCBpcyBtZXQuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gbW90aXZhdGlvbiBpcyB0byBza2lwIHRoZSBpbmRpcmVjdGlvbiBvZiBjYWxjdWxhdGluZyB0aGUgcHJpb3JpdHkuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgZGlyZWN0IGFjY2VzcyBpcyBzYWZlLiBUaGUgY29kZSBjb21tZW50IHBvaW50cyBvdXQgdGhhdCBgcmVxLVx1MDAzZWVsdi5wcml2WzBdYCBpcyBpbml0aWFsaXplZCB0byBgcGVyX3ByaW9gIGluIGBkZF9pbnNlcnRfcmVxdWVzdGAuIE15IGZpcnN0IGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXMgdGhlcmUgYW55IHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3c/IFNpbmNlIHRoaXMgaXMgYWxsIGludGVybmFsIGJsb2NrIGxheWVyIHNjaGVkdWxpbmcgbG9naWMsIHRoZXJlJ3Mgbm8gZGlyZWN0IGV4cG9zdXJlIHRvIHVzZXJzcGFjZS4gR29vZC5cblxuSSdtIHRoaW5raW5nLCBpcyBgcmVxLVx1MDAzZWVsdi5wcml2WzBdYCBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkICpiZWZvcmUqIGBkZF9yZXF1ZXN0X21lcmdlZGAgb3IgYGRkX21lcmdlZF9yZXF1ZXN0c2AgYXJlIGNhbGxlZD8gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSByZW1lbWJlciB0aGF0IGBkZF9yZXF1ZXN0X21lcmdlYCBhbmQgYGRkX21lcmdlZF9yZXF1ZXN0c2AgZGVhbCB3aXRoIG1lcmdpbmcgb3IgbWVyZ2luZyByZXF1ZXN0cywgYW5kIGEgYml0IG9mIGEgcmUtcmVhZCBpbmRpY2F0ZXMgdGhlIHJlcXVlc3QgaXMgYWxyZWFkeSBpbiB0aGUgZWxldmF0b3IsIHRodXMgaXQgKm11c3QqIGhhdmUgYmVlbiBpbnNlcnRlZCB2aWEgYGRkX2luc2VydF9yZXF1ZXN0YC4gU28gYHJlcS1cdTAwM2VlbHYucHJpdlswXWAgc2hvdWxkIGJlIGluaXRpYWxpemVkLiBFdmVuIGlmIGl0J3Mgbm90LCBhIGJhZCBwb2ludGVyIGRlcmVmZXJlbmNlIHdvdWxkIGNyYXNoIHRoZSBzeXN0ZW07IEtBU0FOIHdvdWxkIGNhdGNoIGl0LiBUaGUgY29udGV4dCBvZiBgZWx2LnByaXZgIG1lYW5zIHRoaXMgaXMgbm90IGEgY29uY2VybiBmb3IgaW5mb3JtYXRpb24gbGVha2FnZS4gVGhpcyBpcyBwdXJlbHkgYW4gaW50ZXJuYWwgYmxvY2sgbGF5ZXIgc3RhdGUgY29uY2Vybi5cblxuSG93ZXZlciwgSSdtIG5vdyB3b25kZXJpbmcsIGV2ZW4gaWYgS0FTQU4gd291bGQgY2F0Y2ggYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGlzIHRoZXJlIGEgcmlzayBvZiBLTVNBTiBmaW5kaW5nIGEgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCB0aGF0IEtBU0FOIG1pZ2h0IG1pc3M/IElmIGByZXEtXHUwMDNlZWx2LnByaXZbMF1gIGNvbnRhaW5zIGdhcmJhZ2UgZnJvbSBhIHByZXZpb3VzIGFsbG9jYXRpb24sIEtNU0FOIHdvdWxkIGNhdGNoIGl0LiBIb3dldmVyLCBgcmVxYCBpcyBhbGxvY2F0ZWQgZnJvbSBhIHNsYWIgY2FjaGUsIGFuZCBgZWx2LnByaXZgIGlzIHBhcnQgb2YgYHN0cnVjdCByZXF1ZXN0YC4gU28gdGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgYHN0cnVjdCByZXF1ZXN0YCBpcyB6ZXJvZWQuIEkgdGhpbmsgYGJsa19tcV9hbGxvY19yZXF1ZXN0YCBpbml0aWFsaXplcyBgcmVxYCwgYnV0IEkgc2hvdWxkIHZlcmlmeSB0aGlzIGFuZCBjaGVjayBpZiBgZWx2LnByaXZgIGlzIHplcm9lZCB1c2luZyBgZ3JlcHBlcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MTo0MC44ODYyMjcwMjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTg2NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVsdlxcXFwucHJpdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmZxLWlvc2NoZWQuYz0zNzQ9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgYmZxX2xhdGVfc3RhYmxlX21lcmdpbmcgPSA2MDA7XFxuYmxvY2svYmZxLWlvc2NoZWQuYy0zNzUtXFxuYmxvY2svYmZxLWlvc2NoZWQuYzozNzY6I2RlZmluZSBSUV9CSUMocnEpXFx0XFx0KChzdHJ1Y3QgYmZxX2lvX2NxICopKChycSktXFx1MDAzZWVsdi5wcml2WzBdKSlcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjM3NzojZGVmaW5lIFJRX0JGUVEocnEpXFx0XFx0KChycSktXFx1MDAzZWVsdi5wcml2WzFdKVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtMzc4LVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz02MTQ4PXN0YXRpYyBib29sIF9fYmZxX2luc2VydF9yZXF1ZXN0KHN0cnVjdCBiZnFfZGF0YSAqYmZxZCwgc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02MTgzLVxcdFxcdGJmcV9wdXRfcXVldWUob2xkX2JmcXEpO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjE4NDpcXHRcXHRycS1cXHUwMDNlZWx2LnByaXZbMV0gPSBuZXdfYmZxcTtcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTYxODUtXFx0fVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz02NjQ2PXN0YXRpYyB2b2lkIGJmcV9maW5pc2hfcmVxdWV1ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjY5Ni1cXHQgKi9cXG5ibG9jay9iZnEtaW9zY2hlZC5jOjY2OTc6XFx0cnEtXFx1MDAzZWVsdi5wcml2WzBdID0gTlVMTDtcXG5ibG9jay9iZnEtaW9zY2hlZC5jOjY2OTg6XFx0cnEtXFx1MDAzZWVsdi5wcml2WzFdID0gTlVMTDtcXG5ibG9jay9iZnEtaW9zY2hlZC5jLTY2OTktfVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYz02ODA3PXN0YXRpYyB2b2lkIGJmcV9wcmVwYXJlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuYmxvY2svYmZxLWlvc2NoZWQuYy02ODE1LVxcdCAqL1xcbmJsb2NrL2JmcS1pb3NjaGVkLmM6NjgxNjpcXHRycS1cXHUwMDNlZWx2LnByaXZbMF0gPSBycS1cXHUwMDNlZWx2LnByaXZbMV0gPSBOVUxMO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjgxNy19XFxuLS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jPTY5Mjg9c3RhdGljIHN0cnVjdCBiZnFfcXVldWUgKmJmcV9pbml0X3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcXG4tLVxcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjk2MS1cXG5ibG9jay9iZnEtaW9zY2hlZC5jOjY5NjI6XFx0cnEtXFx1MDAzZWVsdi5wcml2WzBdID0gYmljO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmM6Njk2MzpcXHRycS1cXHUwMDNlZWx2LnByaXZbMV0gPSBiZnFxO1xcbmJsb2NrL2JmcS1pb3NjaGVkLmMtNjk2NC1cXG4tLVxcbmJsb2NrL2t5YmVyLWlvc2NoZWQuYz01MjM9c3RhdGljIGludCBycV9nZXRfZG9tYWluX3Rva2VuKHN0cnVjdCByZXF1ZXN0ICpycSlcXG5ibG9jay9reWJlci1pb3NjaGVkLmMtNTI0LXtcXG5ibG9jay9reWJlci1pb3NjaGVkLmM6NTI1OlxcdHJldHVybiAobG9uZylycS1cXHUwMDNlZWx2LnByaXZbMF07XFxuYmxvY2sva3liZXItaW9zY2hlZC5jLTUyNi19XFxuLS1cXG5ibG9jay9reWJlci1pb3NjaGVkLmM9NTI4PXN0YXRpYyB2b2lkIHJxX3NldF9kb21haW5fdG9rZW4oc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgdG9rZW4pXFxuYmxvY2sva3liZXItaW9zY2hlZC5jLTUyOS17XFxuYmxvY2sva3liZXItaW9zY2hlZC5jOjUzMDpcXHRycS1cXHUwMDNlZWx2LnByaXZbMF0gPSAodm9pZCAqKShsb25nKXRva2VuO1xcbmJsb2NrL2t5YmVyLWlvc2NoZWQuYy01MzEtfVxcbi0tXFxuYmxvY2svbXEtZGVhZGxpbmUuYz0xODg9c3RhdGljIHZvaWQgZGRfcmVxdWVzdF9tZXJnZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuLS1cXG5ibG9jay9tcS1kZWFkbGluZS5jLTE5MC17XFxuYmxvY2svbXEtZGVhZGxpbmUuYzoxOTE6XFx0c3RydWN0IGRkX3Blcl9wcmlvICpwZXJfcHJpbyA9IHJlcS1cXHUwMDNlZWx2LnByaXZbMF07XFxuYmxvY2svbXEtZGVhZGxpbmUuYy0xOTItXFxuLS1cXG5ibG9jay9tcS1kZWFkbGluZS5jPTIwNT1zdGF0aWMgdm9pZCBkZF9tZXJnZWRfcmVxdWVzdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuLS1cXG5ibG9jay9tcS1kZWFkbGluZS5jLTIwOC1cXHRzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLVxcdTAwM2VlbGV2YXRvci1cXHUwMDNlZWxldmF0b3JfZGF0YTtcXG5ibG9jay9tcS1kZWFkbGluZS5jOjIwOTpcXHRzdHJ1Y3QgZGRfcGVyX3ByaW8gKnBlcl9wcmlvID0gbmV4dC1cXHUwMDNlZWx2LnByaXZbMF07XFxuYmxvY2svbXEtZGVhZGxpbmUuYy0yMTAtXFxuLS1cXG5ibG9jay9tcS1kZWFkbGluZS5jPTYzND1zdGF0aWMgdm9pZCBkZF9pbnNlcnRfcmVxdWVzdChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCwgc3RydWN0IHJlcXVlc3QgKnJxLFxcbi0tXFxuYmxvY2svbXEtZGVhZGxpbmUuYy02NTYtXFx0cGVyX3ByaW8gPSBcXHUwMDI2ZGQtXFx1MDAzZXBlcl9wcmlvW3ByaW9dO1xcbmJsb2NrL21xLWRlYWRsaW5lLmM6NjU3OlxcdGlmICghcnEtXFx1MDAzZWVsdi5wcml2WzBdKVxcbmJsb2NrL21xLWRlYWRsaW5lLmMtNjU4LVxcdFxcdHBlcl9wcmlvLVxcdTAwM2VzdGF0cy5pbnNlcnRlZCsrO1xcbmJsb2NrL21xLWRlYWRsaW5lLmM6NjU5OlxcdHJxLVxcdTAwM2VlbHYucHJpdlswXSA9IHBlcl9wcmlvO1xcbmJsb2NrL21xLWRlYWRsaW5lLmMtNjYwLVxcbi0tXFxuYmxvY2svbXEtZGVhZGxpbmUuYz03MTE9c3RhdGljIHZvaWQgZGRfcHJlcGFyZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSlcXG5ibG9jay9tcS1kZWFkbGluZS5jLTcxMi17XFxuYmxvY2svbXEtZGVhZGxpbmUuYzo3MTM6XFx0cnEtXFx1MDAzZWVsdi5wcml2WzBdID0gTlVMTDtcXG5ibG9jay9tcS1kZWFkbGluZS5jLTcxNC19XFxuLS1cXG5ibG9jay9tcS1kZWFkbGluZS5jPTcxOT1zdGF0aWMgdm9pZCBkZF9maW5pc2hfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuYmxvY2svbXEtZGVhZGxpbmUuYy03MjAte1xcbmJsb2NrL21xLWRlYWRsaW5lLmM6NzIxOlxcdHN0cnVjdCBkZF9wZXJfcHJpbyAqcGVyX3ByaW8gPSBycS1cXHUwMDNlZWx2LnByaXZbMF07XFxuYmxvY2svbXEtZGVhZGxpbmUuYy03MjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDAyOjQxOjQwLjkzMzIxOTUyNloiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTEwMDIwNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgU2FmZXR5KipcblxuT2theSwgc28gSSd2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCwgYW5kIG15IGluaXRpYWwgY29uY2VybiBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXMgYmVlbiBwdXQgdG8gcmVzdC4gSSBzZWUgdGhhdCBgZGRfcHJlcGFyZV9yZXF1ZXN0YCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGBycS1cdTAwM2VlbHYucHJpdlswXSA9IE5VTEw7YCwgd2hpY2ggaW1tZWRpYXRlbHkgbWl0aWdhdGVzIGFueSByaXNrIHRoZXJlLiBUaGlzIHBhdGNoIGZvY3VzZXMgc29sZWx5IG9uIG1vZGlmeWluZyB0aGUgbXEtZGVhZGxpbmUgZWxldmF0b3IgdG8gYWxsb3cgZm9yIGRpc2FibGluZyBJL08gcHJpb3JpdHkgYnkgc2V0dGluZyBgcHJpb19hZ2luZ19leHBpcmVgIHRvIHplcm8uIEl0J3MgYSBsb2dpYyBjaGFuZ2Ugd2l0aGluIHRoZSBibG9jayBsYXllciwgbm90IGEgc3RydWN0dXJhbCBvbmUgdGhhdCBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy5cblxuSSBxdWlja2x5IHNjYW5uZWQgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyB0byBjb25maXJtIHRoaXMuIFRoZSBjaGFuZ2VzIGxpa2U6XG5cbmBgYGNcbi1cdGNvbnN0IGVudW0gZGRfcHJpbyBwcmlvID0gaW9wcmlvX2NsYXNzX3RvX3ByaW9baW9wcmlvX2NsYXNzXTtcbi1cdHN0cnVjdCBkZF9wZXJfcHJpbyAqcGVyX3ByaW8gPSBcdTAwMjZkZC1cdTAwM2VwZXJfcHJpb1twcmlvXTtcbitcdHN0cnVjdCBkZF9wZXJfcHJpbyAqcGVyX3ByaW8gPSByZXEtXHUwMDNlZWx2LnByaXZbMF07XG5gYGBcblxuLi4uYXJlIGp1c3QgdXNpbmcgYSBjYWNoZWQgcG9pbnRlciwgd2hpY2ggaXMgcGVyZmVjdGx5IHNhZmUuIFNpbWlsYXJseSwgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHJlZ2FyZGluZyBgcHJpb19hZ2luZ19leHBpcmVgIGlzIGFsc28gc2FmZSwgYW5kIHRoZSBzeXNmcyBzdG9yZSBoYW5kbGVyIGlzIGNsZWFuLlxuXG5HaXZlbiB0aGUgZXhpc3RpbmcgaW5pdGlhbGl6YXRpb24sIGFuZCB0aGUgdHlwZSBvZiBjaGFuZ2VzIGJlaW5nIG1hZGUsIEknbSBjb25maWRlbnQgdGhhdCBzdGFuZGFyZCBkZXRlY3Rpb24gdG9vbHMgbGlrZSBLQVNBTiBhbmQgb3RoZXJzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIOKAkyB0aGluZ3MgbGlrZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIFVzZS1BZnRlci1GcmVlIGNvbmRpdGlvbnMuIFRoZXJlJ3Mgbm8gbmVlZCB0byBicmluZyBLTVNBTiBpbnRvIHRoZSBwaWN0dXJlIGhlcmUuIFRoZXJlZm9yZSwgSSB3aWxsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIHByb3ZpZGUgdGhpcyBqdXN0aWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzQ4LCJPdXRwdXRUb2tlbnMiOjI0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwMjo0MTo1MC4wNDMyNDM4MzFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtcS1kZWFkbGluZSBibG9jayBlbGV2YXRvciB0byBhbGxvdyBkaXNhYmxpbmcgSS9PIHByaW9yaXR5IGJ5IHNldHRpbmcgYHByaW9fYWdpbmdfZXhwaXJlYCB0byAwLiBJdCBpbnRyb2R1Y2VzIGxvZ2ljIGNoYW5nZXMgdG8gcm91dGUgYWxsIHJlcXVlc3RzIHRvIHRoZSBiZXN0LWVmZm9ydCBidWNrZXQgd2hlbiBwcmlvcml0eSBpcyBkaXNhYmxlZCwgYW5kIG9wdGltaXplcyBwcmlvcml0eSBsb29rdXBzIGJ5IHVzaW5nIHRoZSBjYWNoZWQgYHJlcS1cXHUwMDNlZWx2LnByaXZbMF1gIHBvaW50ZXIgaW5zdGVhZCBvZiByZWNhbGN1bGF0aW5nIGl0LiBUaGUgYHJlcS1cXHUwMDNlZWx2LnByaXZbMF1gIGZpZWxkIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gTlVMTCBpbiBgZGRfcHJlcGFyZV9yZXF1ZXN0YCBhbmQgcG9wdWxhdGVkIGluIGBkZF9pbnNlcnRfcmVxdWVzdGAsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgbm9yIGRvIHRoZXkgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBoYW5kbGluZyBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzIGR1cmluZyBxdWV1ZSBmcmVlemUvcXVpZXNjZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbXEtZGVhZGxpbmUgYmxvY2sgZWxldmF0b3IgdG8gYWxsb3cgZGlzYWJsaW5nIEkvTyBwcmlvcml0eSBieSBzZXR0aW5nIGBwcmlvX2FnaW5nX2V4cGlyZWAgdG8gMC4gSXQgaW50cm9kdWNlcyBsb2dpYyBjaGFuZ2VzIHRvIHJvdXRlIGFsbCByZXF1ZXN0cyB0byB0aGUgYmVzdC1lZmZvcnQgYnVja2V0IHdoZW4gcHJpb3JpdHkgaXMgZGlzYWJsZWQsIGFuZCBvcHRpbWl6ZXMgcHJpb3JpdHkgbG9va3VwcyBieSB1c2luZyB0aGUgY2FjaGVkIGByZXEtXFx1MDAzZWVsdi5wcml2WzBdYCBwb2ludGVyIGluc3RlYWQgb2YgcmVjYWxjdWxhdGluZyBpdC4gVGhlIGByZXEtXFx1MDAzZWVsdi5wcml2WzBdYCBmaWVsZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIE5VTEwgaW4gYGRkX3ByZXBhcmVfcmVxdWVzdGAgYW5kIHBvcHVsYXRlZCBpbiBgZGRfaW5zZXJ0X3JlcXVlc3RgLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vciBkbyB0aGV5IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgaGFuZGxpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcyBkdXJpbmcgcXVldWUgZnJlZXplL3F1aWVzY2UpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowplddg[1] Phase: Succeeded StartedAt: 2026-08-20 02:42:13 +0000 UTC FinishedAt: 2026-08-20 02:42:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-20 02:42:13 +0000 UTC FinishedAt: 2026-08-20 02:42:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2] Phase: Succeeded StartedAt: 2026-08-20 02:42:13 +0000 UTC FinishedAt: 2026-08-20 06:27:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-20 02:42:13 +0000 UTC FinishedAt: 2026-08-20 06:27:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-20 02:42:13 +0000 UTC FinishedAt: 2026-08-20 02:42:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-20 02:42:13 +0000 UTC FinishedAt: 2026-08-20 02:42:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowplddg/series-workflowplddg-convert-artifact-1268352309/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-20 02:42:23 +0000 UTC FinishedAt: 2026-08-20 02:59:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-20 02:42:23 +0000 UTC FinishedAt: 2026-08-20 02:59:08 +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:*c34f1a5c-dbbc-4098-abc3-16ca4750e9b9,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-workflowplddg/series-workflowplddg-convert-artifact-1268352309/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": "dc80234b-4440-4c7d-a56e-dcfba5e86e04", "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-workflowplddg/series-workflowplddg-build-action-2701607195/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-20 02:42:23 +0000 UTC FinishedAt: 2026-08-20 02:58:58 +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:*c34f1a5c-dbbc-4098-abc3-16ca4750e9b9,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-workflowplddg/series-workflowplddg-convert-artifact-1268352309/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": "dc80234b-4440-4c7d-a56e-dcfba5e86e04", "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-workflowplddg/series-workflowplddg-build-action-2701607195/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-20 02:59:08 +0000 UTC FinishedAt: 2026-08-20 02:59:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-20 02:59:08 +0000 UTC FinishedAt: 2026-08-20 02:59:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-20 02:59:08 +0000 UTC FinishedAt: 2026-08-20 02:59:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-20 02:59:08 +0000 UTC FinishedAt: 2026-08-20 02:59:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowplddg/series-workflowplddg-convert-artifact-258366608/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-20 02:59:18 +0000 UTC FinishedAt: 2026-08-20 03:01:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-20 02:59:18 +0000 UTC FinishedAt: 2026-08-20 03:01:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dc80234b-4440-4c7d-a56e-dcfba5e86e04,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-workflowplddg/series-workflowplddg-build-action-2701607195/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-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-20 03:01:47 +0000 UTC FinishedAt: 2026-08-20 03:01:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-20 03:01:47 +0000 UTC FinishedAt: 2026-08-20 03:01:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-20 03:01:47 +0000 UTC FinishedAt: 2026-08-20 03:18:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-20 03:01:47 +0000 UTC FinishedAt: 2026-08-20 03:18:53 +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:*c34f1a5c-dbbc-4098-abc3-16ca4750e9b9,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-workflowplddg/series-workflowplddg-convert-artifact-258366608/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": "92cb2c35-59ef-4339-89a6-65ad456168a8", "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-workflowplddg/series-workflowplddg-build-action-569137420/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-20 03:01:47 +0000 UTC FinishedAt: 2026-08-20 03:18:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c34f1a5c-dbbc-4098-abc3-16ca4750e9b9,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-workflowplddg/series-workflowplddg-convert-artifact-258366608/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": "92cb2c35-59ef-4339-89a6-65ad456168a8", "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-workflowplddg/series-workflowplddg-build-action-569137420/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-20 03:18:53 +0000 UTC FinishedAt: 2026-08-20 03:18:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-20 03:18:53 +0000 UTC FinishedAt: 2026-08-20 03:18:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-20 03:18:53 +0000 UTC FinishedAt: 2026-08-20 03:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-20 03:18:53 +0000 UTC FinishedAt: 2026-08-20 03:21:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*92cb2c35-59ef-4339-89a6-65ad456168a8,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-workflowplddg/series-workflowplddg-build-action-569137420/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-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-20 03:21:14 +0000 UTC FinishedAt: 2026-08-20 06:27:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-20 03:21:14 +0000 UTC FinishedAt: 2026-08-20 06:27:23 +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":["deadline_prio_aging_expire_store"],"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:*dc80234b-4440-4c7d-a56e-dcfba5e86e04,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*92cb2c35-59ef-4339-89a6-65ad456168a8,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-workflowplddg/series-workflowplddg-build-action-2701607195/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-workflowplddg/series-workflowplddg-build-action-569137420/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-20 03:21:14 +0000 UTC FinishedAt: 2026-08-20 03:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-20 03:21:14 +0000 UTC FinishedAt: 2026-08-20 03:21:19 +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":["deadline_prio_aging_expire_store"],"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-workflowplddg/series-workflowplddg-convert-artifact-1863463561/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-20 03:21:14 +0000 UTC FinishedAt: 2026-08-20 03:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-20 03:21:14 +0000 UTC FinishedAt: 2026-08-20 03:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-20 03:21:14 +0000 UTC FinishedAt: 2026-08-20 03:21:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-20 03:21:25 +0000 UTC FinishedAt: 2026-08-20 06:27:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplddg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["deadline_prio_aging_expire_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MQ_IOSCHED_DEADLINE"],"series_id":"bf5ef045-a5e8-4ff5-9261-8c16c3daf66d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-20 03:21:25 +0000 UTC FinishedAt: 2026-08-20 06:27:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dc80234b-4440-4c7d-a56e-dcfba5e86e04,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*92cb2c35-59ef-4339-89a6-65ad456168a8,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-workflowplddg/series-workflowplddg-build-action-2701607195/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-workflowplddg/series-workflowplddg-build-action-569137420/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-workflowplddg/series-workflowplddg-convert-artifact-1863463561/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,}