Name: series-workflowd7s8x Phase: Succeeded StartedAt: 2026-09-09 00:05:41 +0000 UTC FinishedAt: 2026-09-09 04:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[0] Phase: Succeeded StartedAt: 2026-09-09 00:05:41 +0000 UTC FinishedAt: 2026-09-09 00:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 00:05:41 +0000 UTC FinishedAt: 2026-09-09 00:24:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e2573085497807b551324de20d368127602151ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e2573085497807b551324de20d368127602151ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "7cfed603-9371-4ed9-9e71-548261f2b282" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ctrl_dumppolicy", "netlink_policy_dump_attr_size_estimate", "netlink_policy_dump_write", "netlink_policy_dump_write_attr" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N0cmxfZHVtcHBvbGljeSYjMzQ7LAogICAgJiMzNDtuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZSYjMzQ7LAogICAgJiMzNDtuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlJiMzNDssCiAgICAmIzM0O25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0ciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTmV0bGluayBwb2xpY3kgZHVtcCBzdXBwb3J0IGZvciBiaWctZW5kaWFuIGludGVnZXIgYXR0cmlidXRlIHR5cGVzIChOTEFfQkUxNiBhbmQgTkxBX0JFMzIpIGJ5IGVtaXR0aW5nIHRoZSBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIgYXR0cmlidXRlIGluIG5ldGxpbmsgcG9saWN5IGRlc2NyaXB0aW9ucy4gXG5cbkFsbCB2YWx1ZXMgd3JpdHRlbiB0byB0aGUgTmV0bGluayBza2IgYXJlIGV4cGxpY2l0LCBmdWxseSBpbml0aWFsaXplZCBjb25zdGFudHMgKHN1Y2ggYXMgTkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTikgb3IgcmFuZ2UgdmFsdWVzIGluaXRpYWxpemVkIGJ5IG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQoKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBwYWRkaW5ncyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgaXMgYW55IGNvbnRyb2wgZmxvdyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGNoZWNrcyBhcmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyBidWZmZXIgc2l6ZXMgYW5kIG5ldGxpbmsgbWVzc2FnZSBmb3JtYXR0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBOZXRsaW5rIHBvbGljeSBkdW1waW5nIGxvZ2ljIGluIG5ldC9uZXRsaW5rL3BvbGljeS5jIHRvIHN1cHBvcnQgYmlnLWVuZGlhbiBpbnRlZ2VyIGF0dHJpYnV0ZXMgKE5MQV9CRTE2IGFuZCBOTEFfQkUzMikgYnkgZW1pdHRpbmcgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSIGFuZCBhZGp1c3RpbmcgdGhlIGF0dHJpYnV0ZSBzaXplIGVzdGltYXRpb24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgQUZfTkVUTElOSyBzb2NrZXRzIHRocm91Z2ggR2VuZXJpYyBOZXRsaW5rIHBvbGljeSBkdW1waW5nIChDVFJMX0NNRF9HRVRQT0xJQ1kpIGFzIHdlbGwgYXMgbmV0bGluayBleHRhY2sgZXJyb3IgcmVwb3J0aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmVkNDFhNGViNDE2NjgyNzNlNTQzOTg3NDQ5ZjAyOTI3YTY4MjYzNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMDA6MjM6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sXG5pbmRleCA4YjQ0NzJhNmFhMzZhLi43ZTdjMTU4ZTNlNzM3IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmxjdHJsLnlhbWxcbkBAIC00Miw2ICYjNDM7NDIsMTYgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLSBiaXRmaWVsZDMyXG4gICAgICAgLSBzaW50XG4gICAgICAgLSB1aW50XG4mIzQzOyAgLVxuJiM0MzsgICAgbmFtZTogcG9saWN5LWJ5dGUtb3JkZXJcbiYjNDM7ICAgIGRvYzogfFxuJiM0MzsgICAgICBCeXRlIG9yZGVyIG9mIGFuIGludGVnZXIgYXR0cmlidXRlLiBaZXJvIGlzIGxlZnQgdW51c2VkIHNvIHRoYXQgaXRcbiYjNDM7ICAgICAgY2FuIGJlIHRha2VuIHRvIG1lYW4gaG9zdCBieXRlIG9yZGVyLlxuJiM0MzsgICAgZW51bS1uYW1lOiBuZXRsaW5rLXBvbGljeS1ieXRlLW9yZGVyXG4mIzQzOyAgICB0eXBlOiBlbnVtXG4mIzQzOyAgICB2YWx1ZS1zdGFydDogMVxuJiM0MzsgICAgZW50cmllczpcbiYjNDM7ICAgICAgLSBiaWctZW5kaWFuXG4gXG4gYXR0cmlidXRlLXNldHM6XG4gICAtXG5AQCAtMTUyLDYgJiM0MzsxNjIsMTEgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcGFkXG4gICAgICAgICB0eXBlOiBwYWRcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGJ5dGUtb3JkZXJcbiYjNDM7ICAgICAgICBkb2M6IEJ5dGUgb3JkZXIgb2YgdGhlIGF0dHJpYnV0ZSwgYWJzZW50IG1lYW5zIGhvc3QgYnl0ZSBvcmRlci5cbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBlbnVtOiBwb2xpY3ktYnl0ZS1vcmRlclxuICAgLVxuICAgICBuYW1lOiBvcC1wb2xpY3ktYXR0cnNcbiAgICAgbmFtZS1wcmVmaXg6IGN0cmwtYXR0ci1wb2xpY3ktXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRsaW5rLmhcbmluZGV4IGY4N2FhZjI4YTY0OTEuLjgyYzQxYWViNDM1NzQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oXG5AQCAtMzI5LDYgJiM0MzszMjksMTcgQEAgZW51bSBuZXRsaW5rX2F0dHJpYnV0ZV90eXBlIHtcbiBcdE5MX0FUVFJfVFlQRV9VSU5ULFxuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBlbnVtIG5ldGxpbmtfcG9saWN5X2J5dGVfb3JkZXIgLSBieXRlIG9yZGVyIG9mIGFuIGludGVnZXIgYXR0cmlidXRlXG4mIzQzOyAqIEBOTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOOiBiaWcgZW5kaWFuIChuZXR3b3JrIGJ5dGUgb3JkZXIpXG4mIzQzOyAqXG4mIzQzOyAqIFplcm8gaXMgbGVmdCB1bmFzc2lnbmVkIHNvIHRoYXQgaXQga2VlcHMgbWVhbmluZyBob3N0IGJ5dGUgb3JkZXIsXG4mIzQzOyAqIHdoaWNoIGlzIGFsc28gd2hhdCBhIG1pc3NpbmcgYnl0ZSBvcmRlciBtZWFucy5cbiYjNDM7ICovXG4mIzQzO2VudW0gbmV0bGlua19wb2xpY3lfYnl0ZV9vcmRlciB7XG4mIzQzO1x0TkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTiA9IDEsXG4mIzQzO307XG4mIzQzO1xuIC8qKlxuICAqIGVudW0gbmV0bGlua19wb2xpY3lfdHlwZV9hdHRyIC0gcG9saWN5IHR5cGUgYXR0cmlidXRlc1xuICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX1VOU1BFQzogdW51c2VkXG5AQCAtMzU2LDYgJiM0MzszNjcsOCBAQCBlbnVtIG5ldGxpbmtfYXR0cmlidXRlX3R5cGUge1xuICAqXHRiaXRmaWVsZDMyIHR5cGUgKFUzMilcbiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLOiBtYXNrIG9mIHZhbGlkIGJpdHMgZm9yIHVuc2lnbmVkIGludGVnZXJzIChVNjQpXG4gICogQE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEOiBwYWQgYXR0cmlidXRlIGZvciA2NC1iaXQgYWxpZ25tZW50XG4mIzQzOyAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVI6IGJ5dGUgb3JkZXIgb2YgYW4gaW50ZWdlciBhdHRyaWJ1dGUsXG4mIzQzOyAqXHRcdTAwMjZlbnVtIG5ldGxpbmtfcG9saWN5X2J5dGVfb3JkZXIsIGFic2VudCBpZiBob3N0IGJ5dGUgb3JkZXIgKFUzMilcbiAgKlxuICAqIEBfX05MX1BPTElDWV9UWVBFX0FUVFJfTUFYOiBudW1iZXIgb2YgYXR0cmlidXRlc1xuICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyXG5AQCAtMzc0LDYgJiM0MzszODcsNyBAQCBlbnVtIG5ldGxpbmtfcG9saWN5X3R5cGVfYXR0ciB7XG4gXHROTF9QT0xJQ1lfVFlQRV9BVFRSX0JJVEZJRUxEMzJfTUFTSyxcbiBcdE5MX1BPTElDWV9UWVBFX0FUVFJfUEFELFxuIFx0TkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLLFxuJiM0MztcdE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUixcbiBcbiBcdC8qIGtlZXAgbGFzdCAqL1xuIFx0X19OTF9QT0xJQ1lfVFlQRV9BVFRSX01BWCxcbmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9wb2xpY3kuYyBiL25ldC9uZXRsaW5rL3BvbGljeS5jXG5pbmRleCAwOGIwMDZjNDhmMDZlLi41NzRkNDRiN2Q1MTgyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGxpbmsvcG9saWN5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRsaW5rL3BvbGljeS5jXG5AQCAtMjM0LDYgJiM0MzsyMzQsMTEgQEAgaW50IG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdClcbiBcdFx0LyogbWF4aW11bSBpcyBjb21tb24sIHU2NCBtaW4vbWF4IHdpdGggcGFkZGluZyAqL1xuIFx0XHRyZXR1cm4gY29tbW9uICYjNDM7XG4gXHRcdCAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgJiM0MzsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTY0KSkpO1xuJiM0MztcdGNhc2UgTkxBX0JFMTY6XG4mIzQzO1x0Y2FzZSBOTEFfQkUzMjpcbiYjNDM7XHRcdC8qIHNhbWUgYXMgdGhlIHVuc2lnbmVkIHR5cGVzLCBwbHVzIHRoZSBieXRlIG9yZGVyICovXG4mIzQzO1x0XHRyZXR1cm4gY29tbW9uICYjNDM7IG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7XG4mIzQzO1x0XHQgICAgICAgMiAqIChubGFfYXR0cl9zaXplKDApICYjNDM7IG5sYV9hdHRyX3NpemUoc2l6ZW9mKHU2NCkpKTtcbiBcdGNhc2UgTkxBX0JJVEZJRUxEMzI6XG4gXHRcdHJldHVybiBjb21tb24gJiM0MzsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTMyKSk7XG4gXHRjYXNlIE5MQV9TVFJJTkc6XG5AQCAtMjg5LDIxICYjNDM7Mjk0LDI4IEBAIF9fbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyKHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSxcbiBcdGNhc2UgTkxBX1UxNjpcbiBcdGNhc2UgTkxBX1UzMjpcbiBcdGNhc2UgTkxBX1U2NDpcbiYjNDM7XHRjYXNlIE5MQV9CRTE2OlxuJiM0MztcdGNhc2UgTkxBX0JFMzI6XG4gXHRjYXNlIE5MQV9VSU5UOlxuIFx0Y2FzZSBOTEFfTVNFQ1M6IHtcbiBcdFx0c3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiByYW5nZTtcbiBcbiBcdFx0aWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1U4KVxuIFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTg7XG4tXHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1UxNilcbiYjNDM7XHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1UxNiB8fCBwdC1cdTAwM2V0eXBlID09IE5MQV9CRTE2KVxuIFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTE2O1xuLVx0XHRlbHNlIGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9VMzIpXG4mIzQzO1x0XHRlbHNlIGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9VMzIgfHwgcHQtXHUwMDNldHlwZSA9PSBOTEFfQkUzMilcbiBcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1UzMjtcbiBcdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTY0KVxuIFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTY0O1xuIFx0XHRlbHNlXG4gXHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VSU5UO1xuIFxuJiM0MztcdFx0aWYgKChwdC1cdTAwM2V0eXBlID09IE5MQV9CRTE2IHx8IHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSLFxuJiM0MztcdFx0XHRcdE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU4pKVxuJiM0MztcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjNDM7XG4gXHRcdGlmIChwdC1cdTAwM2V2YWxpZGF0aW9uX3R5cGUgPT0gTkxBX1ZBTElEQVRFX01BU0spIHtcbiBcdFx0XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0ssXG4gXHRcdFx0XHRcdCAgICAgIHB0LVx1MDAzZW1hc2ssXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5XG5pbmRleCA4NjgyYmY1ODhlMWZhLi5mYjVhY2I4YWNkZWQxIDEwMDY0NFxuLS0tIGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHlcbkBAIC0xMTUsNiAmIzQzOzExNSw3IEBAIGNsYXNzIE5ldGxpbms6XG4gICAgIE5MX1BPTElDWV9UWVBFX0FUVFJfQklURklFTEQzMl9NQVNLID0gMTBcbiAgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9QQUQgPSAxMVxuICAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0sgPSAxMlxuJiM0MzsgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSID0gMTNcbiBcbiAgICAgQXR0clR5cGUgPSBFbnVtKCYjMzk7QXR0clR5cGUmIzM5OywgWyYjMzk7ZmxhZyYjMzk7LCAmIzM5O3U4JiMzOTssICYjMzk7dTE2JiMzOTssICYjMzk7dTMyJiMzOTssICYjMzk7dTY0JiMzOTssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzk7czgmIzM5OywgJiMzOTtzMTYmIzM5OywgJiMzOTtzMzImIzM5OywgJiMzOTtzNjQmIzM5OyxcbkBAIC0xMjIsNiAmIzQzOzEyMyw4IEBAIGNsYXNzIE5ldGxpbms6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzk7bmVzdGVkJiMzOTssICYjMzk7bmVzdGVkLWFycmF5JiMzOTssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzk7Yml0ZmllbGQzMiYjMzk7LCAmIzM5O3NpbnQmIzM5OywgJiMzOTt1aW50JiMzOTtdKVxuIFxuJiM0MzsgICAgQnl0ZU9yZGVyID0gRW51bSgmIzM5O0J5dGVPcmRlciYjMzk7LCBbJiMzOTtiaWctZW5kaWFuJiMzOTtdLCBzdGFydD0xKVxuJiM0MztcbiBjbGFzcyBObEVycm9yKEV4Y2VwdGlvbik6XG4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCBubF9tc2cpOlxuICAgICAgICAgc2VsZi5ubF9tc2cgPSBubF9tc2dcbkBAIC0xNTgsNyAmIzQzOzE2MSw3IEBAIGNsYXNzIE5sUG9saWN5OlxuIFxuICAgICBFYWNoIHBvbGljeSBlbnRyeSBhbHdheXMgaGFzIGEgJiMzOTt0eXBlJiMzOTsgYXR0cmlidXRlIChlLmcuIHUzMiwgc3RyaW5nLFxuICAgICBuZXN0ZWQpLiBPcHRpb25hbCBhdHRyaWJ1dGVzIGRlcGVuZGluZyBvbiB0aGUgJiMzOTt0eXBlJiMzOTs6IG1pbi12YWx1ZSxcbi0gICAgbWF4LXZhbHVlLCBtaW4tbGVuZ3RoLCBtYXgtbGVuZ3RoLCBtYXNrLlxuJiM0MzsgICAgbWF4LXZhbHVlLCBtaW4tbGVuZ3RoLCBtYXgtbGVuZ3RoLCBtYXNrLCBieXRlLW9yZGVyLlxuIFxuICAgICBQb2xpY2llcyBjYW4gZm9ybSBpbmZpbml0ZSBuZXN0aW5nIGxvb3BzLiBUaGVzZSBsb29wcyBhcmUgdHJpbW1lZFxuICAgICB3aGVuIHBvbGljeSBpcyBjb252ZXJ0ZWQgdG8gYSBkaWN0IHdpdGggcG9sLnRvX2RpY3QoKS5cbkBAIC00NTQsNiAmIzQzOzQ1Nyw5IEBAIGRlZiBfZ2VubF9kZWNvZGVfcG9saWN5KHJhdyk6XG4gICAgICAgICAgICAgcG9saWN5WyYjMzk7Yml0ZmllbGQzMi1tYXNrJiMzOTtdID0gYXR0ci5hc19zY2FsYXIoJiMzOTt1MzImIzM5OylcbiAgICAgICAgIGVsaWYgYXR0ci50eXBlID09IE5ldGxpbmsuTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLOlxuICAgICAgICAgICAgIHBvbGljeVsmIzM5O21hc2smIzM5O10gPSBhdHRyLmFzX3NjYWxhcigmIzM5O3U2NCYjMzk7KVxuJiM0MzsgICAgICAgIGVsaWYgYXR0ci50eXBlID09IE5ldGxpbmsuTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSOlxuJiM0MzsgICAgICAgICAgICBieXRlX29yZGVyID0gYXR0ci5hc19zY2FsYXIoJiMzOTt1MzImIzM5OylcbiYjNDM7ICAgICAgICAgICAgcG9saWN5WyYjMzk7Ynl0ZS1vcmRlciYjMzk7XSA9IE5ldGxpbmsuQnl0ZU9yZGVyKGJ5dGVfb3JkZXIpLm5hbWVcbiAgICAgcmV0dXJuIHBvbGljeVxuIFxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N0cmxfZHVtcHBvbGljeSYjMzQ7LAogICAgJiMzNDtuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZSYjMzQ7LAogICAgJiMzNDtuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlJiMzNDssCiAgICAmIzM0O25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0ciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBOZXRsaW5rIHBvbGljeSBkdW1waW5nIGxvZ2ljIGluIG5ldC9uZXRsaW5rL3BvbGljeS5jIHRvIHN1cHBvcnQgYmlnLWVuZGlhbiBpbnRlZ2VyIGF0dHJpYnV0ZXMgKE5MQV9CRTE2IGFuZCBOTEFfQkUzMikgYnkgZW1pdHRpbmcgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSIGFuZCBhZGp1c3RpbmcgdGhlIGF0dHJpYnV0ZSBzaXplIGVzdGltYXRpb24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgQUZfTkVUTElOSyBzb2NrZXRzIHRocm91Z2ggR2VuZXJpYyBOZXRsaW5rIHBvbGljeSBkdW1waW5nIChDVFJMX0NNRF9HRVRQT0xJQ1kpIGFzIHdlbGwgYXMgbmV0bGluayBleHRhY2sgZXJyb3IgcmVwb3J0aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmVkNDFhNGViNDE2NjgyNzNlNTQzOTg3NDQ5ZjAyOTI3YTY4MjYzNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDA6MjM6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmxjdHJsLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmxjdHJsLnlhbWwKaW5kZXggOGI0NDcyYTZhYTM2YS4uN2U3YzE1OGUzZTczNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ubGN0cmwueWFtbApAQCAtNDIsNiAmIzQzOzQyLDE2IEBAIGRlZmluaXRpb25zOgogICAgICAgLSBiaXRmaWVsZDMyCiAgICAgICAtIHNpbnQKICAgICAgIC0gdWludAomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBwb2xpY3ktYnl0ZS1vcmRlcgomIzQzOyAgICBkb2M6IHwKJiM0MzsgICAgICBCeXRlIG9yZGVyIG9mIGFuIGludGVnZXIgYXR0cmlidXRlLiBaZXJvIGlzIGxlZnQgdW51c2VkIHNvIHRoYXQgaXQKJiM0MzsgICAgICBjYW4gYmUgdGFrZW4gdG8gbWVhbiBob3N0IGJ5dGUgb3JkZXIuCiYjNDM7ICAgIGVudW0tbmFtZTogbmV0bGluay1wb2xpY3ktYnl0ZS1vcmRlcgomIzQzOyAgICB0eXBlOiBlbnVtCiYjNDM7ICAgIHZhbHVlLXN0YXJ0OiAxCiYjNDM7ICAgIGVudHJpZXM6CiYjNDM7ICAgICAgLSBiaWctZW5kaWFuCiAKIGF0dHJpYnV0ZS1zZXRzOgogICAtCkBAIC0xNTIsNiAmIzQzOzE2MiwxMSBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgIC0KICAgICAgICAgbmFtZTogcGFkCiAgICAgICAgIHR5cGU6IHBhZAomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGJ5dGUtb3JkZXIKJiM0MzsgICAgICAgIGRvYzogQnl0ZSBvcmRlciBvZiB0aGUgYXR0cmlidXRlLCBhYnNlbnQgbWVhbnMgaG9zdCBieXRlIG9yZGVyLgomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBlbnVtOiBwb2xpY3ktYnl0ZS1vcmRlcgogICAtCiAgICAgbmFtZTogb3AtcG9saWN5LWF0dHJzCiAgICAgbmFtZS1wcmVmaXg6IGN0cmwtYXR0ci1wb2xpY3ktCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGxpbmsuaAppbmRleCBmODdhYWYyOGE2NDkxLi44MmM0MWFlYjQzNTc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRsaW5rLmgKQEAgLTMyOSw2ICYjNDM7MzI5LDE3IEBAIGVudW0gbmV0bGlua19hdHRyaWJ1dGVfdHlwZSB7CiAJTkxfQVRUUl9UWVBFX1VJTlQsCiB9OwogCiYjNDM7LyoqCiYjNDM7ICogZW51bSBuZXRsaW5rX3BvbGljeV9ieXRlX29yZGVyIC0gYnl0ZSBvcmRlciBvZiBhbiBpbnRlZ2VyIGF0dHJpYnV0ZQomIzQzOyAqIEBOTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOOiBiaWcgZW5kaWFuIChuZXR3b3JrIGJ5dGUgb3JkZXIpCiYjNDM7ICoKJiM0MzsgKiBaZXJvIGlzIGxlZnQgdW5hc3NpZ25lZCBzbyB0aGF0IGl0IGtlZXBzIG1lYW5pbmcgaG9zdCBieXRlIG9yZGVyLAomIzQzOyAqIHdoaWNoIGlzIGFsc28gd2hhdCBhIG1pc3NpbmcgYnl0ZSBvcmRlciBtZWFucy4KJiM0MzsgKi8KJiM0MztlbnVtIG5ldGxpbmtfcG9saWN5X2J5dGVfb3JkZXIgewomIzQzOwlOTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOID0gMSwKJiM0Mzt9OwomIzQzOwogLyoqCiAgKiBlbnVtIG5ldGxpbmtfcG9saWN5X3R5cGVfYXR0ciAtIHBvbGljeSB0eXBlIGF0dHJpYnV0ZXMKICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX1VOU1BFQzogdW51c2VkCkBAIC0zNTYsNiAmIzQzOzM2Nyw4IEBAIGVudW0gbmV0bGlua19hdHRyaWJ1dGVfdHlwZSB7CiAgKgliaXRmaWVsZDMyIHR5cGUgKFUzMikKICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0s6IG1hc2sgb2YgdmFsaWQgYml0cyBmb3IgdW5zaWduZWQgaW50ZWdlcnMgKFU2NCkKICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRDogcGFkIGF0dHJpYnV0ZSBmb3IgNjQtYml0IGFsaWdubWVudAomIzQzOyAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVI6IGJ5dGUgb3JkZXIgb2YgYW4gaW50ZWdlciBhdHRyaWJ1dGUsCiYjNDM7ICoJJmFtcDtlbnVtIG5ldGxpbmtfcG9saWN5X2J5dGVfb3JkZXIsIGFic2VudCBpZiBob3N0IGJ5dGUgb3JkZXIgKFUzMikKICAqCiAgKiBAX19OTF9QT0xJQ1lfVFlQRV9BVFRSX01BWDogbnVtYmVyIG9mIGF0dHJpYnV0ZXMKICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyCkBAIC0zNzQsNiAmIzQzOzM4Nyw3IEBAIGVudW0gbmV0bGlua19wb2xpY3lfdHlwZV9hdHRyIHsKIAlOTF9QT0xJQ1lfVFlQRV9BVFRSX0JJVEZJRUxEMzJfTUFTSywKIAlOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRCwKIAlOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0ssCiYjNDM7CU5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUiwKIAogCS8qIGtlZXAgbGFzdCAqLwogCV9fTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVgsCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9wb2xpY3kuYyBiL25ldC9uZXRsaW5rL3BvbGljeS5jCmluZGV4IDA4YjAwNmM0OGYwNmUuLjU3NGQ0NGI3ZDUxODIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL3BvbGljeS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRsaW5rL3BvbGljeS5jCkBAIC0yMzQsNiAmIzQzOzIzNCwxMSBAQCBpbnQgbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0KQogCQkvKiBtYXhpbXVtIGlzIGNvbW1vbiwgdTY0IG1pbi9tYXggd2l0aCBwYWRkaW5nICovCiAJCXJldHVybiBjb21tb24gJiM0MzsKIAkJICAgICAgIDIgKiAobmxhX2F0dHJfc2l6ZSgwKSAmIzQzOyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7CiYjNDM7CWNhc2UgTkxBX0JFMTY6CiYjNDM7CWNhc2UgTkxBX0JFMzI6CiYjNDM7CQkvKiBzYW1lIGFzIHRoZSB1bnNpZ25lZCB0eXBlcywgcGx1cyB0aGUgYnl0ZSBvcmRlciAqLwomIzQzOwkJcmV0dXJuIGNvbW1vbiAmIzQzOyBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKSAmIzQzOwomIzQzOwkJICAgICAgIDIgKiAobmxhX2F0dHJfc2l6ZSgwKSAmIzQzOyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7CiAJY2FzZSBOTEFfQklURklFTEQzMjoKIAkJcmV0dXJuIGNvbW1vbiAmIzQzOyBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKTsKIAljYXNlIE5MQV9TVFJJTkc6CkBAIC0yODksMjEgJiM0MzsyOTQsMjggQEAgX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlLAogCWNhc2UgTkxBX1UxNjoKIAljYXNlIE5MQV9VMzI6CiAJY2FzZSBOTEFfVTY0OgomIzQzOwljYXNlIE5MQV9CRTE2OgomIzQzOwljYXNlIE5MQV9CRTMyOgogCWNhc2UgTkxBX1VJTlQ6CiAJY2FzZSBOTEFfTVNFQ1M6IHsKIAkJc3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiByYW5nZTsKIAogCQlpZiAocHQtJmd0O3R5cGUgPT0gTkxBX1U4KQogCQkJdHlwZSA9IE5MX0FUVFJfVFlQRV9VODsKLQkJZWxzZSBpZiAocHQtJmd0O3R5cGUgPT0gTkxBX1UxNikKJiM0MzsJCWVsc2UgaWYgKHB0LSZndDt0eXBlID09IE5MQV9VMTYgfHwgcHQtJmd0O3R5cGUgPT0gTkxBX0JFMTYpCiAJCQl0eXBlID0gTkxfQVRUUl9UWVBFX1UxNjsKLQkJZWxzZSBpZiAocHQtJmd0O3R5cGUgPT0gTkxBX1UzMikKJiM0MzsJCWVsc2UgaWYgKHB0LSZndDt0eXBlID09IE5MQV9VMzIgfHwgcHQtJmd0O3R5cGUgPT0gTkxBX0JFMzIpCiAJCQl0eXBlID0gTkxfQVRUUl9UWVBFX1UzMjsKIAkJZWxzZSBpZiAocHQtJmd0O3R5cGUgPT0gTkxBX1U2NCkKIAkJCXR5cGUgPSBOTF9BVFRSX1RZUEVfVTY0OwogCQllbHNlCiAJCQl0eXBlID0gTkxfQVRUUl9UWVBFX1VJTlQ7CiAKJiM0MzsJCWlmICgocHQtJmd0O3R5cGUgPT0gTkxBX0JFMTYgfHwgcHQtJmd0O3R5cGUgPT0gTkxBX0JFMzIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBubGFfcHV0X3UzMihza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUiwKJiM0MzsJCQkJTkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTikpCiYjNDM7CQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CiAJCWlmIChwdC0mZ3Q7dmFsaWRhdGlvbl90eXBlID09IE5MQV9WQUxJREFURV9NQVNLKSB7CiAJCQlpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0ssCiAJCQkJCSAgICAgIHB0LSZndDttYXNrLApkaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5CmluZGV4IDg2ODJiZjU4OGUxZmEuLmZiNWFjYjhhY2RlZDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHkKQEAgLTExNSw2ICYjNDM7MTE1LDcgQEAgY2xhc3MgTmV0bGluazoKICAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JJVEZJRUxEMzJfTUFTSyA9IDEwCiAgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9QQUQgPSAxMQogICAgIE5MX1BPTElDWV9UWVBFX0FUVFJfTUFTSyA9IDEyCiYjNDM7ICAgIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUiA9IDEzCiAKICAgICBBdHRyVHlwZSA9IEVudW0oJiMzOTtBdHRyVHlwZSYjMzk7LCBbJiMzOTtmbGFnJiMzOTssICYjMzk7dTgmIzM5OywgJiMzOTt1MTYmIzM5OywgJiMzOTt1MzImIzM5OywgJiMzOTt1NjQmIzM5OywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM5O3M4JiMzOTssICYjMzk7czE2JiMzOTssICYjMzk7czMyJiMzOTssICYjMzk7czY0JiMzOTssCkBAIC0xMjIsNiAmIzQzOzEyMyw4IEBAIGNsYXNzIE5ldGxpbms6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzOTtuZXN0ZWQmIzM5OywgJiMzOTtuZXN0ZWQtYXJyYXkmIzM5OywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM5O2JpdGZpZWxkMzImIzM5OywgJiMzOTtzaW50JiMzOTssICYjMzk7dWludCYjMzk7XSkKIAomIzQzOyAgICBCeXRlT3JkZXIgPSBFbnVtKCYjMzk7Qnl0ZU9yZGVyJiMzOTssIFsmIzM5O2JpZy1lbmRpYW4mIzM5O10sIHN0YXJ0PTEpCiYjNDM7CiBjbGFzcyBObEVycm9yKEV4Y2VwdGlvbik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5sX21zZyk6CiAgICAgICAgIHNlbGYubmxfbXNnID0gbmxfbXNnCkBAIC0xNTgsNyAmIzQzOzE2MSw3IEBAIGNsYXNzIE5sUG9saWN5OgogCiAgICAgRWFjaCBwb2xpY3kgZW50cnkgYWx3YXlzIGhhcyBhICYjMzk7dHlwZSYjMzk7IGF0dHJpYnV0ZSAoZS5nLiB1MzIsIHN0cmluZywKICAgICBuZXN0ZWQpLiBPcHRpb25hbCBhdHRyaWJ1dGVzIGRlcGVuZGluZyBvbiB0aGUgJiMzOTt0eXBlJiMzOTs6IG1pbi12YWx1ZSwKLSAgICBtYXgtdmFsdWUsIG1pbi1sZW5ndGgsIG1heC1sZW5ndGgsIG1hc2suCiYjNDM7ICAgIG1heC12YWx1ZSwgbWluLWxlbmd0aCwgbWF4LWxlbmd0aCwgbWFzaywgYnl0ZS1vcmRlci4KIAogICAgIFBvbGljaWVzIGNhbiBmb3JtIGluZmluaXRlIG5lc3RpbmcgbG9vcHMuIFRoZXNlIGxvb3BzIGFyZSB0cmltbWVkCiAgICAgd2hlbiBwb2xpY3kgaXMgY29udmVydGVkIHRvIGEgZGljdCB3aXRoIHBvbC50b19kaWN0KCkuCkBAIC00NTQsNiAmIzQzOzQ1Nyw5IEBAIGRlZiBfZ2VubF9kZWNvZGVfcG9saWN5KHJhdyk6CiAgICAgICAgICAgICBwb2xpY3lbJiMzOTtiaXRmaWVsZDMyLW1hc2smIzM5O10gPSBhdHRyLmFzX3NjYWxhcigmIzM5O3UzMiYjMzk7KQogICAgICAgICBlbGlmIGF0dHIudHlwZSA9PSBOZXRsaW5rLk5MX1BPTElDWV9UWVBFX0FUVFJfTUFTSzoKICAgICAgICAgICAgIHBvbGljeVsmIzM5O21hc2smIzM5O10gPSBhdHRyLmFzX3NjYWxhcigmIzM5O3U2NCYjMzk7KQomIzQzOyAgICAgICAgZWxpZiBhdHRyLnR5cGUgPT0gTmV0bGluay5OTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVI6CiYjNDM7ICAgICAgICAgICAgYnl0ZV9vcmRlciA9IGF0dHIuYXNfc2NhbGFyKCYjMzk7dTMyJiMzOTspCiYjNDM7ICAgICAgICAgICAgcG9saWN5WyYjMzk7Ynl0ZS1vcmRlciYjMzk7XSA9IE5ldGxpbmsuQnl0ZU9yZGVyKGJ5dGVfb3JkZXIpLm5hbWUKICAgICByZXR1cm4gcG9saWN5CiAKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTc4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0bGluayBQb2xpY3kgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdG8gYnJlYWsgaXQgZG93biBwaWVjZSBieSBwaWVjZSwgc3RhcnRpbmcgd2l0aCBhIGdyYW51bGFyIGxvb2sgYXQgdGhlIGNvZGUgY2hhbmdlcy4gSSBzZWUgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogdGhlIGRvY3VtZW50YXRpb24gKGBubGN0cmwueWFtbGApLCBhIGhlYWRlciBmaWxlIChgbmV0bGluay5oYCksIHRoZSBjb3JlIHBvbGljeSBpbXBsZW1lbnRhdGlvbiAoYHBvbGljeS5jYCksIGFuZCBhIHVzZXItc3BhY2UgUHl0aG9uIHNjcmlwdCAoYHlubC5weWApLiBUaGlzIHN1Z2dlc3RzIGNoYW5nZXMgdG8gYm90aCB0aGUga2VybmVsIGFuZCB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiByZWxhdGVkIHRvIE5ldGxpbmsgcG9saWN5IGhhbmRsaW5nLgoKRmlyc3QsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIHNwZWNpZmljIGFkZGl0aW9ucyBhbmQgbW9kaWZpY2F0aW9ucyBpbiBlYWNoIGZpbGUuIFRoZSBhZGRpdGlvbiBvZiBgZW51bSBuZXRsaW5rX3BvbGljeV9ieXRlX29yZGVyYCBhbmQgYE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUmAgaW4gdGhlIGhlYWRlciBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZzsgdGhpcyBsaWtlbHkgaW5kaWNhdGVzIGEgbmV3IGZlYXR1cmUgb3IgZW5oYW5jZW1lbnQgcmVsYXRlZCB0byBieXRlIG9yZGVyIGhhbmRsaW5nIHdpdGhpbiBOZXRsaW5rIGF0dHJpYnV0ZXMuIFRoZSBtb2RpZmljYXRpb24gb2YgYG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlYCBhbmQgYF9fbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyYCBpbiBgcG9saWN5LmNgIHRvIGhhbmRsZSBgTkxBX0JFMTZgIGFuZCBgTkxBX0JFMzJgIHN1cHBvcnRzIG15IGh5cG90aGVzaXMuIFRoZSBpbmNsdXNpb24gb2YgYE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUmAgdGVsbHMgbWUgdGhhdCB3ZSBhcmUgYWRkaW5nIHNvbWUgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ5dGUgb3JkZXIgd2hlbiBkdW1waW5nIHRoZSBhdHRyaWJ1dGUuCgpOb3csIG15IGF0dGVudGlvbiBpbW1lZGlhdGVseSBzaGlmdHMgdG8gYG5ldC9uZXRsaW5rL3BvbGljeS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlOiB3aG8gY2FsbHMgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zLCB3aGF0IGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUgcmVsZXZhbnQsIGFuZCB3aGF0IG90aGVyIHN5bWJvbHMgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlbT8gVGhlIHNwZWNpZmljIGNvbnRleHQgb2YgdGhlIGNhbGxzIGlzIGNyaXRpY2FsLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZWZmaWNpZW50bHkgdHJhY2UgdGhlc2UgY2FsbHMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGFmZmVjdHMgdGhlIGJ5dGUgb3JkZXIgaGFuZGxpbmcuIE9uY2UgSSBoYXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3cgYW5kIGRlcGVuZGVuY2llcywgSSBjYW4gYmV0dGVyIGFzc2VzcyB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoZXNlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0bGluay9wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyMDpcdFx0Y2FzZSBOTEFfTkVTVEVEX0FSUkFZOlxuIDIyMTpcdFx0XHQvKiBjb21tb24sIHBvbGljeSBpZHgsIHBvbGljeSBtYXhhdHRyICovXG4gMjIyOlx0XHRcdHJldHVybiBjb21tb24gJiM0MzsgMiAqIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpO1xuIDIyMzpcdFx0Y2FzZSBOTEFfVTg6XG4gMjI0Olx0XHRjYXNlIE5MQV9VMTY6XG4gMjI1Olx0XHRjYXNlIE5MQV9VMzI6XG4gMjI2Olx0XHRjYXNlIE5MQV9VNjQ6XG4gMjI3Olx0XHRjYXNlIE5MQV9NU0VDUzpcbiAyMjg6XHRcdGNhc2UgTkxBX1M4OlxuIDIyOTpcdFx0Y2FzZSBOTEFfUzE2OlxuIDIzMDpcdFx0Y2FzZSBOTEFfUzMyOlxuIDIzMTpcdFx0Y2FzZSBOTEFfUzY0OlxuIDIzMjpcdFx0Y2FzZSBOTEFfU0lOVDpcbiAyMzM6XHRcdGNhc2UgTkxBX1VJTlQ6XG4gMjM0Olx0XHRcdC8qIG1heGltdW0gaXMgY29tbW9uLCB1NjQgbWluL21heCB3aXRoIHBhZGRpbmcgKi9cbiAyMzU6XHRcdFx0cmV0dXJuIGNvbW1vbiAmIzQzO1xuIDIzNjpcdFx0XHQgICAgICAgMiAqIChubGFfYXR0cl9zaXplKDApICYjNDM7IG5sYV9hdHRyX3NpemUoc2l6ZW9mKHU2NCkpKTtcbiAyMzc6XHRcdGNhc2UgTkxBX0JFMTY6XG4gMjM4Olx0XHRjYXNlIE5MQV9CRTMyOlxuIDIzOTpcdFx0XHQvKiBzYW1lIGFzIHRoZSB1bnNpZ25lZCB0eXBlcywgcGx1cyB0aGUgYnl0ZSBvcmRlciAqL1xuIDI0MDpcdFx0XHRyZXR1cm4gY29tbW9uICYjNDM7IG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7XG4gMjQxOlx0XHRcdCAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgJiM0MzsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTY0KSkpO1xuIDI0MjpcdFx0Y2FzZSBOTEFfQklURklFTEQzMjpcbiAyNDM6XHRcdFx0cmV0dXJuIGNvbW1vbiAmIzQzOyBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKTtcbiAyNDQ6XHRcdGNhc2UgTkxBX1NUUklORzpcbiAyNDU6XHRcdGNhc2UgTkxBX05VTF9TVFJJTkc6XG4gMjQ2Olx0XHRjYXNlIE5MQV9CSU5BUlk6XG4gMjQ3Olx0XHRcdC8qIG1heGltdW0gaXMgY29tbW9uLCB1MzIgbWluLWxlbmd0aC9tYXgtbGVuZ3RoICovXG4gMjQ4Olx0XHRcdHJldHVybiBjb21tb24gJiM0MzsgMiAqIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpO1xuIDI0OTpcdFx0Y2FzZSBOTEFfRkxBRzpcbiAyNTA6XHRcdFx0cmV0dXJuIGNvbW1vbjtcbiAyNTE6XHRcdH1cbiAyNTI6XHRcbiAyNTM6XHRcdC8qIHRoaXMgc2hvdWxkIHRoZW4gY2F1c2UgYSB3YXJuaW5nIGxhdGVyICovXG4gMjU0Olx0XHRyZXR1cm4gMDtcbiAyNTU6XHR9XG4gMjU2Olx0XG4gMjU3Olx0c3RhdGljIGludFxuIDI1ODpcdF9fbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyKHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSxcbiAyNTk6XHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDI2MDpcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdCxcbiAyNjE6XHRcdFx0XHRcdCBpbnQgbmVzdGF0dHIpXG4gMjYyOlx0e1xuIDI2MzpcdFx0aW50IGVzdGltYXRlID0gbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUocHQpO1xuIDI2NDpcdFx0ZW51bSBuZXRsaW5rX2F0dHJpYnV0ZV90eXBlIHR5cGU7XG4gMjY1Olx0XHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuIDI2NjpcdFxuIDI2NzpcdFx0YXR0ciA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgbmVzdGF0dHIpO1xuIDI2ODpcdFx0aWYgKCFhdHRyKVxuIDI2OTpcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gMjcwOlx0XG4gMjcxOlx0XHRzd2l0Y2ggKHB0LVx1MDAzZXR5cGUpIHtcbiAyNzI6XHRcdGRlZmF1bHQ6XG4gMjczOlx0XHRjYXNlIE5MQV9VTlNQRUM6XG4gMjc0Olx0XHRjYXNlIE5MQV9SRUpFQ1Q6XG4gMjc1Olx0XHRcdC8qIHNraXAgLSB1c2UgTkxBX01JTl9MRU4gdG8gYWR2ZXJ0aXNlIHN1Y2ggKi9cbiAyNzY6XHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgYXR0cik7XG4gMjc3Olx0XHRcdHJldHVybiAtRU5PREFUQTtcbiAyNzg6XHRcdGNhc2UgTkxBX05FU1RFRDpcbiAyNzk6XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9ORVNURUQ7XG4gMjgwOlx0XHRcdGZhbGx0aHJvdWdoO1xuIDI4MTpcdFx0Y2FzZSBOTEFfTkVTVEVEX0FSUkFZOlxuIDI4MjpcdFx0XHRpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfTkVTVEVEX0FSUkFZKVxuIDI4MzpcdFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfTkVTVEVEX0FSUkFZO1xuIDI4NDpcdFx0XHRpZiAoc3RhdGUgXHUwMDI2XHUwMDI2IHB0LVx1MDAzZW5lc3RlZF9wb2xpY3kgXHUwMDI2XHUwMDI2IHB0LVx1MDAzZWxlbiBcdTAwMjZcdTAwMjZcbiAyODU6XHRcdFx0ICAgIChubGFfcHV0X3UzMihza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfUE9MSUNZX0lEWCxcbiAyODY6XHRcdFx0XHRcdCBuZXRsaW5rX3BvbGljeV9kdW1wX2dldF9wb2xpY3lfaWR4KHN0YXRlLFxuIDI4NzpcdFx0XHRcdFx0XHRcdFx0XHQgICAgcHQtXHUwMDNlbmVzdGVkX3BvbGljeSxcbiAyODg6XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHB0LVx1MDAzZWxlbikpIHx8XG4gMjg5Olx0XHRcdCAgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BPTElDWV9NQVhUWVBFLFxuIDI5MDpcdFx0XHRcdFx0IHB0LVx1MDAzZWxlbikpKVxuIDI5MTpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDI5MjpcdFx0XHRicmVhaztcbiAyOTM6XHRcdGNhc2UgTkxBX1U4OlxuIDI5NDpcdFx0Y2FzZSBOTEFfVTE2OlxuIDI5NTpcdFx0Y2FzZSBOTEFfVTMyOlxuIDI5NjpcdFx0Y2FzZSBOTEFfVTY0OlxuIDI5NzpcdFx0Y2FzZSBOTEFfQkUxNjpcbiAyOTg6XHRcdGNhc2UgTkxBX0JFMzI6XG4gMjk5Olx0XHRjYXNlIE5MQV9VSU5UOlxuIDMwMDpcdFx0Y2FzZSBOTEFfTVNFQ1M6IHtcbiAzMDE6XHRcdFx0c3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiByYW5nZTtcbiAzMDI6XHRcbiAzMDM6XHRcdFx0aWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1U4KVxuIDMwNDpcdFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTg7XG4gMzA1Olx0XHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1UxNiB8fCBwdC1cdTAwM2V0eXBlID09IE5MQV9CRTE2KVxuIDMwNjpcdFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTE2O1xuIDMwNzpcdFx0XHRlbHNlIGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9VMzIgfHwgcHQtXHUwMDNldHlwZSA9PSBOTEFfQkUzMilcbiAzMDg6XHRcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1UzMjtcbiAzMDk6XHRcdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTY0KVxuIDMxMDpcdFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTY0O1xuIDMxMTpcdFx0XHRlbHNlXG4gMzEyOlx0XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VSU5UO1xuIDMxMzpcdFxuIDMxNDpcdFx0XHRpZiAoKHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMTYgfHwgcHQtXHUwMDNldHlwZSA9PSBOTEFfQkUzMikgXHUwMDI2XHUwMDI2XG4gMzE1Olx0XHRcdCAgICBubGFfcHV0X3UzMihza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUixcbiAzMTY6XHRcdFx0XHRcdE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU4pKVxuIDMxNzpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDMxODpcdFxuIDMxOTpcdFx0XHRpZiAocHQtXHUwMDNldmFsaWRhdGlvbl90eXBlID09IE5MQV9WQUxJREFURV9NQVNLKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM1MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBOZXRsaW5rIFBvbGljeSBEdW1waW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXRsaW5rIHBvbGljeSBkdW1wIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZC4gTXkgZmlyc3Qgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiBgX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJgIGFuZCBgbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGVgLiBTZWVpbmcgd2hlcmUgdGhleSYjMzk7cmUgaW52b2tlZCB3aWxsIGdpdmUgbWUgYSBjb25jcmV0ZSBwaWN0dXJlIG9mIHRoZWlyIHJvbGUgd2l0aGluIHRoZSBzeXN0ZW0uCgpJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoIG9mIHRoZSBgbmV0L25ldGxpbmsvcG9saWN5LmNgIGZpbGUgaXRzZWxmIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGNvbnRleHQuIFRoZW4sIEkgd2lsbCBhbHNvIGxldmVyYWdlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgYWxsIGluc3RhbmNlcyBvZiBgbmV0bGlua19wb2xpY3lfZHVtcGAgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGF0JiMzOTtsbCBsZXQgbWUgcXVpY2tseSBzY2FuIGZvciBwYXR0ZXJucywgdXNlLWNhc2VzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgbmV0bGluayBwb2xpY3kgZnJhbWV3b3JrLiBUaGlzIGNvbWJpbmF0aW9uIG9mIHRhcmdldGVkIHNlYXJjaGVzIGFuZCBicm9hZGVyIGZpbGUgYW5hbHlzaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0bGlua19wb2xpY3lfZHVtcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRsaW5rJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz0yMTYzPW5ldGxpbmtfYWNrX3Rsdl9sZW4oc3RydWN0IG5ldGxpbmtfc29jayAqbmxrLCBpbnQgZXJyLFxuLS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMTgzLVx0aWYgKGV4dGFjay1cdTAwM2Vwb2xpY3kpXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjE4NDpcdFx0dGx2bGVuICYjNDM7PSBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZShleHRhY2stXHUwMDNlcG9saWN5KTtcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMTg1LVx0aWYgKGV4dGFjay1cdTAwM2VtaXNzX3R5cGUpXG4tLVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jPTIyMDA9bmV0bGlua19hY2tfdGx2X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsIGludCBlcnIsXG4tLVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTIyMTUtXHRpZiAoZXh0YWNrLVx1MDAzZXBvbGljeSlcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoyMjE2Olx0XHRuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoc2tiLCBleHRhY2stXHUwMDNlcG9saWN5LFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTIyMTctXHRcdFx0XHRcdCAgICAgICBOTE1TR0VSUl9BVFRSX1BPTElDWSk7XG4tLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM9MTUxMj1zdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHgge1xubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTUxMzpcdHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZTtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE1MTQtXHRjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKnJ0O1xuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jPTE1Mjk9c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE1NzEtXHRcdGlmIChkb2l0LnBvbGljeSkge1xubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTU3MjpcdFx0XHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTU3My1cdFx0XHRcdFx0XHRcdCAgICAgZG9pdC5wb2xpY3ksXG4tLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTU3OC1cdFx0aWYgKGR1bXAucG9saWN5KSB7XG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNTc5Olx0XHRcdGVyciA9IG5ldGxpbmtfcG9saWN5X2R1bXBfYWRkX3BvbGljeShcdTAwMjZjdHgtXHUwMDNlc3RhdGUsXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNTgwLVx0XHRcdFx0XHRcdFx0ICAgICBkdW1wLnBvbGljeSxcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjAxLVx0XHRpZiAoaS5kb2l0LnBvbGljeSkge1xubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTYwMjpcdFx0XHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTYwMy1cdFx0XHRcdFx0XHRcdCAgICAgaS5kb2l0LnBvbGljeSxcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjA4LVx0XHRpZiAoaS5kdW1waXQucG9saWN5KSB7XG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNjA5Olx0XHRcdGVyciA9IG5ldGxpbmtfcG9saWN5X2R1bXBfYWRkX3BvbGljeShcdTAwMjZjdHgtXHUwMDNlc3RhdGUsXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjEwLVx0XHRcdFx0XHRcdFx0ICAgICBpLmR1bXBpdC5wb2xpY3ksXG4tLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTYyMy1lcnJfZnJlZV9zdGF0ZTpcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE2MjQ6XHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVx1MDAzZXN0YXRlKTtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2MjUtZXJyX2ZyZWVfb3BfaXRlcjpcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYz0xNjQ4PXN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3B1dF9vcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2NzQtXHRpZiAoZG9pdC1cdTAwM2Vwb2xpY3kpIHtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE2NzU6XHRcdGlkeCA9IG5ldGxpbmtfcG9saWN5X2R1bXBfZ2V0X3BvbGljeV9pZHgoY3R4LVx1MDAzZXN0YXRlLFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTY3Ni1cdFx0XHRcdFx0XHRcdCBkb2l0LVx1MDAzZXBvbGljeSxcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjgyLVx0aWYgKGR1bXBpdC1cdTAwM2Vwb2xpY3kpIHtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE2ODM6XHRcdGlkeCA9IG5ldGxpbmtfcG9saWN5X2R1bXBfZ2V0X3BvbGljeV9pZHgoY3R4LVx1MDAzZXN0YXRlLFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTY4NC1cdFx0XHRcdFx0XHRcdCBkdW1waXQtXHUwMDNlcG9saWN5LFxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jPTE3MDE9c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3koc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3MzAtXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzMxOlx0d2hpbGUgKG5ldGxpbmtfcG9saWN5X2R1bXBfbG9vcChjdHgtXHUwMDNlc3RhdGUpKSB7XG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNzMyLVx0XHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3NDEtXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzQyOlx0XHRpZiAobmV0bGlua19wb2xpY3lfZHVtcF93cml0ZShza2IsIGN0eC1cdTAwM2VzdGF0ZSkpXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNzQzLVx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jPTE3NTc9c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTc2MS1cdGtmcmVlKGN0eC1cdTAwM2VvcF9pdGVyKTtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE3NjI6XHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVx1MDAzZXN0YXRlKTtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3NjMtXHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xNi1cbm5ldC9uZXRsaW5rL3BvbGljeS5jOjE3OnN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlIHtcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTE4LVx0dW5zaWduZWQgaW50IHBvbGljeV9pZHg7XG4tLVxubmV0L25ldGxpbmsvcG9saWN5LmMtMjYtXG5uZXQvbmV0bGluay9wb2xpY3kuYzoyNzpzdGF0aWMgaW50IGFkZF9wb2xpY3koc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKipzdGF0ZXAsXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yOC1cdFx0ICAgICAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSxcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMC17XG5uZXQvbmV0bGluay9wb2xpY3kuYzozMTpcdHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSA9ICpzdGF0ZXA7XG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMi1cdHVuc2lnbmVkIGludCBvbGRfbl9hbGxvYywgbl9hbGxvYywgaTtcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy02Ny0vKipcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjY4OiAqIG5ldGxpbmtfcG9saWN5X2R1bXBfZ2V0X3BvbGljeV9pZHggLSByZXRyaWV2ZSBwb2xpY3kgaW5kZXhcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTY5LSAqIEBzdGF0ZTogdGhlIHBvbGljeSBkdW1wIHN0YXRlXG4tLVxubmV0L25ldGxpbmsvcG9saWN5LmMtODEtICovXG5uZXQvbmV0bGluay9wb2xpY3kuYzo4MjppbnQgbmV0bGlua19wb2xpY3lfZHVtcF9nZXRfcG9saWN5X2lkeChzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXG5uZXQvbmV0bGluay9wb2xpY3kuYy04My1cdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcG9saWN5LFxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTEwMC1cbm5ldC9uZXRsaW5rL3BvbGljeS5jOjEwMTpzdGF0aWMgc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKmFsbG9jX3N0YXRlKHZvaWQpXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xMDIte1xubmV0L25ldGxpbmsvcG9saWN5LmM6MTAzOlx0c3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlO1xubmV0L25ldGxpbmsvcG9saWN5LmMtMTA0LVxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTExMy0vKipcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjExNDogKiBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3kgLSBhZGQgYSBwb2xpY3kgdG8gdGhlIGR1bXBcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTExNS0gKiBAcHN0YXRlOiBzdGF0ZSB0byBhZGQgdG8sIG1heSBiZSByZWFsbG9jYXRlZCwgbXVzdCBiZSAlTlVMTCB0aGUgZmlyc3QgdGltZVxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTEyNS0gKi9cbm5ldC9uZXRsaW5rL3BvbGljeS5jOjEyNjppbnQgbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICoqcHN0YXRlLFxubmV0L25ldGxpbmsvcG9saWN5LmMtMTI3LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSxcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xMjkte1xubmV0L25ldGxpbmsvcG9saWN5LmM6MTMwOlx0c3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlID0gKnBzdGF0ZTtcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTEzMS1cdHVuc2lnbmVkIGludCBwb2xpY3lfaWR4O1xuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTE4Mi1cdGlmICghKnBzdGF0ZSlcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjE4MzpcdFx0bmV0bGlua19wb2xpY3lfZHVtcF9mcmVlKHN0YXRlKTtcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTE4NC1cdGVsc2Vcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYz0xODk9c3RhdGljIGJvb2xcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjE5MDpuZXRsaW5rX3BvbGljeV9kdW1wX2ZpbmlzaGVkKHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSlcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTE5MS17XG4tLVxubmV0L25ldGxpbmsvcG9saWN5LmMtMTk2LS8qKlxubmV0L25ldGxpbmsvcG9saWN5LmM6MTk3OiAqIG5ldGxpbmtfcG9saWN5X2R1bXBfbG9vcCAtIGR1bXBpbmcgbG9vcCBpbmRpY2F0b3Jcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTE5OC0gKiBAc3RhdGU6IHRoZSBwb2xpY3kgZHVtcCBzdGF0ZVxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIwMy0gKi9cbm5ldC9uZXRsaW5rL3BvbGljeS5jOjIwNDpib29sIG5ldGxpbmtfcG9saWN5X2R1bXBfbG9vcChzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUpXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yMDUte1xubmV0L25ldGxpbmsvcG9saWN5LmM6MjA2Olx0cmV0dXJuICFuZXRsaW5rX3BvbGljeV9kdW1wX2ZpbmlzaGVkKHN0YXRlKTtcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIwNy19XG5uZXQvbmV0bGluay9wb2xpY3kuYy0yMDgtXG5uZXQvbmV0bGluay9wb2xpY3kuYzoyMDk6aW50IG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdClcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIxMC17XG4tLVxubmV0L25ldGxpbmsvcG9saWN5LmM9MjU3PXN0YXRpYyBpbnRcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjI1ODpfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yNTktXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yNjIte1xubmV0L25ldGxpbmsvcG9saWN5LmM6MjYzOlx0aW50IGVzdGltYXRlID0gbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUocHQpO1xubmV0L25ldGxpbmsvcG9saWN5LmMtMjY0LVx0ZW51bSBuZXRsaW5rX2F0dHJpYnV0ZV90eXBlIHR5cGU7XG4tLVxubmV0L25ldGxpbmsvcG9saWN5LmMtMjg1LVx0XHQgICAgKG5sYV9wdXRfdTMyKHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9QT0xJQ1lfSURYLFxubmV0L25ldGxpbmsvcG9saWN5LmM6Mjg2Olx0XHRcdFx0IG5ldGxpbmtfcG9saWN5X2R1bXBfZ2V0X3BvbGljeV9pZHgoc3RhdGUsXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yODctXHRcdFx0XHRcdFx0XHRcdCAgICBwdC1cdTAwM2VuZXN0ZWRfcG9saWN5LFxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQyMi0vKipcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjQyMzogKiBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIgLSB3cml0ZSBhIGdpdmVuIGF0dHJpYnV0ZSBwb2xpY3lcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQyNC0gKiBAc2tiOiB0aGUgbWVzc2FnZSBza2IgdG8gd3JpdGUgdG9cbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy00MzEtICovXG5uZXQvbmV0bGluay9wb2xpY3kuYzo0MzI6aW50IG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGxpbmsvcG9saWN5LmMtNDMzLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQzNS17XG5uZXQvbmV0bGluay9wb2xpY3kuYzo0MzY6XHRyZXR1cm4gX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoTlVMTCwgc2tiLCBwdCwgbmVzdGF0dHIpO1xubmV0L25ldGxpbmsvcG9saWN5LmMtNDM3LX1cbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy00MzktLyoqXG5uZXQvbmV0bGluay9wb2xpY3kuYzo0NDA6ICogbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZSAtIHdyaXRlIGN1cnJlbnQgcG9saWN5IGR1bXAgYXR0cmlidXRlc1xubmV0L25ldGxpbmsvcG9saWN5LmMtNDQxLSAqIEBza2I6IHRoZSBtZXNzYWdlIHNrYiB0byB3cml0ZSB0b1xuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQ0NS0gKi9cbm5ldC9uZXRsaW5rL3BvbGljeS5jOjQ0NjppbnQgbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGxpbmsvcG9saWN5LmM6NDQ3Olx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSlcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQ0OC17XG4tLVxubmV0L25ldGxpbmsvcG9saWN5LmMtNDYyLVxubmV0L25ldGxpbmsvcG9saWN5LmM6NDYzOlx0ZXJyID0gX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoc3RhdGUsIHNrYiwgcHQsIHN0YXRlLVx1MDAzZWF0dHJfaWR4KTtcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQ2NC1cdGlmIChlcnIgPT0gLUVOT0RBVEEpIHtcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy00ODItXHRpZiAoYWdhaW4pIHtcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjQ4MzpcdFx0aWYgKG5ldGxpbmtfcG9saWN5X2R1bXBfZmluaXNoZWQoc3RhdGUpKVxubmV0L25ldGxpbmsvcG9saWN5LmMtNDg0LVx0XHRcdHJldHVybiAtRU5PREFUQTtcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy00OTUtLyoqXG5uZXQvbmV0bGluay9wb2xpY3kuYzo0OTY6ICogbmV0bGlua19wb2xpY3lfZHVtcF9mcmVlIC0gZnJlZSBwb2xpY3kgZHVtcCBzdGF0ZVxubmV0L25ldGxpbmsvcG9saWN5LmMtNDk3LSAqIEBzdGF0ZTogdGhlIHBvbGljeSBkdW1wIHN0YXRlIHRvIGZyZWVcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy01MDAtICovXG5uZXQvbmV0bGluay9wb2xpY3kuYzo1MDE6dm9pZCBuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlKVxubmV0L25ldGxpbmsvcG9saWN5LmMtNTAyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAxNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBkaWdnaW5nIGludG8gdGhlIGhlYXJ0IG9mIG5ldGxpbmsgcG9saWN5IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvbmV0bGluay9wb2xpY3kuY2AuIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGEgZmV3IGtleSBmdW5jdGlvbnM6IGBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZWAsIGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAsIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJgLCBhbmQgYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCBmb3IgZHVtcGluZyBhbmQgd3JpdGluZyBuZXRsaW5rIGF0dHJpYnV0ZSBwb2xpY2llcy4KCkxvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIGl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBwaXZvdGFsIGluIGdlbmVyaWMgbmV0bGluayYjMzk7cyBwb2xpY3kgZHVtcGluZywgYWNjZXNzZWQgdGhyb3VnaCBgY3RybF9kdW1wcG9saWN5YCwgYW5kIGFsc28gaW52b2x2ZWQgaW4gbmV0bGluayBBQ0sgVExWIGZpbGxpbmcsIG5vdGFibHkgdGhyb3VnaCBgbmV0bGlua19hY2tfdGx2X2ZpbGxgIGFuZCBgbmV0bGlua19hY2tfdGx2X2xlbmAgdmlhIGBOTE1TR0VSUl9BVFRSX1BPTElDWWAuIFRoZSBjb25uZWN0aW9uIHRvIGBDVFJMX0NNRF9HRVRQT0xJQ1lgIHN1Z2dlc3RzIHRoaXMgcG9saWN5IGR1bXBpbmcgZnVuY3Rpb25hbGl0eSBpcyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgd2hpY2ggbWFrZXMgaXQgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBGdXJ0aGVybW9yZSwgZXh0YWNrIHBvbGljeSBkdW1waW5nIGlzIHJldHVybmVkIHdoZW4gdGhlIG5ldGxpbmsgbWVzc2FnZXMgYXJlIGludmFsaWQgZHVlIHRvIGF0dHJpYnV0ZXMgcG9saWN5IGNoZWNrcy4KCkdpdmVuIHRoZSBwb3RlbnRpYWwgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBhbmQgdGhlIHJvbGUgaW4gZXJyb3IgaGFuZGxpbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgYnVpbGQgY29uZmlndXJhdGlvbiBiZXR0ZXIuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYG5ldC9uZXRsaW5rL3BvbGljeS5jYCBpcyBhbHdheXMgY29tcGlsZWQgb3IgaWYgdGhlcmUgYXJlIEtjb25maWcgb3B0aW9ucyBnb3Zlcm5pbmcgaXRzIGluY2x1c2lvbi4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwIOKAkyB0aW1lIHRvIGRpdmUgaW50byBgbmV0L25ldGxpbmsvTWFrZWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGxpbmsvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIG5ldGxpbmsgZHJpdmVyLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmoteSAgXHRcdFx0XHQ6PSBhZl9uZXRsaW5rLm8gZ2VuZXRsaW5rLm8gcG9saWN5Lm9cbiAgIDc6XHRcbiAgIDg6XHRvYmotJChDT05GSUdfTkVUTElOS19ESUFHKVx0JiM0Mzs9IG5ldGxpbmtfZGlhZy5vXG4gICA5Olx0bmV0bGlua19kaWFnLXlcdFx0XHQ6PSBkaWFnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc3NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGNvZGU6CgoqKkFuYWx5emluZyBOZXRsaW5rIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYG5ldC9uZXRsaW5rL01ha2VmaWxlYCBhbmQgc2VlIGBvYmoteSA6PSBhZl9uZXRsaW5rLm8gZ2VuZXRsaW5rLm8gcG9saWN5Lm9gLiBUaGlzIHRlbGxzIG1lIHRoYXQgYGFmX25ldGxpbmsub2AsIGBnZW5ldGxpbmsub2AsIGFuZCBgcG9saWN5Lm9gIGFyZSBnZXR0aW5nIGJ1aWx0IGludG8gdGhlIG5ldGxpbmsgbW9kdWxlLiBNYWtlcyBzZW5zZS4gTm93LCB0aGUgY29udGV4dCBpcyB0aGF0IHRoZSBlbnRpcmUgYG5ldC9uZXRsaW5rL2AgZGlyZWN0b3J5IGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBlbmFibGluZyBjb25kaXRpb24uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgY2hlY2sgd2hlcmUgdGhpcyBpcyBjb250cm9sbGVkLiBJIGltbWVkaWF0ZWx5IHN1c3BlY3QgaXQmIzM5O3MgdGllZCB0byBgQ09ORklHX05FVGAsIHNpbmNlIHRoYXQmIzM5O3MgdGhlIHN0YW5kYXJkIG5ldHdvcmtpbmcgb3B0aW9uIGluIHRoZSBrZXJuZWwuIExldCBtZSBkb3VibGUgY2hlY2ssIGVpdGhlciBpbiB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLCBvciBwZXJoYXBzIHRoZSBgbmV0L01ha2VmaWxlYC4gSSYjMzk7bGwgb3BlbiB0aG9zZSB1cCBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSByZXZlYWxzLiBNeSBpbnR1aXRpb24gc2F5cyBgQ09ORklHX05FVGAgaXMgdGhlIGtleS4gSXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IGRlcGVuZGVuY3kgdGhhdCB3b3VsZCBlbmFibGUgdGhlIGVudGlyZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgYW5kIGJ5IGV4dGVuc2lvbiwgdGhlIG5ldGxpbmsgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBuZXR3b3JraW5nLlxuICAgNDpcdCNcbiAgIDU6XHQjIDIgU2VwIDIwMDAsIENocmlzdG9waCBIZWxsd2lnIFx1MDAzY2hjaEBpbmZyYWRlYWQub3JnXHUwMDNlXG4gICA2Olx0IyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy5cbiAgIDc6XHQjXG4gICA4Olx0XG4gICA5Olx0b2JqLXlcdFx0XHRcdDo9IGRldnJlcy5vIHNvY2tldC5vIGNvcmUvXG4gIDEwOlx0XG4gIDExOlx0b2JqLSQoQ09ORklHX0NPTVBBVClcdFx0JiM0Mzs9IGNvbXBhdC5vXG4gIDEyOlx0XG4gIDEzOlx0IyBMTEMgaGFzIHRvIGJlIGxpbmtlZCBiZWZvcmUgdGhlIGZpbGVzIGluIG5ldC84MDIvXG4gIDE0Olx0b2JqLSQoQ09ORklHX0xMQylcdFx0JiM0Mzs9IGxsYy9cbiAgMTU6XHRvYmoteVx0XHRcdFx0JiM0Mzs9IGV0aGVybmV0LyA4MDIvIHNjaGVkLyBuZXRsaW5rLyBicGYvIGV0aHRvb2wvXG4gIDE2Olx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcdFx0JiM0Mzs9IG5ldGZpbHRlci9cbiAgMTc6XHRvYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IGlwdjQvXG4gIDE4Olx0b2JqLSQoQ09ORklHX1RMUylcdFx0JiM0Mzs9IHRscy9cbiAgMTk6XHRvYmotJChDT05GSUdfWEZSTSlcdFx0JiM0Mzs9IHhmcm0vXG4gIDIwOlx0b2JqLSQoQ09ORklHX1VOSVgpXHRcdCYjNDM7PSB1bml4L1xuICAyMTpcdG9iai0kKENPTkZJR19JTkVUX1BTUClcdFx0JiM0Mzs9IHBzcC9cbiAgMjI6XHRvYmoteVx0XHRcdFx0JiM0Mzs9IGlwdjYvXG4gIDIzOlx0b2JqLSQoQ09ORklHX1BBQ0tFVClcdFx0JiM0Mzs9IHBhY2tldC9cbiAgMjQ6XHRvYmotJChDT05GSUdfTkVUX0tFWSlcdFx0JiM0Mzs9IGtleS9cbiAgMjU6XHRvYmotJChDT05GSUdfQlJJREdFKVx0XHQmIzQzOz0gYnJpZGdlL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUzMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0bGluayBQb2xpY3kgRHVtcCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBuZXRsaW5rL2AgZGlyZWN0b3J5LiBJIHNlZSBpdCYjMzk7cyBpbmNsdWRlZCB2aWEgYG9iai15YCBpbiB0aGUgYG5ldC9NYWtlZmlsZWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGUgY2VudHJhbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgYXMgZXhwZWN0ZWQsIHNlZW1zIHRvIGJlIGBDT05GSUdfTkVUYC4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSYjMzk7dmUgbm90ZWQgYSBmZXcga2V5IG9uZXM6IGBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZWAsIGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAsIGFuZCB0aGUgZnVuY3Rpb25zIGNhbGxpbmcgdGhlbS4gU3BlY2lmaWNhbGx5LCBgbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyYCB3aGljaCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZWAgYW5kIGFsc28sIHRoZSBleHBvcnRlZCBlbnRyeSBwb2ludHMgYXJlIGBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZWAsIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJgLCBgbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZWAgYW5kIGBjdHJsX2R1bXBwb2xpY3lgLgoKSSB0aGluayB0aGVzZSBsb29rIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIGRlZXBlciBhbmFseXNpcy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlYCwgYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAsIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlYCwgYW5kIGBjdHJsX2R1bXBwb2xpY3lgIGFyZSBhbGwgcmVsZXZhbnQuIFRpbWUgdG8gY2hlY2sgYGN0cmxfZHVtcHBvbGljeWAgaW4gYG5ldC9uZXRsaW5rL2dlbmV0bGluay5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0bGluay9nZW5ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY5NTpcdFx0cmV0dXJuIDA7XG4xNjk2Olx0ZXJyOlxuMTY5NzpcdFx0Z2VubG1zZ19jYW5jZWwoc2tiLCBoZHIpO1xuMTY5ODpcdFx0cmV0dXJuIC1FTk9CVUZTO1xuMTY5OTpcdH1cbjE3MDA6XHRcbjE3MDE6XHRzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4xNzAyOlx0e1xuMTcwMzpcdFx0c3RydWN0IGN0cmxfZHVtcF9wb2xpY3lfY3R4ICpjdHggPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbjE3MDQ6XHRcdHZvaWQgKmhkcjtcbjE3MDU6XHRcbjE3MDY6XHRcdGlmIChjdHgtXHUwMDNlZHVtcF9tYXApIHtcbjE3MDc6XHRcdFx0aWYgKGN0eC1cdTAwM2VzaW5nbGVfb3ApIHtcbjE3MDg6XHRcdFx0XHRzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZG9pdCwgZHVtcGl0O1xuMTcwOTpcdFxuMTcxMDpcdFx0XHRcdGlmIChXQVJOX09OKGdlbmxfZ2V0X2NtZF9ib3RoKGN0eC1cdTAwM2VvcCwgY3R4LVx1MDAzZXJ0LFxuMTcxMTpcdFx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNmRvaXQsIFx1MDAyNmR1bXBpdCkpKVxuMTcxMjpcdFx0XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNzEzOlx0XG4xNzE0Olx0XHRcdFx0aWYgKGN0cmxfZHVtcHBvbGljeV9wdXRfb3Aoc2tiLCBjYiwgXHUwMDI2ZG9pdCwgXHUwMDI2ZHVtcGl0KSlcbjE3MTU6XHRcdFx0XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuMTcxNjpcdFxuMTcxNzpcdFx0XHRcdC8qIGRvbmUgd2l0aCB0aGUgcGVyLW9wIHBvbGljeSBpbmRleCBsaXN0ICovXG4xNzE4Olx0XHRcdFx0Y3R4LVx1MDAzZWR1bXBfbWFwID0gMDtcbjE3MTk6XHRcdFx0fVxuMTcyMDpcdFxuMTcyMTpcdFx0XHR3aGlsZSAoY3R4LVx1MDAzZWR1bXBfbWFwKSB7XG4xNzIyOlx0XHRcdFx0aWYgKGN0cmxfZHVtcHBvbGljeV9wdXRfb3Aoc2tiLCBjYixcbjE3MjM6XHRcdFx0XHRcdFx0XHQgICBcdTAwMjZjdHgtXHUwMDNlb3BfaXRlci1cdTAwM2Vkb2l0LFxuMTcyNDpcdFx0XHRcdFx0XHRcdCAgIFx1MDAyNmN0eC1cdTAwM2VvcF9pdGVyLVx1MDAzZWR1bXBpdCkpXG4xNzI1Olx0XHRcdFx0XHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbjE3MjY6XHRcbjE3Mjc6XHRcdFx0XHRjdHgtXHUwMDNlZHVtcF9tYXAgPSBnZW5sX29wX2l0ZXJfbmV4dChjdHgtXHUwMDNlb3BfaXRlcik7XG4xNzI4Olx0XHRcdH1cbjE3Mjk6XHRcdH1cbjE3MzA6XHRcbjE3MzE6XHRcdHdoaWxlIChuZXRsaW5rX3BvbGljeV9kdW1wX2xvb3AoY3R4LVx1MDAzZXN0YXRlKSkge1xuMTczMjpcdFx0XHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xuMTczMzpcdFxuMTczNDpcdFx0XHRoZHIgPSBjdHJsX2R1bXBwb2xpY3lfcHJlcChza2IsIGNiKTtcbjE3MzU6XHRcdFx0aWYgKCFoZHIpXG4xNzM2Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xNzM3Olx0XG4xNzM4Olx0XHRcdG5lc3QgPSBubGFfbmVzdF9zdGFydChza2IsIENUUkxfQVRUUl9QT0xJQ1kpO1xuMTczOTpcdFx0XHRpZiAoIW5lc3QpXG4xNzQwOlx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xNzQxOlx0XG4xNzQyOlx0XHRcdGlmIChuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlKHNrYiwgY3R4LVx1MDAzZXN0YXRlKSlcbjE3NDM6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjE3NDQ6XHRcbjE3NDU6XHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XG4xNzQ2Olx0XG4xNzQ3Olx0XHRcdGdlbmxtc2dfZW5kKHNrYiwgaGRyKTtcbjE3NDg6XHRcdH1cbjE3NDk6XHRcbjE3NTA6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuMTc1MTpcdFxuMTc1MjpcdG5sYV9wdXRfZmFpbHVyZTpcbjE3NTM6XHRcdGdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTtcbjE3NTQ6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuMTc1NTpcdH1cbjE3NTY6XHRcbjE3NTc6XHRzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbjE3NTg6XHR7XG4xNzU5Olx0XHRzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHggKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuMTc2MDpcdFxuMTc2MTpcdFx0a2ZyZWUoY3R4LVx1MDAzZW9wX2l0ZXIpO1xuMTc2MjpcdFx0bmV0bGlua19wb2xpY3lfZHVtcF9mcmVlKGN0eC1cdTAwM2VzdGF0ZSk7XG4xNzYzOlx0XHRyZXR1cm4gMDtcbjE3NjQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTAxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgZm9yIE5MQV9CRSBQb2xpY2llcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBzZWUgaWYgd2UgaGF2ZSBhbnkgYE5MQV9CRTE2YCBvciBgTkxBX0JFMzJgIHBvbGljaWVzIGx1cmtpbmcgaW4gdGhlIGtlcm5lbCB0aGF0IG1pZ2h0IGJlIHJpcGUgZm9yIGR1bXBpbmcuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgZ3JlcC4gSXQmIzM5O3MgdGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBiYXNlbGluZSBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBzb3VyY2UuIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzOyBhIHNpbXBsZSBzZWFyY2ggd2lsbCB0ZWxsIG1lIGlmIHRob3NlIHBvbGljaWVzIGV2ZW4gZXhpc3QgaW4gdGhlIGNvZGViYXNlLiBGcm9tIHRoZXJlLCBJIGNhbiBkZWNpZGUgaG93IHRvIHByb2NlZWQgd2l0aCB0aGUgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05MQV9CRSgxNnwzMikmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTg3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZ2VuZXZlX3BvbGljeVtJRkxBX0dFTkVWRV9NQVggJiM0MzsgMV0gPSB7XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTg4OS1cdFtJRkxBX0dFTkVWRV9HUk9fSElOVF1cdFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjE4OTA6XHRbSUZMQV9HRU5FVkVfTE9DQUxdXHRcdD0geyAudHlwZSA9IE5MQV9CRTMyIH0sXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xODkxLVx0W0lGTEFfR0VORVZFX0xPQ0FMNl1cdFx0PSBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IGluNl9hZGRyKSksXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jPTY2PWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG92cG5fcGVlcl9ubF9wb2xpY3lbT1ZQTl9BX1BFRVJfVFhfSUQgJiM0MzsgMV0gPSB7XG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtNjctXHRbT1ZQTl9BX1BFRVJfSURdID0gTkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VMzIsIFx1MDAyNm92cG5fYV9wZWVyX2lkX3JhbmdlKSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzo2ODpcdFtPVlBOX0FfUEVFUl9SRU1PVEVfSVBWNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtNjktXHRbT1ZQTl9BX1BFRVJfUkVNT1RFX0lQVjZdID0gTkxBX1BPTElDWV9FWEFDVF9MRU4oMTYpLFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTcwLVx0W09WUE5fQV9QRUVSX1JFTU9URV9JUFY2X1NDT1BFX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jOjcxOlx0W09WUE5fQV9QRUVSX1JFTU9URV9QT1JUXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9CRTE2LCAxKSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy03Mi1cdFtPVlBOX0FfUEVFUl9TT0NLRVRdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtNzMtXHRbT1ZQTl9BX1BFRVJfU09DS0VUX05FVE5TSURdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM6NzQ6XHRbT1ZQTl9BX1BFRVJfVlBOX0lQVjRdID0geyAudHlwZSA9IE5MQV9CRTMyLCB9LFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTc1LVx0W09WUE5fQV9QRUVSX1ZQTl9JUFY2XSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKDE2KSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzo3NjpcdFtPVlBOX0FfUEVFUl9MT0NBTF9JUFY0XSA9IHsgLnR5cGUgPSBOTEFfQkUzMiwgfSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy03Ny1cdFtPVlBOX0FfUEVFUl9MT0NBTF9JUFY2XSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKDE2KSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzo3ODpcdFtPVlBOX0FfUEVFUl9MT0NBTF9QT1JUXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9CRTE2LCAxKSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy03OS1cdFtPVlBOX0FfUEVFUl9LRUVQQUxJVkVfSU5URVJWQUxdID0gTkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VMzIsIFx1MDAyNm92cG5fYV9wZWVyX2tlZXBhbGl2ZV9pbnRlcnZhbF9yYW5nZSksXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jPTk3PWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG92cG5fcGVlcl9uZXdfaW5wdXRfbmxfcG9saWN5W09WUE5fQV9QRUVSX1RYX0lEICYjNDM7IDFdID0ge1xuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTk4LVx0W09WUE5fQV9QRUVSX0lEXSA9IE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCBcdTAwMjZvdnBuX2FfcGVlcl9pZF9yYW5nZSksXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM6OTk6XHRbT1ZQTl9BX1BFRVJfUkVNT1RFX0lQVjRdID0geyAudHlwZSA9IE5MQV9CRTMyLCB9LFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTEwMC1cdFtPVlBOX0FfUEVFUl9SRU1PVEVfSVBWNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtMTAxLVx0W09WUE5fQV9QRUVSX1JFTU9URV9JUFY2X1NDT1BFX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jOjEwMjpcdFtPVlBOX0FfUEVFUl9SRU1PVEVfUE9SVF0gPSBOTEFfUE9MSUNZX01JTihOTEFfQkUxNiwgMSksXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtMTAzLVx0W09WUE5fQV9QRUVSX1NPQ0tFVF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzoxMDQ6XHRbT1ZQTl9BX1BFRVJfVlBOX0lQVjRdID0geyAudHlwZSA9IE5MQV9CRTMyLCB9LFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTEwNS1cdFtPVlBOX0FfUEVFUl9WUE5fSVBWNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM6MTA2Olx0W09WUE5fQV9QRUVSX0xPQ0FMX0lQVjRdID0geyAudHlwZSA9IE5MQV9CRTMyLCB9LFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTEwNy1cdFtPVlBOX0FfUEVFUl9MT0NBTF9JUFY2XSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKDE2KSxcbi0tXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM9MTEzPWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG92cG5fcGVlcl9zZXRfaW5wdXRfbmxfcG9saWN5W09WUE5fQV9QRUVSX1RYX0lEICYjNDM7IDFdID0ge1xuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTExNC1cdFtPVlBOX0FfUEVFUl9JRF0gPSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1UzMiwgXHUwMDI2b3Zwbl9hX3BlZXJfaWRfcmFuZ2UpLFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jOjExNTpcdFtPVlBOX0FfUEVFUl9SRU1PVEVfSVBWNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtMTE2LVx0W09WUE5fQV9QRUVSX1JFTU9URV9JUFY2XSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKDE2KSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy0xMTctXHRbT1ZQTl9BX1BFRVJfUkVNT1RFX0lQVjZfU0NPUEVfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM6MTE4Olx0W09WUE5fQV9QRUVSX1JFTU9URV9QT1JUXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9CRTE2LCAxKSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzoxMTk6XHRbT1ZQTl9BX1BFRVJfVlBOX0lQVjRdID0geyAudHlwZSA9IE5MQV9CRTMyLCB9LFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTEyMC1cdFtPVlBOX0FfUEVFUl9WUE5fSVBWNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM6MTIxOlx0W09WUE5fQV9QRUVSX0xPQ0FMX0lQVjRdID0geyAudHlwZSA9IE5MQV9CRTMyLCB9LFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTEyMi1cdFtPVlBOX0FfUEVFUl9MT0NBTF9JUFY2XSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKDE2KSxcbi0tXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg9MTc3PWVudW0ge1xuLS1cbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0xOTUtXHROTEFfUkVKRUNULFxuaW5jbHVkZS9uZXQvbmV0bGluay5oOjE5NjpcdE5MQV9CRTE2LFxuaW5jbHVkZS9uZXQvbmV0bGluay5oOjE5NzpcdE5MQV9CRTMyLFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTE5OC1cdE5MQV9TSU5ULFxuLS1cbmluY2x1ZGUvbmV0L25ldGxpbmsuaD0yMTM9ZW51bSBubGFfcG9saWN5X3ZhbGlkYXRpb24ge1xuLS1cbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0yNTAtICogICAgTkxBX1MzMiwgTkxBX1M2NCxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDoyNTE6ICogICAgTkxBX0JFMTYsIE5MQV9CRTMyLFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTI1Mi0gKiAgICBOTEFfTVNFQ1MgICAgICAgICAgICBMZWF2aW5nIHRoZSBsZW5ndGggZmllbGQgemVybyB3aWxsIHZlcmlmeSB0aGVcbi0tXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtMjgyLSAqICAgIE5MQV9VNjQsXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6MjgzOiAqICAgIE5MQV9CRTE2LFxuaW5jbHVkZS9uZXQvbmV0bGluay5oOjI4NDogKiAgICBOTEFfQkUzMixcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0yODUtICogICAgTkxBX1NJTlQsXG4tLVxuaW5jbHVkZS9uZXQvbmV0bGluay5oPTM0Nj1zdHJ1Y3QgbmxhX3BvbGljeSB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTQwNS1cdCB0cCA9PSBOTEFfVTY0IHx8IHRwID09IE5MQV9VSU5UIHx8XHRcdFx0XFxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDo0MDY6XHQgdHAgPT0gTkxBX0JFMTYgfHwgdHAgPT0gTkxBX0JFMzIpXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtNDA3LSNkZWZpbmUgX19OTEFfSVNfU0lOVF9UWVBFKHRwKVx0XHRcdFx0XHRcdFxcXG4tLVxubGliL25sYXR0ci5jPTI0PXN0YXRpYyBjb25zdCB1OCBubGFfYXR0cl9sZW5bTkxBX1RZUEVfTUFYJiM0MzsxXSA9IHtcbi0tXG5saWIvbmxhdHRyLmMtMzItXHRbTkxBX1M2NF1cdD0gc2l6ZW9mKHM2NCksXG5saWIvbmxhdHRyLmM6MzM6XHRbTkxBX0JFMTZdXHQ9IHNpemVvZihfX2JlMTYpLFxubGliL25sYXR0ci5jOjM0Olx0W05MQV9CRTMyXVx0PSBzaXplb2YoX19iZTMyKSxcbmxpYi9ubGF0dHIuYy0zNS19O1xuLS1cbmxpYi9ubGF0dHIuYz0zNz1zdGF0aWMgY29uc3QgdTggbmxhX2F0dHJfbWlubGVuW05MQV9UWVBFX01BWCYjNDM7MV0gPSB7XG4tLVxubGliL25sYXR0ci5jLTQ3LVx0W05MQV9TNjRdXHQ9IHNpemVvZihzNjQpLFxubGliL25sYXR0ci5jOjQ4Olx0W05MQV9CRTE2XVx0PSBzaXplb2YoX19iZTE2KSxcbmxpYi9ubGF0dHIuYzo0OTpcdFtOTEFfQkUzMl1cdD0gc2l6ZW9mKF9fYmUzMiksXG5saWIvbmxhdHRyLmMtNTAtfTtcbi0tXG5saWIvbmxhdHRyLmM9MTE5PXZvaWQgbmxhX2dldF9yYW5nZV91bnNpZ25lZChjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXG4tLVxubGliL25sYXR0ci5jLTEzMS1cdGNhc2UgTkxBX1UxNjpcbmxpYi9ubGF0dHIuYzoxMzI6XHRjYXNlIE5MQV9CRTE2OlxubGliL25sYXR0ci5jLTEzMy1cdGNhc2UgTkxBX0JJTkFSWTpcbi0tXG5saWIvbmxhdHRyLmMtMTM2LVx0Y2FzZSBOTEFfVTMyOlxubGliL25sYXR0ci5jOjEzNzpcdGNhc2UgTkxBX0JFMzI6XG5saWIvbmxhdHRyLmMtMTM4LVx0XHRyYW5nZS1cdTAwM2VtYXggPSBVMzJfTUFYO1xuLS1cbmxpYi9ubGF0dHIuYz0xNzA9c3RhdGljIGludCBubGFfdmFsaWRhdGVfcmFuZ2VfdW5zaWduZWQoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxuLS1cbmxpYi9ubGF0dHIuYy0xOTktXHRcdGJyZWFrO1xubGliL25sYXR0ci5jOjIwMDpcdGNhc2UgTkxBX0JFMTY6XG5saWIvbmxhdHRyLmMtMjAxLVx0XHR2YWx1ZSA9IG50b2hzKG5sYV9nZXRfYmUxNihubGEpKTtcbmxpYi9ubGF0dHIuYy0yMDItXHRcdGJyZWFrO1xubGliL25sYXR0ci5jOjIwMzpcdGNhc2UgTkxBX0JFMzI6XG5saWIvbmxhdHRyLmMtMjA0LVx0XHR2YWx1ZSA9IG50b2hsKG5sYV9nZXRfYmUzMihubGEpKTtcbi0tXG5saWIvbmxhdHRyLmM9MzI1PXN0YXRpYyBpbnQgbmxhX3ZhbGlkYXRlX2ludF9yYW5nZShjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXG4tLVxubGliL25sYXR0ci5jLTMzNy1cdGNhc2UgTkxBX0JJTkFSWTpcbmxpYi9ubGF0dHIuYzozMzg6XHRjYXNlIE5MQV9CRTE2OlxubGliL25sYXR0ci5jOjMzOTpcdGNhc2UgTkxBX0JFMzI6XG5saWIvbmxhdHRyLmMtMzQwLVx0XHRyZXR1cm4gbmxhX3ZhbGlkYXRlX3JhbmdlX3Vuc2lnbmVkKHB0LCBubGEsIGV4dGFjaywgdmFsaWRhdGUpO1xuLS1cbmxpYi9ubGF0dHIuYz0zNTM9c3RhdGljIGludCBubGFfdmFsaWRhdGVfbWFzayhjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXG4tLVxubGliL25sYXR0ci5jLTM3NC1cdFx0YnJlYWs7XG5saWIvbmxhdHRyLmM6Mzc1Olx0Y2FzZSBOTEFfQkUxNjpcbmxpYi9ubGF0dHIuYy0zNzYtXHRcdHZhbHVlID0gbnRvaHMobmxhX2dldF9iZTE2KG5sYSkpO1xubGliL25sYXR0ci5jLTM3Ny1cdFx0YnJlYWs7XG5saWIvbmxhdHRyLmM6Mzc4Olx0Y2FzZSBOTEFfQkUzMjpcbmxpYi9ubGF0dHIuYy0zNzktXHRcdHZhbHVlID0gbnRvaGwobmxhX2dldF9iZTMyKG5sYSkpO1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTg0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZmliX3J1bGVfcG9saWN5W0ZSQV9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtODY4LVx0W0ZSQV9EU0NQXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIElORVRfRFNDUF9NQVNLIFx1MDAzZVx1MDAzZSAyKSxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjg2OTpcdFtGUkFfRkxPV0xBQkVMXSA9IHsgLnR5cGUgPSBOTEFfQkUzMiB9LFxubmV0L2NvcmUvZmliX3J1bGVzLmM6ODcwOlx0W0ZSQV9GTE9XTEFCRUxfTUFTS10gPSB7IC50eXBlID0gTkxBX0JFMzIgfSxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTg3MS1cdFtGUkFfU1BPUlRfTUFTS10gPSB7IC50eXBlID0gTkxBX1UxNiB9LFxuLS1cbm5ldC9pcHY0L2ZvdV9ubC5jPTE1PWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZvdV9ubF9wb2xpY3lbRk9VX0FUVFJfSUZJTkRFWCAmIzQzOyAxXSA9IHtcbm5ldC9pcHY0L2ZvdV9ubC5jOjE2Olx0W0ZPVV9BVFRSX1BPUlRdID0geyAudHlwZSA9IE5MQV9CRTE2LCB9LFxubmV0L2lwdjQvZm91X25sLmMtMTctXHRbRk9VX0FUVFJfQUZdID0geyAudHlwZSA9IE5MQV9VOCwgfSxcbi0tXG5uZXQvaXB2NC9mb3VfbmwuYy0yMC1cdFtGT1VfQVRUUl9SRU1DU1VNX05PUEFSVElBTF0gPSB7IC50eXBlID0gTkxBX0ZMQUcsIH0sXG5uZXQvaXB2NC9mb3VfbmwuYzoyMTpcdFtGT1VfQVRUUl9MT0NBTF9WNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXG5uZXQvaXB2NC9mb3VfbmwuYy0yMi1cdFtGT1VfQVRUUl9MT0NBTF9WNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXG5uZXQvaXB2NC9mb3VfbmwuYzoyMzpcdFtGT1VfQVRUUl9QRUVSX1Y0XSA9IHsgLnR5cGUgPSBOTEFfQkUzMiwgfSxcbm5ldC9pcHY0L2ZvdV9ubC5jLTI0LVx0W0ZPVV9BVFRSX1BFRVJfVjZdID0gTkxBX1BPTElDWV9FWEFDVF9MRU4oMTYpLFxubmV0L2lwdjQvZm91X25sLmM6MjU6XHRbRk9VX0FUVFJfUEVFUl9QT1JUXSA9IHsgLnR5cGUgPSBOTEFfQkUxNiwgfSxcbm5ldC9pcHY0L2ZvdV9ubC5jLTI2LVx0W0ZPVV9BVFRSX0lGSU5ERVhdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jPTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBydG1fbmhfcG9saWN5X25ld1tdID0ge1xuLS1cbm5ldC9pcHY0L25leHRob3AuYy00MS1cdFtOSEFfRkRCXVx0XHQ9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyOlx0W05IQV9EU1RfUE9SVF1cdFx0PSBOTEFfUE9MSUNZX01JTihOTEFfQkUxNiwgMSksXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDMtXHRbTkhBX1JFU19HUk9VUF1cdFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRtX2lwdjZfcG9saWN5W1JUQV9NQVgmIzQzOzFdID0ge1xuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTE0NC1cdFtSVEFfTkhfSURdXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbm5ldC9pcHY2L3JvdXRlLmM6NTE0NTpcdFtSVEFfRkxPV0xBQkVMXVx0XHQ9IHsgLnR5cGUgPSBOTEFfQkUzMiB9LFxubmV0L2lwdjYvcm91dGUuYy01MTQ2LX07XG4tLVxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5jPTE1PWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG1wdGNwX3BtX2FkZHJlc3NfbmxfcG9saWN5W01QVENQX1BNX0FERFJfQVRUUl9JRl9JRFggJiM0MzsgMV0gPSB7XG4tLVxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5jLTE3LVx0W01QVENQX1BNX0FERFJfQVRUUl9JRF0gPSB7IC50eXBlID0gTkxBX1U4LCB9LFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5jOjE4Olx0W01QVENQX1BNX0FERFJfQVRUUl9BRERSNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmMtMTktXHRbTVBUQ1BfUE1fQUREUl9BVFRSX0FERFI2XSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKDE2KSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MjYxNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXhwX25sYV9wb2xpY3lbQ1RBX0VYUEVDVF9NQVgmIzQzOzFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yNjIzLVx0W0NUQV9FWFBFQ1RfWk9ORV1cdD0geyAudHlwZSA9IE5MQV9VMTYgfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyNjI0Olx0W0NUQV9FWFBFQ1RfRkxBR1NdXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZfQ1RfRVhQRUNUX01BU0spLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI2MjUtXHRbQ1RBX0VYUEVDVF9DTEFTU11cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzQ3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXhwX25hdF9ubGFfcG9saWN5W0NUQV9FWFBFQ1RfTkFUX01BWCYjNDM7MV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MzQ4MDpcdFtDVEFfRVhQRUNUX05BVF9ESVJdXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBJUF9DVF9ESVJfUkVQTFkpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0ODEtXHRbQ1RBX0VYUEVDVF9OQVRfVFVQTEVdXHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3RhYmxlX3BvbGljeVtORlRBX1RBQkxFX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTU1LVx0XHRcdFx0ICAgIC5sZW4gPSBORlRfVEFCTEVfTUFYTkFNRUxFTiAtIDEgfSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNTY6XHRbTkZUQV9UQUJMRV9GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfVEFCTEVfRl9NQVNLKSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTctXHRbTkZUQV9UQUJMRV9IQU5ETEVdXHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTkxOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2NoYWluX3BvbGljeVtORlRBX0NIQUlOX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTI4LVx0W05GVEFfQ0hBSU5fQ09VTlRFUlNdXHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxOTI5Olx0W05GVEFfQ0hBSU5fRkxBR1NdXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZUX0NIQUlOX0ZMQUdTKSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5MzAtXHRbTkZUQV9DSEFJTl9JRF1cdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTQ3Mzc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9zZXRfcG9saWN5W05GVEFfU0VUX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NzQxLVx0XHRcdFx0XHQgICAgLmxlbiA9IE5GVF9TRVRfTUFYTkFNRUxFTiAtIDEgfSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQ3NDI6XHRbTkZUQV9TRVRfRkxBR1NdXHRcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDc0My1cdFx0XHRcdFx0XHRcdCAgTkZUX1NFVF9BTk9OWU1PVVMgfFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTYwODA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9zZXRfZWxlbV9wb2xpY3lbTkZUQV9TRVRfRUxFTV9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjA4Mi1cdFtORlRBX1NFVF9FTEVNX0RBVEFdXHRcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjYwODM6XHRbTkZUQV9TRVRfRUxFTV9GTEFHU11cdFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9TRVRfRUxFTV9JTlRFUlZBTF9FTkQgfFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjA4NC1cdFx0XHRcdFx0XHRcdFx0ICAgIE5GVF9TRVRfRUxFTV9DQVRDSEFMTCksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9ODgwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2Zsb3d0YWJsZV9wb2xpY3lbTkZUQV9GTE9XVEFCTEVfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg4MTUtXHRbTkZUQV9GTE9XVEFCTEVfSEFORExFXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4ODE2Olx0W05GVEFfRkxPV1RBQkxFX0ZMQUdTXVx0XHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZUX0ZMT1dUQUJMRV9NQVNLKSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg4MTctfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmM9MzcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZm5sX2FjY3RfcG9saWN5W05GQUNDVF9NQVgmIzQzOzFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2FjY3QuYy0zNzUtXHRbTkZBQ0NUX1BLVFNdID0geyAudHlwZSA9IE5MQV9VNjQgfSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2FjY3QuYzozNzY6XHRbTkZBQ0NUX0ZMQUdTXSA9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZBQ0NUX0ZfUVVPVEEpLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5jLTM3Ny1cdFtORkFDQ1RfUVVPVEFdID0geyAudHlwZSA9IE5MQV9VNjQgfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZm5sX2N0aGVscGVyX3R1cGxlX3BvbFtORkNUSF9UVVBMRV9NQVgmIzQzOzFdID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3MDpcdFtORkNUSF9UVVBMRV9MM1BST1RPTlVNXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTE2LCBORlBST1RPX0lQVjYpLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03MS1cdFtORkNUSF9UVVBMRV9MNFBST1RPTlVNXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xNzg9bmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5X3NldFtORkNUSF9QT0xJQ1lfU0VUX01BWCYjNDM7MV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjE3OTpcdFtORkNUSF9QT0xJQ1lfU0VUX05VTV0gPSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZfQ1RfTUFYX0VYUEVDVF9DTEFTU0VTKSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTgwLX07XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZm5sX2hvb2tfbmxhX3BvbGljeVtORk5MQV9IT09LX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzoyNzpcdFtORk5MQV9IT09LX0hPT0tOVU1dXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTI4LVx0W05GTkxBX0hPT0tfUFJJT1JJVFldXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM9OTAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnVsYV9jZmdfcG9saWN5W05GVUxBX0NGR19NQVgmIzQzOzFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTkwNS1cdFtORlVMQV9DRkdfTkxCVUZTSVpdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYzo5MDY6XHRbTkZVTEFfQ0ZHX0ZMQUdTXVx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMTYsIE5GVUxOTF9DRkdfRl9TRVEgfFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtOTA3LVx0XHRcdFx0XHRcdCAgTkZVTE5MX0NGR19GX1NFUV9HTE9CQUwgfFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTg1OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZxYV9jZmdfcG9saWN5W05GUUFfQ0ZHX01BWCYjNDM7MV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xODYyLVx0W05GUUFfQ0ZHX01BU0tdXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTg2MzpcdFtORlFBX0NGR19GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlFBX0NGR19GX01BWCAtIDEpLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xODY0LX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfYml0d2lzZS5jPTEzMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2JpdHdpc2VfcG9saWN5W05GVEFfQklUV0lTRV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmM6MTMyOlx0W05GVEFfQklUV0lTRV9TUkVHXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmM6MTMzOlx0W05GVEFfQklUV0lTRV9TUkVHMl1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxubmV0L25ldGZpbHRlci9uZnRfYml0d2lzZS5jOjEzNDpcdFtORlRBX0JJVFdJU0VfRFJFR11cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxubmV0L25ldGZpbHRlci9uZnRfYml0d2lzZS5jLTEzNS1cdFtORlRBX0JJVFdJU0VfTEVOXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYy0xMzctXHRbTkZUQV9CSVRXSVNFX1hPUl1cdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYzoxMzg6XHRbTkZUQV9CSVRXSVNFX09QXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYy0xMzktXHRbTkZUQV9CSVRXSVNFX0RBVEFdXHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfYnl0ZW9yZGVyLmM9NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9ieXRlb3JkZXJfcG9saWN5W05GVEFfQllURU9SREVSX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2J5dGVvcmRlci5jOjc2Olx0W05GVEFfQllURU9SREVSX1NSRUddXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2J5dGVvcmRlci5jOjc3Olx0W05GVEFfQllURU9SREVSX0RSRUddXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2J5dGVvcmRlci5jOjc4Olx0W05GVEFfQllURU9SREVSX09QXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2J5dGVvcmRlci5jOjc5Olx0W05GVEFfQllURU9SREVSX0xFTl1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9ieXRlb3JkZXIuYzo4MDpcdFtORlRBX0JZVEVPUkRFUl9TSVpFXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2J5dGVvcmRlci5jLTgxLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY21wLmM9NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9jbXBfcG9saWN5W05GVEFfQ01QX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jOjY3Olx0W05GVEFfQ01QX1NSRUddXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxubmV0L25ldGZpbHRlci9uZnRfY21wLmMtNjgtXHRbTkZUQV9DTVBfT1BdXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYz0xMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF90YXJnZXRfcG9saWN5W05GVEFfVEFSR0VUX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy0xMzgtXHRcdFx0XHQgICAgLmxlbiA9IFhUX0VYVEVOU0lPTl9NQVhOQU1FTEVOLCB9LFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmM6MTM5Olx0W05GVEFfVEFSR0VUX1JFVl1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy0xNDAtXHRbTkZUQV9UQVJHRVRfSU5GT11cdD0geyAudHlwZSA9IE5MQV9CSU5BUlkgfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYz0xOTY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9ydWxlX2NvbXBhdF9wb2xpY3lbTkZUQV9SVUxFX0NPTVBBVF9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy0xOTctXHRbTkZUQV9SVUxFX0NPTVBBVF9QUk9UT11cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jOjE5ODpcdFtORlRBX1JVTEVfQ09NUEFUX0ZMQUdTXVx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9SVUxFX0NPTVBBVF9GX01BU0spLFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMtMTk5LX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmM9NDYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfbWF0Y2hfcG9saWN5W05GVEFfTUFUQ0hfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jLTQ2My1cdFx0XHRcdCAgICAubGVuID0gWFRfRVhURU5TSU9OX01BWE5BTUVMRU4gfSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jOjQ2NDpcdFtORlRBX01BVENIX1JFVl1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy00NjUtXHRbTkZUQV9NQVRDSF9JTkZPXVx0PSB7IC50eXBlID0gTkxBX0JJTkFSWSB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jPTc5Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9jb21wYXRfcG9saWN5X2dldFtORlRBX0NPTVBBVF9NQVgmIzQzOzFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jLTc5OS1cdFx0XHRcdCAgICAubGVuID0gTkZUX0NPTVBBVF9OQU1FX01BWC0xIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYzo4MDA6XHRbTkZUQV9DT01QQVRfUkVWXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jLTgwMS1cdFtORlRBX0NPTVBBVF9UWVBFXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jPTE2MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2Nvbm5saW1pdF9wb2xpY3lbTkZUQV9DT05OTElNSVRfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmMtMTYxLVx0W05GVEFfQ09OTkxJTUlUX0NPVU5UXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmM6MTYyOlx0W05GVEFfQ09OTkxJTUlUX0ZMQUdTXVx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9DT05OTElNSVRfRl9JTlYpLFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmMtMTYzLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0zMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9jdF9wb2xpY3lbTkZUQV9DVF9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjMzNzpcdFtORlRBX0NUX0RSRUddXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzozMzg6XHRbTkZUQV9DVF9LRVldXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTMzOS1cdFtORlRBX0NUX0RJUkVDVElPTl1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX1U4LCBJUF9DVF9ESVJfUkVQTFkpLFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzozNDA6XHRbTkZUQV9DVF9TUkVHXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMzQxLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmM9MTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfZHluc2V0X3BvbGljeVtORlRBX0RZTlNFVF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtMTYxLVx0W05GVEFfRFlOU0VUX1NFVF9JRF1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jOjE2MjpcdFtORlRBX0RZTlNFVF9PUF1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYy0xNjMtXHRbTkZUQV9EWU5TRVRfU1JFR19LRVldXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtMTY2LVx0W05GVEFfRFlOU0VUX0VYUFJdXHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYzoxNjc6XHRbTkZUQV9EWU5TRVRfRkxBR1NdXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZUX0RZTlNFVF9GX0lOViB8XG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYy0xNjgtXHRcdFx0XHRcdFx0ICBORlRfRFlOU0VUX0ZfRVhQUiksXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZXh0aGRyLmM9NDg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfZXh0aGRyX3BvbGljeVtORlRBX0VYVEhEUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9leHRoZHIuYzo0ODk6XHRbTkZUQV9FWFRIRFJfRFJFR11cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9leHRoZHIuYy00OTAtXHRbTkZUQV9FWFRIRFJfVFlQRV1cdFx0PSB7IC50eXBlID0gTkxBX1U4IH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9leHRoZHIuYy00OTEtXHRbTkZUQV9FWFRIRFJfT0ZGU0VUXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9leHRoZHIuYzo0OTI6XHRbTkZUQV9FWFRIRFJfTEVOXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxubmV0L25ldGZpbHRlci9uZnRfZXh0aGRyLmM6NDkzOlx0W05GVEFfRVhUSERSX0ZMQUdTXVx0XHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZUX0VYVEhEUl9GX1BSRVNFTlQpLFxubmV0L25ldGZpbHRlci9uZnRfZXh0aGRyLmM6NDk0Olx0W05GVEFfRVhUSERSX09QXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxubmV0L25ldGZpbHRlci9uZnRfZXh0aGRyLmM6NDk1Olx0W05GVEFfRVhUSERSX1NSRUddXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxubmV0L25ldGZpbHRlci9uZnRfZXh0aGRyLmMtNDk2LX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmliLmM9MjE9Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2ZpYl9wb2xpY3lbTkZUQV9GSUJfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfZmliLmM6MjI6XHRbTkZUQV9GSUJfRFJFR11cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9maWIuYy0yMy1cdFtORlRBX0ZJQl9SRVNVTFRdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9maWIuYy0yNC1cdFtORlRBX0ZJQl9GTEFHU11cdD1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jOjI1Olx0XHROTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVEFfRklCX0ZfQUxMKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jLTI2LX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jPTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfZndkX25ldGRldl9wb2xpY3lbTkZUQV9GV0RfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYy00Mi1cdFtORlRBX0ZXRF9TUkVHX0FERFJdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9md2RfbmV0ZGV2LmM6NDM6XHRbTkZUQV9GV0RfTkZQUk9UT11cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9md2RfbmV0ZGV2LmMtNDQtfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9oYXNoLmM9NjA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9oYXNoX3BvbGljeVtORlRBX0hBU0hfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfaGFzaC5jOjYxOlx0W05GVEFfSEFTSF9TUkVHXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9oYXNoLmM6NjI6XHRbTkZUQV9IQVNIX0RSRUddXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2hhc2guYzo2MzpcdFtORlRBX0hBU0hfTEVOXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxubmV0L25ldGZpbHRlci9uZnRfaGFzaC5jLTY0LVx0W05GVEFfSEFTSF9NT0RVTFVTXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2ltbWVkaWF0ZS5jPTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfaW1tZWRpYXRlX3BvbGljeVtORlRBX0lNTUVESUFURV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9pbW1lZGlhdGUuYzoyODpcdFtORlRBX0lNTUVESUFURV9EUkVHXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9pbW1lZGlhdGUuYy0yOS1cdFtORlRBX0lNTUVESUFURV9EQVRBXVx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmM9MzIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfaW5uZXJfcG9saWN5W05GVEFfSU5ORVJfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYy0zMjItXHRbTkZUQV9JTk5FUl9OVU1dXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jOjMyMzpcdFtORlRBX0lOTkVSX0ZMQUdTXVx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9JTk5FUl9NQVNLKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMzI0LVx0W05GVEFfSU5ORVJfSERSU0laRV1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9saW1pdC5jPTE4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2xpbWl0X3BvbGljeVtORlRBX0xJTUlUX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9saW1pdC5jLTE5MS1cdFtORlRBX0xJTUlUX1RZUEVdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9saW1pdC5jOjE5MjpcdFtORlRBX0xJTUlUX0ZMQUdTXVx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9MSU1JVF9GX0lOViksXG5uZXQvbmV0ZmlsdGVyL25mdF9saW1pdC5jLTE5My19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvZy5jPTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfbG9nX3BvbGljeVtORlRBX0xPR19NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbG9nLmMtNzEtXHRbTkZUQV9MT0dfTEVWRUxdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9sb2cuYzo3MjpcdFtORlRBX0xPR19GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORl9MT0dfTUFTSyksXG5uZXQvbmV0ZmlsdGVyL25mdF9sb2cuYy03My19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jPTEyND1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2xvb2t1cF9wb2xpY3lbTkZUQV9MT09LVVBfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jLTEyNy1cdFtORlRBX0xPT0tVUF9TRVRfSURdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9sb29rdXAuYzoxMjg6XHRbTkZUQV9MT09LVVBfU1JFR11cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxubmV0L25ldGZpbHRlci9uZnRfbG9va3VwLmM6MTI5Olx0W05GVEFfTE9PS1VQX0RSRUddXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jLTEzMC1cdFtORlRBX0xPT0tVUF9GTEFHU11cdD1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jOjEzMTpcdFx0TkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfTE9PS1VQX0ZfSU5WKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jLTEzMi19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21hc3EuYz0yMj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X21hc3FfcG9saWN5W05GVEFfTUFTUV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9tYXNxLmMtMjMtXHRbTkZUQV9NQVNRX0ZMQUdTXVx0XHQ9XG5uZXQvbmV0ZmlsdGVyL25mdF9tYXNxLmM6MjQ6XHRcdE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZfTkFUX1JBTkdFX01BU0spLFxubmV0L25ldGZpbHRlci9uZnRfbWFzcS5jLTI1LVx0W05GVEFfTUFTUV9SRUdfUFJPVE9fTUlOXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz01MTY9Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X21ldGFfcG9saWN5W05GVEFfTUVUQV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NTE3Olx0W05GVEFfTUVUQV9EUkVHXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NTE4Olx0W05GVEFfTUVUQV9LRVldXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NTE5Olx0W05GVEFfTUVUQV9TUkVHXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNTIwLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbmF0LmM9MTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfbmF0X3BvbGljeVtORlRBX05BVF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbmF0LmMtMTM1LVx0W05GVEFfTkFUX0ZMQUdTXVx0ID1cbm5ldC9uZXRmaWx0ZXIvbmZ0X25hdC5jOjEzNjpcdFx0TkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORl9OQVRfUkFOR0VfTUFTSyksXG5uZXQvbmV0ZmlsdGVyL25mdF9uYXQuYy0xMzctfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9udW1nZW4uYz00NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X25nX3BvbGljeVtORlRBX05HX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X251bWdlbi5jOjQ2Olx0W05GVEFfTkdfRFJFR11cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9udW1nZW4uYy00Ny1cdFtORlRBX05HX01PRFVMVVNdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfb2JqcmVmLmM9MjY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfb2JqcmVmX3BvbGljeVtORlRBX09CSlJFRl9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfb2JqcmVmLmMtMjY3LVx0W05GVEFfT0JKUkVGX0lNTV9UWVBFXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxubmV0L25ldGZpbHRlci9uZnRfb2JqcmVmLmM6MjY4Olx0W05GVEFfT0JKUkVGX1NFVF9TUkVHXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9vYmpyZWYuYy0yNjktXHRbTkZUQV9PQkpSRUZfU0VUX05BTUVdXHQ9IHsgLnR5cGUgPSBOTEFfU1RSSU5HLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X29zZi5jPTE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfb3NmX3BvbGljeVtORlRBX09TRl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9vc2YuYzoxNTpcdFtORlRBX09TRl9EUkVHXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X29zZi5jLTE2LVx0W05GVEFfT1NGX1RUTF1cdFx0PSB7IC50eXBlID0gTkxBX1U4IH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9vc2YuYzoxNzpcdFtORlRBX09TRl9GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfT1NGX0ZfVkVSU0lPTiksXG5uZXQvbmV0ZmlsdGVyL25mdF9vc2YuYy0xOC19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0yMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9wYXlsb2FkX3BvbGljeVtORlRBX1BBWUxPQURfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIxMjpcdFtORlRBX1BBWUxPQURfU1JFR11cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjEzOlx0W05GVEFfUEFZTE9BRF9EUkVHXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMTQtXHRbTkZUQV9QQVlMT0FEX0JBU0VdXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMTU6XHRbTkZUQV9QQVlMT0FEX09GRlNFVF1cdFx0PSB7IC50eXBlID0gTkxBX0JFMzIgfSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMTY6XHRbTkZUQV9QQVlMT0FEX0xFTl1cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMTctXHRbTkZUQV9QQVlMT0FEX0NTVU1fVFlQRV1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMTg6XHRbTkZUQV9QQVlMT0FEX0NTVU1fT0ZGU0VUXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMTk6XHRbTkZUQV9QQVlMT0FEX0NTVU1fRkxBR1NdXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZUX1BBWUxPQURfTDRDU1VNX1BTRVVET0hEUiksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjIwLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcXVldWUuYz05NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3F1ZXVlX3BvbGljeVtORlRBX1FVRVVFX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9xdWV1ZS5jLTk3LVx0W05GVEFfUVVFVUVfVE9UQUxdXHQ9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9xdWV1ZS5jOjk4Olx0W05GVEFfUVVFVUVfRkxBR1NdXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUxNiwgTkZUX1FVRVVFX0ZMQUdfTUFTSyksXG5uZXQvbmV0ZmlsdGVyL25mdF9xdWV1ZS5jLTk5LVx0W05GVEFfUVVFVUVfU1JFR19RTlVNXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3F1b3RhLmM9NDc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9xdW90YV9wb2xpY3lbTkZUQV9RVU9UQV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9xdW90YS5jLTQ4LVx0W05GVEFfUVVPVEFfQllURVNdXHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9xdW90YS5jOjQ5Olx0W05GVEFfUVVPVEFfRkxBR1NdXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZUX1FVT1RBX0ZfSU5WKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3F1b3RhLmMtNTAtXHRbTkZUQV9RVU9UQV9DT05TVU1FRF1cdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9yYW5nZS5jPTQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfcmFuZ2VfcG9saWN5W05GVEFfUkFOR0VfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfcmFuZ2UuYzo0NDpcdFtORlRBX1JBTkdFX1NSRUddXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxubmV0L25ldGZpbHRlci9uZnRfcmFuZ2UuYzo0NTpcdFtORlRBX1JBTkdFX09QXVx0XHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9yYW5nZS5jLTQ2LVx0W05GVEFfUkFOR0VfRlJPTV9EQVRBXVx0XHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcmVkaXIuYz0yMj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3JlZGlyX3BvbGljeVtORlRBX1JFRElSX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWRpci5jLTI1LVx0W05GVEFfUkVESVJfRkxBR1NdXHRcdD1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlZGlyLmM6MjY6XHRcdE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZfTkFUX1JBTkdFX01BU0spLFxubmV0L25ldGZpbHRlci9uZnRfcmVkaXIuYy0yNy19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlamVjdC5jPTIwPWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9yZWplY3RfcG9saWN5W05GVEFfUkVKRUNUX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlamVjdC5jOjIxOlx0W05GVEFfUkVKRUNUX1RZUEVdXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWplY3QuYy0yMi1cdFtORlRBX1JFSkVDVF9JQ01QX0NPREVdXHRcdD0geyAudHlwZSA9IE5MQV9VOCB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmM9MTA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfcnRfcG9saWN5W05GVEFfUlRfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfcnQuYzoxMDg6XHRbTkZUQV9SVF9EUkVHXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmM6MTA5Olx0W05GVEFfUlRfS0VZXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxubmV0L25ldGZpbHRlci9uZnRfcnQuYy0xMTAtfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zb2NrZXQuYz0xNjY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9zb2NrZXRfcG9saWN5W05GVEFfU09DS0VUX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NvY2tldC5jOjE2NzpcdFtORlRBX1NPQ0tFVF9LRVldXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9zb2NrZXQuYzoxNjg6XHRbTkZUQV9TT0NLRVRfRFJFR11cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9zb2NrZXQuYzoxNjk6XHRbTkZUQV9TT0NLRVRfTEVWRUxdXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9zb2NrZXQuYy0xNzAtfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jPTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfc3lucHJveHlfcG9saWN5W05GVEFfU1lOUFJPWFlfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmMtMjAtXHRbTkZUQV9TWU5QUk9YWV9XU0NBTEVdXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1U4LCBUQ1BfTUFYX1dTQ0FMRSksXG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jOjIxOlx0W05GVEFfU1lOUFJPWFlfRkxBR1NdXHRcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORl9TWU5QUk9YWV9PUFRfTUFTSyksXG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jLTIyLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfdHByb3h5LmM9MTg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfdHByb3h5X3BvbGljeVtORlRBX1RQUk9YWV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYzoxODY6XHRbTkZUQV9UUFJPWFlfRkFNSUxZXSAgID0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYy0xODctXHRbTkZUQV9UUFJPWFlfUkVHX0FERFJdID0geyAudHlwZSA9IE5MQV9VMzIgfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF90dW5uZWwuYz02OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3R1bm5lbF9wb2xpY3lbTkZUQV9UVU5ORUxfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmM6Njk6XHRbTkZUQV9UVU5ORUxfS0VZXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jOjcwOlx0W05GVEFfVFVOTkVMX0RSRUddXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jOjcxOlx0W05GVEFfVFVOTkVMX01PREVdXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfVFVOTkVMX01PREVfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jLTcyLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmM9NDA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfdHVubmVsX2tleV9wb2xpY3lbTkZUQV9UVU5ORUxfS0VZX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF90dW5uZWwuYy00MTAtXHRbTkZUQV9UVU5ORUxfS0VZX0lEXVx0PSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jOjQxMTpcdFtORlRBX1RVTk5FTF9LRVlfRkxBR1NdXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZUX1RVTk5FTF9GX01BU0spLFxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmMtNDEyLVx0W05GVEFfVFVOTkVMX0tFWV9UT1NdXHQ9IHsgLnR5cGUgPSBOTEFfVTgsIH0sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jPTE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfeGZybV9wb2xpY3lbTkZUQV9YRlJNX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoyMDpcdFtORlRBX1hGUk1fS0VZXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTIxLVx0W05GVEFfWEZSTV9ESVJdXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1U4LCBYRlJNX1BPTElDWV9PVVQpLFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjIyOlx0W05GVEFfWEZSTV9TUE5VTV1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIFhGUk1fTUFYX0RFUFRIIC0gMSksXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MjM6XHRbTkZUQV9YRlJNX0RSRUddXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yNC19O1xuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jPTIwOT1pbnQgbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0KVxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIzNi1cdFx0ICAgICAgIDIgKiAobmxhX2F0dHJfc2l6ZSgwKSAmIzQzOyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7XG5uZXQvbmV0bGluay9wb2xpY3kuYzoyMzc6XHRjYXNlIE5MQV9CRTE2OlxubmV0L25ldGxpbmsvcG9saWN5LmM6MjM4Olx0Y2FzZSBOTEFfQkUzMjpcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIzOS1cdFx0Lyogc2FtZSBhcyB0aGUgdW5zaWduZWQgdHlwZXMsIHBsdXMgdGhlIGJ5dGUgb3JkZXIgKi9cbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYz0yNTg9X19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlLFxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTI5Ni1cdGNhc2UgTkxBX1U2NDpcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjI5NzpcdGNhc2UgTkxBX0JFMTY6XG5uZXQvbmV0bGluay9wb2xpY3kuYzoyOTg6XHRjYXNlIE5MQV9CRTMyOlxubmV0L25ldGxpbmsvcG9saWN5LmMtMjk5LVx0Y2FzZSBOTEFfVUlOVDpcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMDQtXHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VODtcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjMwNTpcdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTE2IHx8IHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMTYpXG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMDYtXHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VMTY7XG5uZXQvbmV0bGluay9wb2xpY3kuYzozMDc6XHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1UzMiB8fCBwdC1cdTAwM2V0eXBlID09IE5MQV9CRTMyKVxubmV0L25ldGxpbmsvcG9saWN5LmMtMzA4LVx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTMyO1xuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTMxMy1cbm5ldC9uZXRsaW5rL3BvbGljeS5jOjMxNDpcdFx0aWYgKChwdC1cdTAwM2V0eXBlID09IE5MQV9CRTE2IHx8IHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpIFx1MDAyNlx1MDAyNlxubmV0L25ldGxpbmsvcG9saWN5LmMtMzE1LVx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz02MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZsX3BvbGljeVtUQ0FfRkxPV0VSX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTY3Ny1cdFtUQ0FfRkxPV0VSX0tFWV9FTkNfVURQX0RTVF9QT1JUX01BU0tdXHQ9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjY3ODpcdFtUQ0FfRkxPV0VSX0tFWV9GTEFHU11cdFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTY3OS1cdFx0XHRcdFx0XHRcdCAgVENBX0ZMT1dFUl9LRVlfRkxBR1NfUE9MSUNZX01BU0spLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzo2ODA6XHRbVENBX0ZMT1dFUl9LRVlfRkxBR1NfTUFTS11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy02ODEtXHRcdFx0XHRcdFx0XHQgIFRDQV9GTE9XRVJfS0VZX0ZMQUdTX1BPTElDWV9NQVNLKSxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTc0Mi1cdFtUQ0FfRkxPV0VSX0tFWV9DRk1dXHRcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6NzQzOlx0W1RDQV9GTE9XRVJfS0VZX0VOQ19GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy03NDQtXHRcdFx0XHRcdFx0XHQgIFRDQV9GTE9XRVJfS0VZX0VOQ19GTEFHU19QT0xJQ1lfTUFTSyksXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjc0NTpcdFtUQ0FfRkxPV0VSX0tFWV9FTkNfRkxBR1NfTUFTS11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy03NDYtXHRcdFx0XHRcdFx0XHQgIFRDQV9GTE9XRVJfS0VZX0VOQ19GTEFHU19QT0xJQ1lfTUFTSyksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MzUzCgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDEwNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQ6IE5ldGxpbmsgUG9saWN5IER1bXBpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0IGZvY3VzZXMgb24gZXh0ZW5kaW5nIHRoZSBOZXRsaW5rIHBvbGljeSBkdW1waW5nIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGluIGBuZXQvbmV0bGluay9wb2xpY3kuY2AuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhZHZlcnRpc2luZyBiaWctZW5kaWFuIGludGVnZXIgYXR0cmlidXRlcyAoYE5MQV9CRTE2YCwgYE5MQV9CRTMyYCkgYnkgYWRkaW5nIGBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVJgLiBUaGlzIG1lYW5zIHRoZSBtb2RpZmljYXRpb25zIGFyZSBpbiB0aGUgc2l6ZSBlc3RpbWF0aW9uIHdpdGggYG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlYCBhbmQgd3JpdGluZyBsb2dpYyB3aXRoIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJgIGFuZCBgbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZWAuCgpUaGUgcmVsZXZhbnQgZnVuY3Rpb25zIGhlcmUgYXJlOiBgbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGVgLCBgbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyYCwgYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVgLCBhbmQgYGN0cmxfZHVtcHBvbGljeWAuIFdlIGNhbiByZWFjaCB0aGlzIGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCBzdGFuZGFyZCBOZXRsaW5rIHNvY2tldHMgKGBBRl9ORVRMSU5LYCksIGluY2x1ZGluZyBHZW5lcmljIE5ldGxpbmsgcG9saWN5IGR1bXBzIChgQ1RSTF9DTURfR0VUUE9MSUNZYCkgYW5kIGFsc28gdGhyb3VnaCBleHRhY2sgZXJyb3IgcmVwb3J0aW5nLgoKRnJvbSBhIGNvbmZpZ3VyYXRpb24gc3RhbmRwb2ludCwgYE5FVGAgaXMgc3VmZmljaWVudCBmb3IgYmFzZSBmdW5jdGlvbmFsaXR5LiBGb3IgdGhlIHNwZWNpZmljIGZhbWlsaWVzIGxpa2UgYE5FVF9GT1VgIG9yIGBNUFRDUGAgd2hpY2ggdXNlIHRoZSBiaWctZW5kaWFuIGF0dHJpYnV0ZXMsIHdlIG5lZWQgdG8gaGF2ZSB0aG9zZSBlbmFibGVkLCBidXQgZm9yIGZ1enppbmcgdGhlICpjb3JlKiBwb2xpY3kgZHVtcCBjb2RlLCBgTkVUYCBpcyB0aGUga2V5LiBgR0VORVJJQ19ORVRMSU5LYCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2l0aCBgTkVUYC4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSByZWxldmFudCBzeW1ib2xzIGFyZSBub24tc3RhdGljIGFuZCBnbG9iYWxseSBhY2Nlc3NpYmxlLCBzbyB3ZSBjYW4gZGlyZWN0bHkgdGFyZ2V0IHRoZW0uIEdpdmVuIHRoYXQgaXQmIzM5O3MgYWNjZXNzaWJsZSB2aWEgYm90aCBHZW5lcmljIE5ldGxpbmsgYW5kIGVycm9yIHJlcG9ydGluZywgaXQgZGVmaW5pdGVseSBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdHJsX2R1bXBwb2xpY3kmIzM0OywKICAgICYjMzQ7bmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUmIzM0OywKICAgICYjMzQ7bmV0bGlua19wb2xpY3lfZHVtcF93cml0ZSYjMzQ7LAogICAgJiMzNDtuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTmV0bGluayBwb2xpY3kgZHVtcGluZyBsb2dpYyBpbiBuZXQvbmV0bGluay9wb2xpY3kuYyB0byBzdXBwb3J0IGJpZy1lbmRpYW4gaW50ZWdlciBhdHRyaWJ1dGVzIChOTEFfQkUxNiBhbmQgTkxBX0JFMzIpIGJ5IGVtaXR0aW5nIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUiBhbmQgYWRqdXN0aW5nIHRoZSBhdHRyaWJ1dGUgc2l6ZSBlc3RpbWF0aW9uLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIEFGX05FVExJTksgc29ja2V0cyB0aHJvdWdoIEdlbmVyaWMgTmV0bGluayBwb2xpY3kgZHVtcGluZyAoQ1RSTF9DTURfR0VUUE9MSUNZKSBhcyB3ZWxsIGFzIG5ldGxpbmsgZXh0YWNrIGVycm9yIHJlcG9ydGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3RybF9kdW1wcG9saWN5JiMzNDssCiAgICAmIzM0O25ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlJiMzNDssCiAgICAmIzM0O25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGUmIzM0OywKICAgICYjMzQ7bmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE5ldGxpbmsgcG9saWN5IGR1bXBpbmcgbG9naWMgaW4gbmV0L25ldGxpbmsvcG9saWN5LmMgdG8gc3VwcG9ydCBiaWctZW5kaWFuIGludGVnZXIgYXR0cmlidXRlcyAoTkxBX0JFMTYgYW5kIE5MQV9CRTMyKSBieSBlbWl0dGluZyBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIgYW5kIGFkanVzdGluZyB0aGUgYXR0cmlidXRlIHNpemUgZXN0aW1hdGlvbi4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBBRl9ORVRMSU5LIHNvY2tldHMgdGhyb3VnaCBHZW5lcmljIE5ldGxpbmsgcG9saWN5IGR1bXBpbmcgKENUUkxfQ01EX0dFVFBPTElDWSkgYXMgd2VsbCBhcyBuZXRsaW5rIGV4dGFjayBlcnJvciByZXBvcnRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIE5ldGxpbmsgcG9saWN5IGR1bXAgc3VwcG9ydCBmb3IgYmlnLWVuZGlhbiBpbnRlZ2VyIGF0dHJpYnV0ZSB0eXBlcyAoTkxBX0JFMTYgYW5kIE5MQV9CRTMyKSBieSBlbWl0dGluZyB0aGUgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSIGF0dHJpYnV0ZSBpbiBuZXRsaW5rIHBvbGljeSBkZXNjcmlwdGlvbnMuIFxuXG5BbGwgdmFsdWVzIHdyaXR0ZW4gdG8gdGhlIE5ldGxpbmsgc2tiIGFyZSBleHBsaWNpdCwgZnVsbHkgaW5pdGlhbGl6ZWQgY29uc3RhbnRzIChzdWNoIGFzIE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU4pIG9yIHJhbmdlIHZhbHVlcyBpbml0aWFsaXplZCBieSBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlcywgb3IgcGFkZGluZ3MgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGlzIGFueSBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBjaGVja3MgYXJlIHN1ZmZpY2llbnQgZm9yIHRlc3RpbmcgYnVmZmVyIHNpemVzIGFuZCBuZXRsaW5rIG1lc3NhZ2UgZm9ybWF0dGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZlZDQxYTRlYjQxNjY4MjczZTU0Mzk4NzQ0OWYwMjkyN2E2ODI2MzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDAwOjIzOjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sCmluZGV4IDhiNDQ3MmE2YWEzNmEuLjdlN2MxNThlM2U3MzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ubGN0cmwueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmxjdHJsLnlhbWwKQEAgLTQyLDYgJiM0Mzs0MiwxNiBAQCBkZWZpbml0aW9uczoKICAgICAgIC0gYml0ZmllbGQzMgogICAgICAgLSBzaW50CiAgICAgICAtIHVpbnQKJiM0MzsgIC0KJiM0MzsgICAgbmFtZTogcG9saWN5LWJ5dGUtb3JkZXIKJiM0MzsgICAgZG9jOiB8CiYjNDM7ICAgICAgQnl0ZSBvcmRlciBvZiBhbiBpbnRlZ2VyIGF0dHJpYnV0ZS4gWmVybyBpcyBsZWZ0IHVudXNlZCBzbyB0aGF0IGl0CiYjNDM7ICAgICAgY2FuIGJlIHRha2VuIHRvIG1lYW4gaG9zdCBieXRlIG9yZGVyLgomIzQzOyAgICBlbnVtLW5hbWU6IG5ldGxpbmstcG9saWN5LWJ5dGUtb3JkZXIKJiM0MzsgICAgdHlwZTogZW51bQomIzQzOyAgICB2YWx1ZS1zdGFydDogMQomIzQzOyAgICBlbnRyaWVzOgomIzQzOyAgICAgIC0gYmlnLWVuZGlhbgogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTUyLDYgJiM0MzsxNjIsMTEgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAtCiAgICAgICAgIG5hbWU6IHBhZAogICAgICAgICB0eXBlOiBwYWQKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBieXRlLW9yZGVyCiYjNDM7ICAgICAgICBkb2M6IEJ5dGUgb3JkZXIgb2YgdGhlIGF0dHJpYnV0ZSwgYWJzZW50IG1lYW5zIGhvc3QgYnl0ZSBvcmRlci4KJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZW51bTogcG9saWN5LWJ5dGUtb3JkZXIKICAgLQogICAgIG5hbWU6IG9wLXBvbGljeS1hdHRycwogICAgIG5hbWUtcHJlZml4OiBjdHJsLWF0dHItcG9saWN5LQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRsaW5rLmgKaW5kZXggZjg3YWFmMjhhNjQ5MS4uODJjNDFhZWI0MzU3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGxpbmsuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oCkBAIC0zMjksNiAmIzQzOzMyOSwxNyBAQCBlbnVtIG5ldGxpbmtfYXR0cmlidXRlX3R5cGUgewogCU5MX0FUVFJfVFlQRV9VSU5ULAogfTsKIAomIzQzOy8qKgomIzQzOyAqIGVudW0gbmV0bGlua19wb2xpY3lfYnl0ZV9vcmRlciAtIGJ5dGUgb3JkZXIgb2YgYW4gaW50ZWdlciBhdHRyaWJ1dGUKJiM0MzsgKiBATkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTjogYmlnIGVuZGlhbiAobmV0d29yayBieXRlIG9yZGVyKQomIzQzOyAqCiYjNDM7ICogWmVybyBpcyBsZWZ0IHVuYXNzaWduZWQgc28gdGhhdCBpdCBrZWVwcyBtZWFuaW5nIGhvc3QgYnl0ZSBvcmRlciwKJiM0MzsgKiB3aGljaCBpcyBhbHNvIHdoYXQgYSBtaXNzaW5nIGJ5dGUgb3JkZXIgbWVhbnMuCiYjNDM7ICovCiYjNDM7ZW51bSBuZXRsaW5rX3BvbGljeV9ieXRlX29yZGVyIHsKJiM0MzsJTkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTiA9IDEsCiYjNDM7fTsKJiM0MzsKIC8qKgogICogZW51bSBuZXRsaW5rX3BvbGljeV90eXBlX2F0dHIgLSBwb2xpY3kgdHlwZSBhdHRyaWJ1dGVzCiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9VTlNQRUM6IHVudXNlZApAQCAtMzU2LDYgJiM0MzszNjcsOCBAQCBlbnVtIG5ldGxpbmtfYXR0cmlidXRlX3R5cGUgewogICoJYml0ZmllbGQzMiB0eXBlIChVMzIpCiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLOiBtYXNrIG9mIHZhbGlkIGJpdHMgZm9yIHVuc2lnbmVkIGludGVnZXJzIChVNjQpCiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9QQUQ6IHBhZCBhdHRyaWJ1dGUgZm9yIDY0LWJpdCBhbGlnbm1lbnQKJiM0MzsgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSOiBieXRlIG9yZGVyIG9mIGFuIGludGVnZXIgYXR0cmlidXRlLAomIzQzOyAqCSZhbXA7ZW51bSBuZXRsaW5rX3BvbGljeV9ieXRlX29yZGVyLCBhYnNlbnQgaWYgaG9zdCBieXRlIG9yZGVyIChVMzIpCiAgKgogICogQF9fTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVg6IG51bWJlciBvZiBhdHRyaWJ1dGVzCiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlcgpAQCAtMzc0LDYgJiM0MzszODcsNyBAQCBlbnVtIG5ldGxpbmtfcG9saWN5X3R5cGVfYXR0ciB7CiAJTkxfUE9MSUNZX1RZUEVfQVRUUl9CSVRGSUVMRDMyX01BU0ssCiAJTkxfUE9MSUNZX1RZUEVfQVRUUl9QQUQsCiAJTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLLAomIzQzOwlOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MX1BPTElDWV9UWVBFX0FUVFJfTUFYLApkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvcG9saWN5LmMgYi9uZXQvbmV0bGluay9wb2xpY3kuYwppbmRleCAwOGIwMDZjNDhmMDZlLi41NzRkNDRiN2Q1MTgyIDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0bGluay9wb2xpY3kuYwpAQCAtMjM0LDYgJiM0MzsyMzQsMTEgQEAgaW50IG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdCkKIAkJLyogbWF4aW11bSBpcyBjb21tb24sIHU2NCBtaW4vbWF4IHdpdGggcGFkZGluZyAqLwogCQlyZXR1cm4gY29tbW9uICYjNDM7CiAJCSAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgJiM0MzsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTY0KSkpOwomIzQzOwljYXNlIE5MQV9CRTE2OgomIzQzOwljYXNlIE5MQV9CRTMyOgomIzQzOwkJLyogc2FtZSBhcyB0aGUgdW5zaWduZWQgdHlwZXMsIHBsdXMgdGhlIGJ5dGUgb3JkZXIgKi8KJiM0MzsJCXJldHVybiBjb21tb24gJiM0MzsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTMyKSkgJiM0MzsKJiM0MzsJCSAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgJiM0MzsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTY0KSkpOwogCWNhc2UgTkxBX0JJVEZJRUxEMzI6CiAJCXJldHVybiBjb21tb24gJiM0MzsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTMyKSk7CiAJY2FzZSBOTEFfU1RSSU5HOgpAQCAtMjg5LDIxICYjNDM7Mjk0LDI4IEBAIF9fbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyKHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSwKIAljYXNlIE5MQV9VMTY6CiAJY2FzZSBOTEFfVTMyOgogCWNhc2UgTkxBX1U2NDoKJiM0MzsJY2FzZSBOTEFfQkUxNjoKJiM0MzsJY2FzZSBOTEFfQkUzMjoKIAljYXNlIE5MQV9VSU5UOgogCWNhc2UgTkxBX01TRUNTOiB7CiAJCXN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gcmFuZ2U7CiAKIAkJaWYgKHB0LSZndDt0eXBlID09IE5MQV9VOCkKIAkJCXR5cGUgPSBOTF9BVFRSX1RZUEVfVTg7Ci0JCWVsc2UgaWYgKHB0LSZndDt0eXBlID09IE5MQV9VMTYpCiYjNDM7CQllbHNlIGlmIChwdC0mZ3Q7dHlwZSA9PSBOTEFfVTE2IHx8IHB0LSZndDt0eXBlID09IE5MQV9CRTE2KQogCQkJdHlwZSA9IE5MX0FUVFJfVFlQRV9VMTY7Ci0JCWVsc2UgaWYgKHB0LSZndDt0eXBlID09IE5MQV9VMzIpCiYjNDM7CQllbHNlIGlmIChwdC0mZ3Q7dHlwZSA9PSBOTEFfVTMyIHx8IHB0LSZndDt0eXBlID09IE5MQV9CRTMyKQogCQkJdHlwZSA9IE5MX0FUVFJfVFlQRV9VMzI7CiAJCWVsc2UgaWYgKHB0LSZndDt0eXBlID09IE5MQV9VNjQpCiAJCQl0eXBlID0gTkxfQVRUUl9UWVBFX1U2NDsKIAkJZWxzZQogCQkJdHlwZSA9IE5MX0FUVFJfVFlQRV9VSU5UOwogCiYjNDM7CQlpZiAoKHB0LSZndDt0eXBlID09IE5MQV9CRTE2IHx8IHB0LSZndDt0eXBlID09IE5MQV9CRTMyKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIsCiYjNDM7CQkJCU5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU4pKQomIzQzOwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwomIzQzOwogCQlpZiAocHQtJmd0O3ZhbGlkYXRpb25fdHlwZSA9PSBOTEFfVkFMSURBVEVfTUFTSykgewogCQkJaWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLLAogCQkJCQkgICAgICBwdC0mZ3Q7bWFzaywKZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weQppbmRleCA4NjgyYmY1ODhlMWZhLi5mYjVhY2I4YWNkZWQxIDEwMDY0NAotLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5CkBAIC0xMTUsNiAmIzQzOzExNSw3IEBAIGNsYXNzIE5ldGxpbms6CiAgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9CSVRGSUVMRDMyX01BU0sgPSAxMAogICAgIE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEID0gMTEKICAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0sgPSAxMgomIzQzOyAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIgPSAxMwogCiAgICAgQXR0clR5cGUgPSBFbnVtKCYjMzk7QXR0clR5cGUmIzM5OywgWyYjMzk7ZmxhZyYjMzk7LCAmIzM5O3U4JiMzOTssICYjMzk7dTE2JiMzOTssICYjMzk7dTMyJiMzOTssICYjMzk7dTY0JiMzOTssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzOTtzOCYjMzk7LCAmIzM5O3MxNiYjMzk7LCAmIzM5O3MzMiYjMzk7LCAmIzM5O3M2NCYjMzk7LApAQCAtMTIyLDYgJiM0MzsxMjMsOCBAQCBjbGFzcyBOZXRsaW5rOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzk7bmVzdGVkJiMzOTssICYjMzk7bmVzdGVkLWFycmF5JiMzOTssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzOTtiaXRmaWVsZDMyJiMzOTssICYjMzk7c2ludCYjMzk7LCAmIzM5O3VpbnQmIzM5O10pCiAKJiM0MzsgICAgQnl0ZU9yZGVyID0gRW51bSgmIzM5O0J5dGVPcmRlciYjMzk7LCBbJiMzOTtiaWctZW5kaWFuJiMzOTtdLCBzdGFydD0xKQomIzQzOwogY2xhc3MgTmxFcnJvcihFeGNlcHRpb24pOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBubF9tc2cpOgogICAgICAgICBzZWxmLm5sX21zZyA9IG5sX21zZwpAQCAtMTU4LDcgJiM0MzsxNjEsNyBAQCBjbGFzcyBObFBvbGljeToKIAogICAgIEVhY2ggcG9saWN5IGVudHJ5IGFsd2F5cyBoYXMgYSAmIzM5O3R5cGUmIzM5OyBhdHRyaWJ1dGUgKGUuZy4gdTMyLCBzdHJpbmcsCiAgICAgbmVzdGVkKS4gT3B0aW9uYWwgYXR0cmlidXRlcyBkZXBlbmRpbmcgb24gdGhlICYjMzk7dHlwZSYjMzk7OiBtaW4tdmFsdWUsCi0gICAgbWF4LXZhbHVlLCBtaW4tbGVuZ3RoLCBtYXgtbGVuZ3RoLCBtYXNrLgomIzQzOyAgICBtYXgtdmFsdWUsIG1pbi1sZW5ndGgsIG1heC1sZW5ndGgsIG1hc2ssIGJ5dGUtb3JkZXIuCiAKICAgICBQb2xpY2llcyBjYW4gZm9ybSBpbmZpbml0ZSBuZXN0aW5nIGxvb3BzLiBUaGVzZSBsb29wcyBhcmUgdHJpbW1lZAogICAgIHdoZW4gcG9saWN5IGlzIGNvbnZlcnRlZCB0byBhIGRpY3Qgd2l0aCBwb2wudG9fZGljdCgpLgpAQCAtNDU0LDYgJiM0Mzs0NTcsOSBAQCBkZWYgX2dlbmxfZGVjb2RlX3BvbGljeShyYXcpOgogICAgICAgICAgICAgcG9saWN5WyYjMzk7Yml0ZmllbGQzMi1tYXNrJiMzOTtdID0gYXR0ci5hc19zY2FsYXIoJiMzOTt1MzImIzM5OykKICAgICAgICAgZWxpZiBhdHRyLnR5cGUgPT0gTmV0bGluay5OTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0s6CiAgICAgICAgICAgICBwb2xpY3lbJiMzOTttYXNrJiMzOTtdID0gYXR0ci5hc19zY2FsYXIoJiMzOTt1NjQmIzM5OykKJiM0MzsgICAgICAgIGVsaWYgYXR0ci50eXBlID09IE5ldGxpbmsuTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSOgomIzQzOyAgICAgICAgICAgIGJ5dGVfb3JkZXIgPSBhdHRyLmFzX3NjYWxhcigmIzM5O3UzMiYjMzk7KQomIzQzOyAgICAgICAgICAgIHBvbGljeVsmIzM5O2J5dGUtb3JkZXImIzM5O10gPSBOZXRsaW5rLkJ5dGVPcmRlcihieXRlX29yZGVyKS5uYW1lCiAgICAgcmV0dXJuIHBvbGljeQogCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIFBvbGljeSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBmaXJlIHVwIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gdGhyb3VnaCB0aGUgcGF0Y2ggc3RlcC1ieS1zdGVwLgoKRmlyc3QsIEkgc2VlIHNvbWUgdXBkYXRlcyB0byBkb2N1bWVudGF0aW9uIGFuZCBoZWFkZXJzOiB0aGUgYG5sY3RybC55YW1sYCBzcGVjIGlzIGdldHRpbmcgYSBgcG9saWN5LWJ5dGUtb3JkZXJgIGVudW0gYW5kIGBieXRlLW9yZGVyYCBhdHRyaWJ1dGUsIGFuZCB0aGUgYG5ldGxpbmsuaGAgaGVhZGVyIGRlZmluZXMgY29uc3RhbnRzIGZvciBiaWctZW5kaWFuIGJ5dGUgb3JkZXIuIE5vdGhpbmcgYWxhcm1pbmcgc28gZmFyOyBpdCBzZWVtcyB3ZSBhcmUgaW50cm9kdWNpbmcgYmlnLWVuZGlhbiBzdXBwb3J0IGluIHRoZSBuZXRsaW5rIHBvbGljeS4KCk5leHQsIEkgc2VlIGNoYW5nZXMgaW4gYG5ldC9uZXRsaW5rL3BvbGljeS5jYC4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSB0d28gZnVuY3Rpb25zIHdlcmUgdXBkYXRlZDogYG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlKClgIGFuZCBgX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoKWAuIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZCB0byBoYW5kbGUgYE5MQV9CRTE2YCBhbmQgYE5MQV9CRTMyYCB3aGljaCBpcyBwcm9taXNpbmchIFRoZSBzaXplIGVzdGltYXRpb24gZnVuY3Rpb24gbm93IGFjY291bnRzIGZvciB0aGUgYnl0ZSBvcmRlciBhdHRyaWJ1dGUsIHdoaWNoIGlzIGdvb2QuIFRoZSB3cml0ZSBmdW5jdGlvbiBzZXRzIHRoZSBhdHRyaWJ1dGUgdHlwZSB0byBgVTE2YCBvciBgVTMyYCBhcyBhcHByb3ByaWF0ZSBhbmQgdGhlbiBhZGRzIGEgYE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUmAgYXR0cmlidXRlIHdpdGggYE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU5gIGlmIHRoZSBvcmlnaW5hbCB0eXBlIHdhcyBgTkxBX0JFMTZgIG9yIGBOTEFfQkUzMmAuIFRoaXMgbG9va3MgcmVhc29uYWJsZS4gSXQgY2FsbHMgYG5sYV9wdXRfdTMyYCB0byBhY3R1YWxseSBwdXQgdGhlIGJ5dGUgb3JkZXIgaW5mb3JtYXRpb24gaW50byB0aGUgc2tiISBBZnRlciB0aGF0LCBpdCBjb250aW51ZXMgd2l0aCB0aGUgcmFuZ2UgYW5kIG1hc2sgY2hlY2tzLgoKRmluYWxseSwgc29tZSBweXRob24gdG9vbGluZyBpcyBhbHNvIGdldHRpbmcgdXBkYXRlZC4gTGlrZWx5IHRoZSBZQU1MIHBhcnNlciBhbmQgY29kZSBnZW5lcmF0b3IuCgpOb3csIEkgdGhpbmsgSSYjMzk7bGwgZGl2ZSBhIGxpdHRsZSBkZWVwZXIgaW50byB0aGF0IGBuZXRsaW5rL3BvbGljeS5jYCBmaWxlIGFuZCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhvc2UgdHdvIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgZGF0YSBpcyBiZWluZyBkdW1wZWQgYW5kIHdyaXR0ZW4uIEkgd2FudCB0byBjaGVjayBmb3IgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIHdoZW4gY2FsY3VsYXRpbmcgc2l6ZXMsIG9yIGFueSBvdGhlciBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBmbG93IGFyb3VuZCB0aG9zZSBgbmV0bGlua19wb2xpY3lgIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhhdCB0aGlzIGJ5dGUtb3JkZXIgYWRkaXRpb24gaXMgYmVpbmcgaGFuZGxlZCBzYWZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGxpbmsvcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMjA6XHRcdGNhc2UgTkxBX05FU1RFRF9BUlJBWTpcbiAyMjE6XHRcdFx0LyogY29tbW9uLCBwb2xpY3kgaWR4LCBwb2xpY3kgbWF4YXR0ciAqL1xuIDIyMjpcdFx0XHRyZXR1cm4gY29tbW9uICYjNDM7IDIgKiBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKTtcbiAyMjM6XHRcdGNhc2UgTkxBX1U4OlxuIDIyNDpcdFx0Y2FzZSBOTEFfVTE2OlxuIDIyNTpcdFx0Y2FzZSBOTEFfVTMyOlxuIDIyNjpcdFx0Y2FzZSBOTEFfVTY0OlxuIDIyNzpcdFx0Y2FzZSBOTEFfTVNFQ1M6XG4gMjI4Olx0XHRjYXNlIE5MQV9TODpcbiAyMjk6XHRcdGNhc2UgTkxBX1MxNjpcbiAyMzA6XHRcdGNhc2UgTkxBX1MzMjpcbiAyMzE6XHRcdGNhc2UgTkxBX1M2NDpcbiAyMzI6XHRcdGNhc2UgTkxBX1NJTlQ6XG4gMjMzOlx0XHRjYXNlIE5MQV9VSU5UOlxuIDIzNDpcdFx0XHQvKiBtYXhpbXVtIGlzIGNvbW1vbiwgdTY0IG1pbi9tYXggd2l0aCBwYWRkaW5nICovXG4gMjM1Olx0XHRcdHJldHVybiBjb21tb24gJiM0MztcbiAyMzY6XHRcdFx0ICAgICAgIDIgKiAobmxhX2F0dHJfc2l6ZSgwKSAmIzQzOyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7XG4gMjM3Olx0XHRjYXNlIE5MQV9CRTE2OlxuIDIzODpcdFx0Y2FzZSBOTEFfQkUzMjpcbiAyMzk6XHRcdFx0Lyogc2FtZSBhcyB0aGUgdW5zaWduZWQgdHlwZXMsIHBsdXMgdGhlIGJ5dGUgb3JkZXIgKi9cbiAyNDA6XHRcdFx0cmV0dXJuIGNvbW1vbiAmIzQzOyBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKSAmIzQzO1xuIDI0MTpcdFx0XHQgICAgICAgMiAqIChubGFfYXR0cl9zaXplKDApICYjNDM7IG5sYV9hdHRyX3NpemUoc2l6ZW9mKHU2NCkpKTtcbiAyNDI6XHRcdGNhc2UgTkxBX0JJVEZJRUxEMzI6XG4gMjQzOlx0XHRcdHJldHVybiBjb21tb24gJiM0MzsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTMyKSk7XG4gMjQ0Olx0XHRjYXNlIE5MQV9TVFJJTkc6XG4gMjQ1Olx0XHRjYXNlIE5MQV9OVUxfU1RSSU5HOlxuIDI0NjpcdFx0Y2FzZSBOTEFfQklOQVJZOlxuIDI0NzpcdFx0XHQvKiBtYXhpbXVtIGlzIGNvbW1vbiwgdTMyIG1pbi1sZW5ndGgvbWF4LWxlbmd0aCAqL1xuIDI0ODpcdFx0XHRyZXR1cm4gY29tbW9uICYjNDM7IDIgKiBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKTtcbiAyNDk6XHRcdGNhc2UgTkxBX0ZMQUc6XG4gMjUwOlx0XHRcdHJldHVybiBjb21tb247XG4gMjUxOlx0XHR9XG4gMjUyOlx0XG4gMjUzOlx0XHQvKiB0aGlzIHNob3VsZCB0aGVuIGNhdXNlIGEgd2FybmluZyBsYXRlciAqL1xuIDI1NDpcdFx0cmV0dXJuIDA7XG4gMjU1Olx0fVxuIDI1NjpcdFxuIDI1NzpcdHN0YXRpYyBpbnRcbiAyNTg6XHRfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXG4gMjU5Olx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAyNjA6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXG4gMjYxOlx0XHRcdFx0XHQgaW50IG5lc3RhdHRyKVxuIDI2MjpcdHtcbiAyNjM6XHRcdGludCBlc3RpbWF0ZSA9IG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlKHB0KTtcbiAyNjQ6XHRcdGVudW0gbmV0bGlua19hdHRyaWJ1dGVfdHlwZSB0eXBlO1xuIDI2NTpcdFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcbiAyNjY6XHRcbiAyNjc6XHRcdGF0dHIgPSBubGFfbmVzdF9zdGFydChza2IsIG5lc3RhdHRyKTtcbiAyNjg6XHRcdGlmICghYXR0cilcbiAyNjk6XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIDI3MDpcdFxuIDI3MTpcdFx0c3dpdGNoIChwdC1cdTAwM2V0eXBlKSB7XG4gMjcyOlx0XHRkZWZhdWx0OlxuIDI3MzpcdFx0Y2FzZSBOTEFfVU5TUEVDOlxuIDI3NDpcdFx0Y2FzZSBOTEFfUkVKRUNUOlxuIDI3NTpcdFx0XHQvKiBza2lwIC0gdXNlIE5MQV9NSU5fTEVOIHRvIGFkdmVydGlzZSBzdWNoICovXG4gMjc2Olx0XHRcdG5sYV9uZXN0X2NhbmNlbChza2IsIGF0dHIpO1xuIDI3NzpcdFx0XHRyZXR1cm4gLUVOT0RBVEE7XG4gMjc4Olx0XHRjYXNlIE5MQV9ORVNURUQ6XG4gMjc5Olx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfTkVTVEVEO1xuIDI4MDpcdFx0XHRmYWxsdGhyb3VnaDtcbiAyODE6XHRcdGNhc2UgTkxBX05FU1RFRF9BUlJBWTpcbiAyODI6XHRcdFx0aWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX05FU1RFRF9BUlJBWSlcbiAyODM6XHRcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX05FU1RFRF9BUlJBWTtcbiAyODQ6XHRcdFx0aWYgKHN0YXRlIFx1MDAyNlx1MDAyNiBwdC1cdTAwM2VuZXN0ZWRfcG9saWN5IFx1MDAyNlx1MDAyNiBwdC1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2XG4gMjg1Olx0XHRcdCAgICAobmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BPTElDWV9JRFgsXG4gMjg2Olx0XHRcdFx0XHQgbmV0bGlua19wb2xpY3lfZHVtcF9nZXRfcG9saWN5X2lkeChzdGF0ZSxcbiAyODc6XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHB0LVx1MDAzZW5lc3RlZF9wb2xpY3ksXG4gMjg4Olx0XHRcdFx0XHRcdFx0XHRcdCAgICBwdC1cdTAwM2VsZW4pKSB8fFxuIDI4OTpcdFx0XHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9QT0xJQ1lfTUFYVFlQRSxcbiAyOTA6XHRcdFx0XHRcdCBwdC1cdTAwM2VsZW4pKSlcbiAyOTE6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiAyOTI6XHRcdFx0YnJlYWs7XG4gMjkzOlx0XHRjYXNlIE5MQV9VODpcbiAyOTQ6XHRcdGNhc2UgTkxBX1UxNjpcbiAyOTU6XHRcdGNhc2UgTkxBX1UzMjpcbiAyOTY6XHRcdGNhc2UgTkxBX1U2NDpcbiAyOTc6XHRcdGNhc2UgTkxBX0JFMTY6XG4gMjk4Olx0XHRjYXNlIE5MQV9CRTMyOlxuIDI5OTpcdFx0Y2FzZSBOTEFfVUlOVDpcbiAzMDA6XHRcdGNhc2UgTkxBX01TRUNTOiB7XG4gMzAxOlx0XHRcdHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gcmFuZ2U7XG4gMzAyOlx0XG4gMzAzOlx0XHRcdGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9VOClcbiAzMDQ6XHRcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1U4O1xuIDMwNTpcdFx0XHRlbHNlIGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9VMTYgfHwgcHQtXHUwMDNldHlwZSA9PSBOTEFfQkUxNilcbiAzMDY6XHRcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1UxNjtcbiAzMDc6XHRcdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTMyIHx8IHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpXG4gMzA4Olx0XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VMzI7XG4gMzA5Olx0XHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1U2NClcbiAzMTA6XHRcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1U2NDtcbiAzMTE6XHRcdFx0ZWxzZVxuIDMxMjpcdFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVUlOVDtcbiAzMTM6XHRcbiAzMTQ6XHRcdFx0aWYgKChwdC1cdTAwM2V0eXBlID09IE5MQV9CRTE2IHx8IHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpIFx1MDAyNlx1MDAyNlxuIDMxNTpcdFx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIsXG4gMzE2Olx0XHRcdFx0XHROTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOKSlcbiAzMTc6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiAzMTg6XHRcbiAzMTk6XHRcdFx0aWYgKHB0LVx1MDAzZXZhbGlkYXRpb25fdHlwZSA9PSBOTEFfVkFMSURBVEVfTUFTSykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODI0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBEZWVwZXIgaW50byBBdHRyaWJ1dGUgVmFsaWRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3R0ZW4gYSBoYW5kbGUgb24gdGhpcyBgX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJgIGZ1bmN0aW9uLiBJIHNlZSB3aGVyZSB0aGluZ3MgYXJlIGhlYWRlZCB3aXRoIGF0dHJpYnV0ZSBoYW5kbGluZy4gTm93LCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIHVuZGVyc3RhbmQgKmhvdyogdGhlIGNvZGUgdmFsaWRhdGVzIHRoZSByYW5nZSBhbmQgbWFzayB2YWx1ZXMgZm9yIHRoZXNlIGF0dHJpYnV0ZXMuIEkga25vdyB3aGF0IHRoZSBwb2xpY3kgZnJhbWV3b3JrICpzaG91bGQqIGJlIGRvaW5nLCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIHRvIG1ha2Ugc3VyZSBpdCBhbGlnbnMgd2l0aCBteSBtZW50YWwgbW9kZWwuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgdmFsaWRhdGlvbiBpcyBhY3R1YWxseSBwZXJmb3JtZWQgaW4gdGhpcyBmdW5jdGlvbiwgb3Igb3RoZXIgZnVuY3Rpb25zIGl0IGNhbGxzLCB3aXRoIHJlc3BlY3QgdG8gbmV0bGluayBhdHRyaWJ1dGVzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgdGhlIG92ZXJhbGwgc2VjdXJpdHkgYW5kIHJvYnVzdG5lc3Mgb2YgdGhlIG5ldGxpbmsgcG9saWN5LiBUaW1lIHRvIGtlZXAgcmVhZGluZyBhbmQgc2VlIGhvdyBpdCYjMzk7cyBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRsaW5rL3BvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTU6XHRcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSLFxuIDMxNjpcdFx0XHRcdFx0TkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTikpXG4gMzE3Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMzE4Olx0XG4gMzE5Olx0XHRcdGlmIChwdC1cdTAwM2V2YWxpZGF0aW9uX3R5cGUgPT0gTkxBX1ZBTElEQVRFX01BU0spIHtcbiAzMjA6XHRcdFx0XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0ssXG4gMzIxOlx0XHRcdFx0XHRcdCAgICAgIHB0LVx1MDAzZW1hc2ssXG4gMzIyOlx0XHRcdFx0XHRcdCAgICAgIE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEKSlcbiAzMjM6XHRcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDMyNDpcdFx0XHRcdGJyZWFrO1xuIDMyNTpcdFx0XHR9IGVsc2UgaWYgKHB0LVx1MDAzZXZhbGlkYXRpb25fdHlwZSA9PSBOTEFfVkFMSURBVEVfRlVOQ1RJT04pIHtcbiAzMjY6XHRcdFx0XHRicmVhaztcbiAzMjc6XHRcdFx0fVxuIDMyODpcdFxuIDMyOTpcdFx0XHRubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKHB0LCBcdTAwMjZyYW5nZSk7XG4gMzMwOlx0XG4gMzMxOlx0XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfTUlOX1ZBTFVFX1UsXG4gMzMyOlx0XHRcdFx0XHQgICAgICByYW5nZS5taW4sIE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEKSB8fFxuIDMzMzpcdFx0XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BWF9WQUxVRV9VLFxuIDMzNDpcdFx0XHRcdFx0ICAgICAgcmFuZ2UubWF4LCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRCkpXG4gMzM1Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMzM2Olx0XHRcdGJyZWFrO1xuIDMzNzpcdFx0fVxuIDMzODpcdFx0Y2FzZSBOTEFfUzg6XG4gMzM5Olx0XHRjYXNlIE5MQV9TMTY6XG4gMzQwOlx0XHRjYXNlIE5MQV9TMzI6XG4gMzQxOlx0XHRjYXNlIE5MQV9TNjQ6XG4gMzQyOlx0XHRjYXNlIE5MQV9TSU5UOiB7XG4gMzQzOlx0XHRcdHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb25fc2lnbmVkIHJhbmdlO1xuIDM0NDpcdFxuIDM0NTpcdFx0XHRpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfUzgpXG4gMzQ2Olx0XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9TODtcbiAzNDc6XHRcdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfUzE2KVxuIDM0ODpcdFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfUzE2O1xuIDM0OTpcdFx0XHRlbHNlIGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9TMzIpXG4gMzUwOlx0XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9TMzI7XG4gMzUxOlx0XHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1M2NClcbiAzNTI6XHRcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1M2NDtcbiAzNTM6XHRcdFx0ZWxzZVxuIDM1NDpcdFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfU0lOVDtcbiAzNTU6XHRcbiAzNTY6XHRcdFx0aWYgKHB0LVx1MDAzZXZhbGlkYXRpb25fdHlwZSA9PSBOTEFfVkFMSURBVEVfRlVOQ1RJT04pXG4gMzU3Olx0XHRcdFx0YnJlYWs7XG4gMzU4Olx0XG4gMzU5Olx0XHRcdG5sYV9nZXRfcmFuZ2Vfc2lnbmVkKHB0LCBcdTAwMjZyYW5nZSk7XG4gMzYwOlx0XG4gMzYxOlx0XHRcdGlmIChubGFfcHV0X3M2NChza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfTUlOX1ZBTFVFX1MsXG4gMzYyOlx0XHRcdFx0XHRyYW5nZS5taW4sIE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEKSB8fFxuIDM2MzpcdFx0XHQgICAgbmxhX3B1dF9zNjQoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BWF9WQUxVRV9TLFxuIDM2NDpcdFx0XHRcdFx0cmFuZ2UubWF4LCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRCkpXG4gMzY1Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMzY2Olx0XHRcdGJyZWFrO1xuIDM2NzpcdFx0fVxuIDM2ODpcdFx0Y2FzZSBOTEFfQklURklFTEQzMjpcbiAzNjk6XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9CSVRGSUVMRDMyO1xuIDM3MDpcdFx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JJVEZJRUxEMzJfTUFTSyxcbiAzNzE6XHRcdFx0XHRcdHB0LVx1MDAzZWJpdGZpZWxkMzJfdmFsaWQpKVxuIDM3MjpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDM3MzpcdFx0XHRicmVhaztcbiAzNzQ6XHRcdGNhc2UgTkxBX1NUUklORzpcbiAzNzU6XHRcdGNhc2UgTkxBX05VTF9TVFJJTkc6XG4gMzc2Olx0XHRjYXNlIE5MQV9CSU5BUlk6XG4gMzc3Olx0XHRcdGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9TVFJJTkcpXG4gMzc4Olx0XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9TVFJJTkc7XG4gMzc5Olx0XHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX05VTF9TVFJJTkcpXG4gMzgwOlx0XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9OVUxfU1RSSU5HO1xuIDM4MTpcdFx0XHRlbHNlXG4gMzgyOlx0XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9CSU5BUlk7XG4gMzgzOlx0XG4gMzg0Olx0XHRcdGlmIChwdC1cdTAwM2V2YWxpZGF0aW9uX3R5cGUgPT0gTkxBX1ZBTElEQVRFX1JBTkdFIHx8XG4gMzg1Olx0XHRcdCAgICBwdC1cdTAwM2V2YWxpZGF0aW9uX3R5cGUgPT0gTkxBX1ZBTElEQVRFX1JBTkdFX1dBUk5fVE9PX0xPTkcpIHtcbiAzODY6XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIHJhbmdlO1xuIDM4NzpcdFxuIDM4ODpcdFx0XHRcdG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQocHQsIFx1MDAyNnJhbmdlKTtcbiAzODk6XHRcbiAzOTA6XHRcdFx0XHRpZiAocmFuZ2UubWluIFx1MDAyNlx1MDAyNlxuIDM5MTpcdFx0XHRcdCAgICBubGFfcHV0X3UzMihza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfTUlOX0xFTkdUSCxcbiAzOTI6XHRcdFx0XHRcdFx0cmFuZ2UubWluKSlcbiAzOTM6XHRcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDM5NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDQwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIEF0dHJpYnV0ZSBIYW5kbGluZyoqCgpSaWdodCwgc28gSSYjMzk7bSByZXZpc2l0aW5nIHRoaXMgY29kZSwgYW5kIEkgbmVlZCB0byBiZSBleHRyYSB0aG9yb3VnaC4gSSYjMzk7dmUgYWxyZWFkeSBzY3J1dGluaXplZCBzb21lIGFzcGVjdHMsIGJ1dCBub3cgSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIG5vdCBqdXN0IGFzc3VtZSBldmVyeXRoaW5nJiMzOTtzIGtvc2hlciB3aXRoIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgbmV0d29yayBhdHRyaWJ1dGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIGBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkYC4gVGhlIHByaW1hcnkgY29uY2VybiBoZXJlIGlzIG1ha2luZyBzdXJlIHRob3NlIGJpZy1lbmRpYW4gMTYtYml0IChgTkxBX0JFMTZgKSBhbmQgMzItYml0IChgTkxBX0JFMzJgKSB2YWx1ZXMgYXJlIGJlaW5nIHByb2Nlc3NlZCBjb3JyZWN0bHkuIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIGEgc3VidGxlIGJ1ZyBvciBhbiBlZGdlIGNhc2Ugd2hlcmUgdGhlIGByYW5nZWAgdmFyaWFibGUgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgZG9lc24mIzM5O3QgaGFwcGVuLCBhcyB0aGF0IHdvdWxkIGJlIGEgc2VyaW91cyByZWxpYWJpbGl0eSBpc3N1ZS4gR290dGEgY292ZXIgYWxsIG15IGJhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGxpbmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRsaW5rL3BvbGljeS5jPTI1OD1fX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXG4tLVxubmV0L25ldGxpbmsvcG9saWN5LmMtMzI4LVxubmV0L25ldGxpbmsvcG9saWN5LmM6MzI5Olx0XHRubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKHB0LCBcdTAwMjZyYW5nZSk7XG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMzAtXG4tLVxubmV0L25ldGxpbmsvcG9saWN5LmMtMzg3LVxubmV0L25ldGxpbmsvcG9saWN5LmM6Mzg4Olx0XHRcdG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQocHQsIFx1MDAyNnJhbmdlKTtcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTM4OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg4OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gbmxhX2dldF9yYW5nZV91bnNpZ25lZCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkYC4gTGV0JiMzOTtzIGNsYXJpZnkgaXRzIGZ1bmN0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8ganVtcCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgc3VzcGVjdCBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiB0aGUgY29yZSBOZXRsaW5rIGF0dHJpYnV0ZSBoYW5kbGluZyBjb2RlLiBUaGUgYGxpYi9gIGRpcmVjdG9yeSBpcyB1c3VhbGx5IHRoZSBwbGFjZSBmb3IgdGhvc2Uga2luZHMgb2YgdXRpbGl0eSBmdW5jdGlvbnMuIFNvLCBJJiMzOTtsbCBgZ3JlcGAgZm9yIGBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkYCB3aXRoaW4gYGxpYi9ubGF0dHIuY2AsIG9yIHBvdGVudGlhbGx5IGFueSBvdGhlciByZWxldmFudCBgLmNgIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5LCB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGl2ZSBkZWZpbml0aW9uIGFuZCBkaXZlIGludG8gaXRzIGltcGxlbWVudGF0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBjb2RlLCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGxpbmsuaD0yNDYxPXN0YXRpYyBpbmxpbmUgYm9vbCBubGFfaXNfbGFzdChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIGludCByZW0pXG4tLVxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTI0NjUtXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6MjQ2Njp2b2lkIG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTI0NjctXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gKnJhbmdlKTtcbi0tXG5saWIvbmxhdHRyLmM9ODk9c3RhdGljIGludCBubGFfdmFsaWRhdGVfYXJyYXkoY29uc3Qgc3RydWN0IG5sYXR0ciAqaGVhZCwgaW50IGxlbiwgaW50IG1heHR5cGUsXG4tLVxubGliL25sYXR0ci5jLTExOC1cbmxpYi9ubGF0dHIuYzoxMTk6dm9pZCBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdCxcbmxpYi9ubGF0dHIuYy0xMjAtXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gKnJhbmdlKVxuLS1cbmxpYi9ubGF0dHIuYz0xNzA9c3RhdGljIGludCBubGFfdmFsaWRhdGVfcmFuZ2VfdW5zaWduZWQoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxuLS1cbmxpYi9ubGF0dHIuYy0yMDktXG5saWIvbmxhdHRyLmM6MjEwOlx0bmxhX2dldF9yYW5nZV91bnNpZ25lZChwdCwgXHUwMDI2cmFuZ2UpO1xubGliL25sYXR0ci5jLTIxMS1cbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYz0yNTg9X19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlLFxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTMyOC1cbm5ldC9uZXRsaW5rL3BvbGljeS5jOjMyOTpcdFx0bmxhX2dldF9yYW5nZV91bnNpZ25lZChwdCwgXHUwMDI2cmFuZ2UpO1xubmV0L25ldGxpbmsvcG9saWN5LmMtMzMwLVxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTM4Ny1cbm5ldC9uZXRsaW5rL3BvbGljeS5jOjM4ODpcdFx0XHRubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKHB0LCBcdTAwMjZyYW5nZSk7XG5uZXQvbmV0bGluay9wb2xpY3kuYy0zODktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gYGxpYi9ubGF0dHIuY2AgLSBMaW5lIDExOSoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIGluIG9uIGBsaWIvbmxhdHRyLmNgIGFnYWluLiBBbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhbnl0aGluZyBOZXRsaW5rLXJlbGF0ZWQuIEFuZCBJJiMzOTttIHplcm9pbmcgaW4gb24gbGluZSAxMTkuIFJpZ2h0LCBzbyB3aGF0JiMzOTtzIHRoZSBjb250ZXh0PyBXaGF0IGFtIEkgbG9va2luZyBmb3IgKnRoaXMqIHRpbWU/IElzIGl0IGEgcG90ZW50aWFsIGJ1Zywgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LCBvciBwZXJoYXBzIGp1c3QgcmVmcmVzaGluZyBteSBtZW1vcnkgb24gYSBzcGVjaWZpYyBhdHRyaWJ1dGUgaGFuZGxpbmcgbWVjaGFuaXNtPyBDaGFuY2VzIGFyZSwgZ2l2ZW4gbXkgYmFja2dyb3VuZCwgSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBpZGVhIG9mIHdoYXQgc2VjdGlvbiBvZiB0aGUgY29kZSB0aGlzIHJlbGF0ZXMgdG8uIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCBhdHRyaWJ1dGUgcGFyc2luZywgdmFsaWRhdGlvbiwgb3IgcGVyaGFwcyBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIGEgTmV0bGluayBtZXNzYWdlLiBMaW5lIDExOS4uLiBMZXQgbWUgcHVsbCB0aGF0IHVwLiBPa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvbmxhdHRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNTpcdFxuIDExNjpcdFx0cmV0dXJuIDA7XG4gMTE3Olx0fVxuIDExODpcdFxuIDExOTpcdHZvaWQgbmxhX2dldF9yYW5nZV91bnNpZ25lZChjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXG4gMTIwOlx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gKnJhbmdlKVxuIDEyMTpcdHtcbiAxMjI6XHRcdFdBUk5fT05fT05DRShwdC1cdTAwM2V2YWxpZGF0aW9uX3R5cGUgIT0gTkxBX1ZBTElEQVRFX1JBTkdFX1BUUiBcdTAwMjZcdTAwMjZcbiAxMjM6XHRcdFx0ICAgICAocHQtXHUwMDNlbWluIFx1MDAzYyAwIHx8IHB0LVx1MDAzZW1heCBcdTAwM2MgMCkpO1xuIDEyNDpcdFxuIDEyNTpcdFx0cmFuZ2UtXHUwMDNlbWluID0gMDtcbiAxMjY6XHRcbiAxMjc6XHRcdHN3aXRjaCAocHQtXHUwMDNldHlwZSkge1xuIDEyODpcdFx0Y2FzZSBOTEFfVTg6XG4gMTI5Olx0XHRcdHJhbmdlLVx1MDAzZW1heCA9IFU4X01BWDtcbiAxMzA6XHRcdFx0YnJlYWs7XG4gMTMxOlx0XHRjYXNlIE5MQV9VMTY6XG4gMTMyOlx0XHRjYXNlIE5MQV9CRTE2OlxuIDEzMzpcdFx0Y2FzZSBOTEFfQklOQVJZOlxuIDEzNDpcdFx0XHRyYW5nZS1cdTAwM2VtYXggPSBVMTZfTUFYO1xuIDEzNTpcdFx0XHRicmVhaztcbiAxMzY6XHRcdGNhc2UgTkxBX1UzMjpcbiAxMzc6XHRcdGNhc2UgTkxBX0JFMzI6XG4gMTM4Olx0XHRcdHJhbmdlLVx1MDAzZW1heCA9IFUzMl9NQVg7XG4gMTM5Olx0XHRcdGJyZWFrO1xuIDE0MDpcdFx0Y2FzZSBOTEFfVTY0OlxuIDE0MTpcdFx0Y2FzZSBOTEFfVUlOVDpcbiAxNDI6XHRcdGNhc2UgTkxBX01TRUNTOlxuIDE0MzpcdFx0XHRyYW5nZS1cdTAwM2VtYXggPSBVNjRfTUFYO1xuIDE0NDpcdFx0XHRicmVhaztcbiAxNDU6XHRcdGRlZmF1bHQ6XG4gMTQ2Olx0XHRcdFdBUk5fT05fT05DRSgxKTtcbiAxNDc6XHRcdFx0cmV0dXJuO1xuIDE0ODpcdFx0fVxuIDE0OTpcdFxuIDE1MDpcdFx0c3dpdGNoIChwdC1cdTAwM2V2YWxpZGF0aW9uX3R5cGUpIHtcbiAxNTE6XHRcdGNhc2UgTkxBX1ZBTElEQVRFX1JBTkdFOlxuIDE1MjpcdFx0Y2FzZSBOTEFfVkFMSURBVEVfUkFOR0VfV0FSTl9UT09fTE9ORzpcbiAxNTM6XHRcdFx0cmFuZ2UtXHUwMDNlbWluID0gcHQtXHUwMDNlbWluO1xuIDE1NDpcdFx0XHRyYW5nZS1cdTAwM2VtYXggPSBwdC1cdTAwM2VtYXg7XG4gMTU1Olx0XHRcdGJyZWFrO1xuIDE1NjpcdFx0Y2FzZSBOTEFfVkFMSURBVEVfUkFOR0VfUFRSOlxuIDE1NzpcdFx0XHQqcmFuZ2UgPSAqcHQtXHUwMDNlcmFuZ2U7XG4gMTU4Olx0XHRcdGJyZWFrO1xuIDE1OTpcdFx0Y2FzZSBOTEFfVkFMSURBVEVfTUlOOlxuIDE2MDpcdFx0XHRyYW5nZS1cdTAwM2VtaW4gPSBwdC1cdTAwM2VtaW47XG4gMTYxOlx0XHRcdGJyZWFrO1xuIDE2MjpcdFx0Y2FzZSBOTEFfVkFMSURBVEVfTUFYOlxuIDE2MzpcdFx0XHRyYW5nZS1cdTAwM2VtYXggPSBwdC1cdTAwM2VtYXg7XG4gMTY0Olx0XHRcdGJyZWFrO1xuIDE2NTpcdFx0ZGVmYXVsdDpcbiAxNjY6XHRcdFx0YnJlYWs7XG4gMTY3Olx0XHR9XG4gMTY4Olx0fVxuIDE2OTpcdFxuIDE3MDpcdHN0YXRpYyBpbnQgbmxhX3ZhbGlkYXRlX3JhbmdlX3Vuc2lnbmVkKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdCxcbiAxNzE6XHRcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4gMTcyOlx0XHRcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuIDE3MzpcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCB2YWxpZGF0ZSlcbiAxNzQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjY2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5ldGxpbmsgUG9saWN5IER1bXBpbmcqKgoKT2theSwgc28gSSBqdXN0IHJlYWxpemVkIHNvbWV0aGluZyBhYm91dCB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24uIGBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkYCAqYWxyZWFkeSogaGFuZGxlcyBgTkxBX0JFMTZgIGFuZCBgTkxBX0JFMzJgISBBbmQgdGhlIGByYW5nZWAgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkIHJpZ2h0IGZyb20gdGhlIHN0YXJ0IHdpdGggYHJhbmdlLSZndDttaW4gPSAwOyByYW5nZS0mZ3Q7bWF4ID0gLi4uYC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIGxlc3Mgd29yayBuZWVkZWQgb24gdGhhdCBzaWRlLgoKTm93LCBJIG5lZWQgdG8gZm9jdXMgb24gaG93IGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAgYWN0dWFsbHkgZHVtcHMgcG9saWNpZXMgd2hlbiBkZWFsaW5nIHdpdGggbmV0bGluayB1c2Vyc3BhY2UgbWVzc2FnZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBjaGVja2luZyB0aGUgY2FzZSB3aGVuIHRoZSBwb2xpY3kgdHlwZSBgcHQtJmd0O3R5cGVgIGlzIGVpdGhlciBgTkxBX0JFMTZgIG9yIGBOTEFfQkUzMmAuCgpIZXJlJiMzOTtzIHdoYXQgSSBzZWU6IGl0IGNhbGxzIGBubGFfcHV0X3UzMmAgdG8gcHV0IGEgc3BlY2lmaWMgYXR0cmlidXRlLCBgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSYCwgd2l0aCB0aGUgdmFsdWUgYE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU5gLCB3aGljaCBlZmZlY3RpdmVseSBzZXRzIGEgMzItYml0IGNvbnN0YW50LCBgMWAsIGluIHRoZSBuZXRsaW5rIHNrYi4gRm9sbG93aW5nIHRoYXQsIGl0JiMzOTtzIHVzaW5nIGBubGFfcHV0X3U2NF82NGJpdGAgdG8gaGFuZGxlIHRoZSBtaW4vbWF4L21hc2sgdmFsdWVzIOKAkyBwYWRkaW5nIGhhbmRsZWQgY29ycmVjdGx5IHdpdGggYE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEYCBpcyB6ZXJvZWQgb3V0IGFzIGV4cGVjdGVkIGJ5IGBubGFfcHV0X3U2NF82NGJpdGAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgaXQgbWFrZXMgc2Vuc2UgdG8gdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmxhX3B1dF91NjRfNjRiaXRgIGFnYWluOyBjYW4mIzM5O3QgYmUgdG9vIGNhcmVmdWwuIEdvdHRhIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25sYV9wdXRfdTY0XzY0Yml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNzUxIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTM4MjI9c3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzg3OS1cdFx0ICAgICAgIGRldmljZS1cdTAwM2VzdGF0ZS5pKSB8fFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozODgwOlx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fRURfVVVJRCxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzg4MS1cdFx0XHQgICAgIGRldmljZS1cdTAwM2VlZF91dWlkLCAwKSB8fFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozODgyOlx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQ0FQQUNJVFksXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4ODMtXHRcdFx0ICAgICBnZXRfY2FwYWNpdHkoZGV2aWNlLVx1MDAzZXZkaXNrKSwgMCkgfHxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg4NDpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX1NFTkRfQ05ULFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zODg1LVx0XHRcdCAgICAgZGV2aWNlLVx1MDAzZXNlbmRfY250LCAwKSB8fFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozODg2Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fUkVDVl9DTlQsXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4ODctXHRcdFx0ICAgICBkZXZpY2UtXHUwMDNlcmVjdl9jbnQsIDApIHx8XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM4ODg6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19SRUFEX0NOVCxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzg4OS1cdFx0XHQgICAgIGRldmljZS1cdTAwM2VyZWFkX2NudCwgMCkgfHxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg5MDpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX1dSSVRfQ05ULFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zODkxLVx0XHRcdCAgICAgZGV2aWNlLVx1MDAzZXdyaXRfY250LCAwKSB8fFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozODkyOlx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQUxfV1JJVF9DTlQsXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4OTMtXHRcdFx0ICAgICBkZXZpY2UtXHUwMDNlYWxfd3JpdF9jbnQsIDApIHx8XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM4OTQ6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19CTV9XUklUX0NOVCxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzg5NS1cdFx0XHQgICAgIGRldmljZS1cdTAwM2VibV93cml0X2NudCwgMCkgfHxcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM5MTYtXHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9TVEFURV9JTkZPX0RJU0tfRkxBR1MsIGRldmljZS1cdTAwM2VsZGV2LVx1MDAzZW1kLmZsYWdzKSB8fFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozOTE3Olx0XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19CSVRTX1RPVEFMLCBkcmJkX2JtX2JpdHMoZGV2aWNlKSwgMCkgfHxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MzkxODpcdFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQklUU19PT1MsXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM5MTktXHRcdFx0XHQgICAgICBkcmJkX2JtX3RvdGFsX3dlaWdodChkZXZpY2UpLCAwKSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM5MjItXHRcdCAgICBDX1BBVVNFRF9TWU5DX1QgXHUwMDNlPSBkZXZpY2UtXHUwMDNlc3RhdGUuY29ubikge1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozOTIzOlx0XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX0JJVFNfUlNfVE9UQUwsXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM5MjQtXHRcdFx0XHRcdCAgICAgIGRldmljZS1cdTAwM2Vyc190b3RhbCwgMCkgfHxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MzkyNTpcdFx0XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19CSVRTX1JTX0ZBSUxFRCxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzkyNi1cdFx0XHRcdFx0ICAgICAgZGV2aWNlLVx1MDAzZXJzX2ZhaWxlZCwgMCkpXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM9MTkwMD1pbnQgZGlza19jb25mX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZGlza19jb25mICpzKVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTE5MTQtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MTkxNTpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9ESVNLX0NPTkZfRElTS19TSVpFLCBzLVx1MDAzZWRpc2tfc2l6ZSwgMCkpXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0xOTE2LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYz0yMDk0PWludCByZXNpemVfcGFybXNfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCByZXNpemVfcGFybXMgKnMpXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjEwMC1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjIxMDE6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfUkVTSVpFX1BBUk1TX1JFU0laRV9TSVpFLCBzLVx1MDAzZXJlc2l6ZV9zaXplLCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxMDItXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jPTIxMjE9aW50IHN0YXRlX2luZm9fdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGF0ZV9pbmZvICpzKVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxMzEtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjEzMjpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX0NBUEFDSVRZLCBzLVx1MDAzZWNhcGFjaXR5LCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxMzMtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjEzNDpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX0VEX1VVSUQsIHMtXHUwMDNlZWRfdXVpZCwgMCkpXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yMTM1LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yMTQ0LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjIxNDU6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19CSVRTX1RPVEFMLCBzLVx1MDAzZWJpdHNfdG90YWwsIDApKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjE0Ni1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyMTQ3Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQklUU19PT1MsIHMtXHUwMDNlYml0c19vb3MsIDApKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjE0OC1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyMTQ5Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQklUU19SU19UT1RBTCwgcy1cdTAwM2ViaXRzX3JzX3RvdGFsLCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNTAtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE1MTpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX0JJVFNfUlNfRkFJTEVELCBzLVx1MDAzZWJpdHNfcnNfZmFpbGVkLCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNTItXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNTctXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE1ODpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX1NFTkRfQ05ULCBzLVx1MDAzZXNlbmRfY250LCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNTktXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2MDpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX1JFQ1ZfQ05ULCBzLVx1MDAzZXJlY3ZfY250LCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjEtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2MjpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX1JFQURfQ05ULCBzLVx1MDAzZXJlYWRfY250LCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjMtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2NDpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX1dSSVRfQ05ULCBzLVx1MDAzZXdyaXRfY250LCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjUtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2NjpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX0FMX1dSSVRfQ05ULCBzLVx1MDAzZWFsX3dyaXRfY250LCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjctXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2ODpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX0JNX1dSSVRfQ05ULCBzLVx1MDAzZWJtX3dyaXRfY250LCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjktXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jPTIxODY9aW50IHN0YXJ0X292X3Bhcm1zX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhcnRfb3ZfcGFybXMgKnMpXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjE5Mi1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjIxOTM6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBUlRfT1ZfUEFSTVNfT1ZfU1RBUlRfU0VDVE9SLCBzLVx1MDAzZW92X3N0YXJ0X3NlY3RvciwgMCkpXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yMTk0LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjIxOTU6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBUlRfT1ZfUEFSTVNfT1ZfU1RPUF9TRUNUT1IsIHMtXHUwMDNlb3Zfc3RvcF9zZWN0b3IsIDApKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjE5Ni1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM9MjM5ND1pbnQgZGV2aWNlX3N0YXRpc3RpY3NfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkZXZpY2Vfc3RhdGlzdGljcyAqcylcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yNDAwLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjQwMTpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9ERVZJQ0VfU1RBVElTVElDU19ERVZfU0laRSwgcy1cdTAwM2VkZXZfc2l6ZSwgMCkpXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yNDAyLVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjI0MDM6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfREVWSUNFX1NUQVRJU1RJQ1NfREVWX1JFQUQsIHMtXHUwMDNlZGV2X3JlYWQsIDApKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQwNC1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyNDA1Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX0RFVklDRV9TVEFUSVNUSUNTX0RFVl9XUklURSwgcy1cdTAwM2VkZXZfd3JpdGUsIDApKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQwNi1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyNDA3Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX0RFVklDRV9TVEFUSVNUSUNTX0RFVl9BTF9XUklURVMsIHMtXHUwMDNlZGV2X2FsX3dyaXRlcywgMCkpXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yNDA4LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjI0MDk6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfREVWSUNFX1NUQVRJU1RJQ1NfREVWX0JNX1dSSVRFUywgcy1cdTAwM2VkZXZfYm1fd3JpdGVzLCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0MTAtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0MjAtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjQyMTpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9ERVZJQ0VfU1RBVElTVElDU19ERVZfRVhQT1NFRF9EQVRBX1VVSUQsIHMtXHUwMDNlZGV2X2V4cG9zZWRfZGF0YV91dWlkLCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0MjItXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjQyMzpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9ERVZJQ0VfU1RBVElTVElDU19ERVZfQ1VSUkVOVF9VVUlELCBzLVx1MDAzZWRldl9jdXJyZW50X3V1aWQsIDApKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQyNC1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM9MjQ1OT1pbnQgcGVlcl9kZXZpY2Vfc3RhdGlzdGljc190b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBlZXJfZGV2aWNlX3N0YXRpc3RpY3MgKnMpXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQ2NS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjI0NjY6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfUEVFUl9ERVZJQ0VfU1RBVElTVElDU19QRUVSX0RFVl9SRUNFSVZFRCwgcy1cdTAwM2VwZWVyX2Rldl9yZWNlaXZlZCwgMCkpXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yNDY3LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjI0Njg6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfUEVFUl9ERVZJQ0VfU1RBVElTVElDU19QRUVSX0RFVl9TRU5ULCBzLVx1MDAzZXBlZXJfZGV2X3NlbnQsIDApKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQ2OS1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQ3My1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyNDc0Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1BFRVJfREVWSUNFX1NUQVRJU1RJQ1NfUEVFUl9ERVZfT1VUX09GX1NZTkMsIHMtXHUwMDNlcGVlcl9kZXZfb3V0X29mX3N5bmMsIDApKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQ3NS1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyNDc2Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1BFRVJfREVWSUNFX1NUQVRJU1RJQ1NfUEVFUl9ERVZfUkVTWU5DX0ZBSUxFRCwgcy1cdTAwM2VwZWVyX2Rldl9yZXN5bmNfZmFpbGVkLCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0NzctXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjQ3ODpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9QRUVSX0RFVklDRV9TVEFUSVNUSUNTX1BFRVJfREVWX0JJVE1BUF9VVUlELCBzLVx1MDAzZXBlZXJfZGV2X2JpdG1hcF91dWlkLCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0NzktXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9MjE4PXN0YXRpYyBpbnQgX3JkbWFfbmxfcHV0X2RyaXZlcl91NjQoc3RydWN0IHNrX2J1ZmYgKm1zZywgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTIyMy1cdFx0cmV0dXJuIC1FTVNHU0laRTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MjI0Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX0RSSVZFUl9VNjQsIHZhbHVlLFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yMjUtXHRcdFx0ICAgICAgUkRNQV9OTERFVl9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0yOTA9c3RhdGljIGludCBmaWxsX2Rldl9pbmZvKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTMwMi1cdEJVSUxEX0JVR19PTihzaXplb2YoZGV2aWNlLVx1MDAzZWF0dHJzLmRldmljZV9jYXBfZmxhZ3MpICE9IHNpemVvZih1NjQpKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MzAzOlx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX0NBUF9GTEFHUyxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzA0LVx0XHRcdCAgICAgIGRldmljZS1cdTAwM2VhdHRycy5kZXZpY2VfY2FwX2ZsYWdzLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzEyLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzozMTM6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfTk9ERV9HVUlELFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0zMTQtXHRcdFx0ICAgICAgYmU2NF90b19jcHUoZGV2aWNlLVx1MDAzZW5vZGVfZ3VpZCksXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0zMTYtXHRcdHJldHVybiAtRU1TR1NJWkU7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjMxNzpcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9TWVNfSU1BR0VfR1VJRCxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzE4LVx0XHRcdCAgICAgIGJlNjRfdG9fY3B1KGRldmljZS1cdTAwM2VhdHRycy5zeXNfaW1hZ2VfZ3VpZCksXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0zNTk9c3RhdGljIGludCBmaWxsX3BvcnRfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzgyLVx0XHRcdCgodTY0KWF0dHIucG9ydF9jYXBfZmxhZ3MyIFx1MDAzY1x1MDAzYyAzMik7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjM4MzpcdFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX0NBUF9GTEFHUyxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzg0LVx0XHRcdFx0ICAgICAgY2FwX2ZsYWdzLCBSRE1BX05MREVWX0FUVFJfUEFEKSlcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzg1LVx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjM4NjpcdFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX1NVQk5FVF9QUkVGSVgsXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTM4Ny1cdFx0XHRcdCAgICAgIGF0dHIuc3VibmV0X3ByZWZpeCwgUkRNQV9OTERFVl9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz00MTY9c3RhdGljIGludCBmaWxsX3Jlc19pbmZvX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy00MjctXHRcdGdvdG8gZXJyO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzo0Mjg6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfUkVTX1NVTU1BUllfRU5UUllfQ1VSUiwgY3VycixcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtNDI5LVx0XHRcdCAgICAgIFJETUFfTkxERVZfQVRUUl9QQUQpKVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy00MzAtXHRcdGdvdG8gZXJyO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzo0MzE6XHRpZiAobWF4IFx1MDAyNlx1MDAyNiBubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9SRVNfU1VNTUFSWV9FTlRSWV9NQVgsXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTQzMi1cdFx0XHRcdCAgICAgbWF4LCBSRE1BX05MREVWX0FUVFJfUEFEKSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jPTY4MT1zdGF0aWMgaW50IGZpbGxfcmVzX2NxX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIGJvb2wgaGFzX2NhcF9uZXRfYWRtaW4sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy02ODgtXHRcdHJldHVybiAtRU1TR1NJWkU7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjY4OTpcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9SRVNfVVNFQ05ULFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy02OTAtXHRcdFx0ICAgICAgYXRvbWljX3JlYWQoXHUwMDI2Y3EtXHUwMDNldXNlY250KSwgUkRNQV9OTERFVl9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz03MjY9c3RhdGljIGludCBmaWxsX3Jlc19tcl9lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBib29sIGhhc19jYXBfbmV0X2FkbWluLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtNzM4LVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzo3Mzk6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfUkVTX01STEVOLCBtci1cdTAwM2VsZW5ndGgsXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTc0MC1cdFx0XHQgICAgICBSRE1BX05MREVWX0FUVFJfUEFEKSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jPTc3Mj1zdGF0aWMgaW50IGZpbGxfcmVzX3BkX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIGJvb2wgaGFzX2NhcF9uZXRfYWRtaW4sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy03ODUtXHR9XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjc4NjpcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9SRVNfVVNFQ05ULFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy03ODctXHRcdFx0ICAgICAgYXRvbWljX3JlYWQoXHUwMDI2cGQtXHUwMDNldXNlY250KSwgUkRNQV9OTERFVl9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0xMDI2PWludCByZG1hX25sX3N0YXRfaHdjb3VudGVyX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xMDM3LVx0XHRnb3RvIGVycjtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MTAzODpcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9TVEFUX0hXQ09VTlRFUl9FTlRSWV9WQUxVRSxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMTAzOS1cdFx0XHQgICAgICB2YWx1ZSwgUkRNQV9OTERFVl9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0xOTA2PXN0YXRpYyBpbnQgbmxkZXZfZ2V0X2NoYXJkZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xOTYyLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzoxOTYzOlx0ZXJyID0gbmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfQ0hBUkRFVixcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMTk2NC1cdFx0XHRcdGh1Z2VfZW5jb2RlX2RldihkYXRhLmNkZXYtXHUwMDNlZGV2dCksXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xOTY3LVx0XHRnb3RvIG91dF9kYXRhO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzoxOTY4Olx0ZXJyID0gbmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfQ0hBUkRFVl9BQkksIGRhdGEuYWJpLFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xOTY5LVx0XHRcdFx0UkRNQV9OTERFVl9BVFRSX1BBRCk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0yNzIwPXN0YXRpYyBpbnQgZmlsbF9mcm1yX3Bvb2xfa2V5KHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBpYl9mcm1yX2tleSAqa2V5KVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjczMi1cdFx0Z290byBlcnI7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjI3MzM6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfRlJNUl9QT09MX0tFWV9WRU5ET1JfS0VZLFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzM0LVx0XHRcdCAgICAgIGtleS1cdTAwM2V2ZW5kb3Jfa2V5LCBSRE1BX05MREVWX0FUVFJfUEFEKSlcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjczNS1cdFx0Z290byBlcnI7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjI3MzY6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfRlJNUl9QT09MX0tFWV9OVU1fRE1BX0JMT0NLUyxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjczNy1cdFx0XHQgICAgICBrZXktXHUwMDNlbnVtX2RtYV9ibG9ja3MsIFJETUFfTkxERVZfQVRUUl9QQUQpKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjc0MC1cdGlmIChrZXktXHUwMDNla2VybmVsX3ZlbmRvcl9rZXkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjI3NDE6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQobXNnLFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzQyLVx0XHRcdCAgICAgIFJETUFfTkxERVZfQVRUUl9GUk1SX1BPT0xfS0VZX0tFUk5FTF9WRU5ET1JfS0VZLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9Mjc1Mz1zdGF0aWMgaW50IGZpbGxfZnJtcl9wb29sX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBpYl9mcm1yX3Bvb2wgKnBvb2wpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzYxLVx0XHRnb3RvIGVycl91bmxvY2s7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjI3NjI6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfRlJNUl9QT09MX01BWF9JTl9VU0UsXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTI3NjMtXHRcdFx0ICAgICAgcG9vbC1cdTAwM2VtYXhfaW5fdXNlLCBSRE1BX05MREVWX0FUVFJfUEFEKSlcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjc2NC1cdFx0Z290byBlcnJfdW5sb2NrO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzoyNzY1Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX0ZSTVJfUE9PTF9JTl9VU0UsXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTI3NjYtXHRcdFx0ICAgICAgcG9vbC1cdTAwM2Vpbl91c2UsIFJETUFfTkxERVZfQVRUUl9QQUQpKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYz0zMDE0PWludCBib25kXzNhZF9zdGF0c19maWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kXzNhZF9zdGF0cyAqc3RhdHMpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwMTgtXHR2YWwgPSBhdG9taWM2NF9yZWFkKFx1MDAyNnN0YXRzLVx1MDAzZWxhY3BkdV9yeCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MzAxOTpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEJPTkRfM0FEX1NUQVRfTEFDUERVX1JYLCB2YWwsXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzAyMC1cdFx0XHQgICAgICBCT05EXzNBRF9TVEFUX1BBRCkpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwMjItXHR2YWwgPSBhdG9taWM2NF9yZWFkKFx1MDAyNnN0YXRzLVx1MDAzZWxhY3BkdV90eCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MzAyMzpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEJPTkRfM0FEX1NUQVRfTEFDUERVX1RYLCB2YWwsXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzAyNC1cdFx0XHQgICAgICBCT05EXzNBRF9TVEFUX1BBRCkpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwMjYtXHR2YWwgPSBhdG9taWM2NF9yZWFkKFx1MDAyNnN0YXRzLVx1MDAzZWxhY3BkdV91bmtub3duX3J4KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzozMDI3Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgQk9ORF8zQURfU1RBVF9MQUNQRFVfVU5LTk9XTl9SWCwgdmFsLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwMjgtXHRcdFx0ICAgICAgQk9ORF8zQURfU1RBVF9QQUQpKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDMwLVx0dmFsID0gYXRvbWljNjRfcmVhZChcdTAwMjZzdGF0cy1cdTAwM2VsYWNwZHVfaWxsZWdhbF9yeCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MzAzMTpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEJPTkRfM0FEX1NUQVRfTEFDUERVX0lMTEVHQUxfUlgsIHZhbCxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDMyLVx0XHRcdCAgICAgIEJPTkRfM0FEX1NUQVRfUEFEKSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzAzNS1cdHZhbCA9IGF0b21pYzY0X3JlYWQoXHUwMDI2c3RhdHMtXHUwMDNlbWFya2VyX3J4KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzozMDM2Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgQk9ORF8zQURfU1RBVF9NQVJLRVJfUlgsIHZhbCxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDM3LVx0XHRcdCAgICAgIEJPTkRfM0FEX1NUQVRfUEFEKSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzAzOS1cdHZhbCA9IGF0b21pYzY0X3JlYWQoXHUwMDI2c3RhdHMtXHUwMDNlbWFya2VyX3R4KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzozMDQwOlx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgQk9ORF8zQURfU1RBVF9NQVJLRVJfVFgsIHZhbCxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDQxLVx0XHRcdCAgICAgIEJPTkRfM0FEX1NUQVRfUEFEKSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA0My1cdHZhbCA9IGF0b21pYzY0X3JlYWQoXHUwMDI2c3RhdHMtXHUwMDNlbWFya2VyX3Jlc3BfcngpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjMwNDQ6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBCT05EXzNBRF9TVEFUX01BUktFUl9SRVNQX1JYLCB2YWwsXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA0NS1cdFx0XHQgICAgICBCT05EXzNBRF9TVEFUX1BBRCkpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwNDctXHR2YWwgPSBhdG9taWM2NF9yZWFkKFx1MDAyNnN0YXRzLVx1MDAzZW1hcmtlcl9yZXNwX3R4KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzozMDQ4Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgQk9ORF8zQURfU1RBVF9NQVJLRVJfUkVTUF9UWCwgdmFsLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwNDktXHRcdFx0ICAgICAgQk9ORF8zQURfU1RBVF9QQUQpKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDUxLVx0dmFsID0gYXRvbWljNjRfcmVhZChcdTAwMjZzdGF0cy1cdTAwM2VtYXJrZXJfdW5rbm93bl9yeCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MzA1MjpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEJPTkRfM0FEX1NUQVRfTUFSS0VSX1VOS05PV05fUlgsIHZhbCxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDUzLVx0XHRcdCAgICAgIEJPTkRfM0FEX1NUQVRfUEFEKSlcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0yMTgwPXN0YXRpYyBpbnQgZ3RwX2dlbmxfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBzbmRfcG9ydGlkLCB1MzIgc25kX3NlcSxcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0yMjE4LVx0Y2FzZSBHVFBfVjA6XG5kcml2ZXJzL25ldC9ndHAuYzoyMjE5Olx0XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBHVFBBX1RJRCwgcGN0eC1cdTAwM2V1LnYwLnRpZCwgR1RQQV9QQUQpIHx8XG5kcml2ZXJzL25ldC9ndHAuYy0yMjIwLVx0XHQgICAgbmxhX3B1dF91MTYoc2tiLCBHVFBBX0ZMT1csIHBjdHgtXHUwMDNldS52MC5mbG93KSlcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz0xNTU1PXN0YXRpYyBpbnQgbmxhX3B1dF9zY2koc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBzY2lfdCB2YWx1ZSxcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0xNTU3LXtcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjE1NTg6XHRyZXR1cm4gbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBhdHRydHlwZSwgKF9fZm9yY2UgdTY0KXZhbHVlLCBwYWRhdHRyKTtcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTE1NTktfVxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jPTI4NjE9c3RhdGljIGludCBjb3B5X3J4X3NjX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtYWNzZWNfcnhfc2Nfc3RhdHMgKnN1bSlcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NjIte1xuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mjg2MzpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfSU5fT0NURVRTX1ZBTElEQVRFRCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NjQtXHRcdFx0ICAgICAgc3VtLVx1MDAzZUluT2N0ZXRzVmFsaWRhdGVkLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjg2NS1cdFx0XHQgICAgICBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX1BBRCkgfHxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4NjY6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX0lOX09DVEVUU19ERUNSWVBURUQsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODY3LVx0XHRcdCAgICAgIHN1bS1cdTAwM2VJbk9jdGV0c0RlY3J5cHRlZCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NjgtXHRcdFx0ICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQpIHx8XG5kcml2ZXJzL25ldC9tYWNzZWMuYzoyODY5Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX1VOQ0hFQ0tFRCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NzAtXHRcdFx0ICAgICAgc3VtLVx1MDAzZUluUGt0c1VuY2hlY2tlZCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NzEtXHRcdFx0ICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQpIHx8XG5kcml2ZXJzL25ldC9tYWNzZWMuYzoyODcyOlx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX0RFTEFZRUQsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODczLVx0XHRcdCAgICAgIHN1bS1cdTAwM2VJblBrdHNEZWxheWVkLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjg3NC1cdFx0XHQgICAgICBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX1BBRCkgfHxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4NzU6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX0lOX1BLVFNfT0ssXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODc2LVx0XHRcdCAgICAgIHN1bS1cdTAwM2VJblBrdHNPSyxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NzctXHRcdFx0ICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQpIHx8XG5kcml2ZXJzL25ldC9tYWNzZWMuYzoyODc4Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX0lOVkFMSUQsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODc5LVx0XHRcdCAgICAgIHN1bS1cdTAwM2VJblBrdHNJbnZhbGlkLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjg4MC1cdFx0XHQgICAgICBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX1BBRCkgfHxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4ODE6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX0lOX1BLVFNfTEFURSxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4ODItXHRcdFx0ICAgICAgc3VtLVx1MDAzZUluUGt0c0xhdGUsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODgzLVx0XHRcdCAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mjg4NDpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfSU5fUEtUU19OT1RfVkFMSUQsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODg1LVx0XHRcdCAgICAgIHN1bS1cdTAwM2VJblBrdHNOb3RWYWxpZCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4ODYtXHRcdFx0ICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQpIHx8XG5kcml2ZXJzL25ldC9tYWNzZWMuYzoyODg3Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX05PVF9VU0lOR19TQSxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4ODgtXHRcdFx0ICAgICAgc3VtLVx1MDAzZUluUGt0c05vdFVzaW5nU0EsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODg5LVx0XHRcdCAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mjg5MDpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfSU5fUEtUU19VTlVTRURfU0EsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODkxLVx0XHRcdCAgICAgIHN1bS1cdTAwM2VJblBrdHNVbnVzZWRTQSxcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz0yOTM2PXN0YXRpYyBpbnQgY29weV90eF9zY19zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWFjc2VjX3R4X3NjX3N0YXRzICpzdW0pXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yOTM3LXtcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI5Mzg6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfVFhTQ19TVEFUU19BVFRSX09VVF9QS1RTX1BST1RFQ1RFRCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI5MzktXHRcdFx0ICAgICAgc3VtLVx1MDAzZU91dFBrdHNQcm90ZWN0ZWQsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yOTQwLVx0XHRcdCAgICAgIE1BQ1NFQ19UWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mjk0MTpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19UWFNDX1NUQVRTX0FUVFJfT1VUX1BLVFNfRU5DUllQVEVELFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjk0Mi1cdFx0XHQgICAgICBzdW0tXHUwMDNlT3V0UGt0c0VuY3J5cHRlZCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI5NDMtXHRcdFx0ICAgICAgTUFDU0VDX1RYU0NfU1RBVFNfQVRUUl9QQUQpIHx8XG5kcml2ZXJzL25ldC9tYWNzZWMuYzoyOTQ0Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1RYU0NfU1RBVFNfQVRUUl9PVVRfT0NURVRTX1BST1RFQ1RFRCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI5NDUtXHRcdFx0ICAgICAgc3VtLVx1MDAzZU91dE9jdGV0c1Byb3RlY3RlZCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI5NDYtXHRcdFx0ICAgICAgTUFDU0VDX1RYU0NfU1RBVFNfQVRUUl9QQUQpIHx8XG5kcml2ZXJzL25ldC9tYWNzZWMuYzoyOTQ3Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1RYU0NfU1RBVFNfQVRUUl9PVVRfT0NURVRTX0VOQ1JZUFRFRCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI5NDgtXHRcdFx0ICAgICAgc3VtLVx1MDAzZU91dE9jdGV0c0VuY3J5cHRlZCxcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz0yOTk2PXN0YXRpYyBpbnQgY29weV9zZWN5X3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtYWNzZWNfZGV2X3N0YXRzICpzdW0pXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yOTk3LXtcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI5OTg6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX09VVF9QS1RTX1VOVEFHR0VELFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjk5OS1cdFx0XHQgICAgICBzdW0tXHUwMDNlT3V0UGt0c1VudGFnZ2VkLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAwMC1cdFx0XHQgICAgICBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX1BBRCkgfHxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjMwMDE6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX0lOX1BLVFNfVU5UQUdHRUQsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDAyLVx0XHRcdCAgICAgIHN1bS1cdTAwM2VJblBrdHNVbnRhZ2dlZCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTMwMDMtXHRcdFx0ICAgICAgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9QQUQpIHx8XG5kcml2ZXJzL25ldC9tYWNzZWMuYzozMDA0Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9PVVRfUEtUU19UT09fTE9ORyxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTMwMDUtXHRcdFx0ICAgICAgc3VtLVx1MDAzZU91dFBrdHNUb29Mb25nLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAwNi1cdFx0XHQgICAgICBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX1BBRCkgfHxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjMwMDc6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX0lOX1BLVFNfTk9fVEFHLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAwOC1cdFx0XHQgICAgICBzdW0tXHUwMDNlSW5Qa3RzTm9UYWcsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDA5LVx0XHRcdCAgICAgIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfUEFEKSB8fFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6MzAxMDpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfSU5fUEtUU19CQURfVEFHLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAxMS1cdFx0XHQgICAgICBzdW0tXHUwMDNlSW5Qa3RzQmFkVGFnLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAxMi1cdFx0XHQgICAgICBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX1BBRCkgfHxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjMwMTM6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX0lOX1BLVFNfVU5LTk9XTl9TQ0ksXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDE0LVx0XHRcdCAgICAgIHN1bS1cdTAwM2VJblBrdHNVbmtub3duU0NJLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAxNS1cdFx0XHQgICAgICBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX1BBRCkgfHxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjMwMTY6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX0lOX1BLVFNfTk9fU0NJLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAxNy1cdFx0XHQgICAgICBzdW0tXHUwMDNlSW5Qa3RzTm9TQ0ksXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDE4LVx0XHRcdCAgICAgIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfUEFEKSB8fFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6MzAxOTpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfSU5fUEtUU19PVkVSUlVOLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAyMC1cdFx0XHQgICAgICBzdW0tXHUwMDNlSW5Qa3RzT3ZlcnJ1bixcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz0zMDI3PXN0YXRpYyBpbnQgbmxhX3B1dF9zZWN5KHN0cnVjdCBtYWNzZWNfc2VjeSAqc2VjeSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDQ5LVx0XHRcdE1BQ1NFQ19TRUNZX0FUVFJfUEFEKSB8fFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6MzA1MDpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19TRUNZX0FUVFJfQ0lQSEVSX1NVSVRFLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzA1MS1cdFx0XHQgICAgICBjc2lkLCBNQUNTRUNfU0VDWV9BVFRSX1BBRCkgfHxcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz00Mzg3PXN0YXRpYyBpbnQgbWFjc2VjX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ0MTItXHQgICAgbmxhX3B1dF91OChza2IsIElGTEFfTUFDU0VDX0lDVl9MRU4sIHNlY3ktXHUwMDNlaWN2X2xlbikgfHxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjQ0MTM6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBJRkxBX01BQ1NFQ19DSVBIRVJfU1VJVEUsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDE0LVx0XHRcdCAgICAgIGNzaWQsIElGTEFfTUFDU0VDX1BBRCkgfHxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz0yMDk9c3RhdGljIGludCBfX3ZuaWZpbHRlcl9lbnRyeV9maWxsX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjE5LVx0dnhsYW5fdm5pZmlsdGVyX3N0YXRzX2dldCh2YmVnaW4sIFx1MDAyNnZzdGF0cyk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzoyMjA6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUlhfQllURVMsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0yMjEtXHRcdFx0ICAgICAgdnN0YXRzLnJ4X2J5dGVzLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUEFEKSB8fFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6MjIyOlx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1JYX1BLVFMsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0yMjMtXHRcdFx0ICAgICAgdnN0YXRzLnJ4X3BhY2tldHMsIFZOSUZJTFRFUl9FTlRSWV9TVEFUU19QQUQpIHx8XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzoyMjQ6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUlhfRFJPUFMsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0yMjUtXHRcdFx0ICAgICAgdnN0YXRzLnJ4X2Ryb3BzLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUEFEKSB8fFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6MjI2Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1JYX0VSUk9SUyxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTIyNy1cdFx0XHQgICAgICB2c3RhdHMucnhfZXJyb3JzLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUEFEKSB8fFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6MjI4Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1RYX0JZVEVTLFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjI5LVx0XHRcdCAgICAgIHZzdGF0cy50eF9ieXRlcywgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1BBRCkgfHxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjIzMDpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIFZOSUZJTFRFUl9FTlRSWV9TVEFUU19UWF9QS1RTLFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjMxLVx0XHRcdCAgICAgIHZzdGF0cy50eF9wYWNrZXRzLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUEFEKSB8fFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6MjMyOlx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1RYX0RST1BTLFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjMzLVx0XHRcdCAgICAgIHZzdGF0cy50eF9kcm9wcywgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1BBRCkgfHxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjIzNDpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIFZOSUZJTFRFUl9FTlRSWV9TVEFUU19UWF9FUlJPUlMsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0yMzUtXHRcdFx0ICAgICAgdnN0YXRzLnR4X2Vycm9ycywgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1BBRCkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYz03Nz1nZXRfcGVlcihzdHJ1Y3Qgd2dfcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGR1bXBfY3R4ICpjdHgpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy0xMTEtXHRcdFx0XHRwZWVyLVx1MDAzZXBlcnNpc3RlbnRfa2VlcGFsaXZlX2ludGVydmFsKSB8fFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzoxMTI6XHRcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIFdHUEVFUl9BX1RYX0JZVEVTLCBwZWVyLVx1MDAzZXR4X2J5dGVzLFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy0xMTMtXHRcdFx0XHQgICAgICBXR1BFRVJfQV9VTlNQRUMpIHx8XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjExNDpcdFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgV0dQRUVSX0FfUlhfQllURVMsIHBlZXItXHUwMDNlcnhfYnl0ZXMsXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTExNS1cdFx0XHRcdCAgICAgIFdHUEVFUl9BX1VOU1BFQykgfHxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jPTI4Njc9c3RhdGljIGludCB3aWxfcmZfc2VjdG9yX2dldF9jZmcoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jLTI5NDYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jOjI5NDc6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBRQ0FfQVRUUl9UU0YsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jLTI5NDgtXHRcdFx0ICAgICAgbGU2NF90b19jcHUocmVwbHkuZXZ0LnRzZiksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuYz0zMTAwPXN0YXRpYyBpbnQgd2lsX3JmX3NlY3Rvcl9nZXRfc2VsZWN0ZWQoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jLTMxNzMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jOjMxNzQ6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBRQ0FfQVRUUl9UU0YsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jLTMxNzUtXHRcdFx0ICAgICAgbGU2NF90b19jcHUocmVwbHkuZXZ0LnRzZiksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jPTUzNz1tdDc2X3Rlc3Rtb2RlX2R1bXBfc3RhdHMoc3RydWN0IG10NzZfcGh5ICpwaHksIHN0cnVjdCBza19idWZmICptc2cpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jLTU2MC1cdCAgICBubGFfcHV0X3UzMihtc2csIE1UNzZfVE1fU1RBVFNfQVRUUl9UWF9ET05FLCB0ZC1cdTAwM2V0eF9kb25lKSB8fFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jOjU2MTpcdCAgICBubGFfcHV0X3U2NF82NGJpdChtc2csIE1UNzZfVE1fU1RBVFNfQVRUUl9SWF9QQUNLRVRTLCByeF9wYWNrZXRzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jLTU2Mi1cdFx0XHQgICAgICBNVDc2X1RNX1NUQVRTX0FUVFJfUEFEKSB8fFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jOjU2MzpcdCAgICBubGFfcHV0X3U2NF82NGJpdChtc2csIE1UNzZfVE1fU1RBVFNfQVRUUl9SWF9GQ1NfRVJST1IsIHJ4X2Zjc19lcnJvcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdGVzdG1vZGUuYy01NjQtXHRcdFx0ICAgICAgTVQ3Nl9UTV9TVEFUU19BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MTY0Nj1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNzM0LVx0aW5mby1cdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzBdID0gKHZvaWQgKiljb29raWU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNzM1Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgSFdTSU1fQVRUUl9DT09LSUUsIGNvb2tpZSwgSFdTSU1fQVRUUl9QQUQpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTczNi1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MzU5Nz1zdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX3NlbmRfcG1zcl9mdG1fcmVxdWVzdF9wZWVyKHN0cnVjdCBza19idWZmICptc2csXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzY3OC1cdGlmIChyZXF1ZXN0LVx1MDAzZWluZ3Jlc3NfZGlzdGFuY2UgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzozNjc5Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgTkw4MDIxMV9QTVNSX0ZUTV9SRVFfQVRUUl9JTkdSRVNTLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzY4MC1cdFx0XHQgICAgICByZXF1ZXN0LVx1MDAzZWluZ3Jlc3NfZGlzdGFuY2UsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzY4NC1cdGlmIChyZXF1ZXN0LVx1MDAzZWVncmVzc19kaXN0YW5jZSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjM2ODU6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQobXNnLCBOTDgwMjExX1BNU1JfRlRNX1JFUV9BVFRSX0VHUkVTUyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTM2ODYtXHRcdFx0ICAgICAgcmVxdWVzdC1cdTAwM2VlZ3Jlc3NfZGlzdGFuY2UsXG4tLVxuZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdXNlci5jPTI4NTU9c3RhdGljIGludCB0Y211X3NlbmRfZGV2X3NpemVfZXZlbnQoc3RydWN0IHRjbXVfZGV2ICp1ZGV2LCB1NjQgc2l6ZSlcbi0tXG5kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV91c2VyLmMtMjg2NC1cdFx0cmV0dXJuIHJldDtcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VzZXIuYzoyODY1Olx0cmV0ID0gbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBUQ01VX0FUVFJfREVWX1NJWkUsXG5kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV91c2VyLmMtMjg2Ni1cdFx0XHRcdHNpemUsIFRDTVVfQVRUUl9QQUQpO1xuLS1cbmRyaXZlcnMvdmRwYS9tbHg1L25ldC9tbHg1X3ZuZXQuYz0zNTUzPXN0YXRpYyBpbnQgbWx4NV92ZHBhX2dldF92ZW5kb3JfdnFfc3RhdHMoc3RydWN0IHZkcGFfZGV2aWNlICp2ZGV2LCB1MTYgaWR4LFxuLS1cbmRyaXZlcnMvdmRwYS9tbHg1L25ldC9tbHg1X3ZuZXQuYy0zNTkwLVxuZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jOjM1OTE6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX1ZFTkRPUl9BVFRSX1ZBTFVFLCByZWNlaXZlZF9kZXNjLFxuZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jLTM1OTItXHRcdFx0ICAgICAgVkRQQV9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jLTM1OTctXG5kcml2ZXJzL3ZkcGEvbWx4NS9uZXQvbWx4NV92bmV0LmM6MzU5ODpcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfVkVORE9SX0FUVFJfVkFMVUUsIGNvbXBsZXRlZF9kZXNjLFxuZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jLTM1OTktXHRcdFx0ICAgICAgVkRQQV9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy92ZHBhL3ZkcGEuYz00NTA9c3RhdGljIGludCB2ZHBhX21nbXRkZXZfZmlsbChjb25zdCBzdHJ1Y3QgdmRwYV9tZ210X2RldiAqbWRldiwgc3RydWN0IHNrX2J1ZmYgKm1zZyxcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTQ2Mi1cbmRyaXZlcnMvdmRwYS92ZHBhLmM6NDYzOlx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX01HTVRERVZfU1VQUE9SVEVEX0NMQVNTRVMsXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTQ2NC1cdFx0XHQgICAgICB2ZHBhX21nbXRkZXZfZ2V0X2NsYXNzZXMobWRldiwgTlVMTCksXG4tLVxuZHJpdmVycy92ZHBhL3ZkcGEuYy00NzMtXHR9XG5kcml2ZXJzL3ZkcGEvdmRwYS5jOjQ3NDpcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfU1VQUE9SVEVEX0ZFQVRVUkVTLFxuZHJpdmVycy92ZHBhL3ZkcGEuYy00NzUtXHRcdFx0ICAgICAgbWRldi1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMsIFZEUEFfQVRUUl9QQUQpKSB7XG4tLVxuZHJpdmVycy92ZHBhL3ZkcGEuYz04ODY9c3RhdGljIGludCB2ZHBhX2Rldl9uZXRfY29uZmlnX2ZpbGwoc3RydWN0IHZkcGFfZGV2aWNlICp2ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqbXNnKVxuLS1cbmRyaXZlcnMvdmRwYS92ZHBhLmMtODk0LVxuZHJpdmVycy92ZHBhL3ZkcGEuYzo4OTU6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX0ZFQVRVUkVTLCBmZWF0dXJlc19kZXZpY2UsXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTg5Ni1cdFx0XHQgICAgICBWRFBBX0FUVFJfUEFEKSlcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYS5jPTkxMj12ZHBhX2Rldl9ibGtfY2FwYWNpdHlfY29uZmlnX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTkxOC1cbmRyaXZlcnMvdmRwYS92ZHBhLmM6OTE5Olx0cmV0dXJuIG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9CTEtfQ0ZHX0NBUEFDSVRZLFxuZHJpdmVycy92ZHBhL3ZkcGEuYy05MjAtXHRcdFx0XHQgdmFsX3U2NCwgVkRQQV9BVFRSX1BBRCk7XG4tLVxuZHJpdmVycy92ZHBhL3ZkcGEuYz0xMDczPXN0YXRpYyBpbnQgdmRwYV9kZXZfYmxrX2NvbmZpZ19maWxsKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTEwODItXG5kcml2ZXJzL3ZkcGEvdmRwYS5jOjEwODM6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX0ZFQVRVUkVTLCBmZWF0dXJlc19kZXZpY2UsXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTEwODQtXHRcdFx0ICAgICAgVkRQQV9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy92ZHBhL3ZkcGEuYz0xMTIxPXZkcGFfZGV2X2NvbmZpZ19maWxsKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRldiwgc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTExNTItXHRcdGZlYXR1cmVzX2RyaXZlciA9IHZkZXYtXHUwMDNlY29uZmlnLVx1MDAzZWdldF9kcml2ZXJfZmVhdHVyZXModmRldik7XG5kcml2ZXJzL3ZkcGEvdmRwYS5jOjExNTM6XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfTkVHT1RJQVRFRF9GRUFUVVJFUywgZmVhdHVyZXNfZHJpdmVyLFxuZHJpdmVycy92ZHBhL3ZkcGEuYy0xMTU0LVx0XHRcdFx0ICAgICAgVkRQQV9BVFRSX1BBRCkpIHtcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYS5jPTExODU9c3RhdGljIGludCB2ZHBhX2ZpbGxfc3RhdHNfcmVjKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRldiwgc3RydWN0IHNrX2J1ZmYgKm1zZyxcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTEyMDAtXHRmZWF0dXJlcyA9IHZkZXYtXHUwMDNlY29uZmlnLVx1MDAzZWdldF9kcml2ZXJfZmVhdHVyZXModmRldik7XG5kcml2ZXJzL3ZkcGEvdmRwYS5jOjEyMDE6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX05FR09USUFURURfRkVBVFVSRVMsXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTEyMDItXHRcdFx0ICAgICAgZmVhdHVyZXMsIFZEUEFfQVRUUl9QQUQpKVxuLS1cbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYz0yODU9c3RhdGljIGludCB2ZHBhc2ltX25ldF9nZXRfc3RhdHMoc3RydWN0IHZkcGFzaW0gKnZkcGFzaW0sIHUxNiBpZHgsXG4tLVxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMwOS1cdFx0XHRicmVhaztcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYzozMTA6XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfVkVORE9SX0FUVFJfVkFMVUUsXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzExLVx0XHRcdFx0ICAgICAgcnhfcGt0cywgVkRQQV9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMxNS1cdFx0XHRicmVhaztcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYzozMTY6XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfVkVORE9SX0FUVFJfVkFMVUUsXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzE3LVx0XHRcdFx0ICAgICAgcnhfYnl0ZXMsIFZEUEFfQVRUUl9QQUQpKVxuLS1cbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zMjEtXHRcdFx0YnJlYWs7XG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmM6MzIyOlx0XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX1ZFTkRPUl9BVFRSX1ZBTFVFLFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMyMy1cdFx0XHRcdCAgICAgIHJ4X2Vycm9ycywgVkRQQV9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMyNy1cdFx0XHRicmVhaztcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYzozMjg6XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfVkVORE9SX0FUVFJfVkFMVUUsXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzI5LVx0XHRcdFx0ICAgICAgcnhfb3ZlcnJ1bnMsIFZEUEFfQVRUUl9QQUQpKVxuLS1cbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zMzMtXHRcdFx0YnJlYWs7XG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmM6MzM0Olx0XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX1ZFTkRPUl9BVFRSX1ZBTFVFLFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMzNS1cdFx0XHRcdCAgICAgIHJ4X2Ryb3BzLCBWRFBBX0FUVFJfUEFEKSlcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzUwLVx0XHRcdGJyZWFrO1xuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jOjM1MTpcdFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9WRU5ET1JfQVRUUl9WQUxVRSxcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zNTItXHRcdFx0XHQgICAgICB0eF9wa3RzLCBWRFBBX0FUVFJfUEFEKSlcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzU2LVx0XHRcdGJyZWFrO1xuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jOjM1NzpcdFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9WRU5ET1JfQVRUUl9WQUxVRSxcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zNTgtXHRcdFx0XHQgICAgICB0eF9ieXRlcywgVkRQQV9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTM2Mi1cdFx0XHRicmVhaztcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYzozNjM6XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfVkVORE9SX0FUVFJfVkFMVUUsXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzY0LVx0XHRcdFx0ICAgICAgdHhfZXJyb3JzLCBWRFBBX0FUVFJfUEFEKSlcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYwNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0bGluayBQb2xpY3kgRHVtcCBmb3IgQmlnLUVuZGlhbiBBdHRyaWJ1dGUgU3VwcG9ydCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgcGF0Y2ggaW50ZWdyYXRlcyBiaWctZW5kaWFuIGF0dHJpYnV0ZXMgKGBOTEFfQkUxNmAgYW5kIGBOTEFfQkUzMmApIGludG8gdGhlIG5ldGxpbmsgcG9saWN5IGR1bXAgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoKWAgY2FsbGVkIGJ5IGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlKClgLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaG93IG5ldGxpbmsgcG9saWNpZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBnZW5lcmljIG5ldGxpbmsgb3IgcnRuZXRsaW5rIHBvbGljeSBkdW1wcy4KCkZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGUgY2hhbmdlcyBpbiBzaXplIGNhbGN1bGF0aW9uLiBJdCBzZWVtcyB0byBoYW5kbGUgdGhlIGJpZy1lbmRpYW4gdHlwZXMgc2ltaWxhcmx5IHRvIHRoZWlyIHVuc2lnbmVkIGNvdW50ZXJwYXJ0cywgYnV0IHdpdGggYW4gYWRkZWQgY29uc2lkZXJhdGlvbiBmb3IgYnl0ZSBvcmRlci4gVGhlIHNpemUgY2FsY3VsYXRpb24gY29kZSBzbmlwcGV0IHNob3dzIHRoZSBhZGRlZCBvdmVyaGVhZCB0byBhY2NvdW50IGZvciB0aGUgYnl0ZSBvcmRlciBpbmZvcm1hdGlvbi4gSSYjMzk7bSBzZWVpbmcgYG5sYV9hdHRyX3NpemUoKWAgY2FsbHMsIHdoaWNoIEkgcHJlc3VtZSByZWxhdGUgdG8gYXR0cmlidXRlIGFsaWdubWVudCBhbmQgcGFkZGluZy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGRvdWJsZSBjaGVjayB0aGF0IHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgY29ycmVjdCBieSByZS1ldmFsdWF0aW5nIHRoZSBgbmxhX2F0dHJfc2l6ZSgpYCBtYWNyby4KClNlY29uZCwgdGhlIGFjdHVhbCBkdW1waW5nIHByb2Nlc3MgaXRzZWxmLCB3aGljaCBpbmNsdWRlcyB0aGUgYE5MQV9CRTE2YCBhbmQgYE5MQV9CRTMyYCBjYXNlcywgaXMgd2hhdCYjMzk7cyByZWFsbHkgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIHRoZSBjb2RlIGlzIGNvcnJlY3RseSBtYXBwaW5nIHRoZSBhdHRyaWJ1dGUgdHlwZXMgdG8gYE5MX0FUVFJfVFlQRV9VMTZgIGFuZCBgTkxfQVRUUl9UWVBFX1UzMmAsIHJlc3BlY3RpdmVseS4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGUgY29uZGl0aW9uYWwgYG5sYV9wdXRfdTMyYCBjYWxsIHdoaWNoIHNldHMgdGhlIGBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVJgIGF0dHJpYnV0ZSBhbmQgZmxhZ3MgaXQgYXMgYE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU5gLiBUaGlzIGltcGxpZXMgdGhlIGJ5dGUgb3JkZXIgaXMgZXhwbGljaXRseSB0YWdnZWQgd2hlbiBlbmNvdW50ZXJpbmcgYSBiaWctZW5kaWFuIGF0dHJpYnV0ZS4gU28gaXQgc2VlbXMgdGhlIGludGVudGlvbiBpcyB0byBpbmZvcm0gdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBhYm91dCB0aGUgYnl0ZSBvcmRlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHdyaXR0ZW4gY29uc2lzdGVudGx5LgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGNyb3NzLXJlZmVyZW5jZSB0aGlzIGxvZ2ljLCBsaWtlbHkgYXJvdW5kIGxpbmUgNDMwIGluIGBuZXQvbmV0bGluay9wb2xpY3kuY2AgdG8gY29uZmlybSB0aGUgY29kZSBmbG93IGFuZCB0aGF0IG5vIG90aGVyIGNyaXRpY2FsIG1vZGlmaWNhdGlvbnMgd2VyZSBtYWRlIHRoYXQgbWlnaHQgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGluY29uc2lzdGVuY2llcy4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBgdHlwZWAgdmFyaWFibGUgaXMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgaW4gdGhlIHNrYiB3cml0aW5nIGFuZCB0aGF0IHRoZSBieXRlIG9yZGVyIGluZm9ybWF0aW9uIGlzIGNvcnJlY3RseSBwcm9wYWdhdGVkIHRvIHVzZXJzcGFjZS4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIGFsaWducyB3aXRoIHRoZSBjdXJyZW50IHBvbGljeSBkdW1wIHN0cnVjdHVyZSBhbmQgdGhhdCB0aGlzIGFkZGl0aW9uIGlzIGFyY2hpdGVjdHVyYWxseSBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0bGluay9wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDEwOlx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1RZUEUsIHR5cGUpKVxuIDQxMTpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA0MTI6XHRcbiA0MTM6XHRcdG5sYV9uZXN0X2VuZChza2IsIGF0dHIpO1xuIDQxNDpcdFx0V0FSTl9PTihhdHRyLVx1MDAzZW5sYV9sZW4gXHUwMDNlIGVzdGltYXRlKTtcbiA0MTU6XHRcbiA0MTY6XHRcdHJldHVybiAwO1xuIDQxNzpcdG5sYV9wdXRfZmFpbHVyZTpcbiA0MTg6XHRcdG5sYV9uZXN0X2NhbmNlbChza2IsIGF0dHIpO1xuIDQxOTpcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIDQyMDpcdH1cbiA0MjE6XHRcbiA0MjI6XHQvKipcbiA0MjM6XHQgKiBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIgLSB3cml0ZSBhIGdpdmVuIGF0dHJpYnV0ZSBwb2xpY3lcbiA0MjQ6XHQgKiBAc2tiOiB0aGUgbWVzc2FnZSBza2IgdG8gd3JpdGUgdG9cbiA0MjU6XHQgKiBAcHQ6IHRoZSBhdHRyaWJ1dGUmIzM5O3MgcG9saWN5XG4gNDI2Olx0ICogQG5lc3RhdHRyOiB0aGUgbmVzdGVkIGF0dHJpYnV0ZSBJRCB0byB1c2VcbiA0Mjc6XHQgKlxuIDQyODpcdCAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvdGhlcndpc2U7IC0lRU5PREFUQSBpc1xuIDQyOTpcdCAqXHQgICAgc3BlY2lhbCwgaW5kaWNhdGluZyB0aGF0IHRoZXJlJiMzOTtzIG5vIHBvbGljeSBkYXRhIGFuZFxuIDQzMDpcdCAqXHQgICAgdGhlIGF0dHJpYnV0ZSBpcyBnZW5lcmFsbHkgcmVqZWN0ZWQuXG4gNDMxOlx0ICovXG4gNDMyOlx0aW50IG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDQzMzpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxuIDQzNDpcdFx0XHRcdFx0ICAgaW50IG5lc3RhdHRyKVxuIDQzNTpcdHtcbiA0MzY6XHRcdHJldHVybiBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihOVUxMLCBza2IsIHB0LCBuZXN0YXR0cik7XG4gNDM3Olx0fVxuIDQzODpcdFxuIDQzOTpcdC8qKlxuIDQ0MDpcdCAqIG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGUgLSB3cml0ZSBjdXJyZW50IHBvbGljeSBkdW1wIGF0dHJpYnV0ZXNcbiA0NDE6XHQgKiBAc2tiOiB0aGUgbWVzc2FnZSBza2IgdG8gd3JpdGUgdG9cbiA0NDI6XHQgKiBAc3RhdGU6IHRoZSBwb2xpY3kgZHVtcCBzdGF0ZVxuIDQ0MzpcdCAqXG4gNDQ0Olx0ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZVxuIDQ0NTpcdCAqL1xuIDQ0NjpcdGludCBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlKHN0cnVjdCBza19idWZmICpza2IsXG4gNDQ3Olx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlKVxuIDQ0ODpcdHtcbiA0NDk6XHRcdGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdDtcbiA0NTA6XHRcdHN0cnVjdCBubGF0dHIgKnBvbGljeTtcbiA0NTE6XHRcdGJvb2wgYWdhaW47XG4gNDUyOlx0XHRpbnQgZXJyO1xuIDQ1MzpcdFxuIDQ1NDpcdHNlbmRfYXR0cmlidXRlOlxuIDQ1NTpcdFx0YWdhaW4gPSBmYWxzZTtcbiA0NTY6XHRcbiA0NTc6XHRcdHB0ID0gXHUwMDI2c3RhdGUtXHUwMDNlcG9saWNpZXNbc3RhdGUtXHUwMDNlcG9saWN5X2lkeF0ucG9saWN5W3N0YXRlLVx1MDAzZWF0dHJfaWR4XTtcbiA0NTg6XHRcbiA0NTk6XHRcdHBvbGljeSA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgc3RhdGUtXHUwMDNlcG9saWN5X2lkeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDQxCgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDcxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBbmFseXNpczogTmVlZHNLTVNBTiA9IEZhbHNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhZGRzIE5ldGxpbmsgcG9saWN5IGR1bXBpbmcgZm9yIGJpZy1lbmRpYW4gYXR0cmlidXRlcy4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgdGh1cyB3YXJyYW50aW5nIEtNU0FOPyBJJiMzOTt2ZSBnb25lIHRocm91Z2ggdGhlIGZvdXIga2V5IGNyaXRlcmlhLgoKRmlyc3QsIGNyaXRlcmlhIG9uZSBmb2N1c2VzIG9uIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggdXNlcyBgbmxhX3B1dF91MzJgIHRvIHB1dCBhIDMyLWJpdCBjb25zdGFudCwgYE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU5gICh3aGljaCBpcyBqdXN0IHRoZSB2YWx1ZSAxLCBhIGZ1bGx5IGluaXRpYWxpemVkIGNvbnN0YW50KSBpbnRvIHRoZSBOZXRsaW5rIGJ1ZmZlci4gQWxzbywgYG5sYV9nZXRfcmFuZ2VfdW5zaWduZWRgIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgdGhlIGByYW5nZWAgc3RydWN0dXJlLiBTbywgbm90aGluZyB1bmluaXRpYWxpemVkIGlzIGJlaW5nIGV4cG9zZWQgaGVyZS4KCk5leHQsIHdlIGNoZWNrIGZvciBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFdlIGhhdmUgYSBjaGVjayBhZ2FpbnN0IGBwdC0mZ3Q7dHlwZWAsIGJ1dCBgcHRgIGlzIGZyb20gYSBjb25zdGFudCBwb2xpY3kgdGFibGUuIE5vIHJpc2sgdGhlcmUgZWl0aGVyLgoKVGhpcmQsIGFyZSB0aGVyZSBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vcGUuIE5vIG1lbW9yeSBhbGxvY2F0aW9uIGlzIGludm9sdmVkLCBzbyB0aGlzIGNyaXRlcmlhIGlzIG5vdCBtZXQuCgpGaW5hbGx5LCB3ZSBhc3Nlc3MgcG90ZW50aWFsIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byBhY2Nlc3Mgb2YgdW5pbml0aWFsaXplZCBieXRlcy4gV2Ugc2VlIHRoZSBzaXplIGVzdGltYXRlIHdhcyBwcm9wZXJseSB1cGRhdGVkLCBtZWFuaW5nIGJ1ZmZlciBzaXplIGNoZWNrcyBhbmQgYWxsb2NhdGlvbnMgYXJlIGV4YWN0LiBObyBjb25jZXJucyBhcm91bmQgYnVmZmVyIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KClNvLCB0byBzdW1tYXJpemUsIG5vIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGFyZSBiZWluZyB3cml0dGVuIHRvIHRoZSBOZXRsaW5rIGJ1ZmZlci4gQWxsIHZhbHVlcyBhcmUgZWl0aGVyIGV4cGxpY2l0IGNvbnN0YW50cyBvciBkZXJpdmVkIGZyb20gZnVuY3Rpb25zIHRoYXQgZXhwbGljaXRseSBpbml0aWFsaXplIHRoZWlyIG91dHB1dC4gS01TQU4gLyBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBpbiBwbGFjZSB0byBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuCgpUaHVzLCBiYXNlZCBvbiBteSBhbmFseXNpcywgTmVlZHNLTVNBTiBpcyBjbGVhcmx5ICpmYWxzZSouIFdlIGNhbiBwcm9jZWVkIHdpdGggdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIE5ldGxpbmsgcG9saWN5IGR1bXAgc3VwcG9ydCBmb3IgYmlnLWVuZGlhbiBpbnRlZ2VyIGF0dHJpYnV0ZSB0eXBlcyAoTkxBX0JFMTYgYW5kIE5MQV9CRTMyKSBieSBlbWl0dGluZyB0aGUgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSIGF0dHJpYnV0ZSBpbiBuZXRsaW5rIHBvbGljeSBkZXNjcmlwdGlvbnMuIFxuXG5BbGwgdmFsdWVzIHdyaXR0ZW4gdG8gdGhlIE5ldGxpbmsgc2tiIGFyZSBleHBsaWNpdCwgZnVsbHkgaW5pdGlhbGl6ZWQgY29uc3RhbnRzIChzdWNoIGFzIE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU4pIG9yIHJhbmdlIHZhbHVlcyBpbml0aWFsaXplZCBieSBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlcywgb3IgcGFkZGluZ3MgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGlzIGFueSBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBjaGVja3MgYXJlIHN1ZmZpY2llbnQgZm9yIHRlc3RpbmcgYnVmZmVyIHNpemVzIGFuZCBuZXRsaW5rIG1lc3NhZ2UgZm9ybWF0dGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTmV0bGluayBwb2xpY3kgZHVtcCBzdXBwb3J0IGZvciBiaWctZW5kaWFuIGludGVnZXIgYXR0cmlidXRlIHR5cGVzIChOTEFfQkUxNiBhbmQgTkxBX0JFMzIpIGJ5IGVtaXR0aW5nIHRoZSBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIgYXR0cmlidXRlIGluIG5ldGxpbmsgcG9saWN5IGRlc2NyaXB0aW9ucy4gXG5cbkFsbCB2YWx1ZXMgd3JpdHRlbiB0byB0aGUgTmV0bGluayBza2IgYXJlIGV4cGxpY2l0LCBmdWxseSBpbml0aWFsaXplZCBjb25zdGFudHMgKHN1Y2ggYXMgTkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTikgb3IgcmFuZ2UgdmFsdWVzIGluaXRpYWxpemVkIGJ5IG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQoKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBwYWRkaW5ncyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgaXMgYW55IGNvbnRyb2wgZmxvdyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGNoZWNrcyBhcmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyBidWZmZXIgc2l6ZXMgYW5kIG5ldGxpbmsgbWVzc2FnZSBmb3JtYXR0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzowMi4yNDcwMTUzMDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzU2OTg2NjM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdHJsX2R1bXBwb2xpY3lcIixcbiAgICBcIm5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlXCIsXG4gICAgXCJuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlXCIsXG4gICAgXCJuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgTmV0bGluayBwb2xpY3kgZHVtcCBzdXBwb3J0IGZvciBiaWctZW5kaWFuIGludGVnZXIgYXR0cmlidXRlIHR5cGVzIChOTEFfQkUxNiBhbmQgTkxBX0JFMzIpIGJ5IGVtaXR0aW5nIHRoZSBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIgYXR0cmlidXRlIGluIG5ldGxpbmsgcG9saWN5IGRlc2NyaXB0aW9ucy4gXFxuXFxuQWxsIHZhbHVlcyB3cml0dGVuIHRvIHRoZSBOZXRsaW5rIHNrYiBhcmUgZXhwbGljaXQsIGZ1bGx5IGluaXRpYWxpemVkIGNvbnN0YW50cyAoc3VjaCBhcyBOTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOKSBvciByYW5nZSB2YWx1ZXMgaW5pdGlhbGl6ZWQgYnkgbmxhX2dldF9yYW5nZV91bnNpZ25lZCgpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIG9yIHBhZGRpbmdzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyBhbnkgY29udHJvbCBmbG93IGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgY2hlY2tzIGFyZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIGJ1ZmZlciBzaXplcyBhbmQgbmV0bGluayBtZXNzYWdlIGZvcm1hdHRpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTmV0bGluayBwb2xpY3kgZHVtcGluZyBsb2dpYyBpbiBuZXQvbmV0bGluay9wb2xpY3kuYyB0byBzdXBwb3J0IGJpZy1lbmRpYW4gaW50ZWdlciBhdHRyaWJ1dGVzIChOTEFfQkUxNiBhbmQgTkxBX0JFMzIpIGJ5IGVtaXR0aW5nIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUiBhbmQgYWRqdXN0aW5nIHRoZSBhdHRyaWJ1dGUgc2l6ZSBlc3RpbWF0aW9uLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIEFGX05FVExJTksgc29ja2V0cyB0aHJvdWdoIEdlbmVyaWMgTmV0bGluayBwb2xpY3kgZHVtcGluZyAoQ1RSTF9DTURfR0VUUE9MSUNZKSBhcyB3ZWxsIGFzIG5ldGxpbmsgZXh0YWNrIGVycm9yIHJlcG9ydGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6MDIuMjQ3MDQzNjY5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzY5NTI1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZWQ0MWE0ZWI0MTY2ODI3M2U1NDM5ODc0NDlmMDI5MjdhNjgyNjM0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMDA6MjM6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sXFxuaW5kZXggOGI0NDcyYTZhYTM2YS4uN2U3YzE1OGUzZTczNyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmxjdHJsLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmxjdHJsLnlhbWxcXG5AQCAtNDIsNiArNDIsMTYgQEAgZGVmaW5pdGlvbnM6XFxuICAgICAgIC0gYml0ZmllbGQzMlxcbiAgICAgICAtIHNpbnRcXG4gICAgICAgLSB1aW50XFxuKyAgLVxcbisgICAgbmFtZTogcG9saWN5LWJ5dGUtb3JkZXJcXG4rICAgIGRvYzogfFxcbisgICAgICBCeXRlIG9yZGVyIG9mIGFuIGludGVnZXIgYXR0cmlidXRlLiBaZXJvIGlzIGxlZnQgdW51c2VkIHNvIHRoYXQgaXRcXG4rICAgICAgY2FuIGJlIHRha2VuIHRvIG1lYW4gaG9zdCBieXRlIG9yZGVyLlxcbisgICAgZW51bS1uYW1lOiBuZXRsaW5rLXBvbGljeS1ieXRlLW9yZGVyXFxuKyAgICB0eXBlOiBlbnVtXFxuKyAgICB2YWx1ZS1zdGFydDogMVxcbisgICAgZW50cmllczpcXG4rICAgICAgLSBiaWctZW5kaWFuXFxuIFxcbiBhdHRyaWJ1dGUtc2V0czpcXG4gICAtXFxuQEAgLTE1Miw2ICsxNjIsMTEgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgIC1cXG4gICAgICAgICBuYW1lOiBwYWRcXG4gICAgICAgICB0eXBlOiBwYWRcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGJ5dGUtb3JkZXJcXG4rICAgICAgICBkb2M6IEJ5dGUgb3JkZXIgb2YgdGhlIGF0dHJpYnV0ZSwgYWJzZW50IG1lYW5zIGhvc3QgYnl0ZSBvcmRlci5cXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBlbnVtOiBwb2xpY3ktYnl0ZS1vcmRlclxcbiAgIC1cXG4gICAgIG5hbWU6IG9wLXBvbGljeS1hdHRyc1xcbiAgICAgbmFtZS1wcmVmaXg6IGN0cmwtYXR0ci1wb2xpY3ktXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oXFxuaW5kZXggZjg3YWFmMjhhNjQ5MS4uODJjNDFhZWI0MzU3NCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGxpbmsuaFxcbkBAIC0zMjksNiArMzI5LDE3IEBAIGVudW0gbmV0bGlua19hdHRyaWJ1dGVfdHlwZSB7XFxuIFxcdE5MX0FUVFJfVFlQRV9VSU5ULFxcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIGVudW0gbmV0bGlua19wb2xpY3lfYnl0ZV9vcmRlciAtIGJ5dGUgb3JkZXIgb2YgYW4gaW50ZWdlciBhdHRyaWJ1dGVcXG4rICogQE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU46IGJpZyBlbmRpYW4gKG5ldHdvcmsgYnl0ZSBvcmRlcilcXG4rICpcXG4rICogWmVybyBpcyBsZWZ0IHVuYXNzaWduZWQgc28gdGhhdCBpdCBrZWVwcyBtZWFuaW5nIGhvc3QgYnl0ZSBvcmRlcixcXG4rICogd2hpY2ggaXMgYWxzbyB3aGF0IGEgbWlzc2luZyBieXRlIG9yZGVyIG1lYW5zLlxcbisgKi9cXG4rZW51bSBuZXRsaW5rX3BvbGljeV9ieXRlX29yZGVyIHtcXG4rXFx0TkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTiA9IDEsXFxuK307XFxuK1xcbiAvKipcXG4gICogZW51bSBuZXRsaW5rX3BvbGljeV90eXBlX2F0dHIgLSBwb2xpY3kgdHlwZSBhdHRyaWJ1dGVzXFxuICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX1VOU1BFQzogdW51c2VkXFxuQEAgLTM1Niw2ICszNjcsOCBAQCBlbnVtIG5ldGxpbmtfYXR0cmlidXRlX3R5cGUge1xcbiAgKlxcdGJpdGZpZWxkMzIgdHlwZSAoVTMyKVxcbiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLOiBtYXNrIG9mIHZhbGlkIGJpdHMgZm9yIHVuc2lnbmVkIGludGVnZXJzIChVNjQpXFxuICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRDogcGFkIGF0dHJpYnV0ZSBmb3IgNjQtYml0IGFsaWdubWVudFxcbisgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSOiBieXRlIG9yZGVyIG9mIGFuIGludGVnZXIgYXR0cmlidXRlLFxcbisgKlxcdFxcdTAwMjZlbnVtIG5ldGxpbmtfcG9saWN5X2J5dGVfb3JkZXIsIGFic2VudCBpZiBob3N0IGJ5dGUgb3JkZXIgKFUzMilcXG4gICpcXG4gICogQF9fTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVg6IG51bWJlciBvZiBhdHRyaWJ1dGVzXFxuICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyXFxuQEAgLTM3NCw2ICszODcsNyBAQCBlbnVtIG5ldGxpbmtfcG9saWN5X3R5cGVfYXR0ciB7XFxuIFxcdE5MX1BPTElDWV9UWVBFX0FUVFJfQklURklFTEQzMl9NQVNLLFxcbiBcXHROTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRCxcXG4gXFx0TkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLLFxcbitcXHROTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIsXFxuIFxcbiBcXHQvKiBrZWVwIGxhc3QgKi9cXG4gXFx0X19OTF9QT0xJQ1lfVFlQRV9BVFRSX01BWCxcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvcG9saWN5LmMgYi9uZXQvbmV0bGluay9wb2xpY3kuY1xcbmluZGV4IDA4YjAwNmM0OGYwNmUuLjU3NGQ0NGI3ZDUxODIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGxpbmsvcG9saWN5LmNcXG4rKysgYi9uZXQvbmV0bGluay9wb2xpY3kuY1xcbkBAIC0yMzQsNiArMjM0LDExIEBAIGludCBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZShjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQpXFxuIFxcdFxcdC8qIG1heGltdW0gaXMgY29tbW9uLCB1NjQgbWluL21heCB3aXRoIHBhZGRpbmcgKi9cXG4gXFx0XFx0cmV0dXJuIGNvbW1vbiArXFxuIFxcdFxcdCAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgKyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7XFxuK1xcdGNhc2UgTkxBX0JFMTY6XFxuK1xcdGNhc2UgTkxBX0JFMzI6XFxuK1xcdFxcdC8qIHNhbWUgYXMgdGhlIHVuc2lnbmVkIHR5cGVzLCBwbHVzIHRoZSBieXRlIG9yZGVyICovXFxuK1xcdFxcdHJldHVybiBjb21tb24gKyBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKSArXFxuK1xcdFxcdCAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgKyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7XFxuIFxcdGNhc2UgTkxBX0JJVEZJRUxEMzI6XFxuIFxcdFxcdHJldHVybiBjb21tb24gKyBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKTtcXG4gXFx0Y2FzZSBOTEFfU1RSSU5HOlxcbkBAIC0yODksMjEgKzI5NCwyOCBAQCBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXFxuIFxcdGNhc2UgTkxBX1UxNjpcXG4gXFx0Y2FzZSBOTEFfVTMyOlxcbiBcXHRjYXNlIE5MQV9VNjQ6XFxuK1xcdGNhc2UgTkxBX0JFMTY6XFxuK1xcdGNhc2UgTkxBX0JFMzI6XFxuIFxcdGNhc2UgTkxBX1VJTlQ6XFxuIFxcdGNhc2UgTkxBX01TRUNTOiB7XFxuIFxcdFxcdHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gcmFuZ2U7XFxuIFxcbiBcXHRcXHRpZiAocHQtXFx1MDAzZXR5cGUgPT0gTkxBX1U4KVxcbiBcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1U4O1xcbi1cXHRcXHRlbHNlIGlmIChwdC1cXHUwMDNldHlwZSA9PSBOTEFfVTE2KVxcbitcXHRcXHRlbHNlIGlmIChwdC1cXHUwMDNldHlwZSA9PSBOTEFfVTE2IHx8IHB0LVxcdTAwM2V0eXBlID09IE5MQV9CRTE2KVxcbiBcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1UxNjtcXG4tXFx0XFx0ZWxzZSBpZiAocHQtXFx1MDAzZXR5cGUgPT0gTkxBX1UzMilcXG4rXFx0XFx0ZWxzZSBpZiAocHQtXFx1MDAzZXR5cGUgPT0gTkxBX1UzMiB8fCBwdC1cXHUwMDNldHlwZSA9PSBOTEFfQkUzMilcXG4gXFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VMzI7XFxuIFxcdFxcdGVsc2UgaWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9VNjQpXFxuIFxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTY0O1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVUlOVDtcXG4gXFxuK1xcdFxcdGlmICgocHQtXFx1MDAzZXR5cGUgPT0gTkxBX0JFMTYgfHwgcHQtXFx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUixcXG4rXFx0XFx0XFx0XFx0TkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTikpXFxuK1xcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbitcXG4gXFx0XFx0aWYgKHB0LVxcdTAwM2V2YWxpZGF0aW9uX3R5cGUgPT0gTkxBX1ZBTElEQVRFX01BU0spIHtcXG4gXFx0XFx0XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBwdC1cXHUwMDNlbWFzayxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5XFxuaW5kZXggODY4MmJmNTg4ZTFmYS4uZmI1YWNiOGFjZGVkMSAxMDA2NDRcXG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHlcXG4rKysgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHlcXG5AQCAtMTE1LDYgKzExNSw3IEBAIGNsYXNzIE5ldGxpbms6XFxuICAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JJVEZJRUxEMzJfTUFTSyA9IDEwXFxuICAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRCA9IDExXFxuICAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0sgPSAxMlxcbisgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSID0gMTNcXG4gXFxuICAgICBBdHRyVHlwZSA9IEVudW0oJ0F0dHJUeXBlJywgWydmbGFnJywgJ3U4JywgJ3UxNicsICd1MzInLCAndTY0JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzOCcsICdzMTYnLCAnczMyJywgJ3M2NCcsXFxuQEAgLTEyMiw2ICsxMjMsOCBAQCBjbGFzcyBOZXRsaW5rOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25lc3RlZCcsICduZXN0ZWQtYXJyYXknLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGZpZWxkMzInLCAnc2ludCcsICd1aW50J10pXFxuIFxcbisgICAgQnl0ZU9yZGVyID0gRW51bSgnQnl0ZU9yZGVyJywgWydiaWctZW5kaWFuJ10sIHN0YXJ0PTEpXFxuK1xcbiBjbGFzcyBObEVycm9yKEV4Y2VwdGlvbik6XFxuICAgICBkZWYgX19pbml0X18oc2VsZiwgbmxfbXNnKTpcXG4gICAgICAgICBzZWxmLm5sX21zZyA9IG5sX21zZ1xcbkBAIC0xNTgsNyArMTYxLDcgQEAgY2xhc3MgTmxQb2xpY3k6XFxuIFxcbiAgICAgRWFjaCBwb2xpY3kgZW50cnkgYWx3YXlzIGhhcyBhICd0eXBlJyBhdHRyaWJ1dGUgKGUuZy4gdTMyLCBzdHJpbmcsXFxuICAgICBuZXN0ZWQpLiBPcHRpb25hbCBhdHRyaWJ1dGVzIGRlcGVuZGluZyBvbiB0aGUgJ3R5cGUnOiBtaW4tdmFsdWUsXFxuLSAgICBtYXgtdmFsdWUsIG1pbi1sZW5ndGgsIG1heC1sZW5ndGgsIG1hc2suXFxuKyAgICBtYXgtdmFsdWUsIG1pbi1sZW5ndGgsIG1heC1sZW5ndGgsIG1hc2ssIGJ5dGUtb3JkZXIuXFxuIFxcbiAgICAgUG9saWNpZXMgY2FuIGZvcm0gaW5maW5pdGUgbmVzdGluZyBsb29wcy4gVGhlc2UgbG9vcHMgYXJlIHRyaW1tZWRcXG4gICAgIHdoZW4gcG9saWN5IGlzIGNvbnZlcnRlZCB0byBhIGRpY3Qgd2l0aCBwb2wudG9fZGljdCgpLlxcbkBAIC00NTQsNiArNDU3LDkgQEAgZGVmIF9nZW5sX2RlY29kZV9wb2xpY3kocmF3KTpcXG4gICAgICAgICAgICAgcG9saWN5WydiaXRmaWVsZDMyLW1hc2snXSA9IGF0dHIuYXNfc2NhbGFyKCd1MzInKVxcbiAgICAgICAgIGVsaWYgYXR0ci50eXBlID09IE5ldGxpbmsuTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLOlxcbiAgICAgICAgICAgICBwb2xpY3lbJ21hc2snXSA9IGF0dHIuYXNfc2NhbGFyKCd1NjQnKVxcbisgICAgICAgIGVsaWYgYXR0ci50eXBlID09IE5ldGxpbmsuTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSOlxcbisgICAgICAgICAgICBieXRlX29yZGVyID0gYXR0ci5hc19zY2FsYXIoJ3UzMicpXFxuKyAgICAgICAgICAgIHBvbGljeVsnYnl0ZS1vcmRlciddID0gTmV0bGluay5CeXRlT3JkZXIoYnl0ZV9vcmRlcikubmFtZVxcbiAgICAgcmV0dXJuIHBvbGljeVxcbiBcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjAyLjg4NDg4OTI3OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzI5NjQ3MTU1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY3RybF9kdW1wcG9saWN5XCIsXG4gICAgXCJuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZVwiLFxuICAgIFwibmV0bGlua19wb2xpY3lfZHVtcF93cml0ZVwiLFxuICAgIFwibmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTmV0bGluayBwb2xpY3kgZHVtcGluZyBsb2dpYyBpbiBuZXQvbmV0bGluay9wb2xpY3kuYyB0byBzdXBwb3J0IGJpZy1lbmRpYW4gaW50ZWdlciBhdHRyaWJ1dGVzIChOTEFfQkUxNiBhbmQgTkxBX0JFMzIpIGJ5IGVtaXR0aW5nIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUiBhbmQgYWRqdXN0aW5nIHRoZSBhdHRyaWJ1dGUgc2l6ZSBlc3RpbWF0aW9uLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIEFGX05FVExJTksgc29ja2V0cyB0aHJvdWdoIEdlbmVyaWMgTmV0bGluayBwb2xpY3kgZHVtcGluZyAoQ1RSTF9DTURfR0VUUE9MSUNZKSBhcyB3ZWxsIGFzIG5ldGxpbmsgZXh0YWNrIGVycm9yIHJlcG9ydGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZWQ0MWE0ZWI0MTY2ODI3M2U1NDM5ODc0NDlmMDI5MjdhNjgyNjM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwMDoyMzowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ubGN0cmwueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ubGN0cmwueWFtbFxuaW5kZXggOGI0NDcyYTZhYTM2YS4uN2U3YzE1OGUzZTczNyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ubGN0cmwueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sXG5AQCAtNDIsNiArNDIsMTYgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLSBiaXRmaWVsZDMyXG4gICAgICAgLSBzaW50XG4gICAgICAgLSB1aW50XG4rICAtXG4rICAgIG5hbWU6IHBvbGljeS1ieXRlLW9yZGVyXG4rICAgIGRvYzogfFxuKyAgICAgIEJ5dGUgb3JkZXIgb2YgYW4gaW50ZWdlciBhdHRyaWJ1dGUuIFplcm8gaXMgbGVmdCB1bnVzZWQgc28gdGhhdCBpdFxuKyAgICAgIGNhbiBiZSB0YWtlbiB0byBtZWFuIGhvc3QgYnl0ZSBvcmRlci5cbisgICAgZW51bS1uYW1lOiBuZXRsaW5rLXBvbGljeS1ieXRlLW9yZGVyXG4rICAgIHR5cGU6IGVudW1cbisgICAgdmFsdWUtc3RhcnQ6IDFcbisgICAgZW50cmllczpcbisgICAgICAtIGJpZy1lbmRpYW5cbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xNTIsNiArMTYyLDExIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHBhZFxuICAgICAgICAgdHlwZTogcGFkXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogYnl0ZS1vcmRlclxuKyAgICAgICAgZG9jOiBCeXRlIG9yZGVyIG9mIHRoZSBhdHRyaWJ1dGUsIGFic2VudCBtZWFucyBob3N0IGJ5dGUgb3JkZXIuXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGVudW06IHBvbGljeS1ieXRlLW9yZGVyXG4gICAtXG4gICAgIG5hbWU6IG9wLXBvbGljeS1hdHRyc1xuICAgICBuYW1lLXByZWZpeDogY3RybC1hdHRyLXBvbGljeS1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGxpbmsuaFxuaW5kZXggZjg3YWFmMjhhNjQ5MS4uODJjNDFhZWI0MzU3NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRsaW5rLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRsaW5rLmhcbkBAIC0zMjksNiArMzI5LDE3IEBAIGVudW0gbmV0bGlua19hdHRyaWJ1dGVfdHlwZSB7XG4gXHROTF9BVFRSX1RZUEVfVUlOVCxcbiB9O1xuIFxuKy8qKlxuKyAqIGVudW0gbmV0bGlua19wb2xpY3lfYnl0ZV9vcmRlciAtIGJ5dGUgb3JkZXIgb2YgYW4gaW50ZWdlciBhdHRyaWJ1dGVcbisgKiBATkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTjogYmlnIGVuZGlhbiAobmV0d29yayBieXRlIG9yZGVyKVxuKyAqXG4rICogWmVybyBpcyBsZWZ0IHVuYXNzaWduZWQgc28gdGhhdCBpdCBrZWVwcyBtZWFuaW5nIGhvc3QgYnl0ZSBvcmRlcixcbisgKiB3aGljaCBpcyBhbHNvIHdoYXQgYSBtaXNzaW5nIGJ5dGUgb3JkZXIgbWVhbnMuXG4rICovXG4rZW51bSBuZXRsaW5rX3BvbGljeV9ieXRlX29yZGVyIHtcbitcdE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU4gPSAxLFxuK307XG4rXG4gLyoqXG4gICogZW51bSBuZXRsaW5rX3BvbGljeV90eXBlX2F0dHIgLSBwb2xpY3kgdHlwZSBhdHRyaWJ1dGVzXG4gICogQE5MX1BPTElDWV9UWVBFX0FUVFJfVU5TUEVDOiB1bnVzZWRcbkBAIC0zNTYsNiArMzY3LDggQEAgZW51bSBuZXRsaW5rX2F0dHJpYnV0ZV90eXBlIHtcbiAgKlx0Yml0ZmllbGQzMiB0eXBlIChVMzIpXG4gICogQE5MX1BPTElDWV9UWVBFX0FUVFJfTUFTSzogbWFzayBvZiB2YWxpZCBiaXRzIGZvciB1bnNpZ25lZCBpbnRlZ2VycyAoVTY0KVxuICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRDogcGFkIGF0dHJpYnV0ZSBmb3IgNjQtYml0IGFsaWdubWVudFxuKyAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVI6IGJ5dGUgb3JkZXIgb2YgYW4gaW50ZWdlciBhdHRyaWJ1dGUsXG4rICpcdFx1MDAyNmVudW0gbmV0bGlua19wb2xpY3lfYnl0ZV9vcmRlciwgYWJzZW50IGlmIGhvc3QgYnl0ZSBvcmRlciAoVTMyKVxuICAqXG4gICogQF9fTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVg6IG51bWJlciBvZiBhdHRyaWJ1dGVzXG4gICogQE5MX1BPTElDWV9UWVBFX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXJcbkBAIC0zNzQsNiArMzg3LDcgQEAgZW51bSBuZXRsaW5rX3BvbGljeV90eXBlX2F0dHIge1xuIFx0TkxfUE9MSUNZX1RZUEVfQVRUUl9CSVRGSUVMRDMyX01BU0ssXG4gXHROTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRCxcbiBcdE5MX1BPTElDWV9UWVBFX0FUVFJfTUFTSyxcbitcdE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUixcbiBcbiBcdC8qIGtlZXAgbGFzdCAqL1xuIFx0X19OTF9QT0xJQ1lfVFlQRV9BVFRSX01BWCxcbmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9wb2xpY3kuYyBiL25ldC9uZXRsaW5rL3BvbGljeS5jXG5pbmRleCAwOGIwMDZjNDhmMDZlLi41NzRkNDRiN2Q1MTgyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGxpbmsvcG9saWN5LmNcbisrKyBiL25ldC9uZXRsaW5rL3BvbGljeS5jXG5AQCAtMjM0LDYgKzIzNCwxMSBAQCBpbnQgbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0KVxuIFx0XHQvKiBtYXhpbXVtIGlzIGNvbW1vbiwgdTY0IG1pbi9tYXggd2l0aCBwYWRkaW5nICovXG4gXHRcdHJldHVybiBjb21tb24gK1xuIFx0XHQgICAgICAgMiAqIChubGFfYXR0cl9zaXplKDApICsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTY0KSkpO1xuK1x0Y2FzZSBOTEFfQkUxNjpcbitcdGNhc2UgTkxBX0JFMzI6XG4rXHRcdC8qIHNhbWUgYXMgdGhlIHVuc2lnbmVkIHR5cGVzLCBwbHVzIHRoZSBieXRlIG9yZGVyICovXG4rXHRcdHJldHVybiBjb21tb24gKyBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKSArXG4rXHRcdCAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgKyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7XG4gXHRjYXNlIE5MQV9CSVRGSUVMRDMyOlxuIFx0XHRyZXR1cm4gY29tbW9uICsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTMyKSk7XG4gXHRjYXNlIE5MQV9TVFJJTkc6XG5AQCAtMjg5LDIxICsyOTQsMjggQEAgX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlLFxuIFx0Y2FzZSBOTEFfVTE2OlxuIFx0Y2FzZSBOTEFfVTMyOlxuIFx0Y2FzZSBOTEFfVTY0OlxuK1x0Y2FzZSBOTEFfQkUxNjpcbitcdGNhc2UgTkxBX0JFMzI6XG4gXHRjYXNlIE5MQV9VSU5UOlxuIFx0Y2FzZSBOTEFfTVNFQ1M6IHtcbiBcdFx0c3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiByYW5nZTtcbiBcbiBcdFx0aWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1U4KVxuIFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTg7XG4tXHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1UxNilcbitcdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTE2IHx8IHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMTYpXG4gXHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VMTY7XG4tXHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1UzMilcbitcdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTMyIHx8IHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpXG4gXHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VMzI7XG4gXHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1U2NClcbiBcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1U2NDtcbiBcdFx0ZWxzZVxuIFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVUlOVDtcbiBcbitcdFx0aWYgKChwdC1cdTAwM2V0eXBlID09IE5MQV9CRTE2IHx8IHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIsXG4rXHRcdFx0XHROTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOKSlcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcbiBcdFx0aWYgKHB0LVx1MDAzZXZhbGlkYXRpb25fdHlwZSA9PSBOTEFfVkFMSURBVEVfTUFTSykge1xuIFx0XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfTUFTSyxcbiBcdFx0XHRcdFx0ICAgICAgcHQtXHUwMDNlbWFzayxcbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHlcbmluZGV4IDg2ODJiZjU4OGUxZmEuLmZiNWFjYjhhY2RlZDEgMTAwNjQ0XG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHlcbisrKyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weVxuQEAgLTExNSw2ICsxMTUsNyBAQCBjbGFzcyBOZXRsaW5rOlxuICAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JJVEZJRUxEMzJfTUFTSyA9IDEwXG4gICAgIE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEID0gMTFcbiAgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLID0gMTJcbisgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSID0gMTNcbiBcbiAgICAgQXR0clR5cGUgPSBFbnVtKCdBdHRyVHlwZScsIFsnZmxhZycsICd1OCcsICd1MTYnLCAndTMyJywgJ3U2NCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzOCcsICdzMTYnLCAnczMyJywgJ3M2NCcsXG5AQCAtMTIyLDYgKzEyMyw4IEBAIGNsYXNzIE5ldGxpbms6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXN0ZWQnLCAnbmVzdGVkLWFycmF5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGZpZWxkMzInLCAnc2ludCcsICd1aW50J10pXG4gXG4rICAgIEJ5dGVPcmRlciA9IEVudW0oJ0J5dGVPcmRlcicsIFsnYmlnLWVuZGlhbiddLCBzdGFydD0xKVxuK1xuIGNsYXNzIE5sRXJyb3IoRXhjZXB0aW9uKTpcbiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5sX21zZyk6XG4gICAgICAgICBzZWxmLm5sX21zZyA9IG5sX21zZ1xuQEAgLTE1OCw3ICsxNjEsNyBAQCBjbGFzcyBObFBvbGljeTpcbiBcbiAgICAgRWFjaCBwb2xpY3kgZW50cnkgYWx3YXlzIGhhcyBhICd0eXBlJyBhdHRyaWJ1dGUgKGUuZy4gdTMyLCBzdHJpbmcsXG4gICAgIG5lc3RlZCkuIE9wdGlvbmFsIGF0dHJpYnV0ZXMgZGVwZW5kaW5nIG9uIHRoZSAndHlwZSc6IG1pbi12YWx1ZSxcbi0gICAgbWF4LXZhbHVlLCBtaW4tbGVuZ3RoLCBtYXgtbGVuZ3RoLCBtYXNrLlxuKyAgICBtYXgtdmFsdWUsIG1pbi1sZW5ndGgsIG1heC1sZW5ndGgsIG1hc2ssIGJ5dGUtb3JkZXIuXG4gXG4gICAgIFBvbGljaWVzIGNhbiBmb3JtIGluZmluaXRlIG5lc3RpbmcgbG9vcHMuIFRoZXNlIGxvb3BzIGFyZSB0cmltbWVkXG4gICAgIHdoZW4gcG9saWN5IGlzIGNvbnZlcnRlZCB0byBhIGRpY3Qgd2l0aCBwb2wudG9fZGljdCgpLlxuQEAgLTQ1NCw2ICs0NTcsOSBAQCBkZWYgX2dlbmxfZGVjb2RlX3BvbGljeShyYXcpOlxuICAgICAgICAgICAgIHBvbGljeVsnYml0ZmllbGQzMi1tYXNrJ10gPSBhdHRyLmFzX3NjYWxhcigndTMyJylcbiAgICAgICAgIGVsaWYgYXR0ci50eXBlID09IE5ldGxpbmsuTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLOlxuICAgICAgICAgICAgIHBvbGljeVsnbWFzayddID0gYXR0ci5hc19zY2FsYXIoJ3U2NCcpXG4rICAgICAgICBlbGlmIGF0dHIudHlwZSA9PSBOZXRsaW5rLk5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUjpcbisgICAgICAgICAgICBieXRlX29yZGVyID0gYXR0ci5hc19zY2FsYXIoJ3UzMicpXG4rICAgICAgICAgICAgcG9saWN5WydieXRlLW9yZGVyJ10gPSBOZXRsaW5rLkJ5dGVPcmRlcihieXRlX29yZGVyKS5uYW1lXG4gICAgIHJldHVybiBwb2xpY3lcbiBcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjAyLjg4NDg5MTIxOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNjM4MjQwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIFBvbGljeSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdG8gYnJlYWsgaXQgZG93biBwaWVjZSBieSBwaWVjZSwgc3RhcnRpbmcgd2l0aCBhIGdyYW51bGFyIGxvb2sgYXQgdGhlIGNvZGUgY2hhbmdlcy4gSSBzZWUgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogdGhlIGRvY3VtZW50YXRpb24gKGBubGN0cmwueWFtbGApLCBhIGhlYWRlciBmaWxlIChgbmV0bGluay5oYCksIHRoZSBjb3JlIHBvbGljeSBpbXBsZW1lbnRhdGlvbiAoYHBvbGljeS5jYCksIGFuZCBhIHVzZXItc3BhY2UgUHl0aG9uIHNjcmlwdCAoYHlubC5weWApLiBUaGlzIHN1Z2dlc3RzIGNoYW5nZXMgdG8gYm90aCB0aGUga2VybmVsIGFuZCB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiByZWxhdGVkIHRvIE5ldGxpbmsgcG9saWN5IGhhbmRsaW5nLlxuXG5GaXJzdCwgSSdsbCBleGFtaW5lIHRoZSBzcGVjaWZpYyBhZGRpdGlvbnMgYW5kIG1vZGlmaWNhdGlvbnMgaW4gZWFjaCBmaWxlLiBUaGUgYWRkaXRpb24gb2YgYGVudW0gbmV0bGlua19wb2xpY3lfYnl0ZV9vcmRlcmAgYW5kIGBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVJgIGluIHRoZSBoZWFkZXIgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmc7IHRoaXMgbGlrZWx5IGluZGljYXRlcyBhIG5ldyBmZWF0dXJlIG9yIGVuaGFuY2VtZW50IHJlbGF0ZWQgdG8gYnl0ZSBvcmRlciBoYW5kbGluZyB3aXRoaW4gTmV0bGluayBhdHRyaWJ1dGVzLiBUaGUgbW9kaWZpY2F0aW9uIG9mIGBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZWAgYW5kIGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAgaW4gYHBvbGljeS5jYCB0byBoYW5kbGUgYE5MQV9CRTE2YCBhbmQgYE5MQV9CRTMyYCBzdXBwb3J0cyBteSBoeXBvdGhlc2lzLiBUaGUgaW5jbHVzaW9uIG9mIGBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVJgIHRlbGxzIG1lIHRoYXQgd2UgYXJlIGFkZGluZyBzb21lIGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IHRoZSBieXRlIG9yZGVyIHdoZW4gZHVtcGluZyB0aGUgYXR0cmlidXRlLlxuXG5Ob3csIG15IGF0dGVudGlvbiBpbW1lZGlhdGVseSBzaGlmdHMgdG8gYG5ldC9uZXRsaW5rL3BvbGljeS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlOiB3aG8gY2FsbHMgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zLCB3aGF0IGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUgcmVsZXZhbnQsIGFuZCB3aGF0IG90aGVyIHN5bWJvbHMgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlbT8gVGhlIHNwZWNpZmljIGNvbnRleHQgb2YgdGhlIGNhbGxzIGlzIGNyaXRpY2FsLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBlZmZpY2llbnRseSB0cmFjZSB0aGVzZSBjYWxscywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoYXQgYWZmZWN0cyB0aGUgYnl0ZSBvcmRlciBoYW5kbGluZy4gT25jZSBJIGhhdmUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGVwZW5kZW5jaWVzLCBJIGNhbiBiZXR0ZXIgYXNzZXNzIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjA2Ljk0ODcxODY2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRsaW5rL3BvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjA6XFx0XFx0Y2FzZSBOTEFfTkVTVEVEX0FSUkFZOlxcbiAyMjE6XFx0XFx0XFx0LyogY29tbW9uLCBwb2xpY3kgaWR4LCBwb2xpY3kgbWF4YXR0ciAqL1xcbiAyMjI6XFx0XFx0XFx0cmV0dXJuIGNvbW1vbiArIDIgKiBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKTtcXG4gMjIzOlxcdFxcdGNhc2UgTkxBX1U4OlxcbiAyMjQ6XFx0XFx0Y2FzZSBOTEFfVTE2OlxcbiAyMjU6XFx0XFx0Y2FzZSBOTEFfVTMyOlxcbiAyMjY6XFx0XFx0Y2FzZSBOTEFfVTY0OlxcbiAyMjc6XFx0XFx0Y2FzZSBOTEFfTVNFQ1M6XFxuIDIyODpcXHRcXHRjYXNlIE5MQV9TODpcXG4gMjI5OlxcdFxcdGNhc2UgTkxBX1MxNjpcXG4gMjMwOlxcdFxcdGNhc2UgTkxBX1MzMjpcXG4gMjMxOlxcdFxcdGNhc2UgTkxBX1M2NDpcXG4gMjMyOlxcdFxcdGNhc2UgTkxBX1NJTlQ6XFxuIDIzMzpcXHRcXHRjYXNlIE5MQV9VSU5UOlxcbiAyMzQ6XFx0XFx0XFx0LyogbWF4aW11bSBpcyBjb21tb24sIHU2NCBtaW4vbWF4IHdpdGggcGFkZGluZyAqL1xcbiAyMzU6XFx0XFx0XFx0cmV0dXJuIGNvbW1vbiArXFxuIDIzNjpcXHRcXHRcXHQgICAgICAgMiAqIChubGFfYXR0cl9zaXplKDApICsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTY0KSkpO1xcbiAyMzc6XFx0XFx0Y2FzZSBOTEFfQkUxNjpcXG4gMjM4OlxcdFxcdGNhc2UgTkxBX0JFMzI6XFxuIDIzOTpcXHRcXHRcXHQvKiBzYW1lIGFzIHRoZSB1bnNpZ25lZCB0eXBlcywgcGx1cyB0aGUgYnl0ZSBvcmRlciAqL1xcbiAyNDA6XFx0XFx0XFx0cmV0dXJuIGNvbW1vbiArIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpICtcXG4gMjQxOlxcdFxcdFxcdCAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgKyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7XFxuIDI0MjpcXHRcXHRjYXNlIE5MQV9CSVRGSUVMRDMyOlxcbiAyNDM6XFx0XFx0XFx0cmV0dXJuIGNvbW1vbiArIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpO1xcbiAyNDQ6XFx0XFx0Y2FzZSBOTEFfU1RSSU5HOlxcbiAyNDU6XFx0XFx0Y2FzZSBOTEFfTlVMX1NUUklORzpcXG4gMjQ2OlxcdFxcdGNhc2UgTkxBX0JJTkFSWTpcXG4gMjQ3OlxcdFxcdFxcdC8qIG1heGltdW0gaXMgY29tbW9uLCB1MzIgbWluLWxlbmd0aC9tYXgtbGVuZ3RoICovXFxuIDI0ODpcXHRcXHRcXHRyZXR1cm4gY29tbW9uICsgMiAqIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpO1xcbiAyNDk6XFx0XFx0Y2FzZSBOTEFfRkxBRzpcXG4gMjUwOlxcdFxcdFxcdHJldHVybiBjb21tb247XFxuIDI1MTpcXHRcXHR9XFxuIDI1MjpcXHRcXG4gMjUzOlxcdFxcdC8qIHRoaXMgc2hvdWxkIHRoZW4gY2F1c2UgYSB3YXJuaW5nIGxhdGVyICovXFxuIDI1NDpcXHRcXHRyZXR1cm4gMDtcXG4gMjU1OlxcdH1cXG4gMjU2OlxcdFxcbiAyNTc6XFx0c3RhdGljIGludFxcbiAyNTg6XFx0X19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlLFxcbiAyNTk6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsXFxuIDI2MDpcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxcbiAyNjE6XFx0XFx0XFx0XFx0XFx0IGludCBuZXN0YXR0cilcXG4gMjYyOlxcdHtcXG4gMjYzOlxcdFxcdGludCBlc3RpbWF0ZSA9IG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlKHB0KTtcXG4gMjY0OlxcdFxcdGVudW0gbmV0bGlua19hdHRyaWJ1dGVfdHlwZSB0eXBlO1xcbiAyNjU6XFx0XFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcXG4gMjY2OlxcdFxcbiAyNjc6XFx0XFx0YXR0ciA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgbmVzdGF0dHIpO1xcbiAyNjg6XFx0XFx0aWYgKCFhdHRyKVxcbiAyNjk6XFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiAyNzA6XFx0XFxuIDI3MTpcXHRcXHRzd2l0Y2ggKHB0LVxcdTAwM2V0eXBlKSB7XFxuIDI3MjpcXHRcXHRkZWZhdWx0OlxcbiAyNzM6XFx0XFx0Y2FzZSBOTEFfVU5TUEVDOlxcbiAyNzQ6XFx0XFx0Y2FzZSBOTEFfUkVKRUNUOlxcbiAyNzU6XFx0XFx0XFx0Lyogc2tpcCAtIHVzZSBOTEFfTUlOX0xFTiB0byBhZHZlcnRpc2Ugc3VjaCAqL1xcbiAyNzY6XFx0XFx0XFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgYXR0cik7XFxuIDI3NzpcXHRcXHRcXHRyZXR1cm4gLUVOT0RBVEE7XFxuIDI3ODpcXHRcXHRjYXNlIE5MQV9ORVNURUQ6XFxuIDI3OTpcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX05FU1RFRDtcXG4gMjgwOlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiAyODE6XFx0XFx0Y2FzZSBOTEFfTkVTVEVEX0FSUkFZOlxcbiAyODI6XFx0XFx0XFx0aWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9ORVNURURfQVJSQVkpXFxuIDI4MzpcXHRcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX05FU1RFRF9BUlJBWTtcXG4gMjg0OlxcdFxcdFxcdGlmIChzdGF0ZSBcXHUwMDI2XFx1MDAyNiBwdC1cXHUwMDNlbmVzdGVkX3BvbGljeSBcXHUwMDI2XFx1MDAyNiBwdC1cXHUwMDNlbGVuIFxcdTAwMjZcXHUwMDI2XFxuIDI4NTpcXHRcXHRcXHQgICAgKG5sYV9wdXRfdTMyKHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9QT0xJQ1lfSURYLFxcbiAyODY6XFx0XFx0XFx0XFx0XFx0IG5ldGxpbmtfcG9saWN5X2R1bXBfZ2V0X3BvbGljeV9pZHgoc3RhdGUsXFxuIDI4NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgcHQtXFx1MDAzZW5lc3RlZF9wb2xpY3ksXFxuIDI4ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgcHQtXFx1MDAzZWxlbikpIHx8XFxuIDI4OTpcXHRcXHRcXHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9QT0xJQ1lfTUFYVFlQRSxcXG4gMjkwOlxcdFxcdFxcdFxcdFxcdCBwdC1cXHUwMDNlbGVuKSkpXFxuIDI5MTpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gMjkyOlxcdFxcdFxcdGJyZWFrO1xcbiAyOTM6XFx0XFx0Y2FzZSBOTEFfVTg6XFxuIDI5NDpcXHRcXHRjYXNlIE5MQV9VMTY6XFxuIDI5NTpcXHRcXHRjYXNlIE5MQV9VMzI6XFxuIDI5NjpcXHRcXHRjYXNlIE5MQV9VNjQ6XFxuIDI5NzpcXHRcXHRjYXNlIE5MQV9CRTE2OlxcbiAyOTg6XFx0XFx0Y2FzZSBOTEFfQkUzMjpcXG4gMjk5OlxcdFxcdGNhc2UgTkxBX1VJTlQ6XFxuIDMwMDpcXHRcXHRjYXNlIE5MQV9NU0VDUzoge1xcbiAzMDE6XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiByYW5nZTtcXG4gMzAyOlxcdFxcbiAzMDM6XFx0XFx0XFx0aWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9VOClcXG4gMzA0OlxcdFxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTg7XFxuIDMwNTpcXHRcXHRcXHRlbHNlIGlmIChwdC1cXHUwMDNldHlwZSA9PSBOTEFfVTE2IHx8IHB0LVxcdTAwM2V0eXBlID09IE5MQV9CRTE2KVxcbiAzMDY6XFx0XFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VMTY7XFxuIDMwNzpcXHRcXHRcXHRlbHNlIGlmIChwdC1cXHUwMDNldHlwZSA9PSBOTEFfVTMyIHx8IHB0LVxcdTAwM2V0eXBlID09IE5MQV9CRTMyKVxcbiAzMDg6XFx0XFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VMzI7XFxuIDMwOTpcXHRcXHRcXHRlbHNlIGlmIChwdC1cXHUwMDNldHlwZSA9PSBOTEFfVTY0KVxcbiAzMTA6XFx0XFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VNjQ7XFxuIDMxMTpcXHRcXHRcXHRlbHNlXFxuIDMxMjpcXHRcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1VJTlQ7XFxuIDMxMzpcXHRcXG4gMzE0OlxcdFxcdFxcdGlmICgocHQtXFx1MDAzZXR5cGUgPT0gTkxBX0JFMTYgfHwgcHQtXFx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpIFxcdTAwMjZcXHUwMDI2XFxuIDMxNTpcXHRcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIsXFxuIDMxNjpcXHRcXHRcXHRcXHRcXHROTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOKSlcXG4gMzE3OlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHRcXHRpZiAocHQtXFx1MDAzZXZhbGlkYXRpb25fdHlwZSA9PSBOTEFfVkFMSURBVEVfTUFTSykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzowNi45NDg4MjAyMjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Nzg4MzUwMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBOZXRsaW5rIFBvbGljeSBEdW1waW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldGxpbmsgcG9saWN5IGR1bXAgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsZXJzIG9mIGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAgYW5kIGBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZWAuIFNlZWluZyB3aGVyZSB0aGV5J3JlIGludm9rZWQgd2lsbCBnaXZlIG1lIGEgY29uY3JldGUgcGljdHVyZSBvZiB0aGVpciByb2xlIHdpdGhpbiB0aGUgc3lzdGVtLlxuXG5JJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggb2YgdGhlIGBuZXQvbmV0bGluay9wb2xpY3kuY2AgZmlsZSBpdHNlbGYgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgY29udGV4dC4gVGhlbiwgSSB3aWxsIGFsc28gbGV2ZXJhZ2UgYGdyZXBgIHRvIHF1aWNrbHkgZmluZCBhbGwgaW5zdGFuY2VzIG9mIGBuZXRsaW5rX3BvbGljeV9kdW1wYCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoYXQnbGwgbGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgcGF0dGVybnMsIHVzZS1jYXNlcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIG5ldGxpbmsgcG9saWN5IGZyYW1ld29yay4gVGhpcyBjb21iaW5hdGlvbiBvZiB0YXJnZXRlZCBzZWFyY2hlcyBhbmQgYnJvYWRlciBmaWxlIGFuYWx5c2lzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzUxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzoxNC43MzcxNzI3NTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0OTc3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0bGlua19wb2xpY3lfZHVtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0bGlua1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0bGluay9hZl9uZXRsaW5rLmM9MjE2Mz1uZXRsaW5rX2Fja190bHZfbGVuKHN0cnVjdCBuZXRsaW5rX3NvY2sgKm5saywgaW50IGVycixcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMTgzLVxcdGlmIChleHRhY2stXFx1MDAzZXBvbGljeSlcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjE4NDpcXHRcXHR0bHZsZW4gKz0gbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUoZXh0YWNrLVxcdTAwM2Vwb2xpY3kpO1xcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMTg1LVxcdGlmIChleHRhY2stXFx1MDAzZW1pc3NfdHlwZSlcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz0yMjAwPW5ldGxpbmtfYWNrX3Rsdl9maWxsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLCBpbnQgZXJyLFxcbi0tXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTIyMTUtXFx0aWYgKGV4dGFjay1cXHUwMDNlcG9saWN5KVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoyMjE2OlxcdFxcdG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihza2IsIGV4dGFjay1cXHUwMDNlcG9saWN5LFxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMjE3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBOTE1TR0VSUl9BVFRSX1BPTElDWSk7XFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYz0xNTEyPXN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCB7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTUxMzpcXHRzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGU7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTUxNC1cXHRjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKnJ0O1xcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM9MTUyOT1zdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNTcxLVxcdFxcdGlmIChkb2l0LnBvbGljeSkge1xcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE1NzI6XFx0XFx0XFx0ZXJyID0gbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlLFxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE1NzMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkb2l0LnBvbGljeSxcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE1NzgtXFx0XFx0aWYgKGR1bXAucG9saWN5KSB7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTU3OTpcXHRcXHRcXHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXFx1MDAyNmN0eC1cXHUwMDNlc3RhdGUsXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTU4MC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGR1bXAucG9saWN5LFxcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTYwMS1cXHRcXHRpZiAoaS5kb2l0LnBvbGljeSkge1xcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE2MDI6XFx0XFx0XFx0ZXJyID0gbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlLFxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2MDMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBpLmRvaXQucG9saWN5LFxcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTYwOC1cXHRcXHRpZiAoaS5kdW1waXQucG9saWN5KSB7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTYwOTpcXHRcXHRcXHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXFx1MDAyNmN0eC1cXHUwMDNlc3RhdGUsXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTYxMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGkuZHVtcGl0LnBvbGljeSxcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2MjMtZXJyX2ZyZWVfc3RhdGU6XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTYyNDpcXHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVxcdTAwM2VzdGF0ZSk7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTYyNS1lcnJfZnJlZV9vcF9pdGVyOlxcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM9MTY0OD1zdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9wdXRfb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2NzQtXFx0aWYgKGRvaXQtXFx1MDAzZXBvbGljeSkge1xcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE2NzU6XFx0XFx0aWR4ID0gbmV0bGlua19wb2xpY3lfZHVtcF9nZXRfcG9saWN5X2lkeChjdHgtXFx1MDAzZXN0YXRlLFxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2NzYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGRvaXQtXFx1MDAzZXBvbGljeSxcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2ODItXFx0aWYgKGR1bXBpdC1cXHUwMDNlcG9saWN5KSB7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTY4MzpcXHRcXHRpZHggPSBuZXRsaW5rX3BvbGljeV9kdW1wX2dldF9wb2xpY3lfaWR4KGN0eC1cXHUwMDNlc3RhdGUsXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTY4NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgZHVtcGl0LVxcdTAwM2Vwb2xpY3ksXFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYz0xNzAxPXN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3MzAtXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTczMTpcXHR3aGlsZSAobmV0bGlua19wb2xpY3lfZHVtcF9sb29wKGN0eC1cXHUwMDNlc3RhdGUpKSB7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTczMi1cXHRcXHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTc0MS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzQyOlxcdFxcdGlmIChuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlKHNrYiwgY3R4LVxcdTAwM2VzdGF0ZSkpXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTc0My1cXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jPTE3NTc9c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNzYxLVxcdGtmcmVlKGN0eC1cXHUwMDNlb3BfaXRlcik7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTc2MjpcXHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVxcdTAwM2VzdGF0ZSk7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTc2My1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTE2LVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjE3OnN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlIHtcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xOC1cXHR1bnNpZ25lZCBpbnQgcG9saWN5X2lkeDtcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTI2LVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjI3OnN0YXRpYyBpbnQgYWRkX3BvbGljeShzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqKnN0YXRlcCxcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yOC1cXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcG9saWN5LFxcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtMzAte1xcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjMxOlxcdHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSA9ICpzdGF0ZXA7XFxubmV0L25ldGxpbmsvcG9saWN5LmMtMzItXFx0dW5zaWduZWQgaW50IG9sZF9uX2FsbG9jLCBuX2FsbG9jLCBpO1xcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtNjctLyoqXFxubmV0L25ldGxpbmsvcG9saWN5LmM6Njg6ICogbmV0bGlua19wb2xpY3lfZHVtcF9nZXRfcG9saWN5X2lkeCAtIHJldHJpZXZlIHBvbGljeSBpbmRleFxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTY5LSAqIEBzdGF0ZTogdGhlIHBvbGljeSBkdW1wIHN0YXRlXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy04MS0gKi9cXG5uZXQvbmV0bGluay9wb2xpY3kuYzo4MjppbnQgbmV0bGlua19wb2xpY3lfZHVtcF9nZXRfcG9saWN5X2lkeChzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXFxubmV0L25ldGxpbmsvcG9saWN5LmMtODMtXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwb2xpY3ksXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xMDAtXFxubmV0L25ldGxpbmsvcG9saWN5LmM6MTAxOnN0YXRpYyBzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqYWxsb2Nfc3RhdGUodm9pZClcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xMDIte1xcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjEwMzpcXHRzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGU7XFxubmV0L25ldGxpbmsvcG9saWN5LmMtMTA0LVxcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtMTEzLS8qKlxcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjExNDogKiBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3kgLSBhZGQgYSBwb2xpY3kgdG8gdGhlIGR1bXBcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xMTUtICogQHBzdGF0ZTogc3RhdGUgdG8gYWRkIHRvLCBtYXkgYmUgcmVhbGxvY2F0ZWQsIG11c3QgYmUgJU5VTEwgdGhlIGZpcnN0IHRpbWVcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTEyNS0gKi9cXG5uZXQvbmV0bGluay9wb2xpY3kuYzoxMjY6aW50IG5ldGxpbmtfcG9saWN5X2R1bXBfYWRkX3BvbGljeShzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqKnBzdGF0ZSxcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xMjctXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSxcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTEyOS17XFxubmV0L25ldGxpbmsvcG9saWN5LmM6MTMwOlxcdHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSA9ICpwc3RhdGU7XFxubmV0L25ldGxpbmsvcG9saWN5LmMtMTMxLVxcdHVuc2lnbmVkIGludCBwb2xpY3lfaWR4O1xcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtMTgyLVxcdGlmICghKnBzdGF0ZSlcXG5uZXQvbmV0bGluay9wb2xpY3kuYzoxODM6XFx0XFx0bmV0bGlua19wb2xpY3lfZHVtcF9mcmVlKHN0YXRlKTtcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xODQtXFx0ZWxzZVxcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmM9MTg5PXN0YXRpYyBib29sXFxubmV0L25ldGxpbmsvcG9saWN5LmM6MTkwOm5ldGxpbmtfcG9saWN5X2R1bXBfZmluaXNoZWQoc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlKVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTE5MS17XFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xOTYtLyoqXFxubmV0L25ldGxpbmsvcG9saWN5LmM6MTk3OiAqIG5ldGxpbmtfcG9saWN5X2R1bXBfbG9vcCAtIGR1bXBpbmcgbG9vcCBpbmRpY2F0b3JcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xOTgtICogQHN0YXRlOiB0aGUgcG9saWN5IGR1bXAgc3RhdGVcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIwMy0gKi9cXG5uZXQvbmV0bGluay9wb2xpY3kuYzoyMDQ6Ym9vbCBuZXRsaW5rX3BvbGljeV9kdW1wX2xvb3Aoc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlKVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIwNS17XFxubmV0L25ldGxpbmsvcG9saWN5LmM6MjA2OlxcdHJldHVybiAhbmV0bGlua19wb2xpY3lfZHVtcF9maW5pc2hlZChzdGF0ZSk7XFxubmV0L25ldGxpbmsvcG9saWN5LmMtMjA3LX1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yMDgtXFxubmV0L25ldGxpbmsvcG9saWN5LmM6MjA5OmludCBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZShjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQpXFxubmV0L25ldGxpbmsvcG9saWN5LmMtMjEwLXtcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jPTI1Nz1zdGF0aWMgaW50XFxubmV0L25ldGxpbmsvcG9saWN5LmM6MjU4Ol9fbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyKHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSxcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yNTktXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yNjIte1xcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjI2MzpcXHRpbnQgZXN0aW1hdGUgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZShwdCk7XFxubmV0L25ldGxpbmsvcG9saWN5LmMtMjY0LVxcdGVudW0gbmV0bGlua19hdHRyaWJ1dGVfdHlwZSB0eXBlO1xcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtMjg1LVxcdFxcdCAgICAobmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BPTElDWV9JRFgsXFxubmV0L25ldGxpbmsvcG9saWN5LmM6Mjg2OlxcdFxcdFxcdFxcdCBuZXRsaW5rX3BvbGljeV9kdW1wX2dldF9wb2xpY3lfaWR4KHN0YXRlLFxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTI4Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgcHQtXFx1MDAzZW5lc3RlZF9wb2xpY3ksXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy00MjItLyoqXFxubmV0L25ldGxpbmsvcG9saWN5LmM6NDIzOiAqIG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0ciAtIHdyaXRlIGEgZ2l2ZW4gYXR0cmlidXRlIHBvbGljeVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQyNC0gKiBAc2tiOiB0aGUgbWVzc2FnZSBza2IgdG8gd3JpdGUgdG9cXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQzMS0gKi9cXG5uZXQvbmV0bGluay9wb2xpY3kuYzo0MzI6aW50IG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQzMy1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy00MzUte1xcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjQzNjpcXHRyZXR1cm4gX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoTlVMTCwgc2tiLCBwdCwgbmVzdGF0dHIpO1xcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQzNy19XFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy00MzktLyoqXFxubmV0L25ldGxpbmsvcG9saWN5LmM6NDQwOiAqIG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGUgLSB3cml0ZSBjdXJyZW50IHBvbGljeSBkdW1wIGF0dHJpYnV0ZXNcXG5uZXQvbmV0bGluay9wb2xpY3kuYy00NDEtICogQHNrYjogdGhlIG1lc3NhZ2Ugc2tiIHRvIHdyaXRlIHRvXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy00NDUtICovXFxubmV0L25ldGxpbmsvcG9saWN5LmM6NDQ2OmludCBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGxpbmsvcG9saWN5LmM6NDQ3OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSlcXG5uZXQvbmV0bGluay9wb2xpY3kuYy00NDgte1xcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtNDYyLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjQ2MzpcXHRlcnIgPSBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdGF0ZSwgc2tiLCBwdCwgc3RhdGUtXFx1MDAzZWF0dHJfaWR4KTtcXG5uZXQvbmV0bGluay9wb2xpY3kuYy00NjQtXFx0aWYgKGVyciA9PSAtRU5PREFUQSkge1xcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtNDgyLVxcdGlmIChhZ2Fpbikge1xcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjQ4MzpcXHRcXHRpZiAobmV0bGlua19wb2xpY3lfZHVtcF9maW5pc2hlZChzdGF0ZSkpXFxubmV0L25ldGxpbmsvcG9saWN5LmMtNDg0LVxcdFxcdFxcdHJldHVybiAtRU5PREFUQTtcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQ5NS0vKipcXG5uZXQvbmV0bGluay9wb2xpY3kuYzo0OTY6ICogbmV0bGlua19wb2xpY3lfZHVtcF9mcmVlIC0gZnJlZSBwb2xpY3kgZHVtcCBzdGF0ZVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQ5Ny0gKiBAc3RhdGU6IHRoZSBwb2xpY3kgZHVtcCBzdGF0ZSB0byBmcmVlXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy01MDAtICovXFxubmV0L25ldGxpbmsvcG9saWN5LmM6NTAxOnZvaWQgbmV0bGlua19wb2xpY3lfZHVtcF9mcmVlKHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSlcXG5uZXQvbmV0bGluay9wb2xpY3kuYy01MDIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzoxNC43OTE2NzczNTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODQwMjM3NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiBuZXRsaW5rIHBvbGljeSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L25ldGxpbmsvcG9saWN5LmNgLiBJIHNlZSBpdCdzIHRvdWNoaW5nIGEgZmV3IGtleSBmdW5jdGlvbnM6IGBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZWAsIGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAsIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJgLCBhbmQgYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCBmb3IgZHVtcGluZyBhbmQgd3JpdGluZyBuZXRsaW5rIGF0dHJpYnV0ZSBwb2xpY2llcy5cblxuTG9va2luZyBhdCB0aGUgY2FsbCBncmFwaCwgaXQgbG9va3MgbGlrZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHBpdm90YWwgaW4gZ2VuZXJpYyBuZXRsaW5rJ3MgcG9saWN5IGR1bXBpbmcsIGFjY2Vzc2VkIHRocm91Z2ggYGN0cmxfZHVtcHBvbGljeWAsIGFuZCBhbHNvIGludm9sdmVkIGluIG5ldGxpbmsgQUNLIFRMViBmaWxsaW5nLCBub3RhYmx5IHRocm91Z2ggYG5ldGxpbmtfYWNrX3Rsdl9maWxsYCBhbmQgYG5ldGxpbmtfYWNrX3Rsdl9sZW5gIHZpYSBgTkxNU0dFUlJfQVRUUl9QT0xJQ1lgLiBUaGUgY29ubmVjdGlvbiB0byBgQ1RSTF9DTURfR0VUUE9MSUNZYCBzdWdnZXN0cyB0aGlzIHBvbGljeSBkdW1waW5nIGZ1bmN0aW9uYWxpdHkgaXMgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHdoaWNoIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gRnVydGhlcm1vcmUsIGV4dGFjayBwb2xpY3kgZHVtcGluZyBpcyByZXR1cm5lZCB3aGVuIHRoZSBuZXRsaW5rIG1lc3NhZ2VzIGFyZSBpbnZhbGlkIGR1ZSB0byBhdHRyaWJ1dGVzIHBvbGljeSBjaGVja3MuXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBhbmQgdGhlIHJvbGUgaW4gZXJyb3IgaGFuZGxpbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgYnVpbGQgY29uZmlndXJhdGlvbiBiZXR0ZXIuIEknbGwgbmVlZCB0byBjaGVjayBpZiBgbmV0L25ldGxpbmsvcG9saWN5LmNgIGlzIGFsd2F5cyBjb21waWxlZCBvciBpZiB0aGVyZSBhcmUgS2NvbmZpZyBvcHRpb25zIGdvdmVybmluZyBpdHMgaW5jbHVzaW9uLiBUaGF0J3MgdGhlIG5leHQgc3RlcCDigJMgdGltZSB0byBkaXZlIGludG8gYG5ldC9uZXRsaW5rL01ha2VmaWxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6MTcuNjMxOTIwMTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0bGluay9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIG5ldGxpbmsgZHJpdmVyLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmoteSAgXFx0XFx0XFx0XFx0Oj0gYWZfbmV0bGluay5vIGdlbmV0bGluay5vIHBvbGljeS5vXFxuICAgNzpcXHRcXG4gICA4OlxcdG9iai0kKENPTkZJR19ORVRMSU5LX0RJQUcpXFx0Kz0gbmV0bGlua19kaWFnLm9cXG4gICA5OlxcdG5ldGxpbmtfZGlhZy15XFx0XFx0XFx0Oj0gZGlhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjE3LjYzMTk5ODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDc0NTc1Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZTpcblxuKipBbmFseXppbmcgTmV0bGluayBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgbmV0L25ldGxpbmsvTWFrZWZpbGVgIGFuZCBzZWUgYG9iai15IDo9IGFmX25ldGxpbmsubyBnZW5ldGxpbmsubyBwb2xpY3kub2AuIFRoaXMgdGVsbHMgbWUgdGhhdCBgYWZfbmV0bGluay5vYCwgYGdlbmV0bGluay5vYCwgYW5kIGBwb2xpY3kub2AgYXJlIGdldHRpbmcgYnVpbHQgaW50byB0aGUgbmV0bGluayBtb2R1bGUuIE1ha2VzIHNlbnNlLiBOb3csIHRoZSBjb250ZXh0IGlzIHRoYXQgdGhlIGVudGlyZSBgbmV0L25ldGxpbmsvYCBkaXJlY3RvcnkgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGVuYWJsaW5nIGNvbmRpdGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gYW5kIGNoZWNrIHdoZXJlIHRoaXMgaXMgY29udHJvbGxlZC4gSSBpbW1lZGlhdGVseSBzdXNwZWN0IGl0J3MgdGllZCB0byBgQ09ORklHX05FVGAsIHNpbmNlIHRoYXQncyB0aGUgc3RhbmRhcmQgbmV0d29ya2luZyBvcHRpb24gaW4gdGhlIGtlcm5lbC4gTGV0IG1lIGRvdWJsZSBjaGVjaywgZWl0aGVyIGluIHRoZSBgbmV0L0tjb25maWdgIGZpbGUsIG9yIHBlcmhhcHMgdGhlIGBuZXQvTWFrZWZpbGVgLiBJJ2xsIG9wZW4gdGhvc2UgdXAgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gcmV2ZWFscy4gTXkgaW50dWl0aW9uIHNheXMgYENPTkZJR19ORVRgIGlzIHRoZSBrZXkuIEl0J3MgdGhlIG1vc3QgbGlrZWx5IGRlcGVuZGVuY3kgdGhhdCB3b3VsZCBlbmFibGUgdGhlIGVudGlyZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgYW5kIGJ5IGV4dGVuc2lvbiwgdGhlIG5ldGxpbmsgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NzQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjE5LjcwNjU3NzU0OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgbGludXggbmV0d29ya2luZy5cXG4gICA0OlxcdCNcXG4gICA1OlxcdCMgMiBTZXAgMjAwMCwgQ2hyaXN0b3BoIEhlbGx3aWcgXFx1MDAzY2hjaEBpbmZyYWRlYWQub3JnXFx1MDAzZVxcbiAgIDY6XFx0IyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy5cXG4gICA3OlxcdCNcXG4gICA4OlxcdFxcbiAgIDk6XFx0b2JqLXlcXHRcXHRcXHRcXHQ6PSBkZXZyZXMubyBzb2NrZXQubyBjb3JlL1xcbiAgMTA6XFx0XFxuICAxMTpcXHRvYmotJChDT05GSUdfQ09NUEFUKVxcdFxcdCs9IGNvbXBhdC5vXFxuICAxMjpcXHRcXG4gIDEzOlxcdCMgTExDIGhhcyB0byBiZSBsaW5rZWQgYmVmb3JlIHRoZSBmaWxlcyBpbiBuZXQvODAyL1xcbiAgMTQ6XFx0b2JqLSQoQ09ORklHX0xMQylcXHRcXHQrPSBsbGMvXFxuICAxNTpcXHRvYmoteVxcdFxcdFxcdFxcdCs9IGV0aGVybmV0LyA4MDIvIHNjaGVkLyBuZXRsaW5rLyBicGYvIGV0aHRvb2wvXFxuICAxNjpcXHRvYmotJChDT05GSUdfTkVURklMVEVSKVxcdFxcdCs9IG5ldGZpbHRlci9cXG4gIDE3OlxcdG9iai0kKENPTkZJR19JTkVUKVxcdFxcdCs9IGlwdjQvXFxuICAxODpcXHRvYmotJChDT05GSUdfVExTKVxcdFxcdCs9IHRscy9cXG4gIDE5OlxcdG9iai0kKENPTkZJR19YRlJNKVxcdFxcdCs9IHhmcm0vXFxuICAyMDpcXHRvYmotJChDT05GSUdfVU5JWClcXHRcXHQrPSB1bml4L1xcbiAgMjE6XFx0b2JqLSQoQ09ORklHX0lORVRfUFNQKVxcdFxcdCs9IHBzcC9cXG4gIDIyOlxcdG9iai15XFx0XFx0XFx0XFx0Kz0gaXB2Ni9cXG4gIDIzOlxcdG9iai0kKENPTkZJR19QQUNLRVQpXFx0XFx0Kz0gcGFja2V0L1xcbiAgMjQ6XFx0b2JqLSQoQ09ORklHX05FVF9LRVkpXFx0XFx0Kz0ga2V5L1xcbiAgMjU6XFx0b2JqLSQoQ09ORklHX0JSSURHRSlcXHRcXHQrPSBicmlkZ2UvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjE5LjcwNjY2Mzk0OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDQ5NTY5NDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXRsaW5rIFBvbGljeSBEdW1wIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBuZXRsaW5rL2AgZGlyZWN0b3J5LiBJIHNlZSBpdCdzIGluY2x1ZGVkIHZpYSBgb2JqLXlgIGluIHRoZSBgbmV0L01ha2VmaWxlYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhcyBleHBlY3RlZCwgc2VlbXMgdG8gYmUgYENPTkZJR19ORVRgLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSd2ZSBub3RlZCBhIGZldyBrZXkgb25lczogYG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlYCwgYF9fbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyYCwgYW5kIHRoZSBmdW5jdGlvbnMgY2FsbGluZyB0aGVtLiBTcGVjaWZpY2FsbHksIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJgIHdoaWNoIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlYCBhbmQgYWxzbywgdGhlIGV4cG9ydGVkIGVudHJ5IHBvaW50cyBhcmUgYG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlYCwgYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAsIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlYCBhbmQgYGN0cmxfZHVtcHBvbGljeWAuXG5cbkkgdGhpbmsgdGhlc2UgbG9vayBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciBkZWVwZXIgYW5hbHlzaXMuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlYCwgYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAsIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlYCwgYW5kIGBjdHJsX2R1bXBwb2xpY3lgIGFyZSBhbGwgcmVsZXZhbnQuIFRpbWUgdG8gY2hlY2sgYGN0cmxfZHVtcHBvbGljeWAgaW4gYG5ldC9uZXRsaW5rL2dlbmV0bGluay5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MzEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzoyNC43NTYyMzY0NzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRsaW5rL2dlbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2OTUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2OTU6XFx0XFx0cmV0dXJuIDA7XFxuMTY5NjpcXHRlcnI6XFxuMTY5NzpcXHRcXHRnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7XFxuMTY5ODpcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuMTY5OTpcXHR9XFxuMTcwMDpcXHRcXG4xNzAxOlxcdHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4xNzAyOlxcdHtcXG4xNzAzOlxcdFxcdHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCAqY3R4ID0gKHZvaWQgKiljYi1cXHUwMDNlY3R4O1xcbjE3MDQ6XFx0XFx0dm9pZCAqaGRyO1xcbjE3MDU6XFx0XFxuMTcwNjpcXHRcXHRpZiAoY3R4LVxcdTAwM2VkdW1wX21hcCkge1xcbjE3MDc6XFx0XFx0XFx0aWYgKGN0eC1cXHUwMDNlc2luZ2xlX29wKSB7XFxuMTcwODpcXHRcXHRcXHRcXHRzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZG9pdCwgZHVtcGl0O1xcbjE3MDk6XFx0XFxuMTcxMDpcXHRcXHRcXHRcXHRpZiAoV0FSTl9PTihnZW5sX2dldF9jbWRfYm90aChjdHgtXFx1MDAzZW9wLCBjdHgtXFx1MDAzZXJ0LFxcbjE3MTE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmRvaXQsIFxcdTAwMjZkdW1waXQpKSlcXG4xNzEyOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjE3MTM6XFx0XFxuMTcxNDpcXHRcXHRcXHRcXHRpZiAoY3RybF9kdW1wcG9saWN5X3B1dF9vcChza2IsIGNiLCBcXHUwMDI2ZG9pdCwgXFx1MDAyNmR1bXBpdCkpXFxuMTcxNTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMTcxNjpcXHRcXG4xNzE3OlxcdFxcdFxcdFxcdC8qIGRvbmUgd2l0aCB0aGUgcGVyLW9wIHBvbGljeSBpbmRleCBsaXN0ICovXFxuMTcxODpcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZWR1bXBfbWFwID0gMDtcXG4xNzE5OlxcdFxcdFxcdH1cXG4xNzIwOlxcdFxcbjE3MjE6XFx0XFx0XFx0d2hpbGUgKGN0eC1cXHUwMDNlZHVtcF9tYXApIHtcXG4xNzIyOlxcdFxcdFxcdFxcdGlmIChjdHJsX2R1bXBwb2xpY3lfcHV0X29wKHNrYiwgY2IsXFxuMTcyMzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2Y3R4LVxcdTAwM2VvcF9pdGVyLVxcdTAwM2Vkb2l0LFxcbjE3MjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmN0eC1cXHUwMDNlb3BfaXRlci1cXHUwMDNlZHVtcGl0KSlcXG4xNzI1OlxcdFxcdFxcdFxcdFxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4xNzI2OlxcdFxcbjE3Mjc6XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VkdW1wX21hcCA9IGdlbmxfb3BfaXRlcl9uZXh0KGN0eC1cXHUwMDNlb3BfaXRlcik7XFxuMTcyODpcXHRcXHRcXHR9XFxuMTcyOTpcXHRcXHR9XFxuMTczMDpcXHRcXG4xNzMxOlxcdFxcdHdoaWxlIChuZXRsaW5rX3BvbGljeV9kdW1wX2xvb3AoY3R4LVxcdTAwM2VzdGF0ZSkpIHtcXG4xNzMyOlxcdFxcdFxcdHN0cnVjdCBubGF0dHIgKm5lc3Q7XFxuMTczMzpcXHRcXG4xNzM0OlxcdFxcdFxcdGhkciA9IGN0cmxfZHVtcHBvbGljeV9wcmVwKHNrYiwgY2IpO1xcbjE3MzU6XFx0XFx0XFx0aWYgKCFoZHIpXFxuMTczNjpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4xNzM3OlxcdFxcbjE3Mzg6XFx0XFx0XFx0bmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgQ1RSTF9BVFRSX1BPTElDWSk7XFxuMTczOTpcXHRcXHRcXHRpZiAoIW5lc3QpXFxuMTc0MDpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4xNzQxOlxcdFxcbjE3NDI6XFx0XFx0XFx0aWYgKG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGUoc2tiLCBjdHgtXFx1MDAzZXN0YXRlKSlcXG4xNzQzOlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjE3NDQ6XFx0XFxuMTc0NTpcXHRcXHRcXHRubGFfbmVzdF9lbmQoc2tiLCBuZXN0KTtcXG4xNzQ2OlxcdFxcbjE3NDc6XFx0XFx0XFx0Z2VubG1zZ19lbmQoc2tiLCBoZHIpO1xcbjE3NDg6XFx0XFx0fVxcbjE3NDk6XFx0XFxuMTc1MDpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMTc1MTpcXHRcXG4xNzUyOlxcdG5sYV9wdXRfZmFpbHVyZTpcXG4xNzUzOlxcdFxcdGdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTtcXG4xNzU0OlxcdFxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4xNzU1OlxcdH1cXG4xNzU2OlxcdFxcbjE3NTc6XFx0c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuMTc1ODpcXHR7XFxuMTc1OTpcXHRcXHRzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHggKmN0eCA9ICh2b2lkICopY2ItXFx1MDAzZWN0eDtcXG4xNzYwOlxcdFxcbjE3NjE6XFx0XFx0a2ZyZWUoY3R4LVxcdTAwM2VvcF9pdGVyKTtcXG4xNzYyOlxcdFxcdG5ldGxpbmtfcG9saWN5X2R1bXBfZnJlZShjdHgtXFx1MDAzZXN0YXRlKTtcXG4xNzYzOlxcdFxcdHJldHVybiAwO1xcbjE3NjQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzoyNC43NTYzNzU1NjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyOTQ3MDc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBmb3IgTkxBX0JFIFBvbGljaWVzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gc2VlIGlmIHdlIGhhdmUgYW55IGBOTEFfQkUxNmAgb3IgYE5MQV9CRTMyYCBwb2xpY2llcyBsdXJraW5nIGluIHRoZSBrZXJuZWwgdGhhdCBtaWdodCBiZSByaXBlIGZvciBkdW1waW5nLiBJJ2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgZ3JlcC4gSXQncyB0aGUgcXVpY2tlc3Qgd2F5IHRvIGdldCBhIGJhc2VsaW5lIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwncyBzb3VyY2UuIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzOyBhIHNpbXBsZSBzZWFyY2ggd2lsbCB0ZWxsIG1lIGlmIHRob3NlIHBvbGljaWVzIGV2ZW4gZXhpc3QgaW4gdGhlIGNvZGViYXNlLiBGcm9tIHRoZXJlLCBJIGNhbiBkZWNpZGUgaG93IHRvIHByb2NlZWQgd2l0aCB0aGUgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTAxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzoyNi42ODU4NTE4OTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1ODc4NDkxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkxBX0JFKDE2fDMyKVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9nZW5ldmUuYz0xODcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBnZW5ldmVfcG9saWN5W0lGTEFfR0VORVZFX01BWCArIDFdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTg4OS1cXHRbSUZMQV9HRU5FVkVfR1JPX0hJTlRdXFx0XFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxODkwOlxcdFtJRkxBX0dFTkVWRV9MT0NBTF1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfQkUzMiB9LFxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE4OTEtXFx0W0lGTEFfR0VORVZFX0xPQ0FMNl1cXHRcXHQ9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSxcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYz02Nj1jb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBvdnBuX3BlZXJfbmxfcG9saWN5W09WUE5fQV9QRUVSX1RYX0lEICsgMV0gPSB7XFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTY3LVxcdFtPVlBOX0FfUEVFUl9JRF0gPSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1UzMiwgXFx1MDAyNm92cG5fYV9wZWVyX2lkX3JhbmdlKSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM6Njg6XFx0W09WUE5fQV9QRUVSX1JFTU9URV9JUFY0XSA9IHsgLnR5cGUgPSBOTEFfQkUzMiwgfSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtNjktXFx0W09WUE5fQV9QRUVSX1JFTU9URV9JUFY2XSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKDE2KSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtNzAtXFx0W09WUE5fQV9QRUVSX1JFTU9URV9JUFY2X1NDT1BFX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzo3MTpcXHRbT1ZQTl9BX1BFRVJfUkVNT1RFX1BPUlRdID0gTkxBX1BPTElDWV9NSU4oTkxBX0JFMTYsIDEpLFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy03Mi1cXHRbT1ZQTl9BX1BFRVJfU09DS0VUXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy03My1cXHRbT1ZQTl9BX1BFRVJfU09DS0VUX05FVE5TSURdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jOjc0OlxcdFtPVlBOX0FfUEVFUl9WUE5fSVBWNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTc1LVxcdFtPVlBOX0FfUEVFUl9WUE5fSVBWNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jOjc2OlxcdFtPVlBOX0FfUEVFUl9MT0NBTF9JUFY0XSA9IHsgLnR5cGUgPSBOTEFfQkUzMiwgfSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtNzctXFx0W09WUE5fQV9QRUVSX0xPQ0FMX0lQVjZdID0gTkxBX1BPTElDWV9FWEFDVF9MRU4oMTYpLFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzo3ODpcXHRbT1ZQTl9BX1BFRVJfTE9DQUxfUE9SVF0gPSBOTEFfUE9MSUNZX01JTihOTEFfQkUxNiwgMSksXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTc5LVxcdFtPVlBOX0FfUEVFUl9LRUVQQUxJVkVfSU5URVJWQUxdID0gTkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VMzIsIFxcdTAwMjZvdnBuX2FfcGVlcl9rZWVwYWxpdmVfaW50ZXJ2YWxfcmFuZ2UpLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jPTk3PWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG92cG5fcGVlcl9uZXdfaW5wdXRfbmxfcG9saWN5W09WUE5fQV9QRUVSX1RYX0lEICsgMV0gPSB7XFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTk4LVxcdFtPVlBOX0FfUEVFUl9JRF0gPSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1UzMiwgXFx1MDAyNm92cG5fYV9wZWVyX2lkX3JhbmdlKSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM6OTk6XFx0W09WUE5fQV9QRUVSX1JFTU9URV9JUFY0XSA9IHsgLnR5cGUgPSBOTEFfQkUzMiwgfSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtMTAwLVxcdFtPVlBOX0FfUEVFUl9SRU1PVEVfSVBWNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTEwMS1cXHRbT1ZQTl9BX1BFRVJfUkVNT1RFX0lQVjZfU0NPUEVfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jOjEwMjpcXHRbT1ZQTl9BX1BFRVJfUkVNT1RFX1BPUlRdID0gTkxBX1BPTElDWV9NSU4oTkxBX0JFMTYsIDEpLFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy0xMDMtXFx0W09WUE5fQV9QRUVSX1NPQ0tFVF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM6MTA0OlxcdFtPVlBOX0FfUEVFUl9WUE5fSVBWNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTEwNS1cXHRbT1ZQTl9BX1BFRVJfVlBOX0lQVjZdID0gTkxBX1BPTElDWV9FWEFDVF9MRU4oMTYpLFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzoxMDY6XFx0W09WUE5fQV9QRUVSX0xPQ0FMX0lQVjRdID0geyAudHlwZSA9IE5MQV9CRTMyLCB9LFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy0xMDctXFx0W09WUE5fQV9QRUVSX0xPQ0FMX0lQVjZdID0gTkxBX1BPTElDWV9FWEFDVF9MRU4oMTYpLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jPTExMz1jb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBvdnBuX3BlZXJfc2V0X2lucHV0X25sX3BvbGljeVtPVlBOX0FfUEVFUl9UWF9JRCArIDFdID0ge1xcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy0xMTQtXFx0W09WUE5fQV9QRUVSX0lEXSA9IE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCBcXHUwMDI2b3Zwbl9hX3BlZXJfaWRfcmFuZ2UpLFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzoxMTU6XFx0W09WUE5fQV9QRUVSX1JFTU9URV9JUFY0XSA9IHsgLnR5cGUgPSBOTEFfQkUzMiwgfSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtMTE2LVxcdFtPVlBOX0FfUEVFUl9SRU1PVEVfSVBWNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTExNy1cXHRbT1ZQTl9BX1BFRVJfUkVNT1RFX0lQVjZfU0NPUEVfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jOjExODpcXHRbT1ZQTl9BX1BFRVJfUkVNT1RFX1BPUlRdID0gTkxBX1BPTElDWV9NSU4oTkxBX0JFMTYsIDEpLFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzoxMTk6XFx0W09WUE5fQV9QRUVSX1ZQTl9JUFY0XSA9IHsgLnR5cGUgPSBOTEFfQkUzMiwgfSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtMTIwLVxcdFtPVlBOX0FfUEVFUl9WUE5fSVBWNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jOjEyMTpcXHRbT1ZQTl9BX1BFRVJfTE9DQUxfSVBWNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTEyMi1cXHRbT1ZQTl9BX1BFRVJfTE9DQUxfSVBWNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg9MTc3PWVudW0ge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTE5NS1cXHROTEFfUkVKRUNULFxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDoxOTY6XFx0TkxBX0JFMTYsXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oOjE5NzpcXHROTEFfQkUzMixcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtMTk4LVxcdE5MQV9TSU5ULFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oPTIxMz1lbnVtIG5sYV9wb2xpY3lfdmFsaWRhdGlvbiB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtMjUwLSAqICAgIE5MQV9TMzIsIE5MQV9TNjQsXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oOjI1MTogKiAgICBOTEFfQkUxNiwgTkxBX0JFMzIsXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTI1Mi0gKiAgICBOTEFfTVNFQ1MgICAgICAgICAgICBMZWF2aW5nIHRoZSBsZW5ndGggZmllbGQgemVybyB3aWxsIHZlcmlmeSB0aGVcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0yODItICogICAgTkxBX1U2NCxcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6MjgzOiAqICAgIE5MQV9CRTE2LFxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDoyODQ6ICogICAgTkxBX0JFMzIsXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTI4NS0gKiAgICBOTEFfU0lOVCxcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaD0zNDY9c3RydWN0IG5sYV9wb2xpY3kge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTQwNS1cXHQgdHAgPT0gTkxBX1U2NCB8fCB0cCA9PSBOTEFfVUlOVCB8fFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6NDA2OlxcdCB0cCA9PSBOTEFfQkUxNiB8fCB0cCA9PSBOTEFfQkUzMilcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtNDA3LSNkZWZpbmUgX19OTEFfSVNfU0lOVF9UWVBFKHRwKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmxpYi9ubGF0dHIuYz0yND1zdGF0aWMgY29uc3QgdTggbmxhX2F0dHJfbGVuW05MQV9UWVBFX01BWCsxXSA9IHtcXG4tLVxcbmxpYi9ubGF0dHIuYy0zMi1cXHRbTkxBX1M2NF1cXHQ9IHNpemVvZihzNjQpLFxcbmxpYi9ubGF0dHIuYzozMzpcXHRbTkxBX0JFMTZdXFx0PSBzaXplb2YoX19iZTE2KSxcXG5saWIvbmxhdHRyLmM6MzQ6XFx0W05MQV9CRTMyXVxcdD0gc2l6ZW9mKF9fYmUzMiksXFxubGliL25sYXR0ci5jLTM1LX07XFxuLS1cXG5saWIvbmxhdHRyLmM9Mzc9c3RhdGljIGNvbnN0IHU4IG5sYV9hdHRyX21pbmxlbltOTEFfVFlQRV9NQVgrMV0gPSB7XFxuLS1cXG5saWIvbmxhdHRyLmMtNDctXFx0W05MQV9TNjRdXFx0PSBzaXplb2YoczY0KSxcXG5saWIvbmxhdHRyLmM6NDg6XFx0W05MQV9CRTE2XVxcdD0gc2l6ZW9mKF9fYmUxNiksXFxubGliL25sYXR0ci5jOjQ5OlxcdFtOTEFfQkUzMl1cXHQ9IHNpemVvZihfX2JlMzIpLFxcbmxpYi9ubGF0dHIuYy01MC19O1xcbi0tXFxubGliL25sYXR0ci5jPTExOT12b2lkIG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxcbi0tXFxubGliL25sYXR0ci5jLTEzMS1cXHRjYXNlIE5MQV9VMTY6XFxubGliL25sYXR0ci5jOjEzMjpcXHRjYXNlIE5MQV9CRTE2OlxcbmxpYi9ubGF0dHIuYy0xMzMtXFx0Y2FzZSBOTEFfQklOQVJZOlxcbi0tXFxubGliL25sYXR0ci5jLTEzNi1cXHRjYXNlIE5MQV9VMzI6XFxubGliL25sYXR0ci5jOjEzNzpcXHRjYXNlIE5MQV9CRTMyOlxcbmxpYi9ubGF0dHIuYy0xMzgtXFx0XFx0cmFuZ2UtXFx1MDAzZW1heCA9IFUzMl9NQVg7XFxuLS1cXG5saWIvbmxhdHRyLmM9MTcwPXN0YXRpYyBpbnQgbmxhX3ZhbGlkYXRlX3JhbmdlX3Vuc2lnbmVkKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdCxcXG4tLVxcbmxpYi9ubGF0dHIuYy0xOTktXFx0XFx0YnJlYWs7XFxubGliL25sYXR0ci5jOjIwMDpcXHRjYXNlIE5MQV9CRTE2OlxcbmxpYi9ubGF0dHIuYy0yMDEtXFx0XFx0dmFsdWUgPSBudG9ocyhubGFfZ2V0X2JlMTYobmxhKSk7XFxubGliL25sYXR0ci5jLTIwMi1cXHRcXHRicmVhaztcXG5saWIvbmxhdHRyLmM6MjAzOlxcdGNhc2UgTkxBX0JFMzI6XFxubGliL25sYXR0ci5jLTIwNC1cXHRcXHR2YWx1ZSA9IG50b2hsKG5sYV9nZXRfYmUzMihubGEpKTtcXG4tLVxcbmxpYi9ubGF0dHIuYz0zMjU9c3RhdGljIGludCBubGFfdmFsaWRhdGVfaW50X3JhbmdlKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdCxcXG4tLVxcbmxpYi9ubGF0dHIuYy0zMzctXFx0Y2FzZSBOTEFfQklOQVJZOlxcbmxpYi9ubGF0dHIuYzozMzg6XFx0Y2FzZSBOTEFfQkUxNjpcXG5saWIvbmxhdHRyLmM6MzM5OlxcdGNhc2UgTkxBX0JFMzI6XFxubGliL25sYXR0ci5jLTM0MC1cXHRcXHRyZXR1cm4gbmxhX3ZhbGlkYXRlX3JhbmdlX3Vuc2lnbmVkKHB0LCBubGEsIGV4dGFjaywgdmFsaWRhdGUpO1xcbi0tXFxubGliL25sYXR0ci5jPTM1Mz1zdGF0aWMgaW50IG5sYV92YWxpZGF0ZV9tYXNrKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdCxcXG4tLVxcbmxpYi9ubGF0dHIuYy0zNzQtXFx0XFx0YnJlYWs7XFxubGliL25sYXR0ci5jOjM3NTpcXHRjYXNlIE5MQV9CRTE2OlxcbmxpYi9ubGF0dHIuYy0zNzYtXFx0XFx0dmFsdWUgPSBudG9ocyhubGFfZ2V0X2JlMTYobmxhKSk7XFxubGliL25sYXR0ci5jLTM3Ny1cXHRcXHRicmVhaztcXG5saWIvbmxhdHRyLmM6Mzc4OlxcdGNhc2UgTkxBX0JFMzI6XFxubGliL25sYXR0ci5jLTM3OS1cXHRcXHR2YWx1ZSA9IG50b2hsKG5sYV9nZXRfYmUzMihubGEpKTtcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTg0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZmliX3J1bGVfcG9saWN5W0ZSQV9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTg2OC1cXHRbRlJBX0RTQ1BdXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIElORVRfRFNDUF9NQVNLIFxcdTAwM2VcXHUwMDNlIDIpLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjg2OTpcXHRbRlJBX0ZMT1dMQUJFTF0gPSB7IC50eXBlID0gTkxBX0JFMzIgfSxcXG5uZXQvY29yZS9maWJfcnVsZXMuYzo4NzA6XFx0W0ZSQV9GTE9XTEFCRUxfTUFTS10gPSB7IC50eXBlID0gTkxBX0JFMzIgfSxcXG5uZXQvY29yZS9maWJfcnVsZXMuYy04NzEtXFx0W0ZSQV9TUE9SVF9NQVNLXSA9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXFxuLS1cXG5uZXQvaXB2NC9mb3VfbmwuYz0xNT1jb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBmb3VfbmxfcG9saWN5W0ZPVV9BVFRSX0lGSU5ERVggKyAxXSA9IHtcXG5uZXQvaXB2NC9mb3VfbmwuYzoxNjpcXHRbRk9VX0FUVFJfUE9SVF0gPSB7IC50eXBlID0gTkxBX0JFMTYsIH0sXFxubmV0L2lwdjQvZm91X25sLmMtMTctXFx0W0ZPVV9BVFRSX0FGXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sXFxuLS1cXG5uZXQvaXB2NC9mb3VfbmwuYy0yMC1cXHRbRk9VX0FUVFJfUkVNQ1NVTV9OT1BBUlRJQUxdID0geyAudHlwZSA9IE5MQV9GTEFHLCB9LFxcbm5ldC9pcHY0L2ZvdV9ubC5jOjIxOlxcdFtGT1VfQVRUUl9MT0NBTF9WNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXFxubmV0L2lwdjQvZm91X25sLmMtMjItXFx0W0ZPVV9BVFRSX0xPQ0FMX1Y2XSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKDE2KSxcXG5uZXQvaXB2NC9mb3VfbmwuYzoyMzpcXHRbRk9VX0FUVFJfUEVFUl9WNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXFxubmV0L2lwdjQvZm91X25sLmMtMjQtXFx0W0ZPVV9BVFRSX1BFRVJfVjZdID0gTkxBX1BPTElDWV9FWEFDVF9MRU4oMTYpLFxcbm5ldC9pcHY0L2ZvdV9ubC5jOjI1OlxcdFtGT1VfQVRUUl9QRUVSX1BPUlRdID0geyAudHlwZSA9IE5MQV9CRTE2LCB9LFxcbm5ldC9pcHY0L2ZvdV9ubC5jLTI2LVxcdFtGT1VfQVRUUl9JRklOREVYXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jPTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBydG1fbmhfcG9saWN5X25ld1tdID0ge1xcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTQxLVxcdFtOSEFfRkRCXVxcdFxcdD0geyAudHlwZSA9IE5MQV9GTEFHIH0sXFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyOlxcdFtOSEFfRFNUX1BPUlRdXFx0XFx0PSBOTEFfUE9MSUNZX01JTihOTEFfQkUxNiwgMSksXFxubmV0L2lwdjQvbmV4dGhvcC5jLTQzLVxcdFtOSEFfUkVTX0dST1VQXVxcdFxcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRtX2lwdjZfcG9saWN5W1JUQV9NQVgrMV0gPSB7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTUxNDQtXFx0W1JUQV9OSF9JRF1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxubmV0L2lwdjYvcm91dGUuYzo1MTQ1OlxcdFtSVEFfRkxPV0xBQkVMXVxcdFxcdD0geyAudHlwZSA9IE5MQV9CRTMyIH0sXFxubmV0L2lwdjYvcm91dGUuYy01MTQ2LX07XFxuLS1cXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmM9MTU9Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbXB0Y3BfcG1fYWRkcmVzc19ubF9wb2xpY3lbTVBUQ1BfUE1fQUREUl9BVFRSX0lGX0lEWCArIDFdID0ge1xcbi0tXFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5jLTE3LVxcdFtNUFRDUF9QTV9BRERSX0FUVFJfSURdID0geyAudHlwZSA9IE5MQV9VOCwgfSxcXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmM6MTg6XFx0W01QVENQX1BNX0FERFJfQVRUUl9BRERSNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5jLTE5LVxcdFtNUFRDUF9QTV9BRERSX0FUVFJfQUREUjZdID0gTkxBX1BPTElDWV9FWEFDVF9MRU4oMTYpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTI2MTU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV4cF9ubGFfcG9saWN5W0NUQV9FWFBFQ1RfTUFYKzFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI2MjMtXFx0W0NUQV9FWFBFQ1RfWk9ORV1cXHQ9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjI2MjQ6XFx0W0NUQV9FWFBFQ1RfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GX0NUX0VYUEVDVF9NQVNLKSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjYyNS1cXHRbQ1RBX0VYUEVDVF9DTEFTU11cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzQ3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXhwX25hdF9ubGFfcG9saWN5W0NUQV9FWFBFQ1RfTkFUX01BWCsxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MzQ4MDpcXHRbQ1RBX0VYUEVDVF9OQVRfRElSXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIElQX0NUX0RJUl9SRVBMWSksXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0ODEtXFx0W0NUQV9FWFBFQ1RfTkFUX1RVUExFXVxcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF90YWJsZV9wb2xpY3lbTkZUQV9UQUJMRV9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTUtXFx0XFx0XFx0XFx0ICAgIC5sZW4gPSBORlRfVEFCTEVfTUFYTkFNRUxFTiAtIDEgfSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTU2OlxcdFtORlRBX1RBQkxFX0ZMQUdTXVxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfVEFCTEVfRl9NQVNLKSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTU3LVxcdFtORlRBX1RBQkxFX0hBTkRMRV1cXHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xOTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfY2hhaW5fcG9saWN5W05GVEFfQ0hBSU5fTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTI4LVxcdFtORlRBX0NIQUlOX0NPVU5URVJTXVxcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxOTI5OlxcdFtORlRBX0NIQUlOX0ZMQUdTXVxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfQ0hBSU5fRkxBR1MpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5MzAtXFx0W05GVEFfQ0hBSU5fSURdXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDczNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3NldF9wb2xpY3lbTkZUQV9TRVRfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NzQxLVxcdFxcdFxcdFxcdFxcdCAgICAubGVuID0gTkZUX1NFVF9NQVhOQU1FTEVOIC0gMSB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQ3NDI6XFx0W05GVEFfU0VUX0ZMQUdTXVxcdFxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ3NDMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBORlRfU0VUX0FOT05ZTU9VUyB8XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02MDgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfc2V0X2VsZW1fcG9saWN5W05GVEFfU0VUX0VMRU1fTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02MDgyLVxcdFtORlRBX1NFVF9FTEVNX0RBVEFdXFx0XFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjYwODM6XFx0W05GVEFfU0VUX0VMRU1fRkxBR1NdXFx0XFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9TRVRfRUxFTV9JTlRFUlZBTF9FTkQgfFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTYwODQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIE5GVF9TRVRfRUxFTV9DQVRDSEFMTCksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04ODA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfZmxvd3RhYmxlX3BvbGljeVtORlRBX0ZMT1dUQUJMRV9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg4MTUtXFx0W05GVEFfRkxPV1RBQkxFX0hBTkRMRV1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODgxNjpcXHRbTkZUQV9GTE9XVEFCTEVfRkxBR1NdXFx0XFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9GTE9XVEFCTEVfTUFTSyksXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODgxNy19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5jPTM3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9hY2N0X3BvbGljeVtORkFDQ1RfTUFYKzFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5jLTM3NS1cXHRbTkZBQ0NUX1BLVFNdID0geyAudHlwZSA9IE5MQV9VNjQgfSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmM6Mzc2OlxcdFtORkFDQ1RfRkxBR1NdID0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORkFDQ1RfRl9RVU9UQSksXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5jLTM3Ny1cXHRbTkZBQ0NUX1FVT1RBXSA9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZm5sX2N0aGVscGVyX3R1cGxlX3BvbFtORkNUSF9UVVBMRV9NQVgrMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3MDpcXHRbTkZDVEhfVFVQTEVfTDNQUk9UT05VTV0gPSBOTEFfUE9MSUNZX01BWChOTEFfQkUxNiwgTkZQUk9UT19JUFY2KSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTcxLVxcdFtORkNUSF9UVVBMRV9MNFBST1RPTlVNXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTE3OD1uZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lfc2V0W05GQ1RIX1BPTElDWV9TRVRfTUFYKzFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTc5OlxcdFtORkNUSF9QT0xJQ1lfU0VUX05VTV0gPSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZfQ1RfTUFYX0VYUEVDVF9DTEFTU0VTKSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE4MC19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZm5sX2hvb2tfbmxhX3BvbGljeVtORk5MQV9IT09LX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzoyNzpcXHRbTkZOTEFfSE9PS19IT09LTlVNXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTI4LVxcdFtORk5MQV9IT09LX1BSSU9SSVRZXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jPTkwMD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ1bGFfY2ZnX3BvbGljeVtORlVMQV9DRkdfTUFYKzFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtOTA1LVxcdFtORlVMQV9DRkdfTkxCVUZTSVpdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jOjkwNjpcXHRbTkZVTEFfQ0ZHX0ZMQUdTXVxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTE2LCBORlVMTkxfQ0ZHX0ZfU0VRIHxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy05MDctXFx0XFx0XFx0XFx0XFx0XFx0ICBORlVMTkxfQ0ZHX0ZfU0VRX0dMT0JBTCB8XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE4NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mcWFfY2ZnX3BvbGljeVtORlFBX0NGR19NQVgrMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE4NjItXFx0W05GUUFfQ0ZHX01BU0tdXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTg2MzpcXHRbTkZRQV9DRkdfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GUUFfQ0ZHX0ZfTUFYIC0gMSksXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xODY0LX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmM9MTMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfYml0d2lzZV9wb2xpY3lbTkZUQV9CSVRXSVNFX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYzoxMzI6XFx0W05GVEFfQklUV0lTRV9TUkVHXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYzoxMzM6XFx0W05GVEFfQklUV0lTRV9TUkVHMl1cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmM6MTM0OlxcdFtORlRBX0JJVFdJU0VfRFJFR11cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmMtMTM1LVxcdFtORlRBX0JJVFdJU0VfTEVOXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYy0xMzctXFx0W05GVEFfQklUV0lTRV9YT1JdXFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYzoxMzg6XFx0W05GVEFfQklUV0lTRV9PUF1cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYy0xMzktXFx0W05GVEFfQklUV0lTRV9EQVRBXVxcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2J5dGVvcmRlci5jPTc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfYnl0ZW9yZGVyX3BvbGljeVtORlRBX0JZVEVPUkRFUl9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9ieXRlb3JkZXIuYzo3NjpcXHRbTkZUQV9CWVRFT1JERVJfU1JFR11cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9ieXRlb3JkZXIuYzo3NzpcXHRbTkZUQV9CWVRFT1JERVJfRFJFR11cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9ieXRlb3JkZXIuYzo3ODpcXHRbTkZUQV9CWVRFT1JERVJfT1BdXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9ieXRlb3JkZXIuYzo3OTpcXHRbTkZUQV9CWVRFT1JERVJfTEVOXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXFxubmV0L25ldGZpbHRlci9uZnRfYnl0ZW9yZGVyLmM6ODA6XFx0W05GVEFfQllURU9SREVSX1NJWkVdXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9ieXRlb3JkZXIuYy04MS19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM9NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9jbXBfcG9saWN5W05GVEFfQ01QX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jOjY3OlxcdFtORlRBX0NNUF9TUkVHXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTY4LVxcdFtORlRBX0NNUF9PUF1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYz0xMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF90YXJnZXRfcG9saWN5W05GVEFfVEFSR0VUX01BWCArIDFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMtMTM4LVxcdFxcdFxcdFxcdCAgICAubGVuID0gWFRfRVhURU5TSU9OX01BWE5BTUVMRU4sIH0sXFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmM6MTM5OlxcdFtORlRBX1RBUkdFVF9SRVZdXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy0xNDAtXFx0W05GVEFfVEFSR0VUX0lORk9dXFx0PSB7IC50eXBlID0gTkxBX0JJTkFSWSB9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmM9MTk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfcnVsZV9jb21wYXRfcG9saWN5W05GVEFfUlVMRV9DT01QQVRfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMtMTk3LVxcdFtORlRBX1JVTEVfQ09NUEFUX1BST1RPXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYzoxOTg6XFx0W05GVEFfUlVMRV9DT01QQVRfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9SVUxFX0NPTVBBVF9GX01BU0spLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jLTE5OS19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmM9NDYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfbWF0Y2hfcG9saWN5W05GVEFfTUFUQ0hfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy00NjMtXFx0XFx0XFx0XFx0ICAgIC5sZW4gPSBYVF9FWFRFTlNJT05fTUFYTkFNRUxFTiB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jOjQ2NDpcXHRbTkZUQV9NQVRDSF9SRVZdXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy00NjUtXFx0W05GVEFfTUFUQ0hfSU5GT11cXHQ9IHsgLnR5cGUgPSBOTEFfQklOQVJZIH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYz03OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mbmxfY29tcGF0X3BvbGljeV9nZXRbTkZUQV9DT01QQVRfTUFYKzFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMtNzk5LVxcdFxcdFxcdFxcdCAgICAubGVuID0gTkZUX0NPTVBBVF9OQU1FX01BWC0xIH0sXFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmM6ODAwOlxcdFtORlRBX0NPTVBBVF9SRVZdXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy04MDEtXFx0W05GVEFfQ09NUEFUX1RZUEVdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmM9MTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfY29ubmxpbWl0X3BvbGljeVtORlRBX0NPTk5MSU1JVF9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYy0xNjEtXFx0W05GVEFfQ09OTkxJTUlUX0NPVU5UXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYzoxNjI6XFx0W05GVEFfQ09OTkxJTUlUX0ZMQUdTXVxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfQ09OTkxJTUlUX0ZfSU5WKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYy0xNjMtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MzM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfY3RfcG9saWN5W05GVEFfQ1RfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzozMzc6XFx0W05GVEFfQ1RfRFJFR11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjMzODpcXHRbTkZUQV9DVF9LRVldXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTMzOS1cXHRbTkZUQV9DVF9ESVJFQ1RJT05dXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIElQX0NUX0RJUl9SRVBMWSksXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzozNDA6XFx0W05GVEFfQ1RfU1JFR11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTM0MS19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmM9MTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfZHluc2V0X3BvbGljeVtORlRBX0RZTlNFVF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTE2MS1cXHRbTkZUQV9EWU5TRVRfU0VUX0lEXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYzoxNjI6XFx0W05GVEFfRFlOU0VUX09QXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtMTYzLVxcdFtORlRBX0RZTlNFVF9TUkVHX0tFWV1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYy0xNjYtXFx0W05GVEFfRFlOU0VUX0VYUFJdXFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jOjE2NzpcXHRbTkZUQV9EWU5TRVRfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9EWU5TRVRfRl9JTlYgfFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTE2OC1cXHRcXHRcXHRcXHRcXHRcXHQgIE5GVF9EWU5TRVRfRl9FWFBSKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2V4dGhkci5jPTQ4OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2V4dGhkcl9wb2xpY3lbTkZUQV9FWFRIRFJfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZnRfZXh0aGRyLmM6NDg5OlxcdFtORlRBX0VYVEhEUl9EUkVHXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2V4dGhkci5jLTQ5MC1cXHRbTkZUQV9FWFRIRFJfVFlQRV1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTggfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9leHRoZHIuYy00OTEtXFx0W05GVEFfRVhUSERSX09GRlNFVF1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxubmV0L25ldGZpbHRlci9uZnRfZXh0aGRyLmM6NDkyOlxcdFtORlRBX0VYVEhEUl9MRU5dXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9leHRoZHIuYzo0OTM6XFx0W05GVEFfRVhUSERSX0ZMQUdTXVxcdFxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfRVhUSERSX0ZfUFJFU0VOVCksXFxubmV0L25ldGZpbHRlci9uZnRfZXh0aGRyLmM6NDk0OlxcdFtORlRBX0VYVEhEUl9PUF1cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2V4dGhkci5jOjQ5NTpcXHRbTkZUQV9FWFRIRFJfU1JFR11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9leHRoZHIuYy00OTYtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jPTIxPWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9maWJfcG9saWN5W05GVEFfRklCX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jOjIyOlxcdFtORlRBX0ZJQl9EUkVHXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jLTIzLVxcdFtORlRBX0ZJQl9SRVNVTFRdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jLTI0LVxcdFtORlRBX0ZJQl9GTEFHU11cXHQ9XFxubmV0L25ldGZpbHRlci9uZnRfZmliLmM6MjU6XFx0XFx0TkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRBX0ZJQl9GX0FMTCksXFxubmV0L25ldGZpbHRlci9uZnRfZmliLmMtMjYtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYz00MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2Z3ZF9uZXRkZXZfcG9saWN5W05GVEFfRldEX01BWCArIDFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jLTQyLVxcdFtORlRBX0ZXRF9TUkVHX0FERFJdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYzo0MzpcXHRbTkZUQV9GV0RfTkZQUk9UT11cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYy00NC19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfaGFzaC5jPTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfaGFzaF9wb2xpY3lbTkZUQV9IQVNIX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2hhc2guYzo2MTpcXHRbTkZUQV9IQVNIX1NSRUddXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfaGFzaC5jOjYyOlxcdFtORlRBX0hBU0hfRFJFR11cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9oYXNoLmM6NjM6XFx0W05GVEFfSEFTSF9MRU5dXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9oYXNoLmMtNjQtXFx0W05GVEFfSEFTSF9NT0RVTFVTXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ltbWVkaWF0ZS5jPTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfaW1tZWRpYXRlX3BvbGljeVtORlRBX0lNTUVESUFURV9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9pbW1lZGlhdGUuYzoyODpcXHRbTkZUQV9JTU1FRElBVEVfRFJFR11cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9pbW1lZGlhdGUuYy0yOS1cXHRbTkZUQV9JTU1FRElBVEVfREFUQV1cXHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jPTMyMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2lubmVyX3BvbGljeVtORlRBX0lOTkVSX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMzIyLVxcdFtORlRBX0lOTkVSX05VTV1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYzozMjM6XFx0W05GVEFfSU5ORVJfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9JTk5FUl9NQVNLKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTMyNC1cXHRbTkZUQV9JTk5FUl9IRFJTSVpFXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2xpbWl0LmM9MTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfbGltaXRfcG9saWN5W05GVEFfTElNSVRfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9saW1pdC5jLTE5MS1cXHRbTkZUQV9MSU1JVF9UWVBFXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9saW1pdC5jOjE5MjpcXHRbTkZUQV9MSU1JVF9GTEFHU11cXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZUX0xJTUlUX0ZfSU5WKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9saW1pdC5jLTE5My19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbG9nLmM9NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9sb2dfcG9saWN5W05GVEFfTE9HX01BWCArIDFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbG9nLmMtNzEtXFx0W05GVEFfTE9HX0xFVkVMXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9sb2cuYzo3MjpcXHRbTkZUQV9MT0dfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GX0xPR19NQVNLKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9sb2cuYy03My19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbG9va3VwLmM9MTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfbG9va3VwX3BvbGljeVtORlRBX0xPT0tVUF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jLTEyNy1cXHRbTkZUQV9MT09LVVBfU0VUX0lEXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9sb29rdXAuYzoxMjg6XFx0W05GVEFfTE9PS1VQX1NSRUddXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfbG9va3VwLmM6MTI5OlxcdFtORlRBX0xPT0tVUF9EUkVHXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jLTEzMC1cXHRbTkZUQV9MT09LVVBfRkxBR1NdXFx0PVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jOjEzMTpcXHRcXHROTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9MT09LVVBfRl9JTlYpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jLTEzMi19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWFzcS5jPTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfbWFzcV9wb2xpY3lbTkZUQV9NQVNRX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X21hc3EuYy0yMy1cXHRbTkZUQV9NQVNRX0ZMQUdTXVxcdFxcdD1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tYXNxLmM6MjQ6XFx0XFx0TkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORl9OQVRfUkFOR0VfTUFTSyksXFxubmV0L25ldGZpbHRlci9uZnRfbWFzcS5jLTI1LVxcdFtORlRBX01BU1FfUkVHX1BST1RPX01JTl1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM9NTE2PWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9tZXRhX3BvbGljeVtORlRBX01FVEFfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjUxNzpcXHRbTkZUQV9NRVRBX0RSRUddXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjUxODpcXHRbTkZUQV9NRVRBX0tFWV1cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzo1MTk6XFx0W05GVEFfTUVUQV9TUkVHXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy01MjAtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X25hdC5jPTEyOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X25hdF9wb2xpY3lbTkZUQV9OQVRfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9uYXQuYy0xMzUtXFx0W05GVEFfTkFUX0ZMQUdTXVxcdCA9XFxubmV0L25ldGZpbHRlci9uZnRfbmF0LmM6MTM2OlxcdFxcdE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZfTkFUX1JBTkdFX01BU0spLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X25hdC5jLTEzNy19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbnVtZ2VuLmM9NDU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9uZ19wb2xpY3lbTkZUQV9OR19NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9udW1nZW4uYzo0NjpcXHRbTkZUQV9OR19EUkVHXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X251bWdlbi5jLTQ3LVxcdFtORlRBX05HX01PRFVMVVNdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfb2JqcmVmLmM9MjY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfb2JqcmVmX3BvbGljeVtORlRBX09CSlJFRl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X29ianJlZi5jLTI2Ny1cXHRbTkZUQV9PQkpSRUZfSU1NX1RZUEVdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X29ianJlZi5jOjI2ODpcXHRbTkZUQV9PQkpSRUZfU0VUX1NSRUddXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfb2JqcmVmLmMtMjY5LVxcdFtORlRBX09CSlJFRl9TRVRfTkFNRV1cXHQ9IHsgLnR5cGUgPSBOTEFfU1RSSU5HLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfb3NmLmM9MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9vc2ZfcG9saWN5W05GVEFfT1NGX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X29zZi5jOjE1OlxcdFtORlRBX09TRl9EUkVHXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X29zZi5jLTE2LVxcdFtORlRBX09TRl9UVExdXFx0XFx0PSB7IC50eXBlID0gTkxBX1U4IH0sXFxubmV0L25ldGZpbHRlci9uZnRfb3NmLmM6MTc6XFx0W05GVEFfT1NGX0ZMQUdTXVxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfT1NGX0ZfVkVSU0lPTiksXFxubmV0L25ldGZpbHRlci9uZnRfb3NmLmMtMTgtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0yMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9wYXlsb2FkX3BvbGljeVtORlRBX1BBWUxPQURfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIxMjpcXHRbTkZUQV9QQVlMT0FEX1NSRUddXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIxMzpcXHRbTkZUQV9QQVlMT0FEX0RSRUddXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIxNC1cXHRbTkZUQV9QQVlMT0FEX0JBU0VdXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMTU6XFx0W05GVEFfUEFZTE9BRF9PRkZTRVRdXFx0XFx0PSB7IC50eXBlID0gTkxBX0JFMzIgfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjE2OlxcdFtORlRBX1BBWUxPQURfTEVOXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIxNy1cXHRbTkZUQV9QQVlMT0FEX0NTVU1fVFlQRV1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIxODpcXHRbTkZUQV9QQVlMT0FEX0NTVU1fT0ZGU0VUXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIxOTpcXHRbTkZUQV9QQVlMT0FEX0NTVU1fRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9QQVlMT0FEX0w0Q1NVTV9QU0VVRE9IRFIpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMjAtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3F1ZXVlLmM9OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9xdWV1ZV9wb2xpY3lbTkZUQV9RVUVVRV9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3F1ZXVlLmMtOTctXFx0W05GVEFfUVVFVUVfVE9UQUxdXFx0PSB7IC50eXBlID0gTkxBX1UxNiB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3F1ZXVlLmM6OTg6XFx0W05GVEFfUVVFVUVfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMTYsIE5GVF9RVUVVRV9GTEFHX01BU0spLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3F1ZXVlLmMtOTktXFx0W05GVEFfUVVFVUVfU1JFR19RTlVNXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3F1b3RhLmM9NDc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9xdW90YV9wb2xpY3lbTkZUQV9RVU9UQV9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9xdW90YS5jLTQ4LVxcdFtORlRBX1FVT1RBX0JZVEVTXVxcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9xdW90YS5jOjQ5OlxcdFtORlRBX1FVT1RBX0ZMQUdTXVxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfUVVPVEFfRl9JTlYpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3F1b3RhLmMtNTAtXFx0W05GVEFfUVVPVEFfQ09OU1VNRURdXFx0PSB7IC50eXBlID0gTkxBX1U2NCB9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcmFuZ2UuYz00Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3JhbmdlX3BvbGljeVtORlRBX1JBTkdFX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3JhbmdlLmM6NDQ6XFx0W05GVEFfUkFOR0VfU1JFR11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9yYW5nZS5jOjQ1OlxcdFtORlRBX1JBTkdFX09QXVxcdFxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXFxubmV0L25ldGZpbHRlci9uZnRfcmFuZ2UuYy00Ni1cXHRbTkZUQV9SQU5HRV9GUk9NX0RBVEFdXFx0XFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcmVkaXIuYz0yMj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3JlZGlyX3BvbGljeVtORlRBX1JFRElSX01BWCArIDFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcmVkaXIuYy0yNS1cXHRbTkZUQV9SRURJUl9GTEFHU11cXHRcXHQ9XFxubmV0L25ldGZpbHRlci9uZnRfcmVkaXIuYzoyNjpcXHRcXHROTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GX05BVF9SQU5HRV9NQVNLKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWRpci5jLTI3LX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWplY3QuYz0yMD1jb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfcmVqZWN0X3BvbGljeVtORlRBX1JFSkVDVF9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWplY3QuYzoyMTpcXHRbTkZUQV9SRUpFQ1RfVFlQRV1cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlamVjdC5jLTIyLVxcdFtORlRBX1JFSkVDVF9JQ01QX0NPREVdXFx0XFx0PSB7IC50eXBlID0gTkxBX1U4IH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9ydC5jPTEwNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3J0X3BvbGljeVtORlRBX1JUX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmM6MTA4OlxcdFtORlRBX1JUX0RSRUddXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYzoxMDk6XFx0W05GVEFfUlRfS0VZXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYy0xMTAtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NvY2tldC5jPTE2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3NvY2tldF9wb2xpY3lbTkZUQV9TT0NLRVRfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZnRfc29ja2V0LmM6MTY3OlxcdFtORlRBX1NPQ0tFVF9LRVldXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9zb2NrZXQuYzoxNjg6XFx0W05GVEFfU09DS0VUX0RSRUddXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfc29ja2V0LmM6MTY5OlxcdFtORlRBX1NPQ0tFVF9MRVZFTF1cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NvY2tldC5jLTE3MC19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYz0xOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3N5bnByb3h5X3BvbGljeVtORlRBX1NZTlBST1hZX01BWCArIDFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYy0yMC1cXHRbTkZUQV9TWU5QUk9YWV9XU0NBTEVdXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIFRDUF9NQVhfV1NDQUxFKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jOjIxOlxcdFtORlRBX1NZTlBST1hZX0ZMQUdTXVxcdFxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORl9TWU5QUk9YWV9PUFRfTUFTSyksXFxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYy0yMi19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfdHByb3h5LmM9MTg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfdHByb3h5X3BvbGljeVtORlRBX1RQUk9YWV9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYzoxODY6XFx0W05GVEFfVFBST1hZX0ZBTUlMWV0gICA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3Rwcm94eS5jLTE4Ny1cXHRbTkZUQV9UUFJPWFlfUkVHX0FERFJdID0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jPTY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfdHVubmVsX3BvbGljeVtORlRBX1RVTk5FTF9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF90dW5uZWwuYzo2OTpcXHRbTkZUQV9UVU5ORUxfS0VZXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXFxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmM6NzA6XFx0W05GVEFfVFVOTkVMX0RSRUddXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmM6NzE6XFx0W05GVEFfVFVOTkVMX01PREVdXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1RVTk5FTF9NT0RFX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmMtNzItfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jPTQwNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3R1bm5lbF9rZXlfcG9saWN5W05GVEFfVFVOTkVMX0tFWV9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jLTQxMC1cXHRbTkZUQV9UVU5ORUxfS0VZX0lEXVxcdD0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmM6NDExOlxcdFtORlRBX1RVTk5FTF9LRVlfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9UVU5ORUxfRl9NQVNLKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF90dW5uZWwuYy00MTItXFx0W05GVEFfVFVOTkVMX0tFWV9UT1NdXFx0PSB7IC50eXBlID0gTkxBX1U4LCB9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jPTE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfeGZybV9wb2xpY3lbTkZUQV9YRlJNX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoyMDpcXHRbTkZUQV9YRlJNX0tFWV1cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMS1cXHRbTkZUQV9YRlJNX0RJUl1cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VOCwgWEZSTV9QT0xJQ1lfT1VUKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MjI6XFx0W05GVEFfWEZSTV9TUE5VTV1cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBYRlJNX01BWF9ERVBUSCAtIDEpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoyMzpcXHRbTkZUQV9YRlJNX0RSRUddXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTI0LX07XFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYz0yMDk9aW50IG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdClcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIzNi1cXHRcXHQgICAgICAgMiAqIChubGFfYXR0cl9zaXplKDApICsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTY0KSkpO1xcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjIzNzpcXHRjYXNlIE5MQV9CRTE2Olxcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjIzODpcXHRjYXNlIE5MQV9CRTMyOlxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIzOS1cXHRcXHQvKiBzYW1lIGFzIHRoZSB1bnNpZ25lZCB0eXBlcywgcGx1cyB0aGUgYnl0ZSBvcmRlciAqL1xcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmM9MjU4PV9fbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyKHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSxcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTI5Ni1cXHRjYXNlIE5MQV9VNjQ6XFxubmV0L25ldGxpbmsvcG9saWN5LmM6Mjk3OlxcdGNhc2UgTkxBX0JFMTY6XFxubmV0L25ldGxpbmsvcG9saWN5LmM6Mjk4OlxcdGNhc2UgTkxBX0JFMzI6XFxubmV0L25ldGxpbmsvcG9saWN5LmMtMjk5LVxcdGNhc2UgTkxBX1VJTlQ6XFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMDQtXFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VODtcXG5uZXQvbmV0bGluay9wb2xpY3kuYzozMDU6XFx0XFx0ZWxzZSBpZiAocHQtXFx1MDAzZXR5cGUgPT0gTkxBX1UxNiB8fCBwdC1cXHUwMDNldHlwZSA9PSBOTEFfQkUxNilcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMDYtXFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VMTY7XFxubmV0L25ldGxpbmsvcG9saWN5LmM6MzA3OlxcdFxcdGVsc2UgaWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9VMzIgfHwgcHQtXFx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpXFxubmV0L25ldGxpbmsvcG9saWN5LmMtMzA4LVxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTMyO1xcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtMzEzLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjMxNDpcXHRcXHRpZiAoKHB0LVxcdTAwM2V0eXBlID09IE5MQV9CRTE2IHx8IHB0LVxcdTAwM2V0eXBlID09IE5MQV9CRTMyKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTMxNS1cXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTYzMD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZmxfcG9saWN5W1RDQV9GTE9XRVJfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTY3Ny1cXHRbVENBX0ZMT1dFUl9LRVlfRU5DX1VEUF9EU1RfUE9SVF9NQVNLXVxcdD0geyAudHlwZSA9IE5MQV9VMTYgfSxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjY3ODpcXHRbVENBX0ZMT1dFUl9LRVlfRkxBR1NdXFx0XFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy02NzktXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBUQ0FfRkxPV0VSX0tFWV9GTEFHU19QT0xJQ1lfTUFTSyksXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzo2ODA6XFx0W1RDQV9GTE9XRVJfS0VZX0ZMQUdTX01BU0tdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy02ODEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBUQ0FfRkxPV0VSX0tFWV9GTEFHU19QT0xJQ1lfTUFTSyksXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTc0Mi1cXHRbVENBX0ZMT1dFUl9LRVlfQ0ZNXVxcdFxcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjc0MzpcXHRbVENBX0ZMT1dFUl9LRVlfRU5DX0ZMQUdTXVxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtNzQ0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgVENBX0ZMT1dFUl9LRVlfRU5DX0ZMQUdTX1BPTElDWV9NQVNLKSxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjc0NTpcXHRbVENBX0ZMT1dFUl9LRVlfRU5DX0ZMQUdTX01BU0tdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy03NDYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBUQ0FfRkxPV0VSX0tFWV9FTkNfRkxBR1NfUE9MSUNZX01BU0spLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzozMC4yNzM3MDg5MTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ5OTMwNDEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldDogTmV0bGluayBQb2xpY3kgRHVtcGluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgZm9jdXNlcyBvbiBleHRlbmRpbmcgdGhlIE5ldGxpbmsgcG9saWN5IGR1bXBpbmcgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9uZXRsaW5rL3BvbGljeS5jYC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGFkdmVydGlzaW5nIGJpZy1lbmRpYW4gaW50ZWdlciBhdHRyaWJ1dGVzIChgTkxBX0JFMTZgLCBgTkxBX0JFMzJgKSBieSBhZGRpbmcgYE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUmAuIFRoaXMgbWVhbnMgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGluIHRoZSBzaXplIGVzdGltYXRpb24gd2l0aCBgbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGVgIGFuZCB3cml0aW5nIGxvZ2ljIHdpdGggYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAgYW5kIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlYC5cblxuVGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBoZXJlIGFyZTogYG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlYCwgYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAsIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlYCwgYW5kIGBjdHJsX2R1bXBwb2xpY3lgLiBXZSBjYW4gcmVhY2ggdGhpcyBmdW5jdGlvbmFsaXR5IHRocm91Z2ggc3RhbmRhcmQgTmV0bGluayBzb2NrZXRzIChgQUZfTkVUTElOS2ApLCBpbmNsdWRpbmcgR2VuZXJpYyBOZXRsaW5rIHBvbGljeSBkdW1wcyAoYENUUkxfQ01EX0dFVFBPTElDWWApIGFuZCBhbHNvIHRocm91Z2ggZXh0YWNrIGVycm9yIHJlcG9ydGluZy5cblxuRnJvbSBhIGNvbmZpZ3VyYXRpb24gc3RhbmRwb2ludCwgYE5FVGAgaXMgc3VmZmljaWVudCBmb3IgYmFzZSBmdW5jdGlvbmFsaXR5LiBGb3IgdGhlIHNwZWNpZmljIGZhbWlsaWVzIGxpa2UgYE5FVF9GT1VgIG9yIGBNUFRDUGAgd2hpY2ggdXNlIHRoZSBiaWctZW5kaWFuIGF0dHJpYnV0ZXMsIHdlIG5lZWQgdG8gaGF2ZSB0aG9zZSBlbmFibGVkLCBidXQgZm9yIGZ1enppbmcgdGhlICpjb3JlKiBwb2xpY3kgZHVtcCBjb2RlLCBgTkVUYCBpcyB0aGUga2V5LiBgR0VORVJJQ19ORVRMSU5LYCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2l0aCBgTkVUYC5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgcmVsZXZhbnQgc3ltYm9scyBhcmUgbm9uLXN0YXRpYyBhbmQgZ2xvYmFsbHkgYWNjZXNzaWJsZSwgc28gd2UgY2FuIGRpcmVjdGx5IHRhcmdldCB0aGVtLiBHaXZlbiB0aGF0IGl0J3MgYWNjZXNzaWJsZSB2aWEgYm90aCBHZW5lcmljIE5ldGxpbmsgYW5kIGVycm9yIHJlcG9ydGluZywgaXQgZGVmaW5pdGVseSBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzUzLCJPdXRwdXRUb2tlbnMiOjE3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6MzUuNzczMDE2ODg3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY1ODU1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN0cmxfZHVtcHBvbGljeVwiLFxuICAgIFwibmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGVcIixcbiAgICBcIm5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVcIixcbiAgICBcIm5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE5ldGxpbmsgcG9saWN5IGR1bXBpbmcgbG9naWMgaW4gbmV0L25ldGxpbmsvcG9saWN5LmMgdG8gc3VwcG9ydCBiaWctZW5kaWFuIGludGVnZXIgYXR0cmlidXRlcyAoTkxBX0JFMTYgYW5kIE5MQV9CRTMyKSBieSBlbWl0dGluZyBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIgYW5kIGFkanVzdGluZyB0aGUgYXR0cmlidXRlIHNpemUgZXN0aW1hdGlvbi4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBBRl9ORVRMSU5LIHNvY2tldHMgdGhyb3VnaCBHZW5lcmljIE5ldGxpbmsgcG9saWN5IGR1bXBpbmcgKENUUkxfQ01EX0dFVFBPTElDWSkgYXMgd2VsbCBhcyBuZXRsaW5rIGV4dGFjayBlcnJvciByZXBvcnRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY3RybF9kdW1wcG9saWN5XCIsXG4gICAgXCJuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZVwiLFxuICAgIFwibmV0bGlua19wb2xpY3lfZHVtcF93cml0ZVwiLFxuICAgIFwibmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTmV0bGluayBwb2xpY3kgZHVtcGluZyBsb2dpYyBpbiBuZXQvbmV0bGluay9wb2xpY3kuYyB0byBzdXBwb3J0IGJpZy1lbmRpYW4gaW50ZWdlciBhdHRyaWJ1dGVzIChOTEFfQkUxNiBhbmQgTkxBX0JFMzIpIGJ5IGVtaXR0aW5nIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUiBhbmQgYWRqdXN0aW5nIHRoZSBhdHRyaWJ1dGUgc2l6ZSBlc3RpbWF0aW9uLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIEFGX05FVExJTksgc29ja2V0cyB0aHJvdWdoIEdlbmVyaWMgTmV0bGluayBwb2xpY3kgZHVtcGluZyAoQ1RSTF9DTURfR0VUUE9MSUNZKSBhcyB3ZWxsIGFzIG5ldGxpbmsgZXh0YWNrIGVycm9yIHJlcG9ydGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6MzUuODQ5NjA4NzM2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzk2NzI2NDU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjM1Ljg1MDEyMDc1NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMzOTY2NzQ5NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIE5ldGxpbmsgcG9saWN5IGR1bXAgc3VwcG9ydCBmb3IgYmlnLWVuZGlhbiBpbnRlZ2VyIGF0dHJpYnV0ZSB0eXBlcyAoTkxBX0JFMTYgYW5kIE5MQV9CRTMyKSBieSBlbWl0dGluZyB0aGUgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSIGF0dHJpYnV0ZSBpbiBuZXRsaW5rIHBvbGljeSBkZXNjcmlwdGlvbnMuIFxcblxcbkFsbCB2YWx1ZXMgd3JpdHRlbiB0byB0aGUgTmV0bGluayBza2IgYXJlIGV4cGxpY2l0LCBmdWxseSBpbml0aWFsaXplZCBjb25zdGFudHMgKHN1Y2ggYXMgTkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTikgb3IgcmFuZ2UgdmFsdWVzIGluaXRpYWxpemVkIGJ5IG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQoKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBwYWRkaW5ncyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgaXMgYW55IGNvbnRyb2wgZmxvdyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGNoZWNrcyBhcmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyBidWZmZXIgc2l6ZXMgYW5kIG5ldGxpbmsgbWVzc2FnZSBmb3JtYXR0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZlZDQxYTRlYjQxNjY4MjczZTU0Mzk4NzQ0OWYwMjkyN2E2ODI2MzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDAwOjIzOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sXG5pbmRleCA4YjQ0NzJhNmFhMzZhLi43ZTdjMTU4ZTNlNzM3IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmxjdHJsLnlhbWxcbkBAIC00Miw2ICs0MiwxNiBAQCBkZWZpbml0aW9uczpcbiAgICAgICAtIGJpdGZpZWxkMzJcbiAgICAgICAtIHNpbnRcbiAgICAgICAtIHVpbnRcbisgIC1cbisgICAgbmFtZTogcG9saWN5LWJ5dGUtb3JkZXJcbisgICAgZG9jOiB8XG4rICAgICAgQnl0ZSBvcmRlciBvZiBhbiBpbnRlZ2VyIGF0dHJpYnV0ZS4gWmVybyBpcyBsZWZ0IHVudXNlZCBzbyB0aGF0IGl0XG4rICAgICAgY2FuIGJlIHRha2VuIHRvIG1lYW4gaG9zdCBieXRlIG9yZGVyLlxuKyAgICBlbnVtLW5hbWU6IG5ldGxpbmstcG9saWN5LWJ5dGUtb3JkZXJcbisgICAgdHlwZTogZW51bVxuKyAgICB2YWx1ZS1zdGFydDogMVxuKyAgICBlbnRyaWVzOlxuKyAgICAgIC0gYmlnLWVuZGlhblxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTE1Miw2ICsxNjIsMTEgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcGFkXG4gICAgICAgICB0eXBlOiBwYWRcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBieXRlLW9yZGVyXG4rICAgICAgICBkb2M6IEJ5dGUgb3JkZXIgb2YgdGhlIGF0dHJpYnV0ZSwgYWJzZW50IG1lYW5zIGhvc3QgYnl0ZSBvcmRlci5cbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogcG9saWN5LWJ5dGUtb3JkZXJcbiAgIC1cbiAgICAgbmFtZTogb3AtcG9saWN5LWF0dHJzXG4gICAgIG5hbWUtcHJlZml4OiBjdHJsLWF0dHItcG9saWN5LVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oXG5pbmRleCBmODdhYWYyOGE2NDkxLi44MmM0MWFlYjQzNTc0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGxpbmsuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGxpbmsuaFxuQEAgLTMyOSw2ICszMjksMTcgQEAgZW51bSBuZXRsaW5rX2F0dHJpYnV0ZV90eXBlIHtcbiBcdE5MX0FUVFJfVFlQRV9VSU5ULFxuIH07XG4gXG4rLyoqXG4rICogZW51bSBuZXRsaW5rX3BvbGljeV9ieXRlX29yZGVyIC0gYnl0ZSBvcmRlciBvZiBhbiBpbnRlZ2VyIGF0dHJpYnV0ZVxuKyAqIEBOTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOOiBiaWcgZW5kaWFuIChuZXR3b3JrIGJ5dGUgb3JkZXIpXG4rICpcbisgKiBaZXJvIGlzIGxlZnQgdW5hc3NpZ25lZCBzbyB0aGF0IGl0IGtlZXBzIG1lYW5pbmcgaG9zdCBieXRlIG9yZGVyLFxuKyAqIHdoaWNoIGlzIGFsc28gd2hhdCBhIG1pc3NpbmcgYnl0ZSBvcmRlciBtZWFucy5cbisgKi9cbitlbnVtIG5ldGxpbmtfcG9saWN5X2J5dGVfb3JkZXIge1xuK1x0TkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTiA9IDEsXG4rfTtcbitcbiAvKipcbiAgKiBlbnVtIG5ldGxpbmtfcG9saWN5X3R5cGVfYXR0ciAtIHBvbGljeSB0eXBlIGF0dHJpYnV0ZXNcbiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9VTlNQRUM6IHVudXNlZFxuQEAgLTM1Niw2ICszNjcsOCBAQCBlbnVtIG5ldGxpbmtfYXR0cmlidXRlX3R5cGUge1xuICAqXHRiaXRmaWVsZDMyIHR5cGUgKFUzMilcbiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLOiBtYXNrIG9mIHZhbGlkIGJpdHMgZm9yIHVuc2lnbmVkIGludGVnZXJzIChVNjQpXG4gICogQE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEOiBwYWQgYXR0cmlidXRlIGZvciA2NC1iaXQgYWxpZ25tZW50XG4rICogQE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUjogYnl0ZSBvcmRlciBvZiBhbiBpbnRlZ2VyIGF0dHJpYnV0ZSxcbisgKlx0XHUwMDI2ZW51bSBuZXRsaW5rX3BvbGljeV9ieXRlX29yZGVyLCBhYnNlbnQgaWYgaG9zdCBieXRlIG9yZGVyIChVMzIpXG4gICpcbiAgKiBAX19OTF9QT0xJQ1lfVFlQRV9BVFRSX01BWDogbnVtYmVyIG9mIGF0dHJpYnV0ZXNcbiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlclxuQEAgLTM3NCw2ICszODcsNyBAQCBlbnVtIG5ldGxpbmtfcG9saWN5X3R5cGVfYXR0ciB7XG4gXHROTF9QT0xJQ1lfVFlQRV9BVFRSX0JJVEZJRUxEMzJfTUFTSyxcbiBcdE5MX1BPTElDWV9UWVBFX0FUVFJfUEFELFxuIFx0TkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLLFxuK1x0TkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSLFxuIFxuIFx0Lyoga2VlcCBsYXN0ICovXG4gXHRfX05MX1BPTElDWV9UWVBFX0FUVFJfTUFYLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL3BvbGljeS5jIGIvbmV0L25ldGxpbmsvcG9saWN5LmNcbmluZGV4IDA4YjAwNmM0OGYwNmUuLjU3NGQ0NGI3ZDUxODIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0bGluay9wb2xpY3kuY1xuKysrIGIvbmV0L25ldGxpbmsvcG9saWN5LmNcbkBAIC0yMzQsNiArMjM0LDExIEBAIGludCBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZShjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQpXG4gXHRcdC8qIG1heGltdW0gaXMgY29tbW9uLCB1NjQgbWluL21heCB3aXRoIHBhZGRpbmcgKi9cbiBcdFx0cmV0dXJuIGNvbW1vbiArXG4gXHRcdCAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgKyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7XG4rXHRjYXNlIE5MQV9CRTE2OlxuK1x0Y2FzZSBOTEFfQkUzMjpcbitcdFx0Lyogc2FtZSBhcyB0aGUgdW5zaWduZWQgdHlwZXMsIHBsdXMgdGhlIGJ5dGUgb3JkZXIgKi9cbitcdFx0cmV0dXJuIGNvbW1vbiArIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpICtcbitcdFx0ICAgICAgIDIgKiAobmxhX2F0dHJfc2l6ZSgwKSArIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHU2NCkpKTtcbiBcdGNhc2UgTkxBX0JJVEZJRUxEMzI6XG4gXHRcdHJldHVybiBjb21tb24gKyBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKTtcbiBcdGNhc2UgTkxBX1NUUklORzpcbkBAIC0yODksMjEgKzI5NCwyOCBAQCBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXG4gXHRjYXNlIE5MQV9VMTY6XG4gXHRjYXNlIE5MQV9VMzI6XG4gXHRjYXNlIE5MQV9VNjQ6XG4rXHRjYXNlIE5MQV9CRTE2OlxuK1x0Y2FzZSBOTEFfQkUzMjpcbiBcdGNhc2UgTkxBX1VJTlQ6XG4gXHRjYXNlIE5MQV9NU0VDUzoge1xuIFx0XHRzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIHJhbmdlO1xuIFxuIFx0XHRpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTgpXG4gXHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VODtcbi1cdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTE2KVxuK1x0XHRlbHNlIGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9VMTYgfHwgcHQtXHUwMDNldHlwZSA9PSBOTEFfQkUxNilcbiBcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1UxNjtcbi1cdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTMyKVxuK1x0XHRlbHNlIGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9VMzIgfHwgcHQtXHUwMDNldHlwZSA9PSBOTEFfQkUzMilcbiBcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1UzMjtcbiBcdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTY0KVxuIFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTY0O1xuIFx0XHRlbHNlXG4gXHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VSU5UO1xuIFxuK1x0XHRpZiAoKHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMTYgfHwgcHQtXHUwMDNldHlwZSA9PSBOTEFfQkUzMikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUixcbitcdFx0XHRcdE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU4pKVxuK1x0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuK1xuIFx0XHRpZiAocHQtXHUwMDNldmFsaWRhdGlvbl90eXBlID09IE5MQV9WQUxJREFURV9NQVNLKSB7XG4gXHRcdFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLLFxuIFx0XHRcdFx0XHQgICAgICBwdC1cdTAwM2VtYXNrLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weVxuaW5kZXggODY4MmJmNTg4ZTFmYS4uZmI1YWNiOGFjZGVkMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weVxuKysrIGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5XG5AQCAtMTE1LDYgKzExNSw3IEBAIGNsYXNzIE5ldGxpbms6XG4gICAgIE5MX1BPTElDWV9UWVBFX0FUVFJfQklURklFTEQzMl9NQVNLID0gMTBcbiAgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9QQUQgPSAxMVxuICAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0sgPSAxMlxuKyAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIgPSAxM1xuIFxuICAgICBBdHRyVHlwZSA9IEVudW0oJ0F0dHJUeXBlJywgWydmbGFnJywgJ3U4JywgJ3UxNicsICd1MzInLCAndTY0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3M4JywgJ3MxNicsICdzMzInLCAnczY0JyxcbkBAIC0xMjIsNiArMTIzLDggQEAgY2xhc3MgTmV0bGluazpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25lc3RlZCcsICduZXN0ZWQtYXJyYXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYml0ZmllbGQzMicsICdzaW50JywgJ3VpbnQnXSlcbiBcbisgICAgQnl0ZU9yZGVyID0gRW51bSgnQnl0ZU9yZGVyJywgWydiaWctZW5kaWFuJ10sIHN0YXJ0PTEpXG4rXG4gY2xhc3MgTmxFcnJvcihFeGNlcHRpb24pOlxuICAgICBkZWYgX19pbml0X18oc2VsZiwgbmxfbXNnKTpcbiAgICAgICAgIHNlbGYubmxfbXNnID0gbmxfbXNnXG5AQCAtMTU4LDcgKzE2MSw3IEBAIGNsYXNzIE5sUG9saWN5OlxuIFxuICAgICBFYWNoIHBvbGljeSBlbnRyeSBhbHdheXMgaGFzIGEgJ3R5cGUnIGF0dHJpYnV0ZSAoZS5nLiB1MzIsIHN0cmluZyxcbiAgICAgbmVzdGVkKS4gT3B0aW9uYWwgYXR0cmlidXRlcyBkZXBlbmRpbmcgb24gdGhlICd0eXBlJzogbWluLXZhbHVlLFxuLSAgICBtYXgtdmFsdWUsIG1pbi1sZW5ndGgsIG1heC1sZW5ndGgsIG1hc2suXG4rICAgIG1heC12YWx1ZSwgbWluLWxlbmd0aCwgbWF4LWxlbmd0aCwgbWFzaywgYnl0ZS1vcmRlci5cbiBcbiAgICAgUG9saWNpZXMgY2FuIGZvcm0gaW5maW5pdGUgbmVzdGluZyBsb29wcy4gVGhlc2UgbG9vcHMgYXJlIHRyaW1tZWRcbiAgICAgd2hlbiBwb2xpY3kgaXMgY29udmVydGVkIHRvIGEgZGljdCB3aXRoIHBvbC50b19kaWN0KCkuXG5AQCAtNDU0LDYgKzQ1Nyw5IEBAIGRlZiBfZ2VubF9kZWNvZGVfcG9saWN5KHJhdyk6XG4gICAgICAgICAgICAgcG9saWN5WydiaXRmaWVsZDMyLW1hc2snXSA9IGF0dHIuYXNfc2NhbGFyKCd1MzInKVxuICAgICAgICAgZWxpZiBhdHRyLnR5cGUgPT0gTmV0bGluay5OTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0s6XG4gICAgICAgICAgICAgcG9saWN5WydtYXNrJ10gPSBhdHRyLmFzX3NjYWxhcigndTY0JylcbisgICAgICAgIGVsaWYgYXR0ci50eXBlID09IE5ldGxpbmsuTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSOlxuKyAgICAgICAgICAgIGJ5dGVfb3JkZXIgPSBhdHRyLmFzX3NjYWxhcigndTMyJylcbisgICAgICAgICAgICBwb2xpY3lbJ2J5dGUtb3JkZXInXSA9IE5ldGxpbmsuQnl0ZU9yZGVyKGJ5dGVfb3JkZXIpLm5hbWVcbiAgICAgcmV0dXJuIHBvbGljeVxuIFxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6MzUuODUwMTIxNjg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzOTgzNDg0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIFBvbGljeSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gZmlyZSB1cCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHRocm91Z2ggdGhlIHBhdGNoIHN0ZXAtYnktc3RlcC5cblxuRmlyc3QsIEkgc2VlIHNvbWUgdXBkYXRlcyB0byBkb2N1bWVudGF0aW9uIGFuZCBoZWFkZXJzOiB0aGUgYG5sY3RybC55YW1sYCBzcGVjIGlzIGdldHRpbmcgYSBgcG9saWN5LWJ5dGUtb3JkZXJgIGVudW0gYW5kIGBieXRlLW9yZGVyYCBhdHRyaWJ1dGUsIGFuZCB0aGUgYG5ldGxpbmsuaGAgaGVhZGVyIGRlZmluZXMgY29uc3RhbnRzIGZvciBiaWctZW5kaWFuIGJ5dGUgb3JkZXIuIE5vdGhpbmcgYWxhcm1pbmcgc28gZmFyOyBpdCBzZWVtcyB3ZSBhcmUgaW50cm9kdWNpbmcgYmlnLWVuZGlhbiBzdXBwb3J0IGluIHRoZSBuZXRsaW5rIHBvbGljeS5cblxuTmV4dCwgSSBzZWUgY2hhbmdlcyBpbiBgbmV0L25ldGxpbmsvcG9saWN5LmNgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgc2VlIHR3byBmdW5jdGlvbnMgd2VyZSB1cGRhdGVkOiBgbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUoKWAgYW5kIGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cigpYC4gSXQgbG9va3MgbGlrZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkIHRvIGhhbmRsZSBgTkxBX0JFMTZgIGFuZCBgTkxBX0JFMzJgIHdoaWNoIGlzIHByb21pc2luZyEgVGhlIHNpemUgZXN0aW1hdGlvbiBmdW5jdGlvbiBub3cgYWNjb3VudHMgZm9yIHRoZSBieXRlIG9yZGVyIGF0dHJpYnV0ZSwgd2hpY2ggaXMgZ29vZC4gVGhlIHdyaXRlIGZ1bmN0aW9uIHNldHMgdGhlIGF0dHJpYnV0ZSB0eXBlIHRvIGBVMTZgIG9yIGBVMzJgIGFzIGFwcHJvcHJpYXRlIGFuZCB0aGVuIGFkZHMgYSBgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSYCBhdHRyaWJ1dGUgd2l0aCBgTkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTmAgaWYgdGhlIG9yaWdpbmFsIHR5cGUgd2FzIGBOTEFfQkUxNmAgb3IgYE5MQV9CRTMyYC4gVGhpcyBsb29rcyByZWFzb25hYmxlLiBJdCBjYWxscyBgbmxhX3B1dF91MzJgIHRvIGFjdHVhbGx5IHB1dCB0aGUgYnl0ZSBvcmRlciBpbmZvcm1hdGlvbiBpbnRvIHRoZSBza2IhIEFmdGVyIHRoYXQsIGl0IGNvbnRpbnVlcyB3aXRoIHRoZSByYW5nZSBhbmQgbWFzayBjaGVja3MuXG5cbkZpbmFsbHksIHNvbWUgcHl0aG9uIHRvb2xpbmcgaXMgYWxzbyBnZXR0aW5nIHVwZGF0ZWQuIExpa2VseSB0aGUgWUFNTCBwYXJzZXIgYW5kIGNvZGUgZ2VuZXJhdG9yLlxuXG5Ob3csIEkgdGhpbmsgSSdsbCBkaXZlIGEgbGl0dGxlIGRlZXBlciBpbnRvIHRoYXQgYG5ldGxpbmsvcG9saWN5LmNgIGZpbGUgYW5kIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aG9zZSB0d28gZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyBkYXRhIGlzIGJlaW5nIGR1bXBlZCBhbmQgd3JpdHRlbi4gSSB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgd2hlbiBjYWxjdWxhdGluZyBzaXplcywgb3IgYW55IG90aGVyIGlzc3VlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZmxvdyBhcm91bmQgdGhvc2UgYG5ldGxpbmtfcG9saWN5YCBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoYXQgdGhpcyBieXRlLW9yZGVyIGFkZGl0aW9uIGlzIGJlaW5nIGhhbmRsZWQgc2FmZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTkwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6NDIuMjQ4NDcyNTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGxpbmsvcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHRcXHRjYXNlIE5MQV9ORVNURURfQVJSQVk6XFxuIDIyMTpcXHRcXHRcXHQvKiBjb21tb24sIHBvbGljeSBpZHgsIHBvbGljeSBtYXhhdHRyICovXFxuIDIyMjpcXHRcXHRcXHRyZXR1cm4gY29tbW9uICsgMiAqIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpO1xcbiAyMjM6XFx0XFx0Y2FzZSBOTEFfVTg6XFxuIDIyNDpcXHRcXHRjYXNlIE5MQV9VMTY6XFxuIDIyNTpcXHRcXHRjYXNlIE5MQV9VMzI6XFxuIDIyNjpcXHRcXHRjYXNlIE5MQV9VNjQ6XFxuIDIyNzpcXHRcXHRjYXNlIE5MQV9NU0VDUzpcXG4gMjI4OlxcdFxcdGNhc2UgTkxBX1M4OlxcbiAyMjk6XFx0XFx0Y2FzZSBOTEFfUzE2OlxcbiAyMzA6XFx0XFx0Y2FzZSBOTEFfUzMyOlxcbiAyMzE6XFx0XFx0Y2FzZSBOTEFfUzY0OlxcbiAyMzI6XFx0XFx0Y2FzZSBOTEFfU0lOVDpcXG4gMjMzOlxcdFxcdGNhc2UgTkxBX1VJTlQ6XFxuIDIzNDpcXHRcXHRcXHQvKiBtYXhpbXVtIGlzIGNvbW1vbiwgdTY0IG1pbi9tYXggd2l0aCBwYWRkaW5nICovXFxuIDIzNTpcXHRcXHRcXHRyZXR1cm4gY29tbW9uICtcXG4gMjM2OlxcdFxcdFxcdCAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgKyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7XFxuIDIzNzpcXHRcXHRjYXNlIE5MQV9CRTE2OlxcbiAyMzg6XFx0XFx0Y2FzZSBOTEFfQkUzMjpcXG4gMjM5OlxcdFxcdFxcdC8qIHNhbWUgYXMgdGhlIHVuc2lnbmVkIHR5cGVzLCBwbHVzIHRoZSBieXRlIG9yZGVyICovXFxuIDI0MDpcXHRcXHRcXHRyZXR1cm4gY29tbW9uICsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTMyKSkgK1xcbiAyNDE6XFx0XFx0XFx0ICAgICAgIDIgKiAobmxhX2F0dHJfc2l6ZSgwKSArIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHU2NCkpKTtcXG4gMjQyOlxcdFxcdGNhc2UgTkxBX0JJVEZJRUxEMzI6XFxuIDI0MzpcXHRcXHRcXHRyZXR1cm4gY29tbW9uICsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTMyKSk7XFxuIDI0NDpcXHRcXHRjYXNlIE5MQV9TVFJJTkc6XFxuIDI0NTpcXHRcXHRjYXNlIE5MQV9OVUxfU1RSSU5HOlxcbiAyNDY6XFx0XFx0Y2FzZSBOTEFfQklOQVJZOlxcbiAyNDc6XFx0XFx0XFx0LyogbWF4aW11bSBpcyBjb21tb24sIHUzMiBtaW4tbGVuZ3RoL21heC1sZW5ndGggKi9cXG4gMjQ4OlxcdFxcdFxcdHJldHVybiBjb21tb24gKyAyICogbmxhX2F0dHJfc2l6ZShzaXplb2YodTMyKSk7XFxuIDI0OTpcXHRcXHRjYXNlIE5MQV9GTEFHOlxcbiAyNTA6XFx0XFx0XFx0cmV0dXJuIGNvbW1vbjtcXG4gMjUxOlxcdFxcdH1cXG4gMjUyOlxcdFxcbiAyNTM6XFx0XFx0LyogdGhpcyBzaG91bGQgdGhlbiBjYXVzZSBhIHdhcm5pbmcgbGF0ZXIgKi9cXG4gMjU0OlxcdFxcdHJldHVybiAwO1xcbiAyNTU6XFx0fVxcbiAyNTY6XFx0XFxuIDI1NzpcXHRzdGF0aWMgaW50XFxuIDI1ODpcXHRfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXFxuIDI1OTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMjYwOlxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXFxuIDI2MTpcXHRcXHRcXHRcXHRcXHQgaW50IG5lc3RhdHRyKVxcbiAyNjI6XFx0e1xcbiAyNjM6XFx0XFx0aW50IGVzdGltYXRlID0gbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUocHQpO1xcbiAyNjQ6XFx0XFx0ZW51bSBuZXRsaW5rX2F0dHJpYnV0ZV90eXBlIHR5cGU7XFxuIDI2NTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xcbiAyNjY6XFx0XFxuIDI2NzpcXHRcXHRhdHRyID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBuZXN0YXR0cik7XFxuIDI2ODpcXHRcXHRpZiAoIWF0dHIpXFxuIDI2OTpcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIDI3MDpcXHRcXG4gMjcxOlxcdFxcdHN3aXRjaCAocHQtXFx1MDAzZXR5cGUpIHtcXG4gMjcyOlxcdFxcdGRlZmF1bHQ6XFxuIDI3MzpcXHRcXHRjYXNlIE5MQV9VTlNQRUM6XFxuIDI3NDpcXHRcXHRjYXNlIE5MQV9SRUpFQ1Q6XFxuIDI3NTpcXHRcXHRcXHQvKiBza2lwIC0gdXNlIE5MQV9NSU5fTEVOIHRvIGFkdmVydGlzZSBzdWNoICovXFxuIDI3NjpcXHRcXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCBhdHRyKTtcXG4gMjc3OlxcdFxcdFxcdHJldHVybiAtRU5PREFUQTtcXG4gMjc4OlxcdFxcdGNhc2UgTkxBX05FU1RFRDpcXG4gMjc5OlxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfTkVTVEVEO1xcbiAyODA6XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuIDI4MTpcXHRcXHRjYXNlIE5MQV9ORVNURURfQVJSQVk6XFxuIDI4MjpcXHRcXHRcXHRpZiAocHQtXFx1MDAzZXR5cGUgPT0gTkxBX05FU1RFRF9BUlJBWSlcXG4gMjgzOlxcdFxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfTkVTVEVEX0FSUkFZO1xcbiAyODQ6XFx0XFx0XFx0aWYgKHN0YXRlIFxcdTAwMjZcXHUwMDI2IHB0LVxcdTAwM2VuZXN0ZWRfcG9saWN5IFxcdTAwMjZcXHUwMDI2IHB0LVxcdTAwM2VsZW4gXFx1MDAyNlxcdTAwMjZcXG4gMjg1OlxcdFxcdFxcdCAgICAobmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BPTElDWV9JRFgsXFxuIDI4NjpcXHRcXHRcXHRcXHRcXHQgbmV0bGlua19wb2xpY3lfZHVtcF9nZXRfcG9saWN5X2lkeChzdGF0ZSxcXG4gMjg3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBwdC1cXHUwMDNlbmVzdGVkX3BvbGljeSxcXG4gMjg4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBwdC1cXHUwMDNlbGVuKSkgfHxcXG4gMjg5OlxcdFxcdFxcdCAgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BPTElDWV9NQVhUWVBFLFxcbiAyOTA6XFx0XFx0XFx0XFx0XFx0IHB0LVxcdTAwM2VsZW4pKSlcXG4gMjkxOlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAyOTI6XFx0XFx0XFx0YnJlYWs7XFxuIDI5MzpcXHRcXHRjYXNlIE5MQV9VODpcXG4gMjk0OlxcdFxcdGNhc2UgTkxBX1UxNjpcXG4gMjk1OlxcdFxcdGNhc2UgTkxBX1UzMjpcXG4gMjk2OlxcdFxcdGNhc2UgTkxBX1U2NDpcXG4gMjk3OlxcdFxcdGNhc2UgTkxBX0JFMTY6XFxuIDI5ODpcXHRcXHRjYXNlIE5MQV9CRTMyOlxcbiAyOTk6XFx0XFx0Y2FzZSBOTEFfVUlOVDpcXG4gMzAwOlxcdFxcdGNhc2UgTkxBX01TRUNTOiB7XFxuIDMwMTpcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIHJhbmdlO1xcbiAzMDI6XFx0XFxuIDMwMzpcXHRcXHRcXHRpZiAocHQtXFx1MDAzZXR5cGUgPT0gTkxBX1U4KVxcbiAzMDQ6XFx0XFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VODtcXG4gMzA1OlxcdFxcdFxcdGVsc2UgaWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9VMTYgfHwgcHQtXFx1MDAzZXR5cGUgPT0gTkxBX0JFMTYpXFxuIDMwNjpcXHRcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1UxNjtcXG4gMzA3OlxcdFxcdFxcdGVsc2UgaWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9VMzIgfHwgcHQtXFx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpXFxuIDMwODpcXHRcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1UzMjtcXG4gMzA5OlxcdFxcdFxcdGVsc2UgaWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9VNjQpXFxuIDMxMDpcXHRcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1U2NDtcXG4gMzExOlxcdFxcdFxcdGVsc2VcXG4gMzEyOlxcdFxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVUlOVDtcXG4gMzEzOlxcdFxcbiAzMTQ6XFx0XFx0XFx0aWYgKChwdC1cXHUwMDNldHlwZSA9PSBOTEFfQkUxNiB8fCBwdC1cXHUwMDNldHlwZSA9PSBOTEFfQkUzMikgXFx1MDAyNlxcdTAwMjZcXG4gMzE1OlxcdFxcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUixcXG4gMzE2OlxcdFxcdFxcdFxcdFxcdE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU4pKVxcbiAzMTc6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDMxODpcXHRcXG4gMzE5OlxcdFxcdFxcdGlmIChwdC1cXHUwMDNldmFsaWRhdGlvbl90eXBlID09IE5MQV9WQUxJREFURV9NQVNLKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjQyLjI0ODU3MjIzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDEwNzEyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gQXR0cmlidXRlIFZhbGlkYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdHRlbiBhIGhhbmRsZSBvbiB0aGlzIGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAgZnVuY3Rpb24uIEkgc2VlIHdoZXJlIHRoaW5ncyBhcmUgaGVhZGVkIHdpdGggYXR0cmlidXRlIGhhbmRsaW5nLiBOb3csIEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBhbmQgdW5kZXJzdGFuZCAqaG93KiB0aGUgY29kZSB2YWxpZGF0ZXMgdGhlIHJhbmdlIGFuZCBtYXNrIHZhbHVlcyBmb3IgdGhlc2UgYXR0cmlidXRlcy4gSSBrbm93IHdoYXQgdGhlIHBvbGljeSBmcmFtZXdvcmsgKnNob3VsZCogYmUgZG9pbmcsIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gdG8gbWFrZSBzdXJlIGl0IGFsaWducyB3aXRoIG15IG1lbnRhbCBtb2RlbC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyB2YWxpZGF0aW9uIGlzIGFjdHVhbGx5IHBlcmZvcm1lZCBpbiB0aGlzIGZ1bmN0aW9uLCBvciBvdGhlciBmdW5jdGlvbnMgaXQgY2FsbHMsIHdpdGggcmVzcGVjdCB0byBuZXRsaW5rIGF0dHJpYnV0ZXMuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGFzc2Vzc2luZyB0aGUgb3ZlcmFsbCBzZWN1cml0eSBhbmQgcm9idXN0bmVzcyBvZiB0aGUgbmV0bGluayBwb2xpY3kuIFRpbWUgdG8ga2VlcCByZWFkaW5nIGFuZCBzZWUgaG93IGl0J3MgZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgyNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6NDQuMTQ5NjQ1ODEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0bGluay9wb2xpY3kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSLFxcbiAzMTY6XFx0XFx0XFx0XFx0XFx0TkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTikpXFxuIDMxNzpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0XFx0aWYgKHB0LVxcdTAwM2V2YWxpZGF0aW9uX3R5cGUgPT0gTkxBX1ZBTElEQVRFX01BU0spIHtcXG4gMzIwOlxcdFxcdFxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfTUFTSyxcXG4gMzIxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHB0LVxcdTAwM2VtYXNrLFxcbiAzMjI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9QQUQpKVxcbiAzMjM6XFx0XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDMyNDpcXHRcXHRcXHRcXHRicmVhaztcXG4gMzI1OlxcdFxcdFxcdH0gZWxzZSBpZiAocHQtXFx1MDAzZXZhbGlkYXRpb25fdHlwZSA9PSBOTEFfVkFMSURBVEVfRlVOQ1RJT04pIHtcXG4gMzI2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzMjc6XFx0XFx0XFx0fVxcbiAzMjg6XFx0XFxuIDMyOTpcXHRcXHRcXHRubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKHB0LCBcXHUwMDI2cmFuZ2UpO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHRcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX01JTl9WQUxVRV9VLFxcbiAzMzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgcmFuZ2UubWluLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRCkgfHxcXG4gMzMzOlxcdFxcdFxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfTUFYX1ZBTFVFX1UsXFxuIDMzNDpcXHRcXHRcXHRcXHRcXHQgICAgICByYW5nZS5tYXgsIE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEKSlcXG4gMzM1OlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAzMzY6XFx0XFx0XFx0YnJlYWs7XFxuIDMzNzpcXHRcXHR9XFxuIDMzODpcXHRcXHRjYXNlIE5MQV9TODpcXG4gMzM5OlxcdFxcdGNhc2UgTkxBX1MxNjpcXG4gMzQwOlxcdFxcdGNhc2UgTkxBX1MzMjpcXG4gMzQxOlxcdFxcdGNhc2UgTkxBX1M2NDpcXG4gMzQyOlxcdFxcdGNhc2UgTkxBX1NJTlQ6IHtcXG4gMzQzOlxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb25fc2lnbmVkIHJhbmdlO1xcbiAzNDQ6XFx0XFxuIDM0NTpcXHRcXHRcXHRpZiAocHQtXFx1MDAzZXR5cGUgPT0gTkxBX1M4KVxcbiAzNDY6XFx0XFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9TODtcXG4gMzQ3OlxcdFxcdFxcdGVsc2UgaWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9TMTYpXFxuIDM0ODpcXHRcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1MxNjtcXG4gMzQ5OlxcdFxcdFxcdGVsc2UgaWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9TMzIpXFxuIDM1MDpcXHRcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1MzMjtcXG4gMzUxOlxcdFxcdFxcdGVsc2UgaWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9TNjQpXFxuIDM1MjpcXHRcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1M2NDtcXG4gMzUzOlxcdFxcdFxcdGVsc2VcXG4gMzU0OlxcdFxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfU0lOVDtcXG4gMzU1OlxcdFxcbiAzNTY6XFx0XFx0XFx0aWYgKHB0LVxcdTAwM2V2YWxpZGF0aW9uX3R5cGUgPT0gTkxBX1ZBTElEQVRFX0ZVTkNUSU9OKVxcbiAzNTc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM1ODpcXHRcXG4gMzU5OlxcdFxcdFxcdG5sYV9nZXRfcmFuZ2Vfc2lnbmVkKHB0LCBcXHUwMDI2cmFuZ2UpO1xcbiAzNjA6XFx0XFxuIDM2MTpcXHRcXHRcXHRpZiAobmxhX3B1dF9zNjQoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX01JTl9WQUxVRV9TLFxcbiAzNjI6XFx0XFx0XFx0XFx0XFx0cmFuZ2UubWluLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRCkgfHxcXG4gMzYzOlxcdFxcdFxcdCAgICBubGFfcHV0X3M2NChza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfTUFYX1ZBTFVFX1MsXFxuIDM2NDpcXHRcXHRcXHRcXHRcXHRyYW5nZS5tYXgsIE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEKSlcXG4gMzY1OlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAzNjY6XFx0XFx0XFx0YnJlYWs7XFxuIDM2NzpcXHRcXHR9XFxuIDM2ODpcXHRcXHRjYXNlIE5MQV9CSVRGSUVMRDMyOlxcbiAzNjk6XFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9CSVRGSUVMRDMyO1xcbiAzNzA6XFx0XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9CSVRGSUVMRDMyX01BU0ssXFxuIDM3MTpcXHRcXHRcXHRcXHRcXHRwdC1cXHUwMDNlYml0ZmllbGQzMl92YWxpZCkpXFxuIDM3MjpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gMzczOlxcdFxcdFxcdGJyZWFrO1xcbiAzNzQ6XFx0XFx0Y2FzZSBOTEFfU1RSSU5HOlxcbiAzNzU6XFx0XFx0Y2FzZSBOTEFfTlVMX1NUUklORzpcXG4gMzc2OlxcdFxcdGNhc2UgTkxBX0JJTkFSWTpcXG4gMzc3OlxcdFxcdFxcdGlmIChwdC1cXHUwMDNldHlwZSA9PSBOTEFfU1RSSU5HKVxcbiAzNzg6XFx0XFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9TVFJJTkc7XFxuIDM3OTpcXHRcXHRcXHRlbHNlIGlmIChwdC1cXHUwMDNldHlwZSA9PSBOTEFfTlVMX1NUUklORylcXG4gMzgwOlxcdFxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfTlVMX1NUUklORztcXG4gMzgxOlxcdFxcdFxcdGVsc2VcXG4gMzgyOlxcdFxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfQklOQVJZO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRcXHRpZiAocHQtXFx1MDAzZXZhbGlkYXRpb25fdHlwZSA9PSBOTEFfVkFMSURBVEVfUkFOR0UgfHxcXG4gMzg1OlxcdFxcdFxcdCAgICBwdC1cXHUwMDNldmFsaWRhdGlvbl90eXBlID09IE5MQV9WQUxJREFURV9SQU5HRV9XQVJOX1RPT19MT05HKSB7XFxuIDM4NjpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIHJhbmdlO1xcbiAzODc6XFx0XFxuIDM4ODpcXHRcXHRcXHRcXHRubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKHB0LCBcXHUwMDI2cmFuZ2UpO1xcbiAzODk6XFx0XFxuIDM5MDpcXHRcXHRcXHRcXHRpZiAocmFuZ2UubWluIFxcdTAwMjZcXHUwMDI2XFxuIDM5MTpcXHRcXHRcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX01JTl9MRU5HVEgsXFxuIDM5MjpcXHRcXHRcXHRcXHRcXHRcXHRyYW5nZS5taW4pKVxcbiAzOTM6XFx0XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDM5NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6NDQuMTQ5Nzg4ODcyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjEwNTE4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byBBdHRyaWJ1dGUgSGFuZGxpbmcqKlxuXG5SaWdodCwgc28gSSdtIHJldmlzaXRpbmcgdGhpcyBjb2RlLCBhbmQgSSBuZWVkIHRvIGJlIGV4dHJhIHRob3JvdWdoLiBJJ3ZlIGFscmVhZHkgc2NydXRpbml6ZWQgc29tZSBhc3BlY3RzLCBidXQgbm93IEknbSB0aGlua2luZywgbGV0J3Mgbm90IGp1c3QgYXNzdW1lIGV2ZXJ5dGhpbmcncyBrb3NoZXIgd2l0aCBob3cgd2UncmUgaGFuZGxpbmcgbmV0d29yayBhdHRyaWJ1dGVzLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgYG5sYV9nZXRfcmFuZ2VfdW5zaWduZWRgLiBUaGUgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgbWFraW5nIHN1cmUgdGhvc2UgYmlnLWVuZGlhbiAxNi1iaXQgKGBOTEFfQkUxNmApIGFuZCAzMi1iaXQgKGBOTEFfQkUzMmApIHZhbHVlcyBhcmUgYmVpbmcgcHJvY2Vzc2VkIGNvcnJlY3RseS4gTXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgYnVnIG9yIGFuIGVkZ2UgY2FzZSB3aGVyZSB0aGUgYHJhbmdlYCB2YXJpYWJsZSBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBkb2Vzbid0IGhhcHBlbiwgYXMgdGhhdCB3b3VsZCBiZSBhIHNlcmlvdXMgcmVsaWFiaWxpdHkgaXNzdWUuIEdvdHRhIGNvdmVyIGFsbCBteSBiYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ0MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6NDYuMjcwODQzNjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDEwMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sYV9nZXRfcmFuZ2VfdW5zaWduZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGxpbmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRsaW5rL3BvbGljeS5jPTI1OD1fX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMjgtXFxubmV0L25ldGxpbmsvcG9saWN5LmM6MzI5OlxcdFxcdG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQocHQsIFxcdTAwMjZyYW5nZSk7XFxubmV0L25ldGxpbmsvcG9saWN5LmMtMzMwLVxcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtMzg3LVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjM4ODpcXHRcXHRcXHRubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKHB0LCBcXHUwMDI2cmFuZ2UpO1xcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTM4OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6NDYuMzIwODU5ODFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEwNTIwMDcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkYC4gTGV0J3MgY2xhcmlmeSBpdHMgZnVuY3Rpb24uIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBzdXNwZWN0IGl0J3MgZGVmaW5lZCB3aXRoaW4gdGhlIGNvcmUgTmV0bGluayBhdHRyaWJ1dGUgaGFuZGxpbmcgY29kZS4gVGhlIGBsaWIvYCBkaXJlY3RvcnkgaXMgdXN1YWxseSB0aGUgcGxhY2UgZm9yIHRob3NlIGtpbmRzIG9mIHV0aWxpdHkgZnVuY3Rpb25zLiBTbywgSSdsbCBgZ3JlcGAgZm9yIGBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkYCB3aXRoaW4gYGxpYi9ubGF0dHIuY2AsIG9yIHBvdGVudGlhbGx5IGFueSBvdGhlciByZWxldmFudCBgLmNgIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5LCB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGl2ZSBkZWZpbml0aW9uIGFuZCBkaXZlIGludG8gaXRzIGltcGxlbWVudGF0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBjb2RlLCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODg5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6NTAuNDI2MDY0NTE5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc1NDA4Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sYV9nZXRfcmFuZ2VfdW5zaWduZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0bGluay5oPTI0NjE9c3RhdGljIGlubGluZSBib29sIG5sYV9pc19sYXN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgaW50IHJlbSlcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0yNDY1LVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDoyNDY2OnZvaWQgbmxhX2dldF9yYW5nZV91bnNpZ25lZChjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTI0NjctXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gKnJhbmdlKTtcXG4tLVxcbmxpYi9ubGF0dHIuYz04OT1zdGF0aWMgaW50IG5sYV92YWxpZGF0ZV9hcnJheShjb25zdCBzdHJ1Y3QgbmxhdHRyICpoZWFkLCBpbnQgbGVuLCBpbnQgbWF4dHlwZSxcXG4tLVxcbmxpYi9ubGF0dHIuYy0xMTgtXFxubGliL25sYXR0ci5jOjExOTp2b2lkIG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxcbmxpYi9ubGF0dHIuYy0xMjAtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gKnJhbmdlKVxcbi0tXFxubGliL25sYXR0ci5jPTE3MD1zdGF0aWMgaW50IG5sYV92YWxpZGF0ZV9yYW5nZV91bnNpZ25lZChjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXFxuLS1cXG5saWIvbmxhdHRyLmMtMjA5LVxcbmxpYi9ubGF0dHIuYzoyMTA6XFx0bmxhX2dldF9yYW5nZV91bnNpZ25lZChwdCwgXFx1MDAyNnJhbmdlKTtcXG5saWIvbmxhdHRyLmMtMjExLVxcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmM9MjU4PV9fbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyKHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSxcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTMyOC1cXG5uZXQvbmV0bGluay9wb2xpY3kuYzozMjk6XFx0XFx0bmxhX2dldF9yYW5nZV91bnNpZ25lZChwdCwgXFx1MDAyNnJhbmdlKTtcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMzAtXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy0zODctXFxubmV0L25ldGxpbmsvcG9saWN5LmM6Mzg4OlxcdFxcdFxcdG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQocHQsIFxcdTAwMjZyYW5nZSk7XFxubmV0L25ldGxpbmsvcG9saWN5LmMtMzg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzo1Mi43MDE0ODY0NDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxMzQ1MDE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYGxpYi9ubGF0dHIuY2AgLSBMaW5lIDExOSoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBpbiBvbiBgbGliL25sYXR0ci5jYCBhZ2Fpbi4gQWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYW55dGhpbmcgTmV0bGluay1yZWxhdGVkLiBBbmQgSSdtIHplcm9pbmcgaW4gb24gbGluZSAxMTkuIFJpZ2h0LCBzbyB3aGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQgYW0gSSBsb29raW5nIGZvciAqdGhpcyogdGltZT8gSXMgaXQgYSBwb3RlbnRpYWwgYnVnLCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHksIG9yIHBlcmhhcHMganVzdCByZWZyZXNoaW5nIG15IG1lbW9yeSBvbiBhIHNwZWNpZmljIGF0dHJpYnV0ZSBoYW5kbGluZyBtZWNoYW5pc20/IENoYW5jZXMgYXJlLCBnaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIGlkZWEgb2Ygd2hhdCBzZWN0aW9uIG9mIHRoZSBjb2RlIHRoaXMgcmVsYXRlcyB0by4gSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgYXR0cmlidXRlIHBhcnNpbmcsIHZhbGlkYXRpb24sIG9yIHBlcmhhcHMgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHdpdGhpbiBhIE5ldGxpbmsgbWVzc2FnZS4gTGluZSAxMTkuLi4gTGV0IG1lIHB1bGwgdGhhdCB1cC4gT2theSwgbGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjU0LjcxNDkzOTE3NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL25sYXR0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExNTpcXHRcXG4gMTE2OlxcdFxcdHJldHVybiAwO1xcbiAxMTc6XFx0fVxcbiAxMTg6XFx0XFxuIDExOTpcXHR2b2lkIG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxcbiAxMjA6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gKnJhbmdlKVxcbiAxMjE6XFx0e1xcbiAxMjI6XFx0XFx0V0FSTl9PTl9PTkNFKHB0LVxcdTAwM2V2YWxpZGF0aW9uX3R5cGUgIT0gTkxBX1ZBTElEQVRFX1JBTkdFX1BUUiBcXHUwMDI2XFx1MDAyNlxcbiAxMjM6XFx0XFx0XFx0ICAgICAocHQtXFx1MDAzZW1pbiBcXHUwMDNjIDAgfHwgcHQtXFx1MDAzZW1heCBcXHUwMDNjIDApKTtcXG4gMTI0OlxcdFxcbiAxMjU6XFx0XFx0cmFuZ2UtXFx1MDAzZW1pbiA9IDA7XFxuIDEyNjpcXHRcXG4gMTI3OlxcdFxcdHN3aXRjaCAocHQtXFx1MDAzZXR5cGUpIHtcXG4gMTI4OlxcdFxcdGNhc2UgTkxBX1U4OlxcbiAxMjk6XFx0XFx0XFx0cmFuZ2UtXFx1MDAzZW1heCA9IFU4X01BWDtcXG4gMTMwOlxcdFxcdFxcdGJyZWFrO1xcbiAxMzE6XFx0XFx0Y2FzZSBOTEFfVTE2OlxcbiAxMzI6XFx0XFx0Y2FzZSBOTEFfQkUxNjpcXG4gMTMzOlxcdFxcdGNhc2UgTkxBX0JJTkFSWTpcXG4gMTM0OlxcdFxcdFxcdHJhbmdlLVxcdTAwM2VtYXggPSBVMTZfTUFYO1xcbiAxMzU6XFx0XFx0XFx0YnJlYWs7XFxuIDEzNjpcXHRcXHRjYXNlIE5MQV9VMzI6XFxuIDEzNzpcXHRcXHRjYXNlIE5MQV9CRTMyOlxcbiAxMzg6XFx0XFx0XFx0cmFuZ2UtXFx1MDAzZW1heCA9IFUzMl9NQVg7XFxuIDEzOTpcXHRcXHRcXHRicmVhaztcXG4gMTQwOlxcdFxcdGNhc2UgTkxBX1U2NDpcXG4gMTQxOlxcdFxcdGNhc2UgTkxBX1VJTlQ6XFxuIDE0MjpcXHRcXHRjYXNlIE5MQV9NU0VDUzpcXG4gMTQzOlxcdFxcdFxcdHJhbmdlLVxcdTAwM2VtYXggPSBVNjRfTUFYO1xcbiAxNDQ6XFx0XFx0XFx0YnJlYWs7XFxuIDE0NTpcXHRcXHRkZWZhdWx0OlxcbiAxNDY6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbiAxNDc6XFx0XFx0XFx0cmV0dXJuO1xcbiAxNDg6XFx0XFx0fVxcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRzd2l0Y2ggKHB0LVxcdTAwM2V2YWxpZGF0aW9uX3R5cGUpIHtcXG4gMTUxOlxcdFxcdGNhc2UgTkxBX1ZBTElEQVRFX1JBTkdFOlxcbiAxNTI6XFx0XFx0Y2FzZSBOTEFfVkFMSURBVEVfUkFOR0VfV0FSTl9UT09fTE9ORzpcXG4gMTUzOlxcdFxcdFxcdHJhbmdlLVxcdTAwM2VtaW4gPSBwdC1cXHUwMDNlbWluO1xcbiAxNTQ6XFx0XFx0XFx0cmFuZ2UtXFx1MDAzZW1heCA9IHB0LVxcdTAwM2VtYXg7XFxuIDE1NTpcXHRcXHRcXHRicmVhaztcXG4gMTU2OlxcdFxcdGNhc2UgTkxBX1ZBTElEQVRFX1JBTkdFX1BUUjpcXG4gMTU3OlxcdFxcdFxcdCpyYW5nZSA9ICpwdC1cXHUwMDNlcmFuZ2U7XFxuIDE1ODpcXHRcXHRcXHRicmVhaztcXG4gMTU5OlxcdFxcdGNhc2UgTkxBX1ZBTElEQVRFX01JTjpcXG4gMTYwOlxcdFxcdFxcdHJhbmdlLVxcdTAwM2VtaW4gPSBwdC1cXHUwMDNlbWluO1xcbiAxNjE6XFx0XFx0XFx0YnJlYWs7XFxuIDE2MjpcXHRcXHRjYXNlIE5MQV9WQUxJREFURV9NQVg6XFxuIDE2MzpcXHRcXHRcXHRyYW5nZS1cXHUwMDNlbWF4ID0gcHQtXFx1MDAzZW1heDtcXG4gMTY0OlxcdFxcdFxcdGJyZWFrO1xcbiAxNjU6XFx0XFx0ZGVmYXVsdDpcXG4gMTY2OlxcdFxcdFxcdGJyZWFrO1xcbiAxNjc6XFx0XFx0fVxcbiAxNjg6XFx0fVxcbiAxNjk6XFx0XFxuIDE3MDpcXHRzdGF0aWMgaW50IG5sYV92YWxpZGF0ZV9yYW5nZV91bnNpZ25lZChjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXFxuIDE3MTpcXHRcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLFxcbiAxNzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4gMTczOlxcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgdmFsaWRhdGUpXFxuIDE3NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjU0LjcxNTA4NTk4NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTQzMzc1NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5ldGxpbmsgUG9saWN5IER1bXBpbmcqKlxuXG5Pa2F5LCBzbyBJIGp1c3QgcmVhbGl6ZWQgc29tZXRoaW5nIGFib3V0IHRoZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbi4gYG5sYV9nZXRfcmFuZ2VfdW5zaWduZWRgICphbHJlYWR5KiBoYW5kbGVzIGBOTEFfQkUxNmAgYW5kIGBOTEFfQkUzMmAhIEFuZCB0aGUgYHJhbmdlYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgcmlnaHQgZnJvbSB0aGUgc3RhcnQgd2l0aCBgcmFuZ2UtXHUwMDNlbWluID0gMDsgcmFuZ2UtXHUwMDNlbWF4ID0gLi4uYC4gVGhhdCdzIGdvb2QgdG8ga25vdywgbGVzcyB3b3JrIG5lZWRlZCBvbiB0aGF0IHNpZGUuXG5cbk5vdywgSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyBgX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJgIGFjdHVhbGx5IGR1bXBzIHBvbGljaWVzIHdoZW4gZGVhbGluZyB3aXRoIG5ldGxpbmsgdXNlcnNwYWNlIG1lc3NhZ2VzLiBTcGVjaWZpY2FsbHksIEknbSBjaGVja2luZyB0aGUgY2FzZSB3aGVuIHRoZSBwb2xpY3kgdHlwZSBgcHQtXHUwMDNldHlwZWAgaXMgZWl0aGVyIGBOTEFfQkUxNmAgb3IgYE5MQV9CRTMyYC5cblxuSGVyZSdzIHdoYXQgSSBzZWU6IGl0IGNhbGxzIGBubGFfcHV0X3UzMmAgdG8gcHV0IGEgc3BlY2lmaWMgYXR0cmlidXRlLCBgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSYCwgd2l0aCB0aGUgdmFsdWUgYE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU5gLCB3aGljaCBlZmZlY3RpdmVseSBzZXRzIGEgMzItYml0IGNvbnN0YW50LCBgMWAsIGluIHRoZSBuZXRsaW5rIHNrYi4gRm9sbG93aW5nIHRoYXQsIGl0J3MgdXNpbmcgYG5sYV9wdXRfdTY0XzY0Yml0YCB0byBoYW5kbGUgdGhlIG1pbi9tYXgvbWFzayB2YWx1ZXMg4oCTIHBhZGRpbmcgaGFuZGxlZCBjb3JyZWN0bHkgd2l0aCBgTkxfUE9MSUNZX1RZUEVfQVRUUl9QQURgIGlzIHplcm9lZCBvdXQgYXMgZXhwZWN0ZWQgYnkgYG5sYV9wdXRfdTY0XzY0Yml0YC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGl0IG1ha2VzIHNlbnNlIHRvIHZlcmlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG5sYV9wdXRfdTY0XzY0Yml0YCBhZ2FpbjsgY2FuJ3QgYmUgdG9vIGNhcmVmdWwuIEdvdHRhIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjY2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6NTcuNjU4NDY0NjExWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA2MzY2OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sYV9wdXRfdTY0XzY0Yml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTc1MSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz0zODIyPXN0YXRpYyBpbnQgbmxhX3B1dF9zdGF0dXNfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzg3OS1cXHRcXHQgICAgICAgZGV2aWNlLVxcdTAwM2VzdGF0ZS5pKSB8fFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg4MDpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19FRF9VVUlELFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzg4MS1cXHRcXHRcXHQgICAgIGRldmljZS1cXHUwMDNlZWRfdXVpZCwgMCkgfHxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM4ODI6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQ0FQQUNJVFksXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zODgzLVxcdFxcdFxcdCAgICAgZ2V0X2NhcGFjaXR5KGRldmljZS1cXHUwMDNldmRpc2spLCAwKSB8fFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg4NDpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19TRU5EX0NOVCxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4ODUtXFx0XFx0XFx0ICAgICBkZXZpY2UtXFx1MDAzZXNlbmRfY250LCAwKSB8fFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg4NjpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19SRUNWX0NOVCxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4ODctXFx0XFx0XFx0ICAgICBkZXZpY2UtXFx1MDAzZXJlY3ZfY250LCAwKSB8fFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg4ODpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19SRUFEX0NOVCxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4ODktXFx0XFx0XFx0ICAgICBkZXZpY2UtXFx1MDAzZXJlYWRfY250LCAwKSB8fFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg5MDpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19XUklUX0NOVCxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4OTEtXFx0XFx0XFx0ICAgICBkZXZpY2UtXFx1MDAzZXdyaXRfY250LCAwKSB8fFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg5MjpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19BTF9XUklUX0NOVCxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4OTMtXFx0XFx0XFx0ICAgICBkZXZpY2UtXFx1MDAzZWFsX3dyaXRfY250LCAwKSB8fFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg5NDpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19CTV9XUklUX0NOVCxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4OTUtXFx0XFx0XFx0ICAgICBkZXZpY2UtXFx1MDAzZWJtX3dyaXRfY250LCAwKSB8fFxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zOTE2LVxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9TVEFURV9JTkZPX0RJU0tfRkxBR1MsIGRldmljZS1cXHUwMDNlbGRldi1cXHUwMDNlbWQuZmxhZ3MpIHx8XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozOTE3OlxcdFxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX0JJVFNfVE9UQUwsIGRyYmRfYm1fYml0cyhkZXZpY2UpLCAwKSB8fFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MzkxODpcXHRcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19CSVRTX09PUyxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM5MTktXFx0XFx0XFx0XFx0ICAgICAgZHJiZF9ibV90b3RhbF93ZWlnaHQoZGV2aWNlKSwgMCkpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM5MjItXFx0XFx0ICAgIENfUEFVU0VEX1NZTkNfVCBcXHUwMDNlPSBkZXZpY2UtXFx1MDAzZXN0YXRlLmNvbm4pIHtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM5MjM6XFx0XFx0XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQklUU19SU19UT1RBTCxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM5MjQtXFx0XFx0XFx0XFx0XFx0ICAgICAgZGV2aWNlLVxcdTAwM2Vyc190b3RhbCwgMCkgfHxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM5MjU6XFx0XFx0XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQklUU19SU19GQUlMRUQsXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zOTI2LVxcdFxcdFxcdFxcdFxcdCAgICAgIGRldmljZS1cXHUwMDNlcnNfZmFpbGVkLCAwKSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jPTE5MDA9aW50IGRpc2tfY29uZl90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGRpc2tfY29uZiAqcylcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTE5MTQtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MTkxNTpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfRElTS19DT05GX0RJU0tfU0laRSwgcy1cXHUwMDNlZGlza19zaXplLCAwKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0xOTE2LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM9MjA5ND1pbnQgcmVzaXplX3Bhcm1zX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcmVzaXplX3Bhcm1zICpzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjEwMC1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyMTAxOlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9SRVNJWkVfUEFSTVNfUkVTSVpFX1NJWkUsIHMtXFx1MDAzZXJlc2l6ZV9zaXplLCAwKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yMTAyLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM9MjEyMT1pbnQgc3RhdGVfaW5mb190b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YXRlX2luZm8gKnMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yMTMxLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjIxMzI6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQ0FQQUNJVFksIHMtXFx1MDAzZWNhcGFjaXR5LCAwKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yMTMzLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjIxMzQ6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fRURfVVVJRCwgcy1cXHUwMDNlZWRfdXVpZCwgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjEzNS1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNDQtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE0NTpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19CSVRTX1RPVEFMLCBzLVxcdTAwM2ViaXRzX3RvdGFsLCAwKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yMTQ2LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjIxNDc6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQklUU19PT1MsIHMtXFx1MDAzZWJpdHNfb29zLCAwKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yMTQ4LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjIxNDk6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQklUU19SU19UT1RBTCwgcy1cXHUwMDNlYml0c19yc190b3RhbCwgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjE1MC1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyMTUxOlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX0JJVFNfUlNfRkFJTEVELCBzLVxcdTAwM2ViaXRzX3JzX2ZhaWxlZCwgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjE1Mi1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNTctXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE1ODpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19TRU5EX0NOVCwgcy1cXHUwMDNlc2VuZF9jbnQsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNTktXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2MDpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19SRUNWX0NOVCwgcy1cXHUwMDNlcmVjdl9jbnQsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjEtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2MjpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19SRUFEX0NOVCwgcy1cXHUwMDNlcmVhZF9jbnQsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjMtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2NDpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19XUklUX0NOVCwgcy1cXHUwMDNld3JpdF9jbnQsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjUtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2NjpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19BTF9XUklUX0NOVCwgcy1cXHUwMDNlYWxfd3JpdF9jbnQsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjctXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2ODpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19CTV9XUklUX0NOVCwgcy1cXHUwMDNlYm1fd3JpdF9jbnQsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjktXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYz0yMTg2PWludCBzdGFydF9vdl9wYXJtc190b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YXJ0X292X3Bhcm1zICpzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjE5Mi1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyMTkzOlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFSVF9PVl9QQVJNU19PVl9TVEFSVF9TRUNUT1IsIHMtXFx1MDAzZW92X3N0YXJ0X3NlY3RvciwgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjE5NC1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyMTk1OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFSVF9PVl9QQVJNU19PVl9TVE9QX1NFQ1RPUiwgcy1cXHUwMDNlb3Zfc3RvcF9zZWN0b3IsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxOTYtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYz0yMzk0PWludCBkZXZpY2Vfc3RhdGlzdGljc190b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGRldmljZV9zdGF0aXN0aWNzICpzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQwMC1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyNDAxOlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9ERVZJQ0VfU1RBVElTVElDU19ERVZfU0laRSwgcy1cXHUwMDNlZGV2X3NpemUsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0MDItXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjQwMzpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfREVWSUNFX1NUQVRJU1RJQ1NfREVWX1JFQUQsIHMtXFx1MDAzZWRldl9yZWFkLCAwKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yNDA0LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjI0MDU6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX0RFVklDRV9TVEFUSVNUSUNTX0RFVl9XUklURSwgcy1cXHUwMDNlZGV2X3dyaXRlLCAwKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yNDA2LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjI0MDc6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX0RFVklDRV9TVEFUSVNUSUNTX0RFVl9BTF9XUklURVMsIHMtXFx1MDAzZWRldl9hbF93cml0ZXMsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0MDgtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjQwOTpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfREVWSUNFX1NUQVRJU1RJQ1NfREVWX0JNX1dSSVRFUywgcy1cXHUwMDNlZGV2X2JtX3dyaXRlcywgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQxMC1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0MjAtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjQyMTpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfREVWSUNFX1NUQVRJU1RJQ1NfREVWX0VYUE9TRURfREFUQV9VVUlELCBzLVxcdTAwM2VkZXZfZXhwb3NlZF9kYXRhX3V1aWQsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0MjItXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjQyMzpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfREVWSUNFX1NUQVRJU1RJQ1NfREVWX0NVUlJFTlRfVVVJRCwgcy1cXHUwMDNlZGV2X2N1cnJlbnRfdXVpZCwgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQyNC1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jPTI0NTk9aW50IHBlZXJfZGV2aWNlX3N0YXRpc3RpY3NfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwZWVyX2RldmljZV9zdGF0aXN0aWNzICpzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQ2NS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyNDY2OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9QRUVSX0RFVklDRV9TVEFUSVNUSUNTX1BFRVJfREVWX1JFQ0VJVkVELCBzLVxcdTAwM2VwZWVyX2Rldl9yZWNlaXZlZCwgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQ2Ny1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyNDY4OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9QRUVSX0RFVklDRV9TVEFUSVNUSUNTX1BFRVJfREVWX1NFTlQsIHMtXFx1MDAzZXBlZXJfZGV2X3NlbnQsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0NjktXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yNDczLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjI0NzQ6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1BFRVJfREVWSUNFX1NUQVRJU1RJQ1NfUEVFUl9ERVZfT1VUX09GX1NZTkMsIHMtXFx1MDAzZXBlZXJfZGV2X291dF9vZl9zeW5jLCAwKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yNDc1LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjI0NzY6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1BFRVJfREVWSUNFX1NUQVRJU1RJQ1NfUEVFUl9ERVZfUkVTWU5DX0ZBSUxFRCwgcy1cXHUwMDNlcGVlcl9kZXZfcmVzeW5jX2ZhaWxlZCwgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQ3Ny1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyNDc4OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9QRUVSX0RFVklDRV9TVEFUSVNUSUNTX1BFRVJfREVWX0JJVE1BUF9VVUlELCBzLVxcdTAwM2VwZWVyX2Rldl9iaXRtYXBfdXVpZCwgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQ3OS1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9MjE4PXN0YXRpYyBpbnQgX3JkbWFfbmxfcHV0X2RyaXZlcl91NjQoc3RydWN0IHNrX2J1ZmYgKm1zZywgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjIzLVxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzoyMjQ6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX0RSSVZFUl9VNjQsIHZhbHVlLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjI1LVxcdFxcdFxcdCAgICAgIFJETUFfTkxERVZfQVRUUl9QQUQpKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0yOTA9c3RhdGljIGludCBmaWxsX2Rldl9pbmZvKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzAyLVxcdEJVSUxEX0JVR19PTihzaXplb2YoZGV2aWNlLVxcdTAwM2VhdHRycy5kZXZpY2VfY2FwX2ZsYWdzKSAhPSBzaXplb2YodTY0KSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzozMDM6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX0NBUF9GTEFHUyxcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTMwNC1cXHRcXHRcXHQgICAgICBkZXZpY2UtXFx1MDAzZWF0dHJzLmRldmljZV9jYXBfZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTMxMi1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjMxMzpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfTk9ERV9HVUlELFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzE0LVxcdFxcdFxcdCAgICAgIGJlNjRfdG9fY3B1KGRldmljZS1cXHUwMDNlbm9kZV9ndWlkKSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzE2LVxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzozMTc6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX1NZU19JTUFHRV9HVUlELFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzE4LVxcdFxcdFxcdCAgICAgIGJlNjRfdG9fY3B1KGRldmljZS1cXHUwMDNlYXR0cnMuc3lzX2ltYWdlX2d1aWQpLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0zNTk9c3RhdGljIGludCBmaWxsX3BvcnRfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0zODItXFx0XFx0XFx0KCh1NjQpYXR0ci5wb3J0X2NhcF9mbGFnczIgXFx1MDAzY1xcdTAwM2MgMzIpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MzgzOlxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9DQVBfRkxBR1MsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0zODQtXFx0XFx0XFx0XFx0ICAgICAgY2FwX2ZsYWdzLCBSRE1BX05MREVWX0FUVFJfUEFEKSlcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTM4NS1cXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6Mzg2OlxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9TVUJORVRfUFJFRklYLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzg3LVxcdFxcdFxcdFxcdCAgICAgIGF0dHIuc3VibmV0X3ByZWZpeCwgUkRNQV9OTERFVl9BVFRSX1BBRCkpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jPTQxNj1zdGF0aWMgaW50IGZpbGxfcmVzX2luZm9fZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtNDI3LVxcdFxcdGdvdG8gZXJyO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6NDI4OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9SRVNfU1VNTUFSWV9FTlRSWV9DVVJSLCBjdXJyLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtNDI5LVxcdFxcdFxcdCAgICAgIFJETUFfTkxERVZfQVRUUl9QQUQpKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtNDMwLVxcdFxcdGdvdG8gZXJyO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6NDMxOlxcdGlmIChtYXggXFx1MDAyNlxcdTAwMjYgbmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfUkVTX1NVTU1BUllfRU5UUllfTUFYLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtNDMyLVxcdFxcdFxcdFxcdCAgICAgbWF4LCBSRE1BX05MREVWX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9NjgxPXN0YXRpYyBpbnQgZmlsbF9yZXNfY3FfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgYm9vbCBoYXNfY2FwX25ldF9hZG1pbixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtNjg4LVxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzo2ODk6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX1JFU19VU0VDTlQsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy02OTAtXFx0XFx0XFx0ICAgICAgYXRvbWljX3JlYWQoXFx1MDAyNmNxLVxcdTAwM2V1c2VjbnQpLCBSRE1BX05MREVWX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9NzI2PXN0YXRpYyBpbnQgZmlsbF9yZXNfbXJfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgYm9vbCBoYXNfY2FwX25ldF9hZG1pbixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtNzM4LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6NzM5OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9SRVNfTVJMRU4sIG1yLVxcdTAwM2VsZW5ndGgsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy03NDAtXFx0XFx0XFx0ICAgICAgUkRNQV9OTERFVl9BVFRSX1BBRCkpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jPTc3Mj1zdGF0aWMgaW50IGZpbGxfcmVzX3BkX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIGJvb2wgaGFzX2NhcF9uZXRfYWRtaW4sXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTc4NS1cXHR9XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzo3ODY6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX1JFU19VU0VDTlQsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy03ODctXFx0XFx0XFx0ICAgICAgYXRvbWljX3JlYWQoXFx1MDAyNnBkLVxcdTAwM2V1c2VjbnQpLCBSRE1BX05MREVWX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9MTAyNj1pbnQgcmRtYV9ubF9zdGF0X2h3Y291bnRlcl9lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xMDM3LVxcdFxcdGdvdG8gZXJyO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MTAzODpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfU1RBVF9IV0NPVU5URVJfRU5UUllfVkFMVUUsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xMDM5LVxcdFxcdFxcdCAgICAgIHZhbHVlLCBSRE1BX05MREVWX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9MTkwNj1zdGF0aWMgaW50IG5sZGV2X2dldF9jaGFyZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xOTYyLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MTk2MzpcXHRlcnIgPSBubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9DSEFSREVWLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMTk2NC1cXHRcXHRcXHRcXHRodWdlX2VuY29kZV9kZXYoZGF0YS5jZGV2LVxcdTAwM2VkZXZ0KSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMTk2Ny1cXHRcXHRnb3RvIG91dF9kYXRhO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MTk2ODpcXHRlcnIgPSBubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9DSEFSREVWX0FCSSwgZGF0YS5hYmksXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xOTY5LVxcdFxcdFxcdFxcdFJETUFfTkxERVZfQVRUUl9QQUQpO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0yNzIwPXN0YXRpYyBpbnQgZmlsbF9mcm1yX3Bvb2xfa2V5KHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBpYl9mcm1yX2tleSAqa2V5KVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzMyLVxcdFxcdGdvdG8gZXJyO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MjczMzpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfRlJNUl9QT09MX0tFWV9WRU5ET1JfS0VZLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjczNC1cXHRcXHRcXHQgICAgICBrZXktXFx1MDAzZXZlbmRvcl9rZXksIFJETUFfTkxERVZfQVRUUl9QQUQpKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjczNS1cXHRcXHRnb3RvIGVycjtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjI3MzY6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX0ZSTVJfUE9PTF9LRVlfTlVNX0RNQV9CTE9DS1MsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzM3LVxcdFxcdFxcdCAgICAgIGtleS1cXHUwMDNlbnVtX2RtYV9ibG9ja3MsIFJETUFfTkxERVZfQVRUUl9QQUQpKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzQwLVxcdGlmIChrZXktXFx1MDAzZWtlcm5lbF92ZW5kb3Jfa2V5IFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzoyNzQxOlxcdCAgICBubGFfcHV0X3U2NF82NGJpdChtc2csXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzQyLVxcdFxcdFxcdCAgICAgIFJETUFfTkxERVZfQVRUUl9GUk1SX1BPT0xfS0VZX0tFUk5FTF9WRU5ET1JfS0VZLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0yNzUzPXN0YXRpYyBpbnQgZmlsbF9mcm1yX3Bvb2xfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGliX2ZybXJfcG9vbCAqcG9vbClcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjc2MS1cXHRcXHRnb3RvIGVycl91bmxvY2s7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzoyNzYyOlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9GUk1SX1BPT0xfTUFYX0lOX1VTRSxcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTI3NjMtXFx0XFx0XFx0ICAgICAgcG9vbC1cXHUwMDNlbWF4X2luX3VzZSwgUkRNQV9OTERFVl9BVFRSX1BBRCkpXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzY0LVxcdFxcdGdvdG8gZXJyX3VubG9jaztcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjI3NjU6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX0ZSTVJfUE9PTF9JTl9VU0UsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzY2LVxcdFxcdFxcdCAgICAgIHBvb2wtXFx1MDAzZWluX3VzZSwgUkRNQV9OTERFVl9BVFRSX1BBRCkpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM9MzAxND1pbnQgYm9uZF8zYWRfc3RhdHNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZF8zYWRfc3RhdHMgKnN0YXRzKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwMTgtXFx0dmFsID0gYXRvbWljNjRfcmVhZChcXHUwMDI2c3RhdHMtXFx1MDAzZWxhY3BkdV9yeCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjMwMTk6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgQk9ORF8zQURfU1RBVF9MQUNQRFVfUlgsIHZhbCxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzAyMC1cXHRcXHRcXHQgICAgICBCT05EXzNBRF9TVEFUX1BBRCkpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzAyMi1cXHR2YWwgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZzdGF0cy1cXHUwMDNlbGFjcGR1X3R4KTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MzAyMzpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBCT05EXzNBRF9TVEFUX0xBQ1BEVV9UWCwgdmFsLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDI0LVxcdFxcdFxcdCAgICAgIEJPTkRfM0FEX1NUQVRfUEFEKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDI2LVxcdHZhbCA9IGF0b21pYzY0X3JlYWQoXFx1MDAyNnN0YXRzLVxcdTAwM2VsYWNwZHVfdW5rbm93bl9yeCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjMwMjc6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgQk9ORF8zQURfU1RBVF9MQUNQRFVfVU5LTk9XTl9SWCwgdmFsLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDI4LVxcdFxcdFxcdCAgICAgIEJPTkRfM0FEX1NUQVRfUEFEKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDMwLVxcdHZhbCA9IGF0b21pYzY0X3JlYWQoXFx1MDAyNnN0YXRzLVxcdTAwM2VsYWNwZHVfaWxsZWdhbF9yeCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjMwMzE6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgQk9ORF8zQURfU1RBVF9MQUNQRFVfSUxMRUdBTF9SWCwgdmFsLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDMyLVxcdFxcdFxcdCAgICAgIEJPTkRfM0FEX1NUQVRfUEFEKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDM1LVxcdHZhbCA9IGF0b21pYzY0X3JlYWQoXFx1MDAyNnN0YXRzLVxcdTAwM2VtYXJrZXJfcngpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzozMDM2OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEJPTkRfM0FEX1NUQVRfTUFSS0VSX1JYLCB2YWwsXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwMzctXFx0XFx0XFx0ICAgICAgQk9ORF8zQURfU1RBVF9QQUQpKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwMzktXFx0dmFsID0gYXRvbWljNjRfcmVhZChcXHUwMDI2c3RhdHMtXFx1MDAzZW1hcmtlcl90eCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjMwNDA6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgQk9ORF8zQURfU1RBVF9NQVJLRVJfVFgsIHZhbCxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA0MS1cXHRcXHRcXHQgICAgICBCT05EXzNBRF9TVEFUX1BBRCkpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA0My1cXHR2YWwgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZzdGF0cy1cXHUwMDNlbWFya2VyX3Jlc3BfcngpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzozMDQ0OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEJPTkRfM0FEX1NUQVRfTUFSS0VSX1JFU1BfUlgsIHZhbCxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA0NS1cXHRcXHRcXHQgICAgICBCT05EXzNBRF9TVEFUX1BBRCkpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA0Ny1cXHR2YWwgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZzdGF0cy1cXHUwMDNlbWFya2VyX3Jlc3BfdHgpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzozMDQ4OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEJPTkRfM0FEX1NUQVRfTUFSS0VSX1JFU1BfVFgsIHZhbCxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA0OS1cXHRcXHRcXHQgICAgICBCT05EXzNBRF9TVEFUX1BBRCkpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA1MS1cXHR2YWwgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZzdGF0cy1cXHUwMDNlbWFya2VyX3Vua25vd25fcngpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzozMDUyOlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEJPTkRfM0FEX1NUQVRfTUFSS0VSX1VOS05PV05fUlgsIHZhbCxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA1My1cXHRcXHRcXHQgICAgICBCT05EXzNBRF9TVEFUX1BBRCkpXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYz0yMTgwPXN0YXRpYyBpbnQgZ3RwX2dlbmxfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBzbmRfcG9ydGlkLCB1MzIgc25kX3NlcSxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTIyMTgtXFx0Y2FzZSBHVFBfVjA6XFxuZHJpdmVycy9uZXQvZ3RwLmM6MjIxOTpcXHRcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBHVFBBX1RJRCwgcGN0eC1cXHUwMDNldS52MC50aWQsIEdUUEFfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L2d0cC5jLTIyMjAtXFx0XFx0ICAgIG5sYV9wdXRfdTE2KHNrYiwgR1RQQV9GTE9XLCBwY3R4LVxcdTAwM2V1LnYwLmZsb3cpKVxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9MTU1NT1zdGF0aWMgaW50IG5sYV9wdXRfc2NpKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgc2NpX3QgdmFsdWUsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0xNTU3LXtcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzoxNTU4OlxcdHJldHVybiBubGFfcHV0X3U2NF82NGJpdChza2IsIGF0dHJ0eXBlLCAoX19mb3JjZSB1NjQpdmFsdWUsIHBhZGF0dHIpO1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTE1NTktfVxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9Mjg2MT1zdGF0aWMgaW50IGNvcHlfcnhfc2Nfc3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1hY3NlY19yeF9zY19zdGF0cyAqc3VtKVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NjIte1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4NjM6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9PQ1RFVFNfVkFMSURBVEVELFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NjQtXFx0XFx0XFx0ICAgICAgc3VtLVxcdTAwM2VJbk9jdGV0c1ZhbGlkYXRlZCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODY1LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4NjY6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9PQ1RFVFNfREVDUllQVEVELFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NjctXFx0XFx0XFx0ICAgICAgc3VtLVxcdTAwM2VJbk9jdGV0c0RlY3J5cHRlZCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODY4LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4Njk6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX1VOQ0hFQ0tFRCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODcwLVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlSW5Qa3RzVW5jaGVja2VkLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NzEtXFx0XFx0XFx0ICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQpIHx8XFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mjg3MjpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX0lOX1BLVFNfREVMQVlFRCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODczLVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlSW5Qa3RzRGVsYXllZCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODc0LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4NzU6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX09LLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NzYtXFx0XFx0XFx0ICAgICAgc3VtLVxcdTAwM2VJblBrdHNPSyxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODc3LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4Nzg6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX0lOVkFMSUQsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjg3OS1cXHRcXHRcXHQgICAgICBzdW0tXFx1MDAzZUluUGt0c0ludmFsaWQsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjg4MC1cXHRcXHRcXHQgICAgICBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX1BBRCkgfHxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzoyODgxOlxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfSU5fUEtUU19MQVRFLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4ODItXFx0XFx0XFx0ICAgICAgc3VtLVxcdTAwM2VJblBrdHNMYXRlLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4ODMtXFx0XFx0XFx0ICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQpIHx8XFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mjg4NDpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX0lOX1BLVFNfTk9UX1ZBTElELFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4ODUtXFx0XFx0XFx0ICAgICAgc3VtLVxcdTAwM2VJblBrdHNOb3RWYWxpZCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODg2LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4ODc6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX05PVF9VU0lOR19TQSxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODg4LVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlSW5Qa3RzTm90VXNpbmdTQSxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODg5LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4OTA6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX1VOVVNFRF9TQSxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODkxLVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlSW5Qa3RzVW51c2VkU0EsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYz0yOTM2PXN0YXRpYyBpbnQgY29weV90eF9zY19zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWFjc2VjX3R4X3NjX3N0YXRzICpzdW0pXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjkzNy17XFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6MjkzODpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfVFhTQ19TVEFUU19BVFRSX09VVF9QS1RTX1BST1RFQ1RFRCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yOTM5LVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlT3V0UGt0c1Byb3RlY3RlZCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yOTQwLVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19UWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI5NDE6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1RYU0NfU1RBVFNfQVRUUl9PVVRfUEtUU19FTkNSWVBURUQsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjk0Mi1cXHRcXHRcXHQgICAgICBzdW0tXFx1MDAzZU91dFBrdHNFbmNyeXB0ZWQsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjk0My1cXHRcXHRcXHQgICAgICBNQUNTRUNfVFhTQ19TVEFUU19BVFRSX1BBRCkgfHxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzoyOTQ0OlxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19UWFNDX1NUQVRTX0FUVFJfT1VUX09DVEVUU19QUk9URUNURUQsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjk0NS1cXHRcXHRcXHQgICAgICBzdW0tXFx1MDAzZU91dE9jdGV0c1Byb3RlY3RlZCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yOTQ2LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19UWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI5NDc6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1RYU0NfU1RBVFNfQVRUUl9PVVRfT0NURVRTX0VOQ1JZUFRFRCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yOTQ4LVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlT3V0T2N0ZXRzRW5jcnlwdGVkLFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9Mjk5Nj1zdGF0aWMgaW50IGNvcHlfc2VjeV9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWFjc2VjX2Rldl9zdGF0cyAqc3VtKVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI5OTcte1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI5OTg6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9PVVRfUEtUU19VTlRBR0dFRCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yOTk5LVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlT3V0UGt0c1VudGFnZ2VkLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTMwMDAtXFx0XFx0XFx0ICAgICAgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9QQUQpIHx8XFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6MzAwMTpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX0lOX1BLVFNfVU5UQUdHRUQsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAwMi1cXHRcXHRcXHQgICAgICBzdW0tXFx1MDAzZUluUGt0c1VudGFnZ2VkLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTMwMDMtXFx0XFx0XFx0ICAgICAgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9QQUQpIHx8XFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6MzAwNDpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX09VVF9QS1RTX1RPT19MT05HLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTMwMDUtXFx0XFx0XFx0ICAgICAgc3VtLVxcdTAwM2VPdXRQa3RzVG9vTG9uZyxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDA2LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjMwMDc6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9JTl9QS1RTX05PX1RBRyxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDA4LVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlSW5Qa3RzTm9UYWcsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAwOS1cXHRcXHRcXHQgICAgICBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX1BBRCkgfHxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozMDEwOlxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfSU5fUEtUU19CQURfVEFHLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTMwMTEtXFx0XFx0XFx0ICAgICAgc3VtLVxcdTAwM2VJblBrdHNCYWRUYWcsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAxMi1cXHRcXHRcXHQgICAgICBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX1BBRCkgfHxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozMDEzOlxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfSU5fUEtUU19VTktOT1dOX1NDSSxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDE0LVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlSW5Qa3RzVW5rbm93blNDSSxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDE1LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjMwMTY6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9JTl9QS1RTX05PX1NDSSxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDE3LVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlSW5Qa3RzTm9TQ0ksXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAxOC1cXHRcXHRcXHQgICAgICBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX1BBRCkgfHxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozMDE5OlxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfSU5fUEtUU19PVkVSUlVOLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTMwMjAtXFx0XFx0XFx0ICAgICAgc3VtLVxcdTAwM2VJblBrdHNPdmVycnVuLFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9MzAyNz1zdGF0aWMgaW50IG5sYV9wdXRfc2VjeShzdHJ1Y3QgbWFjc2VjX3NlY3kgKnNlY3ksIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDQ5LVxcdFxcdFxcdE1BQ1NFQ19TRUNZX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjMwNTA6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1NFQ1lfQVRUUl9DSVBIRVJfU1VJVEUsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzA1MS1cXHRcXHRcXHQgICAgICBjc2lkLCBNQUNTRUNfU0VDWV9BVFRSX1BBRCkgfHxcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jPTQzODc9c3RhdGljIGludCBtYWNzZWNfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDEyLVxcdCAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9NQUNTRUNfSUNWX0xFTiwgc2VjeS1cXHUwMDNlaWN2X2xlbikgfHxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NDEzOlxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIElGTEFfTUFDU0VDX0NJUEhFUl9TVUlURSxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDE0LVxcdFxcdFxcdCAgICAgIGNzaWQsIElGTEFfTUFDU0VDX1BBRCkgfHxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jPTIwOT1zdGF0aWMgaW50IF9fdm5pZmlsdGVyX2VudHJ5X2ZpbGxfc3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTIxOS1cXHR2eGxhbl92bmlmaWx0ZXJfc3RhdHNfZ2V0KHZiZWdpbiwgXFx1MDAyNnZzdGF0cyk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6MjIwOlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIFZOSUZJTFRFUl9FTlRSWV9TVEFUU19SWF9CWVRFUyxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0yMjEtXFx0XFx0XFx0ICAgICAgdnN0YXRzLnJ4X2J5dGVzLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjIyMjpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUlhfUEtUUyxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0yMjMtXFx0XFx0XFx0ICAgICAgdnN0YXRzLnJ4X3BhY2tldHMsIFZOSUZJTFRFUl9FTlRSWV9TVEFUU19QQUQpIHx8XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6MjI0OlxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIFZOSUZJTFRFUl9FTlRSWV9TVEFUU19SWF9EUk9QUyxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0yMjUtXFx0XFx0XFx0ICAgICAgdnN0YXRzLnJ4X2Ryb3BzLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjIyNjpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUlhfRVJST1JTLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTIyNy1cXHRcXHRcXHQgICAgICB2c3RhdHMucnhfZXJyb3JzLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjIyODpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBWTklGSUxURVJfRU5UUllfU1RBVFNfVFhfQllURVMsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjI5LVxcdFxcdFxcdCAgICAgIHZzdGF0cy50eF9ieXRlcywgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1BBRCkgfHxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzoyMzA6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1RYX1BLVFMsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjMxLVxcdFxcdFxcdCAgICAgIHZzdGF0cy50eF9wYWNrZXRzLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjIzMjpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBWTklGSUxURVJfRU5UUllfU1RBVFNfVFhfRFJPUFMsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjMzLVxcdFxcdFxcdCAgICAgIHZzdGF0cy50eF9kcm9wcywgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1BBRCkgfHxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzoyMzQ6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1RYX0VSUk9SUyxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0yMzUtXFx0XFx0XFx0ICAgICAgdnN0YXRzLnR4X2Vycm9ycywgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1BBRCkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jPTc3PWdldF9wZWVyKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHVtcF9jdHggKmN0eClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtMTExLVxcdFxcdFxcdFxcdHBlZXItXFx1MDAzZXBlcnNpc3RlbnRfa2VlcGFsaXZlX2ludGVydmFsKSB8fFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM6MTEyOlxcdFxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIFdHUEVFUl9BX1RYX0JZVEVTLCBwZWVyLVxcdTAwM2V0eF9ieXRlcyxcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTExMy1cXHRcXHRcXHRcXHQgICAgICBXR1BFRVJfQV9VTlNQRUMpIHx8XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzoxMTQ6XFx0XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgV0dQRUVSX0FfUlhfQllURVMsIHBlZXItXFx1MDAzZXJ4X2J5dGVzLFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtMTE1LVxcdFxcdFxcdFxcdCAgICAgIFdHUEVFUl9BX1VOU1BFQykgfHxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmM9Mjg2Nz1zdGF0aWMgaW50IHdpbF9yZl9zZWN0b3JfZ2V0X2NmZyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuYy0yOTQ2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmM6Mjk0NzpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBRQ0FfQVRUUl9UU0YsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuYy0yOTQ4LVxcdFxcdFxcdCAgICAgIGxlNjRfdG9fY3B1KHJlcGx5LmV2dC50c2YpLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuYz0zMTAwPXN0YXRpYyBpbnQgd2lsX3JmX3NlY3Rvcl9nZXRfc2VsZWN0ZWQoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmMtMzE3My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jOjMxNzQ6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUUNBX0FUVFJfVFNGLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmMtMzE3NS1cXHRcXHRcXHQgICAgICBsZTY0X3RvX2NwdShyZXBseS5ldnQudHNmKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdGVzdG1vZGUuYz01Mzc9bXQ3Nl90ZXN0bW9kZV9kdW1wX3N0YXRzKHN0cnVjdCBtdDc2X3BoeSAqcGh5LCBzdHJ1Y3Qgc2tfYnVmZiAqbXNnKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jLTU2MC1cXHQgICAgbmxhX3B1dF91MzIobXNnLCBNVDc2X1RNX1NUQVRTX0FUVFJfVFhfRE9ORSwgdGQtXFx1MDAzZXR4X2RvbmUpIHx8XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jOjU2MTpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQobXNnLCBNVDc2X1RNX1NUQVRTX0FUVFJfUlhfUEFDS0VUUywgcnhfcGFja2V0cyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3Rlc3Rtb2RlLmMtNTYyLVxcdFxcdFxcdCAgICAgIE1UNzZfVE1fU1RBVFNfQVRUUl9QQUQpIHx8XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jOjU2MzpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQobXNnLCBNVDc2X1RNX1NUQVRTX0FUVFJfUlhfRkNTX0VSUk9SLCByeF9mY3NfZXJyb3IsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jLTU2NC1cXHRcXHRcXHQgICAgICBNVDc2X1RNX1NUQVRTX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTE2NDY9c3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNzM0LVxcdGluZm8tXFx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMF0gPSAodm9pZCAqKWNvb2tpZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNzM1OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEhXU0lNX0FUVFJfQ09PS0lFLCBjb29raWUsIEhXU0lNX0FUVFJfUEFEKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNzM2LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MzU5Nz1zdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX3NlbmRfcG1zcl9mdG1fcmVxdWVzdF9wZWVyKHN0cnVjdCBza19idWZmICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0zNjc4LVxcdGlmIChyZXF1ZXN0LVxcdTAwM2VpbmdyZXNzX2Rpc3RhbmNlIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MzY3OTpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQobXNnLCBOTDgwMjExX1BNU1JfRlRNX1JFUV9BVFRSX0lOR1JFU1MsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzY4MC1cXHRcXHRcXHQgICAgICByZXF1ZXN0LVxcdTAwM2VpbmdyZXNzX2Rpc3RhbmNlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzY4NC1cXHRpZiAocmVxdWVzdC1cXHUwMDNlZWdyZXNzX2Rpc3RhbmNlIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MzY4NTpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQobXNnLCBOTDgwMjExX1BNU1JfRlRNX1JFUV9BVFRSX0VHUkVTUyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0zNjg2LVxcdFxcdFxcdCAgICAgIHJlcXVlc3QtXFx1MDAzZWVncmVzc19kaXN0YW5jZSxcXG4tLVxcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VzZXIuYz0yODU1PXN0YXRpYyBpbnQgdGNtdV9zZW5kX2Rldl9zaXplX2V2ZW50KHN0cnVjdCB0Y211X2RldiAqdWRldiwgdTY0IHNpemUpXFxuLS1cXG5kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV91c2VyLmMtMjg2NC1cXHRcXHRyZXR1cm4gcmV0O1xcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VzZXIuYzoyODY1OlxcdHJldCA9IG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVENNVV9BVFRSX0RFVl9TSVpFLFxcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VzZXIuYy0yODY2LVxcdFxcdFxcdFxcdHNpemUsIFRDTVVfQVRUUl9QQUQpO1xcbi0tXFxuZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jPTM1NTM9c3RhdGljIGludCBtbHg1X3ZkcGFfZ2V0X3ZlbmRvcl92cV9zdGF0cyhzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkZXYsIHUxNiBpZHgsXFxuLS1cXG5kcml2ZXJzL3ZkcGEvbWx4NS9uZXQvbWx4NV92bmV0LmMtMzU5MC1cXG5kcml2ZXJzL3ZkcGEvbWx4NS9uZXQvbWx4NV92bmV0LmM6MzU5MTpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX1ZFTkRPUl9BVFRSX1ZBTFVFLCByZWNlaXZlZF9kZXNjLFxcbmRyaXZlcnMvdmRwYS9tbHg1L25ldC9tbHg1X3ZuZXQuYy0zNTkyLVxcdFxcdFxcdCAgICAgIFZEUEFfQVRUUl9QQUQpKVxcbi0tXFxuZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jLTM1OTctXFxuZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jOjM1OTg6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9WRU5ET1JfQVRUUl9WQUxVRSwgY29tcGxldGVkX2Rlc2MsXFxuZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jLTM1OTktXFx0XFx0XFx0ICAgICAgVkRQQV9BVFRSX1BBRCkpXFxuLS1cXG5kcml2ZXJzL3ZkcGEvdmRwYS5jPTQ1MD1zdGF0aWMgaW50IHZkcGFfbWdtdGRldl9maWxsKGNvbnN0IHN0cnVjdCB2ZHBhX21nbXRfZGV2ICptZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxuZHJpdmVycy92ZHBhL3ZkcGEuYy00NjItXFxuZHJpdmVycy92ZHBhL3ZkcGEuYzo0NjM6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX01HTVRERVZfU1VQUE9SVEVEX0NMQVNTRVMsXFxuZHJpdmVycy92ZHBhL3ZkcGEuYy00NjQtXFx0XFx0XFx0ICAgICAgdmRwYV9tZ210ZGV2X2dldF9jbGFzc2VzKG1kZXYsIE5VTEwpLFxcbi0tXFxuZHJpdmVycy92ZHBhL3ZkcGEuYy00NzMtXFx0fVxcbmRyaXZlcnMvdmRwYS92ZHBhLmM6NDc0OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfU1VQUE9SVEVEX0ZFQVRVUkVTLFxcbmRyaXZlcnMvdmRwYS92ZHBhLmMtNDc1LVxcdFxcdFxcdCAgICAgIG1kZXYtXFx1MDAzZXN1cHBvcnRlZF9mZWF0dXJlcywgVkRQQV9BVFRSX1BBRCkpIHtcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhLmM9ODg2PXN0YXRpYyBpbnQgdmRwYV9kZXZfbmV0X2NvbmZpZ19maWxsKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRldiwgc3RydWN0IHNrX2J1ZmYgKm1zZylcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhLmMtODk0LVxcbmRyaXZlcnMvdmRwYS92ZHBhLmM6ODk1OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfRkVBVFVSRVMsIGZlYXR1cmVzX2RldmljZSxcXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTg5Ni1cXHRcXHRcXHQgICAgICBWRFBBX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhLmM9OTEyPXZkcGFfZGV2X2Jsa19jYXBhY2l0eV9jb25maWdfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxuZHJpdmVycy92ZHBhL3ZkcGEuYy05MTgtXFxuZHJpdmVycy92ZHBhL3ZkcGEuYzo5MTk6XFx0cmV0dXJuIG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9CTEtfQ0ZHX0NBUEFDSVRZLFxcbmRyaXZlcnMvdmRwYS92ZHBhLmMtOTIwLVxcdFxcdFxcdFxcdCB2YWxfdTY0LCBWRFBBX0FUVFJfUEFEKTtcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhLmM9MTA3Mz1zdGF0aWMgaW50IHZkcGFfZGV2X2Jsa19jb25maWdfZmlsbChzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkZXYsXFxuLS1cXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTEwODItXFxuZHJpdmVycy92ZHBhL3ZkcGEuYzoxMDgzOlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfRkVBVFVSRVMsIGZlYXR1cmVzX2RldmljZSxcXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTEwODQtXFx0XFx0XFx0ICAgICAgVkRQQV9BVFRSX1BBRCkpXFxuLS1cXG5kcml2ZXJzL3ZkcGEvdmRwYS5jPTExMjE9dmRwYV9kZXZfY29uZmlnX2ZpbGwoc3RydWN0IHZkcGFfZGV2aWNlICp2ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxcbi0tXFxuZHJpdmVycy92ZHBhL3ZkcGEuYy0xMTUyLVxcdFxcdGZlYXR1cmVzX2RyaXZlciA9IHZkZXYtXFx1MDAzZWNvbmZpZy1cXHUwMDNlZ2V0X2RyaXZlcl9mZWF0dXJlcyh2ZGV2KTtcXG5kcml2ZXJzL3ZkcGEvdmRwYS5jOjExNTM6XFx0XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9ORUdPVElBVEVEX0ZFQVRVUkVTLCBmZWF0dXJlc19kcml2ZXIsXFxuZHJpdmVycy92ZHBhL3ZkcGEuYy0xMTU0LVxcdFxcdFxcdFxcdCAgICAgIFZEUEFfQVRUUl9QQUQpKSB7XFxuLS1cXG5kcml2ZXJzL3ZkcGEvdmRwYS5jPTExODU9c3RhdGljIGludCB2ZHBhX2ZpbGxfc3RhdHNfcmVjKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRldiwgc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhLmMtMTIwMC1cXHRmZWF0dXJlcyA9IHZkZXYtXFx1MDAzZWNvbmZpZy1cXHUwMDNlZ2V0X2RyaXZlcl9mZWF0dXJlcyh2ZGV2KTtcXG5kcml2ZXJzL3ZkcGEvdmRwYS5jOjEyMDE6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9ORUdPVElBVEVEX0ZFQVRVUkVTLFxcbmRyaXZlcnMvdmRwYS92ZHBhLmMtMTIwMi1cXHRcXHRcXHQgICAgICBmZWF0dXJlcywgVkRQQV9BVFRSX1BBRCkpXFxuLS1cXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmM9Mjg1PXN0YXRpYyBpbnQgdmRwYXNpbV9uZXRfZ2V0X3N0YXRzKHN0cnVjdCB2ZHBhc2ltICp2ZHBhc2ltLCB1MTYgaWR4LFxcbi0tXFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMwOS1cXHRcXHRcXHRicmVhaztcXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmM6MzEwOlxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfVkVORE9SX0FUVFJfVkFMVUUsXFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMxMS1cXHRcXHRcXHRcXHQgICAgICByeF9wa3RzLCBWRFBBX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zMTUtXFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jOjMxNjpcXHRcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX1ZFTkRPUl9BVFRSX1ZBTFVFLFxcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zMTctXFx0XFx0XFx0XFx0ICAgICAgcnhfYnl0ZXMsIFZEUEFfQVRUUl9QQUQpKVxcbi0tXFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMyMS1cXHRcXHRcXHRicmVhaztcXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmM6MzIyOlxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfVkVORE9SX0FUVFJfVkFMVUUsXFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMyMy1cXHRcXHRcXHRcXHQgICAgICByeF9lcnJvcnMsIFZEUEFfQVRUUl9QQUQpKVxcbi0tXFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMyNy1cXHRcXHRcXHRicmVhaztcXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmM6MzI4OlxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfVkVORE9SX0FUVFJfVkFMVUUsXFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMyOS1cXHRcXHRcXHRcXHQgICAgICByeF9vdmVycnVucywgVkRQQV9BVFRSX1BBRCkpXFxuLS1cXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzMzLVxcdFxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYzozMzQ6XFx0XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9WRU5ET1JfQVRUUl9WQUxVRSxcXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzM1LVxcdFxcdFxcdFxcdCAgICAgIHJ4X2Ryb3BzLCBWRFBBX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zNTAtXFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jOjM1MTpcXHRcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX1ZFTkRPUl9BVFRSX1ZBTFVFLFxcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zNTItXFx0XFx0XFx0XFx0ICAgICAgdHhfcGt0cywgVkRQQV9BVFRSX1BBRCkpXFxuLS1cXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzU2LVxcdFxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYzozNTc6XFx0XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9WRU5ET1JfQVRUUl9WQUxVRSxcXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzU4LVxcdFxcdFxcdFxcdCAgICAgIHR4X2J5dGVzLCBWRFBBX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zNjItXFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jOjM2MzpcXHRcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX1ZFTkRPUl9BVFRSX1ZBTFVFLFxcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zNjQtXFx0XFx0XFx0XFx0ICAgICAgdHhfZXJyb3JzLCBWRFBBX0FUVFJfUEFEKSlcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6NTkuNjY0ODM3NDExWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3OTA2MTk1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGxpbmsgUG9saWN5IER1bXAgZm9yIEJpZy1FbmRpYW4gQXR0cmlidXRlIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBwYXRjaCBpbnRlZ3JhdGVzIGJpZy1lbmRpYW4gYXR0cmlidXRlcyAoYE5MQV9CRTE2YCBhbmQgYE5MQV9CRTMyYCkgaW50byB0aGUgbmV0bGluayBwb2xpY3kgZHVtcCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cigpYCBjYWxsZWQgYnkgYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGUoKWAuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGhvdyBuZXRsaW5rIHBvbGljaWVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgZ2VuZXJpYyBuZXRsaW5rIG9yIHJ0bmV0bGluayBwb2xpY3kgZHVtcHMuXG5cbkZpcnN0LCBJJ20gbm90aW5nIHRoZSBjaGFuZ2VzIGluIHNpemUgY2FsY3VsYXRpb24uIEl0IHNlZW1zIHRvIGhhbmRsZSB0aGUgYmlnLWVuZGlhbiB0eXBlcyBzaW1pbGFybHkgdG8gdGhlaXIgdW5zaWduZWQgY291bnRlcnBhcnRzLCBidXQgd2l0aCBhbiBhZGRlZCBjb25zaWRlcmF0aW9uIGZvciBieXRlIG9yZGVyLiBUaGUgc2l6ZSBjYWxjdWxhdGlvbiBjb2RlIHNuaXBwZXQgc2hvd3MgdGhlIGFkZGVkIG92ZXJoZWFkIHRvIGFjY291bnQgZm9yIHRoZSBieXRlIG9yZGVyIGluZm9ybWF0aW9uLiBJJ20gc2VlaW5nIGBubGFfYXR0cl9zaXplKClgIGNhbGxzLCB3aGljaCBJIHByZXN1bWUgcmVsYXRlIHRvIGF0dHJpYnV0ZSBhbGlnbm1lbnQgYW5kIHBhZGRpbmcuIEknbGwgbWFrZSBzdXJlIHRvIGRvdWJsZSBjaGVjayB0aGF0IHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgY29ycmVjdCBieSByZS1ldmFsdWF0aW5nIHRoZSBgbmxhX2F0dHJfc2l6ZSgpYCBtYWNyby5cblxuU2Vjb25kLCB0aGUgYWN0dWFsIGR1bXBpbmcgcHJvY2VzcyBpdHNlbGYsIHdoaWNoIGluY2x1ZGVzIHRoZSBgTkxBX0JFMTZgIGFuZCBgTkxBX0JFMzJgIGNhc2VzLCBpcyB3aGF0J3MgcmVhbGx5IGludGVyZXN0aW5nLiBJdCBzZWVtcyB0aGUgY29kZSBpcyBjb3JyZWN0bHkgbWFwcGluZyB0aGUgYXR0cmlidXRlIHR5cGVzIHRvIGBOTF9BVFRSX1RZUEVfVTE2YCBhbmQgYE5MX0FUVFJfVFlQRV9VMzJgLCByZXNwZWN0aXZlbHkuIFRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGNvbmRpdGlvbmFsIGBubGFfcHV0X3UzMmAgY2FsbCB3aGljaCBzZXRzIHRoZSBgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSYCBhdHRyaWJ1dGUgYW5kIGZsYWdzIGl0IGFzIGBOTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOYC4gVGhpcyBpbXBsaWVzIHRoZSBieXRlIG9yZGVyIGlzIGV4cGxpY2l0bHkgdGFnZ2VkIHdoZW4gZW5jb3VudGVyaW5nIGEgYmlnLWVuZGlhbiBhdHRyaWJ1dGUuIFNvIGl0IHNlZW1zIHRoZSBpbnRlbnRpb24gaXMgdG8gaW5mb3JtIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgYWJvdXQgdGhlIGJ5dGUgb3JkZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB3cml0dGVuIGNvbnNpc3RlbnRseS5cblxuTm93LCBJJ2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgbG9naWMsIGxpa2VseSBhcm91bmQgbGluZSA0MzAgaW4gYG5ldC9uZXRsaW5rL3BvbGljeS5jYCB0byBjb25maXJtIHRoZSBjb2RlIGZsb3cgYW5kIHRoYXQgbm8gb3RoZXIgY3JpdGljYWwgbW9kaWZpY2F0aW9ucyB3ZXJlIG1hZGUgdGhhdCBtaWdodCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgaW5jb25zaXN0ZW5jaWVzLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIGB0eXBlYCB2YXJpYWJsZSBpcyBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSBpbiB0aGUgc2tiIHdyaXRpbmcgYW5kIHRoYXQgdGhlIGJ5dGUgb3JkZXIgaW5mb3JtYXRpb24gaXMgY29ycmVjdGx5IHByb3BhZ2F0ZWQgdG8gdXNlcnNwYWNlLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyBhbGlnbnMgd2l0aCB0aGUgY3VycmVudCBwb2xpY3kgZHVtcCBzdHJ1Y3R1cmUgYW5kIHRoYXQgdGhpcyBhZGRpdGlvbiBpcyBhcmNoaXRlY3R1cmFsbHkgc291bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjA3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjI0OjA0LjQ1NTQ2MDI3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRsaW5rL3BvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQxMDpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1RZUEUsIHR5cGUpKVxcbiA0MTE6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDQxMjpcXHRcXG4gNDEzOlxcdFxcdG5sYV9uZXN0X2VuZChza2IsIGF0dHIpO1xcbiA0MTQ6XFx0XFx0V0FSTl9PTihhdHRyLVxcdTAwM2VubGFfbGVuIFxcdTAwM2UgZXN0aW1hdGUpO1xcbiA0MTU6XFx0XFxuIDQxNjpcXHRcXHRyZXR1cm4gMDtcXG4gNDE3OlxcdG5sYV9wdXRfZmFpbHVyZTpcXG4gNDE4OlxcdFxcdG5sYV9uZXN0X2NhbmNlbChza2IsIGF0dHIpO1xcbiA0MTk6XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiA0MjA6XFx0fVxcbiA0MjE6XFx0XFxuIDQyMjpcXHQvKipcXG4gNDIzOlxcdCAqIG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0ciAtIHdyaXRlIGEgZ2l2ZW4gYXR0cmlidXRlIHBvbGljeVxcbiA0MjQ6XFx0ICogQHNrYjogdGhlIG1lc3NhZ2Ugc2tiIHRvIHdyaXRlIHRvXFxuIDQyNTpcXHQgKiBAcHQ6IHRoZSBhdHRyaWJ1dGUncyBwb2xpY3lcXG4gNDI2OlxcdCAqIEBuZXN0YXR0cjogdGhlIG5lc3RlZCBhdHRyaWJ1dGUgSUQgdG8gdXNlXFxuIDQyNzpcXHQgKlxcbiA0Mjg6XFx0ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZTsgLSVFTk9EQVRBIGlzXFxuIDQyOTpcXHQgKlxcdCAgICBzcGVjaWFsLCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUncyBubyBwb2xpY3kgZGF0YSBhbmRcXG4gNDMwOlxcdCAqXFx0ICAgIHRoZSBhdHRyaWJ1dGUgaXMgZ2VuZXJhbGx5IHJlamVjdGVkLlxcbiA0MzE6XFx0ICovXFxuIDQzMjpcXHRpbnQgbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyKHN0cnVjdCBza19idWZmICpza2IsXFxuIDQzMzpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXFxuIDQzNDpcXHRcXHRcXHRcXHRcXHQgICBpbnQgbmVzdGF0dHIpXFxuIDQzNTpcXHR7XFxuIDQzNjpcXHRcXHRyZXR1cm4gX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoTlVMTCwgc2tiLCBwdCwgbmVzdGF0dHIpO1xcbiA0Mzc6XFx0fVxcbiA0Mzg6XFx0XFxuIDQzOTpcXHQvKipcXG4gNDQwOlxcdCAqIG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGUgLSB3cml0ZSBjdXJyZW50IHBvbGljeSBkdW1wIGF0dHJpYnV0ZXNcXG4gNDQxOlxcdCAqIEBza2I6IHRoZSBtZXNzYWdlIHNrYiB0byB3cml0ZSB0b1xcbiA0NDI6XFx0ICogQHN0YXRlOiB0aGUgcG9saWN5IGR1bXAgc3RhdGVcXG4gNDQzOlxcdCAqXFxuIDQ0NDpcXHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXFxuIDQ0NTpcXHQgKi9cXG4gNDQ2OlxcdGludCBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlKHN0cnVjdCBza19idWZmICpza2IsXFxuIDQ0NzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUpXFxuIDQ0ODpcXHR7XFxuIDQ0OTpcXHRcXHRjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQ7XFxuIDQ1MDpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpwb2xpY3k7XFxuIDQ1MTpcXHRcXHRib29sIGFnYWluO1xcbiA0NTI6XFx0XFx0aW50IGVycjtcXG4gNDUzOlxcdFxcbiA0NTQ6XFx0c2VuZF9hdHRyaWJ1dGU6XFxuIDQ1NTpcXHRcXHRhZ2FpbiA9IGZhbHNlO1xcbiA0NTY6XFx0XFxuIDQ1NzpcXHRcXHRwdCA9IFxcdTAwMjZzdGF0ZS1cXHUwMDNlcG9saWNpZXNbc3RhdGUtXFx1MDAzZXBvbGljeV9pZHhdLnBvbGljeVtzdGF0ZS1cXHUwMDNlYXR0cl9pZHhdO1xcbiA0NTg6XFx0XFxuIDQ1OTpcXHRcXHRwb2xpY3kgPSBubGFfbmVzdF9zdGFydChza2IsIHN0YXRlLVxcdTAwM2Vwb2xpY3lfaWR4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjQ6MDQuNDU1NTM5MzM5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNjEzMDk3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQW5hbHlzaXM6IE5lZWRzS01TQU4gPSBGYWxzZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgYWRkcyBOZXRsaW5rIHBvbGljeSBkdW1waW5nIGZvciBiaWctZW5kaWFuIGF0dHJpYnV0ZXMuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHRodXMgd2FycmFudGluZyBLTVNBTj8gSSd2ZSBnb25lIHRocm91Z2ggdGhlIGZvdXIga2V5IGNyaXRlcmlhLlxuXG5GaXJzdCwgY3JpdGVyaWEgb25lIGZvY3VzZXMgb24ga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQuIFRoZSBwYXRjaCB1c2VzIGBubGFfcHV0X3UzMmAgdG8gcHV0IGEgMzItYml0IGNvbnN0YW50LCBgTkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTmAgKHdoaWNoIGlzIGp1c3QgdGhlIHZhbHVlIDEsIGEgZnVsbHkgaW5pdGlhbGl6ZWQgY29uc3RhbnQpIGludG8gdGhlIE5ldGxpbmsgYnVmZmVyLiBBbHNvLCBgbmxhX2dldF9yYW5nZV91bnNpZ25lZGAgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGUgYHJhbmdlYCBzdHJ1Y3R1cmUuIFNvLCBub3RoaW5nIHVuaW5pdGlhbGl6ZWQgaXMgYmVpbmcgZXhwb3NlZCBoZXJlLlxuXG5OZXh0LCB3ZSBjaGVjayBmb3IgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBXZSBoYXZlIGEgY2hlY2sgYWdhaW5zdCBgcHQtXHUwMDNldHlwZWAsIGJ1dCBgcHRgIGlzIGZyb20gYSBjb25zdGFudCBwb2xpY3kgdGFibGUuIE5vIHJpc2sgdGhlcmUgZWl0aGVyLlxuXG5UaGlyZCwgYXJlIHRoZXJlIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8gTm9wZS4gTm8gbWVtb3J5IGFsbG9jYXRpb24gaXMgaW52b2x2ZWQsIHNvIHRoaXMgY3JpdGVyaWEgaXMgbm90IG1ldC5cblxuRmluYWxseSwgd2UgYXNzZXNzIHBvdGVudGlhbCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFdlIHNlZSB0aGUgc2l6ZSBlc3RpbWF0ZSB3YXMgcHJvcGVybHkgdXBkYXRlZCwgbWVhbmluZyBidWZmZXIgc2l6ZSBjaGVja3MgYW5kIGFsbG9jYXRpb25zIGFyZSBleGFjdC4gTm8gY29uY2VybnMgYXJvdW5kIGJ1ZmZlciBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblNvLCB0byBzdW1tYXJpemUsIG5vIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGFyZSBiZWluZyB3cml0dGVuIHRvIHRoZSBOZXRsaW5rIGJ1ZmZlci4gQWxsIHZhbHVlcyBhcmUgZWl0aGVyIGV4cGxpY2l0IGNvbnN0YW50cyBvciBkZXJpdmVkIGZyb20gZnVuY3Rpb25zIHRoYXQgZXhwbGljaXRseSBpbml0aWFsaXplIHRoZWlyIG91dHB1dC4gS01TQU4gLyBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBpbiBwbGFjZSB0byBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG5cblRodXMsIGJhc2VkIG9uIG15IGFuYWx5c2lzLCBOZWVkc0tNU0FOIGlzIGNsZWFybHkgKmZhbHNlKi4gV2UgY2FuIHByb2NlZWQgd2l0aCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDQxLCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjI0OjA5LjgxNjg1MjEyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIE5ldGxpbmsgcG9saWN5IGR1bXAgc3VwcG9ydCBmb3IgYmlnLWVuZGlhbiBpbnRlZ2VyIGF0dHJpYnV0ZSB0eXBlcyAoTkxBX0JFMTYgYW5kIE5MQV9CRTMyKSBieSBlbWl0dGluZyB0aGUgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSIGF0dHJpYnV0ZSBpbiBuZXRsaW5rIHBvbGljeSBkZXNjcmlwdGlvbnMuIFxcblxcbkFsbCB2YWx1ZXMgd3JpdHRlbiB0byB0aGUgTmV0bGluayBza2IgYXJlIGV4cGxpY2l0LCBmdWxseSBpbml0aWFsaXplZCBjb25zdGFudHMgKHN1Y2ggYXMgTkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTikgb3IgcmFuZ2UgdmFsdWVzIGluaXRpYWxpemVkIGJ5IG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQoKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBwYWRkaW5ncyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgaXMgYW55IGNvbnRyb2wgZmxvdyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGNoZWNrcyBhcmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyBidWZmZXIgc2l6ZXMgYW5kIG5ldGxpbmsgbWVzc2FnZSBmb3JtYXR0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgTmV0bGluayBwb2xpY3kgZHVtcCBzdXBwb3J0IGZvciBiaWctZW5kaWFuIGludGVnZXIgYXR0cmlidXRlIHR5cGVzIChOTEFfQkUxNiBhbmQgTkxBX0JFMzIpIGJ5IGVtaXR0aW5nIHRoZSBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIgYXR0cmlidXRlIGluIG5ldGxpbmsgcG9saWN5IGRlc2NyaXB0aW9ucy4gXFxuXFxuQWxsIHZhbHVlcyB3cml0dGVuIHRvIHRoZSBOZXRsaW5rIHNrYiBhcmUgZXhwbGljaXQsIGZ1bGx5IGluaXRpYWxpemVkIGNvbnN0YW50cyAoc3VjaCBhcyBOTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOKSBvciByYW5nZSB2YWx1ZXMgaW5pdGlhbGl6ZWQgYnkgbmxhX2dldF9yYW5nZV91bnNpZ25lZCgpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIG9yIHBhZGRpbmdzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyBhbnkgY29udHJvbCBmbG93IGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgY2hlY2tzIGFyZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIGJ1ZmZlciBzaXplcyBhbmQgbmV0bGluayBtZXNzYWdlIGZvcm1hdHRpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowd7s8x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 00:05:41 +0000 UTC FinishedAt: 2026-09-09 00:24:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e2573085497807b551324de20d368127602151ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e2573085497807b551324de20d368127602151ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET" ], "series_id": "7cfed603-9371-4ed9-9e71-548261f2b282" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ctrl_dumppolicy", "netlink_policy_dump_attr_size_estimate", "netlink_policy_dump_write", "netlink_policy_dump_write_attr" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N0cmxfZHVtcHBvbGljeSYjMzQ7LAogICAgJiMzNDtuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZSYjMzQ7LAogICAgJiMzNDtuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlJiMzNDssCiAgICAmIzM0O25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0ciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTmV0bGluayBwb2xpY3kgZHVtcCBzdXBwb3J0IGZvciBiaWctZW5kaWFuIGludGVnZXIgYXR0cmlidXRlIHR5cGVzIChOTEFfQkUxNiBhbmQgTkxBX0JFMzIpIGJ5IGVtaXR0aW5nIHRoZSBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIgYXR0cmlidXRlIGluIG5ldGxpbmsgcG9saWN5IGRlc2NyaXB0aW9ucy4gXG5cbkFsbCB2YWx1ZXMgd3JpdHRlbiB0byB0aGUgTmV0bGluayBza2IgYXJlIGV4cGxpY2l0LCBmdWxseSBpbml0aWFsaXplZCBjb25zdGFudHMgKHN1Y2ggYXMgTkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTikgb3IgcmFuZ2UgdmFsdWVzIGluaXRpYWxpemVkIGJ5IG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQoKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBwYWRkaW5ncyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgaXMgYW55IGNvbnRyb2wgZmxvdyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGNoZWNrcyBhcmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyBidWZmZXIgc2l6ZXMgYW5kIG5ldGxpbmsgbWVzc2FnZSBmb3JtYXR0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBOZXRsaW5rIHBvbGljeSBkdW1waW5nIGxvZ2ljIGluIG5ldC9uZXRsaW5rL3BvbGljeS5jIHRvIHN1cHBvcnQgYmlnLWVuZGlhbiBpbnRlZ2VyIGF0dHJpYnV0ZXMgKE5MQV9CRTE2IGFuZCBOTEFfQkUzMikgYnkgZW1pdHRpbmcgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSIGFuZCBhZGp1c3RpbmcgdGhlIGF0dHJpYnV0ZSBzaXplIGVzdGltYXRpb24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgQUZfTkVUTElOSyBzb2NrZXRzIHRocm91Z2ggR2VuZXJpYyBOZXRsaW5rIHBvbGljeSBkdW1waW5nIChDVFJMX0NNRF9HRVRQT0xJQ1kpIGFzIHdlbGwgYXMgbmV0bGluayBleHRhY2sgZXJyb3IgcmVwb3J0aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmVkNDFhNGViNDE2NjgyNzNlNTQzOTg3NDQ5ZjAyOTI3YTY4MjYzNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMDA6MjM6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sXG5pbmRleCA4YjQ0NzJhNmFhMzZhLi43ZTdjMTU4ZTNlNzM3IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmxjdHJsLnlhbWxcbkBAIC00Miw2ICYjNDM7NDIsMTYgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLSBiaXRmaWVsZDMyXG4gICAgICAgLSBzaW50XG4gICAgICAgLSB1aW50XG4mIzQzOyAgLVxuJiM0MzsgICAgbmFtZTogcG9saWN5LWJ5dGUtb3JkZXJcbiYjNDM7ICAgIGRvYzogfFxuJiM0MzsgICAgICBCeXRlIG9yZGVyIG9mIGFuIGludGVnZXIgYXR0cmlidXRlLiBaZXJvIGlzIGxlZnQgdW51c2VkIHNvIHRoYXQgaXRcbiYjNDM7ICAgICAgY2FuIGJlIHRha2VuIHRvIG1lYW4gaG9zdCBieXRlIG9yZGVyLlxuJiM0MzsgICAgZW51bS1uYW1lOiBuZXRsaW5rLXBvbGljeS1ieXRlLW9yZGVyXG4mIzQzOyAgICB0eXBlOiBlbnVtXG4mIzQzOyAgICB2YWx1ZS1zdGFydDogMVxuJiM0MzsgICAgZW50cmllczpcbiYjNDM7ICAgICAgLSBiaWctZW5kaWFuXG4gXG4gYXR0cmlidXRlLXNldHM6XG4gICAtXG5AQCAtMTUyLDYgJiM0MzsxNjIsMTEgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcGFkXG4gICAgICAgICB0eXBlOiBwYWRcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGJ5dGUtb3JkZXJcbiYjNDM7ICAgICAgICBkb2M6IEJ5dGUgb3JkZXIgb2YgdGhlIGF0dHJpYnV0ZSwgYWJzZW50IG1lYW5zIGhvc3QgYnl0ZSBvcmRlci5cbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBlbnVtOiBwb2xpY3ktYnl0ZS1vcmRlclxuICAgLVxuICAgICBuYW1lOiBvcC1wb2xpY3ktYXR0cnNcbiAgICAgbmFtZS1wcmVmaXg6IGN0cmwtYXR0ci1wb2xpY3ktXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRsaW5rLmhcbmluZGV4IGY4N2FhZjI4YTY0OTEuLjgyYzQxYWViNDM1NzQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oXG5AQCAtMzI5LDYgJiM0MzszMjksMTcgQEAgZW51bSBuZXRsaW5rX2F0dHJpYnV0ZV90eXBlIHtcbiBcdE5MX0FUVFJfVFlQRV9VSU5ULFxuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBlbnVtIG5ldGxpbmtfcG9saWN5X2J5dGVfb3JkZXIgLSBieXRlIG9yZGVyIG9mIGFuIGludGVnZXIgYXR0cmlidXRlXG4mIzQzOyAqIEBOTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOOiBiaWcgZW5kaWFuIChuZXR3b3JrIGJ5dGUgb3JkZXIpXG4mIzQzOyAqXG4mIzQzOyAqIFplcm8gaXMgbGVmdCB1bmFzc2lnbmVkIHNvIHRoYXQgaXQga2VlcHMgbWVhbmluZyBob3N0IGJ5dGUgb3JkZXIsXG4mIzQzOyAqIHdoaWNoIGlzIGFsc28gd2hhdCBhIG1pc3NpbmcgYnl0ZSBvcmRlciBtZWFucy5cbiYjNDM7ICovXG4mIzQzO2VudW0gbmV0bGlua19wb2xpY3lfYnl0ZV9vcmRlciB7XG4mIzQzO1x0TkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTiA9IDEsXG4mIzQzO307XG4mIzQzO1xuIC8qKlxuICAqIGVudW0gbmV0bGlua19wb2xpY3lfdHlwZV9hdHRyIC0gcG9saWN5IHR5cGUgYXR0cmlidXRlc1xuICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX1VOU1BFQzogdW51c2VkXG5AQCAtMzU2LDYgJiM0MzszNjcsOCBAQCBlbnVtIG5ldGxpbmtfYXR0cmlidXRlX3R5cGUge1xuICAqXHRiaXRmaWVsZDMyIHR5cGUgKFUzMilcbiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLOiBtYXNrIG9mIHZhbGlkIGJpdHMgZm9yIHVuc2lnbmVkIGludGVnZXJzIChVNjQpXG4gICogQE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEOiBwYWQgYXR0cmlidXRlIGZvciA2NC1iaXQgYWxpZ25tZW50XG4mIzQzOyAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVI6IGJ5dGUgb3JkZXIgb2YgYW4gaW50ZWdlciBhdHRyaWJ1dGUsXG4mIzQzOyAqXHRcdTAwMjZlbnVtIG5ldGxpbmtfcG9saWN5X2J5dGVfb3JkZXIsIGFic2VudCBpZiBob3N0IGJ5dGUgb3JkZXIgKFUzMilcbiAgKlxuICAqIEBfX05MX1BPTElDWV9UWVBFX0FUVFJfTUFYOiBudW1iZXIgb2YgYXR0cmlidXRlc1xuICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyXG5AQCAtMzc0LDYgJiM0MzszODcsNyBAQCBlbnVtIG5ldGxpbmtfcG9saWN5X3R5cGVfYXR0ciB7XG4gXHROTF9QT0xJQ1lfVFlQRV9BVFRSX0JJVEZJRUxEMzJfTUFTSyxcbiBcdE5MX1BPTElDWV9UWVBFX0FUVFJfUEFELFxuIFx0TkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLLFxuJiM0MztcdE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUixcbiBcbiBcdC8qIGtlZXAgbGFzdCAqL1xuIFx0X19OTF9QT0xJQ1lfVFlQRV9BVFRSX01BWCxcbmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9wb2xpY3kuYyBiL25ldC9uZXRsaW5rL3BvbGljeS5jXG5pbmRleCAwOGIwMDZjNDhmMDZlLi41NzRkNDRiN2Q1MTgyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGxpbmsvcG9saWN5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRsaW5rL3BvbGljeS5jXG5AQCAtMjM0LDYgJiM0MzsyMzQsMTEgQEAgaW50IG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdClcbiBcdFx0LyogbWF4aW11bSBpcyBjb21tb24sIHU2NCBtaW4vbWF4IHdpdGggcGFkZGluZyAqL1xuIFx0XHRyZXR1cm4gY29tbW9uICYjNDM7XG4gXHRcdCAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgJiM0MzsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTY0KSkpO1xuJiM0MztcdGNhc2UgTkxBX0JFMTY6XG4mIzQzO1x0Y2FzZSBOTEFfQkUzMjpcbiYjNDM7XHRcdC8qIHNhbWUgYXMgdGhlIHVuc2lnbmVkIHR5cGVzLCBwbHVzIHRoZSBieXRlIG9yZGVyICovXG4mIzQzO1x0XHRyZXR1cm4gY29tbW9uICYjNDM7IG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7XG4mIzQzO1x0XHQgICAgICAgMiAqIChubGFfYXR0cl9zaXplKDApICYjNDM7IG5sYV9hdHRyX3NpemUoc2l6ZW9mKHU2NCkpKTtcbiBcdGNhc2UgTkxBX0JJVEZJRUxEMzI6XG4gXHRcdHJldHVybiBjb21tb24gJiM0MzsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTMyKSk7XG4gXHRjYXNlIE5MQV9TVFJJTkc6XG5AQCAtMjg5LDIxICYjNDM7Mjk0LDI4IEBAIF9fbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyKHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSxcbiBcdGNhc2UgTkxBX1UxNjpcbiBcdGNhc2UgTkxBX1UzMjpcbiBcdGNhc2UgTkxBX1U2NDpcbiYjNDM7XHRjYXNlIE5MQV9CRTE2OlxuJiM0MztcdGNhc2UgTkxBX0JFMzI6XG4gXHRjYXNlIE5MQV9VSU5UOlxuIFx0Y2FzZSBOTEFfTVNFQ1M6IHtcbiBcdFx0c3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiByYW5nZTtcbiBcbiBcdFx0aWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1U4KVxuIFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTg7XG4tXHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1UxNilcbiYjNDM7XHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1UxNiB8fCBwdC1cdTAwM2V0eXBlID09IE5MQV9CRTE2KVxuIFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTE2O1xuLVx0XHRlbHNlIGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9VMzIpXG4mIzQzO1x0XHRlbHNlIGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9VMzIgfHwgcHQtXHUwMDNldHlwZSA9PSBOTEFfQkUzMilcbiBcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1UzMjtcbiBcdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTY0KVxuIFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTY0O1xuIFx0XHRlbHNlXG4gXHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VSU5UO1xuIFxuJiM0MztcdFx0aWYgKChwdC1cdTAwM2V0eXBlID09IE5MQV9CRTE2IHx8IHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSLFxuJiM0MztcdFx0XHRcdE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU4pKVxuJiM0MztcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjNDM7XG4gXHRcdGlmIChwdC1cdTAwM2V2YWxpZGF0aW9uX3R5cGUgPT0gTkxBX1ZBTElEQVRFX01BU0spIHtcbiBcdFx0XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0ssXG4gXHRcdFx0XHRcdCAgICAgIHB0LVx1MDAzZW1hc2ssXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5XG5pbmRleCA4NjgyYmY1ODhlMWZhLi5mYjVhY2I4YWNkZWQxIDEwMDY0NFxuLS0tIGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHlcbkBAIC0xMTUsNiAmIzQzOzExNSw3IEBAIGNsYXNzIE5ldGxpbms6XG4gICAgIE5MX1BPTElDWV9UWVBFX0FUVFJfQklURklFTEQzMl9NQVNLID0gMTBcbiAgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9QQUQgPSAxMVxuICAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0sgPSAxMlxuJiM0MzsgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSID0gMTNcbiBcbiAgICAgQXR0clR5cGUgPSBFbnVtKCYjMzk7QXR0clR5cGUmIzM5OywgWyYjMzk7ZmxhZyYjMzk7LCAmIzM5O3U4JiMzOTssICYjMzk7dTE2JiMzOTssICYjMzk7dTMyJiMzOTssICYjMzk7dTY0JiMzOTssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzk7czgmIzM5OywgJiMzOTtzMTYmIzM5OywgJiMzOTtzMzImIzM5OywgJiMzOTtzNjQmIzM5OyxcbkBAIC0xMjIsNiAmIzQzOzEyMyw4IEBAIGNsYXNzIE5ldGxpbms6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzk7bmVzdGVkJiMzOTssICYjMzk7bmVzdGVkLWFycmF5JiMzOTssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzk7Yml0ZmllbGQzMiYjMzk7LCAmIzM5O3NpbnQmIzM5OywgJiMzOTt1aW50JiMzOTtdKVxuIFxuJiM0MzsgICAgQnl0ZU9yZGVyID0gRW51bSgmIzM5O0J5dGVPcmRlciYjMzk7LCBbJiMzOTtiaWctZW5kaWFuJiMzOTtdLCBzdGFydD0xKVxuJiM0MztcbiBjbGFzcyBObEVycm9yKEV4Y2VwdGlvbik6XG4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCBubF9tc2cpOlxuICAgICAgICAgc2VsZi5ubF9tc2cgPSBubF9tc2dcbkBAIC0xNTgsNyAmIzQzOzE2MSw3IEBAIGNsYXNzIE5sUG9saWN5OlxuIFxuICAgICBFYWNoIHBvbGljeSBlbnRyeSBhbHdheXMgaGFzIGEgJiMzOTt0eXBlJiMzOTsgYXR0cmlidXRlIChlLmcuIHUzMiwgc3RyaW5nLFxuICAgICBuZXN0ZWQpLiBPcHRpb25hbCBhdHRyaWJ1dGVzIGRlcGVuZGluZyBvbiB0aGUgJiMzOTt0eXBlJiMzOTs6IG1pbi12YWx1ZSxcbi0gICAgbWF4LXZhbHVlLCBtaW4tbGVuZ3RoLCBtYXgtbGVuZ3RoLCBtYXNrLlxuJiM0MzsgICAgbWF4LXZhbHVlLCBtaW4tbGVuZ3RoLCBtYXgtbGVuZ3RoLCBtYXNrLCBieXRlLW9yZGVyLlxuIFxuICAgICBQb2xpY2llcyBjYW4gZm9ybSBpbmZpbml0ZSBuZXN0aW5nIGxvb3BzLiBUaGVzZSBsb29wcyBhcmUgdHJpbW1lZFxuICAgICB3aGVuIHBvbGljeSBpcyBjb252ZXJ0ZWQgdG8gYSBkaWN0IHdpdGggcG9sLnRvX2RpY3QoKS5cbkBAIC00NTQsNiAmIzQzOzQ1Nyw5IEBAIGRlZiBfZ2VubF9kZWNvZGVfcG9saWN5KHJhdyk6XG4gICAgICAgICAgICAgcG9saWN5WyYjMzk7Yml0ZmllbGQzMi1tYXNrJiMzOTtdID0gYXR0ci5hc19zY2FsYXIoJiMzOTt1MzImIzM5OylcbiAgICAgICAgIGVsaWYgYXR0ci50eXBlID09IE5ldGxpbmsuTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLOlxuICAgICAgICAgICAgIHBvbGljeVsmIzM5O21hc2smIzM5O10gPSBhdHRyLmFzX3NjYWxhcigmIzM5O3U2NCYjMzk7KVxuJiM0MzsgICAgICAgIGVsaWYgYXR0ci50eXBlID09IE5ldGxpbmsuTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSOlxuJiM0MzsgICAgICAgICAgICBieXRlX29yZGVyID0gYXR0ci5hc19zY2FsYXIoJiMzOTt1MzImIzM5OylcbiYjNDM7ICAgICAgICAgICAgcG9saWN5WyYjMzk7Ynl0ZS1vcmRlciYjMzk7XSA9IE5ldGxpbmsuQnl0ZU9yZGVyKGJ5dGVfb3JkZXIpLm5hbWVcbiAgICAgcmV0dXJuIHBvbGljeVxuIFxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2N0cmxfZHVtcHBvbGljeSYjMzQ7LAogICAgJiMzNDtuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZSYjMzQ7LAogICAgJiMzNDtuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlJiMzNDssCiAgICAmIzM0O25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0ciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBOZXRsaW5rIHBvbGljeSBkdW1waW5nIGxvZ2ljIGluIG5ldC9uZXRsaW5rL3BvbGljeS5jIHRvIHN1cHBvcnQgYmlnLWVuZGlhbiBpbnRlZ2VyIGF0dHJpYnV0ZXMgKE5MQV9CRTE2IGFuZCBOTEFfQkUzMikgYnkgZW1pdHRpbmcgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSIGFuZCBhZGp1c3RpbmcgdGhlIGF0dHJpYnV0ZSBzaXplIGVzdGltYXRpb24uIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSB2aWEgQUZfTkVUTElOSyBzb2NrZXRzIHRocm91Z2ggR2VuZXJpYyBOZXRsaW5rIHBvbGljeSBkdW1waW5nIChDVFJMX0NNRF9HRVRQT0xJQ1kpIGFzIHdlbGwgYXMgbmV0bGluayBleHRhY2sgZXJyb3IgcmVwb3J0aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmVkNDFhNGViNDE2NjgyNzNlNTQzOTg3NDQ5ZjAyOTI3YTY4MjYzNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDA6MjM6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmxjdHJsLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmxjdHJsLnlhbWwKaW5kZXggOGI0NDcyYTZhYTM2YS4uN2U3YzE1OGUzZTczNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ubGN0cmwueWFtbApAQCAtNDIsNiAmIzQzOzQyLDE2IEBAIGRlZmluaXRpb25zOgogICAgICAgLSBiaXRmaWVsZDMyCiAgICAgICAtIHNpbnQKICAgICAgIC0gdWludAomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBwb2xpY3ktYnl0ZS1vcmRlcgomIzQzOyAgICBkb2M6IHwKJiM0MzsgICAgICBCeXRlIG9yZGVyIG9mIGFuIGludGVnZXIgYXR0cmlidXRlLiBaZXJvIGlzIGxlZnQgdW51c2VkIHNvIHRoYXQgaXQKJiM0MzsgICAgICBjYW4gYmUgdGFrZW4gdG8gbWVhbiBob3N0IGJ5dGUgb3JkZXIuCiYjNDM7ICAgIGVudW0tbmFtZTogbmV0bGluay1wb2xpY3ktYnl0ZS1vcmRlcgomIzQzOyAgICB0eXBlOiBlbnVtCiYjNDM7ICAgIHZhbHVlLXN0YXJ0OiAxCiYjNDM7ICAgIGVudHJpZXM6CiYjNDM7ICAgICAgLSBiaWctZW5kaWFuCiAKIGF0dHJpYnV0ZS1zZXRzOgogICAtCkBAIC0xNTIsNiAmIzQzOzE2MiwxMSBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgIC0KICAgICAgICAgbmFtZTogcGFkCiAgICAgICAgIHR5cGU6IHBhZAomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGJ5dGUtb3JkZXIKJiM0MzsgICAgICAgIGRvYzogQnl0ZSBvcmRlciBvZiB0aGUgYXR0cmlidXRlLCBhYnNlbnQgbWVhbnMgaG9zdCBieXRlIG9yZGVyLgomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBlbnVtOiBwb2xpY3ktYnl0ZS1vcmRlcgogICAtCiAgICAgbmFtZTogb3AtcG9saWN5LWF0dHJzCiAgICAgbmFtZS1wcmVmaXg6IGN0cmwtYXR0ci1wb2xpY3ktCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGxpbmsuaAppbmRleCBmODdhYWYyOGE2NDkxLi44MmM0MWFlYjQzNTc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRsaW5rLmgKQEAgLTMyOSw2ICYjNDM7MzI5LDE3IEBAIGVudW0gbmV0bGlua19hdHRyaWJ1dGVfdHlwZSB7CiAJTkxfQVRUUl9UWVBFX1VJTlQsCiB9OwogCiYjNDM7LyoqCiYjNDM7ICogZW51bSBuZXRsaW5rX3BvbGljeV9ieXRlX29yZGVyIC0gYnl0ZSBvcmRlciBvZiBhbiBpbnRlZ2VyIGF0dHJpYnV0ZQomIzQzOyAqIEBOTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOOiBiaWcgZW5kaWFuIChuZXR3b3JrIGJ5dGUgb3JkZXIpCiYjNDM7ICoKJiM0MzsgKiBaZXJvIGlzIGxlZnQgdW5hc3NpZ25lZCBzbyB0aGF0IGl0IGtlZXBzIG1lYW5pbmcgaG9zdCBieXRlIG9yZGVyLAomIzQzOyAqIHdoaWNoIGlzIGFsc28gd2hhdCBhIG1pc3NpbmcgYnl0ZSBvcmRlciBtZWFucy4KJiM0MzsgKi8KJiM0MztlbnVtIG5ldGxpbmtfcG9saWN5X2J5dGVfb3JkZXIgewomIzQzOwlOTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOID0gMSwKJiM0Mzt9OwomIzQzOwogLyoqCiAgKiBlbnVtIG5ldGxpbmtfcG9saWN5X3R5cGVfYXR0ciAtIHBvbGljeSB0eXBlIGF0dHJpYnV0ZXMKICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX1VOU1BFQzogdW51c2VkCkBAIC0zNTYsNiAmIzQzOzM2Nyw4IEBAIGVudW0gbmV0bGlua19hdHRyaWJ1dGVfdHlwZSB7CiAgKgliaXRmaWVsZDMyIHR5cGUgKFUzMikKICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0s6IG1hc2sgb2YgdmFsaWQgYml0cyBmb3IgdW5zaWduZWQgaW50ZWdlcnMgKFU2NCkKICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRDogcGFkIGF0dHJpYnV0ZSBmb3IgNjQtYml0IGFsaWdubWVudAomIzQzOyAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVI6IGJ5dGUgb3JkZXIgb2YgYW4gaW50ZWdlciBhdHRyaWJ1dGUsCiYjNDM7ICoJJmFtcDtlbnVtIG5ldGxpbmtfcG9saWN5X2J5dGVfb3JkZXIsIGFic2VudCBpZiBob3N0IGJ5dGUgb3JkZXIgKFUzMikKICAqCiAgKiBAX19OTF9QT0xJQ1lfVFlQRV9BVFRSX01BWDogbnVtYmVyIG9mIGF0dHJpYnV0ZXMKICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyCkBAIC0zNzQsNiAmIzQzOzM4Nyw3IEBAIGVudW0gbmV0bGlua19wb2xpY3lfdHlwZV9hdHRyIHsKIAlOTF9QT0xJQ1lfVFlQRV9BVFRSX0JJVEZJRUxEMzJfTUFTSywKIAlOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRCwKIAlOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0ssCiYjNDM7CU5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUiwKIAogCS8qIGtlZXAgbGFzdCAqLwogCV9fTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVgsCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9wb2xpY3kuYyBiL25ldC9uZXRsaW5rL3BvbGljeS5jCmluZGV4IDA4YjAwNmM0OGYwNmUuLjU3NGQ0NGI3ZDUxODIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL3BvbGljeS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRsaW5rL3BvbGljeS5jCkBAIC0yMzQsNiAmIzQzOzIzNCwxMSBAQCBpbnQgbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0KQogCQkvKiBtYXhpbXVtIGlzIGNvbW1vbiwgdTY0IG1pbi9tYXggd2l0aCBwYWRkaW5nICovCiAJCXJldHVybiBjb21tb24gJiM0MzsKIAkJICAgICAgIDIgKiAobmxhX2F0dHJfc2l6ZSgwKSAmIzQzOyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7CiYjNDM7CWNhc2UgTkxBX0JFMTY6CiYjNDM7CWNhc2UgTkxBX0JFMzI6CiYjNDM7CQkvKiBzYW1lIGFzIHRoZSB1bnNpZ25lZCB0eXBlcywgcGx1cyB0aGUgYnl0ZSBvcmRlciAqLwomIzQzOwkJcmV0dXJuIGNvbW1vbiAmIzQzOyBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKSAmIzQzOwomIzQzOwkJICAgICAgIDIgKiAobmxhX2F0dHJfc2l6ZSgwKSAmIzQzOyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7CiAJY2FzZSBOTEFfQklURklFTEQzMjoKIAkJcmV0dXJuIGNvbW1vbiAmIzQzOyBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKTsKIAljYXNlIE5MQV9TVFJJTkc6CkBAIC0yODksMjEgJiM0MzsyOTQsMjggQEAgX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlLAogCWNhc2UgTkxBX1UxNjoKIAljYXNlIE5MQV9VMzI6CiAJY2FzZSBOTEFfVTY0OgomIzQzOwljYXNlIE5MQV9CRTE2OgomIzQzOwljYXNlIE5MQV9CRTMyOgogCWNhc2UgTkxBX1VJTlQ6CiAJY2FzZSBOTEFfTVNFQ1M6IHsKIAkJc3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiByYW5nZTsKIAogCQlpZiAocHQtJmd0O3R5cGUgPT0gTkxBX1U4KQogCQkJdHlwZSA9IE5MX0FUVFJfVFlQRV9VODsKLQkJZWxzZSBpZiAocHQtJmd0O3R5cGUgPT0gTkxBX1UxNikKJiM0MzsJCWVsc2UgaWYgKHB0LSZndDt0eXBlID09IE5MQV9VMTYgfHwgcHQtJmd0O3R5cGUgPT0gTkxBX0JFMTYpCiAJCQl0eXBlID0gTkxfQVRUUl9UWVBFX1UxNjsKLQkJZWxzZSBpZiAocHQtJmd0O3R5cGUgPT0gTkxBX1UzMikKJiM0MzsJCWVsc2UgaWYgKHB0LSZndDt0eXBlID09IE5MQV9VMzIgfHwgcHQtJmd0O3R5cGUgPT0gTkxBX0JFMzIpCiAJCQl0eXBlID0gTkxfQVRUUl9UWVBFX1UzMjsKIAkJZWxzZSBpZiAocHQtJmd0O3R5cGUgPT0gTkxBX1U2NCkKIAkJCXR5cGUgPSBOTF9BVFRSX1RZUEVfVTY0OwogCQllbHNlCiAJCQl0eXBlID0gTkxfQVRUUl9UWVBFX1VJTlQ7CiAKJiM0MzsJCWlmICgocHQtJmd0O3R5cGUgPT0gTkxBX0JFMTYgfHwgcHQtJmd0O3R5cGUgPT0gTkxBX0JFMzIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBubGFfcHV0X3UzMihza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUiwKJiM0MzsJCQkJTkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTikpCiYjNDM7CQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CiAJCWlmIChwdC0mZ3Q7dmFsaWRhdGlvbl90eXBlID09IE5MQV9WQUxJREFURV9NQVNLKSB7CiAJCQlpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0ssCiAJCQkJCSAgICAgIHB0LSZndDttYXNrLApkaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5CmluZGV4IDg2ODJiZjU4OGUxZmEuLmZiNWFjYjhhY2RlZDEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHkKQEAgLTExNSw2ICYjNDM7MTE1LDcgQEAgY2xhc3MgTmV0bGluazoKICAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JJVEZJRUxEMzJfTUFTSyA9IDEwCiAgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9QQUQgPSAxMQogICAgIE5MX1BPTElDWV9UWVBFX0FUVFJfTUFTSyA9IDEyCiYjNDM7ICAgIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUiA9IDEzCiAKICAgICBBdHRyVHlwZSA9IEVudW0oJiMzOTtBdHRyVHlwZSYjMzk7LCBbJiMzOTtmbGFnJiMzOTssICYjMzk7dTgmIzM5OywgJiMzOTt1MTYmIzM5OywgJiMzOTt1MzImIzM5OywgJiMzOTt1NjQmIzM5OywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM5O3M4JiMzOTssICYjMzk7czE2JiMzOTssICYjMzk7czMyJiMzOTssICYjMzk7czY0JiMzOTssCkBAIC0xMjIsNiAmIzQzOzEyMyw4IEBAIGNsYXNzIE5ldGxpbms6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzOTtuZXN0ZWQmIzM5OywgJiMzOTtuZXN0ZWQtYXJyYXkmIzM5OywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM5O2JpdGZpZWxkMzImIzM5OywgJiMzOTtzaW50JiMzOTssICYjMzk7dWludCYjMzk7XSkKIAomIzQzOyAgICBCeXRlT3JkZXIgPSBFbnVtKCYjMzk7Qnl0ZU9yZGVyJiMzOTssIFsmIzM5O2JpZy1lbmRpYW4mIzM5O10sIHN0YXJ0PTEpCiYjNDM7CiBjbGFzcyBObEVycm9yKEV4Y2VwdGlvbik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5sX21zZyk6CiAgICAgICAgIHNlbGYubmxfbXNnID0gbmxfbXNnCkBAIC0xNTgsNyAmIzQzOzE2MSw3IEBAIGNsYXNzIE5sUG9saWN5OgogCiAgICAgRWFjaCBwb2xpY3kgZW50cnkgYWx3YXlzIGhhcyBhICYjMzk7dHlwZSYjMzk7IGF0dHJpYnV0ZSAoZS5nLiB1MzIsIHN0cmluZywKICAgICBuZXN0ZWQpLiBPcHRpb25hbCBhdHRyaWJ1dGVzIGRlcGVuZGluZyBvbiB0aGUgJiMzOTt0eXBlJiMzOTs6IG1pbi12YWx1ZSwKLSAgICBtYXgtdmFsdWUsIG1pbi1sZW5ndGgsIG1heC1sZW5ndGgsIG1hc2suCiYjNDM7ICAgIG1heC12YWx1ZSwgbWluLWxlbmd0aCwgbWF4LWxlbmd0aCwgbWFzaywgYnl0ZS1vcmRlci4KIAogICAgIFBvbGljaWVzIGNhbiBmb3JtIGluZmluaXRlIG5lc3RpbmcgbG9vcHMuIFRoZXNlIGxvb3BzIGFyZSB0cmltbWVkCiAgICAgd2hlbiBwb2xpY3kgaXMgY29udmVydGVkIHRvIGEgZGljdCB3aXRoIHBvbC50b19kaWN0KCkuCkBAIC00NTQsNiAmIzQzOzQ1Nyw5IEBAIGRlZiBfZ2VubF9kZWNvZGVfcG9saWN5KHJhdyk6CiAgICAgICAgICAgICBwb2xpY3lbJiMzOTtiaXRmaWVsZDMyLW1hc2smIzM5O10gPSBhdHRyLmFzX3NjYWxhcigmIzM5O3UzMiYjMzk7KQogICAgICAgICBlbGlmIGF0dHIudHlwZSA9PSBOZXRsaW5rLk5MX1BPTElDWV9UWVBFX0FUVFJfTUFTSzoKICAgICAgICAgICAgIHBvbGljeVsmIzM5O21hc2smIzM5O10gPSBhdHRyLmFzX3NjYWxhcigmIzM5O3U2NCYjMzk7KQomIzQzOyAgICAgICAgZWxpZiBhdHRyLnR5cGUgPT0gTmV0bGluay5OTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVI6CiYjNDM7ICAgICAgICAgICAgYnl0ZV9vcmRlciA9IGF0dHIuYXNfc2NhbGFyKCYjMzk7dTMyJiMzOTspCiYjNDM7ICAgICAgICAgICAgcG9saWN5WyYjMzk7Ynl0ZS1vcmRlciYjMzk7XSA9IE5ldGxpbmsuQnl0ZU9yZGVyKGJ5dGVfb3JkZXIpLm5hbWUKICAgICByZXR1cm4gcG9saWN5CiAKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTc4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0bGluayBQb2xpY3kgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdG8gYnJlYWsgaXQgZG93biBwaWVjZSBieSBwaWVjZSwgc3RhcnRpbmcgd2l0aCBhIGdyYW51bGFyIGxvb2sgYXQgdGhlIGNvZGUgY2hhbmdlcy4gSSBzZWUgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogdGhlIGRvY3VtZW50YXRpb24gKGBubGN0cmwueWFtbGApLCBhIGhlYWRlciBmaWxlIChgbmV0bGluay5oYCksIHRoZSBjb3JlIHBvbGljeSBpbXBsZW1lbnRhdGlvbiAoYHBvbGljeS5jYCksIGFuZCBhIHVzZXItc3BhY2UgUHl0aG9uIHNjcmlwdCAoYHlubC5weWApLiBUaGlzIHN1Z2dlc3RzIGNoYW5nZXMgdG8gYm90aCB0aGUga2VybmVsIGFuZCB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiByZWxhdGVkIHRvIE5ldGxpbmsgcG9saWN5IGhhbmRsaW5nLgoKRmlyc3QsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIHNwZWNpZmljIGFkZGl0aW9ucyBhbmQgbW9kaWZpY2F0aW9ucyBpbiBlYWNoIGZpbGUuIFRoZSBhZGRpdGlvbiBvZiBgZW51bSBuZXRsaW5rX3BvbGljeV9ieXRlX29yZGVyYCBhbmQgYE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUmAgaW4gdGhlIGhlYWRlciBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZzsgdGhpcyBsaWtlbHkgaW5kaWNhdGVzIGEgbmV3IGZlYXR1cmUgb3IgZW5oYW5jZW1lbnQgcmVsYXRlZCB0byBieXRlIG9yZGVyIGhhbmRsaW5nIHdpdGhpbiBOZXRsaW5rIGF0dHJpYnV0ZXMuIFRoZSBtb2RpZmljYXRpb24gb2YgYG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlYCBhbmQgYF9fbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyYCBpbiBgcG9saWN5LmNgIHRvIGhhbmRsZSBgTkxBX0JFMTZgIGFuZCBgTkxBX0JFMzJgIHN1cHBvcnRzIG15IGh5cG90aGVzaXMuIFRoZSBpbmNsdXNpb24gb2YgYE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUmAgdGVsbHMgbWUgdGhhdCB3ZSBhcmUgYWRkaW5nIHNvbWUgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ5dGUgb3JkZXIgd2hlbiBkdW1waW5nIHRoZSBhdHRyaWJ1dGUuCgpOb3csIG15IGF0dGVudGlvbiBpbW1lZGlhdGVseSBzaGlmdHMgdG8gYG5ldC9uZXRsaW5rL3BvbGljeS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlOiB3aG8gY2FsbHMgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zLCB3aGF0IGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUgcmVsZXZhbnQsIGFuZCB3aGF0IG90aGVyIHN5bWJvbHMgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlbT8gVGhlIHNwZWNpZmljIGNvbnRleHQgb2YgdGhlIGNhbGxzIGlzIGNyaXRpY2FsLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZWZmaWNpZW50bHkgdHJhY2UgdGhlc2UgY2FsbHMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGFmZmVjdHMgdGhlIGJ5dGUgb3JkZXIgaGFuZGxpbmcuIE9uY2UgSSBoYXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3cgYW5kIGRlcGVuZGVuY2llcywgSSBjYW4gYmV0dGVyIGFzc2VzcyB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoZXNlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0bGluay9wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyMDpcdFx0Y2FzZSBOTEFfTkVTVEVEX0FSUkFZOlxuIDIyMTpcdFx0XHQvKiBjb21tb24sIHBvbGljeSBpZHgsIHBvbGljeSBtYXhhdHRyICovXG4gMjIyOlx0XHRcdHJldHVybiBjb21tb24gJiM0MzsgMiAqIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpO1xuIDIyMzpcdFx0Y2FzZSBOTEFfVTg6XG4gMjI0Olx0XHRjYXNlIE5MQV9VMTY6XG4gMjI1Olx0XHRjYXNlIE5MQV9VMzI6XG4gMjI2Olx0XHRjYXNlIE5MQV9VNjQ6XG4gMjI3Olx0XHRjYXNlIE5MQV9NU0VDUzpcbiAyMjg6XHRcdGNhc2UgTkxBX1M4OlxuIDIyOTpcdFx0Y2FzZSBOTEFfUzE2OlxuIDIzMDpcdFx0Y2FzZSBOTEFfUzMyOlxuIDIzMTpcdFx0Y2FzZSBOTEFfUzY0OlxuIDIzMjpcdFx0Y2FzZSBOTEFfU0lOVDpcbiAyMzM6XHRcdGNhc2UgTkxBX1VJTlQ6XG4gMjM0Olx0XHRcdC8qIG1heGltdW0gaXMgY29tbW9uLCB1NjQgbWluL21heCB3aXRoIHBhZGRpbmcgKi9cbiAyMzU6XHRcdFx0cmV0dXJuIGNvbW1vbiAmIzQzO1xuIDIzNjpcdFx0XHQgICAgICAgMiAqIChubGFfYXR0cl9zaXplKDApICYjNDM7IG5sYV9hdHRyX3NpemUoc2l6ZW9mKHU2NCkpKTtcbiAyMzc6XHRcdGNhc2UgTkxBX0JFMTY6XG4gMjM4Olx0XHRjYXNlIE5MQV9CRTMyOlxuIDIzOTpcdFx0XHQvKiBzYW1lIGFzIHRoZSB1bnNpZ25lZCB0eXBlcywgcGx1cyB0aGUgYnl0ZSBvcmRlciAqL1xuIDI0MDpcdFx0XHRyZXR1cm4gY29tbW9uICYjNDM7IG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7XG4gMjQxOlx0XHRcdCAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgJiM0MzsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTY0KSkpO1xuIDI0MjpcdFx0Y2FzZSBOTEFfQklURklFTEQzMjpcbiAyNDM6XHRcdFx0cmV0dXJuIGNvbW1vbiAmIzQzOyBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKTtcbiAyNDQ6XHRcdGNhc2UgTkxBX1NUUklORzpcbiAyNDU6XHRcdGNhc2UgTkxBX05VTF9TVFJJTkc6XG4gMjQ2Olx0XHRjYXNlIE5MQV9CSU5BUlk6XG4gMjQ3Olx0XHRcdC8qIG1heGltdW0gaXMgY29tbW9uLCB1MzIgbWluLWxlbmd0aC9tYXgtbGVuZ3RoICovXG4gMjQ4Olx0XHRcdHJldHVybiBjb21tb24gJiM0MzsgMiAqIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpO1xuIDI0OTpcdFx0Y2FzZSBOTEFfRkxBRzpcbiAyNTA6XHRcdFx0cmV0dXJuIGNvbW1vbjtcbiAyNTE6XHRcdH1cbiAyNTI6XHRcbiAyNTM6XHRcdC8qIHRoaXMgc2hvdWxkIHRoZW4gY2F1c2UgYSB3YXJuaW5nIGxhdGVyICovXG4gMjU0Olx0XHRyZXR1cm4gMDtcbiAyNTU6XHR9XG4gMjU2Olx0XG4gMjU3Olx0c3RhdGljIGludFxuIDI1ODpcdF9fbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyKHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSxcbiAyNTk6XHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDI2MDpcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdCxcbiAyNjE6XHRcdFx0XHRcdCBpbnQgbmVzdGF0dHIpXG4gMjYyOlx0e1xuIDI2MzpcdFx0aW50IGVzdGltYXRlID0gbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUocHQpO1xuIDI2NDpcdFx0ZW51bSBuZXRsaW5rX2F0dHJpYnV0ZV90eXBlIHR5cGU7XG4gMjY1Olx0XHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuIDI2NjpcdFxuIDI2NzpcdFx0YXR0ciA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgbmVzdGF0dHIpO1xuIDI2ODpcdFx0aWYgKCFhdHRyKVxuIDI2OTpcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gMjcwOlx0XG4gMjcxOlx0XHRzd2l0Y2ggKHB0LVx1MDAzZXR5cGUpIHtcbiAyNzI6XHRcdGRlZmF1bHQ6XG4gMjczOlx0XHRjYXNlIE5MQV9VTlNQRUM6XG4gMjc0Olx0XHRjYXNlIE5MQV9SRUpFQ1Q6XG4gMjc1Olx0XHRcdC8qIHNraXAgLSB1c2UgTkxBX01JTl9MRU4gdG8gYWR2ZXJ0aXNlIHN1Y2ggKi9cbiAyNzY6XHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgYXR0cik7XG4gMjc3Olx0XHRcdHJldHVybiAtRU5PREFUQTtcbiAyNzg6XHRcdGNhc2UgTkxBX05FU1RFRDpcbiAyNzk6XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9ORVNURUQ7XG4gMjgwOlx0XHRcdGZhbGx0aHJvdWdoO1xuIDI4MTpcdFx0Y2FzZSBOTEFfTkVTVEVEX0FSUkFZOlxuIDI4MjpcdFx0XHRpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfTkVTVEVEX0FSUkFZKVxuIDI4MzpcdFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfTkVTVEVEX0FSUkFZO1xuIDI4NDpcdFx0XHRpZiAoc3RhdGUgXHUwMDI2XHUwMDI2IHB0LVx1MDAzZW5lc3RlZF9wb2xpY3kgXHUwMDI2XHUwMDI2IHB0LVx1MDAzZWxlbiBcdTAwMjZcdTAwMjZcbiAyODU6XHRcdFx0ICAgIChubGFfcHV0X3UzMihza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfUE9MSUNZX0lEWCxcbiAyODY6XHRcdFx0XHRcdCBuZXRsaW5rX3BvbGljeV9kdW1wX2dldF9wb2xpY3lfaWR4KHN0YXRlLFxuIDI4NzpcdFx0XHRcdFx0XHRcdFx0XHQgICAgcHQtXHUwMDNlbmVzdGVkX3BvbGljeSxcbiAyODg6XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHB0LVx1MDAzZWxlbikpIHx8XG4gMjg5Olx0XHRcdCAgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BPTElDWV9NQVhUWVBFLFxuIDI5MDpcdFx0XHRcdFx0IHB0LVx1MDAzZWxlbikpKVxuIDI5MTpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDI5MjpcdFx0XHRicmVhaztcbiAyOTM6XHRcdGNhc2UgTkxBX1U4OlxuIDI5NDpcdFx0Y2FzZSBOTEFfVTE2OlxuIDI5NTpcdFx0Y2FzZSBOTEFfVTMyOlxuIDI5NjpcdFx0Y2FzZSBOTEFfVTY0OlxuIDI5NzpcdFx0Y2FzZSBOTEFfQkUxNjpcbiAyOTg6XHRcdGNhc2UgTkxBX0JFMzI6XG4gMjk5Olx0XHRjYXNlIE5MQV9VSU5UOlxuIDMwMDpcdFx0Y2FzZSBOTEFfTVNFQ1M6IHtcbiAzMDE6XHRcdFx0c3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiByYW5nZTtcbiAzMDI6XHRcbiAzMDM6XHRcdFx0aWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1U4KVxuIDMwNDpcdFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTg7XG4gMzA1Olx0XHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1UxNiB8fCBwdC1cdTAwM2V0eXBlID09IE5MQV9CRTE2KVxuIDMwNjpcdFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTE2O1xuIDMwNzpcdFx0XHRlbHNlIGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9VMzIgfHwgcHQtXHUwMDNldHlwZSA9PSBOTEFfQkUzMilcbiAzMDg6XHRcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1UzMjtcbiAzMDk6XHRcdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTY0KVxuIDMxMDpcdFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTY0O1xuIDMxMTpcdFx0XHRlbHNlXG4gMzEyOlx0XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VSU5UO1xuIDMxMzpcdFxuIDMxNDpcdFx0XHRpZiAoKHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMTYgfHwgcHQtXHUwMDNldHlwZSA9PSBOTEFfQkUzMikgXHUwMDI2XHUwMDI2XG4gMzE1Olx0XHRcdCAgICBubGFfcHV0X3UzMihza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUixcbiAzMTY6XHRcdFx0XHRcdE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU4pKVxuIDMxNzpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDMxODpcdFxuIDMxOTpcdFx0XHRpZiAocHQtXHUwMDNldmFsaWRhdGlvbl90eXBlID09IE5MQV9WQUxJREFURV9NQVNLKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM1MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBOZXRsaW5rIFBvbGljeSBEdW1waW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXRsaW5rIHBvbGljeSBkdW1wIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZC4gTXkgZmlyc3Qgc3RlcCBpcyB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiBgX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJgIGFuZCBgbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGVgLiBTZWVpbmcgd2hlcmUgdGhleSYjMzk7cmUgaW52b2tlZCB3aWxsIGdpdmUgbWUgYSBjb25jcmV0ZSBwaWN0dXJlIG9mIHRoZWlyIHJvbGUgd2l0aGluIHRoZSBzeXN0ZW0uCgpJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoIG9mIHRoZSBgbmV0L25ldGxpbmsvcG9saWN5LmNgIGZpbGUgaXRzZWxmIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGNvbnRleHQuIFRoZW4sIEkgd2lsbCBhbHNvIGxldmVyYWdlIGBncmVwYCB0byBxdWlja2x5IGZpbmQgYWxsIGluc3RhbmNlcyBvZiBgbmV0bGlua19wb2xpY3lfZHVtcGAgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGF0JiMzOTtsbCBsZXQgbWUgcXVpY2tseSBzY2FuIGZvciBwYXR0ZXJucywgdXNlLWNhc2VzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgbmV0bGluayBwb2xpY3kgZnJhbWV3b3JrLiBUaGlzIGNvbWJpbmF0aW9uIG9mIHRhcmdldGVkIHNlYXJjaGVzIGFuZCBicm9hZGVyIGZpbGUgYW5hbHlzaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0bGlua19wb2xpY3lfZHVtcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRsaW5rJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz0yMTYzPW5ldGxpbmtfYWNrX3Rsdl9sZW4oc3RydWN0IG5ldGxpbmtfc29jayAqbmxrLCBpbnQgZXJyLFxuLS1cbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMTgzLVx0aWYgKGV4dGFjay1cdTAwM2Vwb2xpY3kpXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjE4NDpcdFx0dGx2bGVuICYjNDM7PSBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZShleHRhY2stXHUwMDNlcG9saWN5KTtcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMTg1LVx0aWYgKGV4dGFjay1cdTAwM2VtaXNzX3R5cGUpXG4tLVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jPTIyMDA9bmV0bGlua19hY2tfdGx2X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsIGludCBlcnIsXG4tLVxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTIyMTUtXHRpZiAoZXh0YWNrLVx1MDAzZXBvbGljeSlcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoyMjE2Olx0XHRuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoc2tiLCBleHRhY2stXHUwMDNlcG9saWN5LFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTIyMTctXHRcdFx0XHRcdCAgICAgICBOTE1TR0VSUl9BVFRSX1BPTElDWSk7XG4tLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM9MTUxMj1zdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHgge1xubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTUxMzpcdHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZTtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE1MTQtXHRjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKnJ0O1xuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jPTE1Mjk9c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE1NzEtXHRcdGlmIChkb2l0LnBvbGljeSkge1xubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTU3MjpcdFx0XHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTU3My1cdFx0XHRcdFx0XHRcdCAgICAgZG9pdC5wb2xpY3ksXG4tLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTU3OC1cdFx0aWYgKGR1bXAucG9saWN5KSB7XG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNTc5Olx0XHRcdGVyciA9IG5ldGxpbmtfcG9saWN5X2R1bXBfYWRkX3BvbGljeShcdTAwMjZjdHgtXHUwMDNlc3RhdGUsXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNTgwLVx0XHRcdFx0XHRcdFx0ICAgICBkdW1wLnBvbGljeSxcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjAxLVx0XHRpZiAoaS5kb2l0LnBvbGljeSkge1xubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTYwMjpcdFx0XHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXHUwMDI2Y3R4LVx1MDAzZXN0YXRlLFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTYwMy1cdFx0XHRcdFx0XHRcdCAgICAgaS5kb2l0LnBvbGljeSxcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjA4LVx0XHRpZiAoaS5kdW1waXQucG9saWN5KSB7XG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNjA5Olx0XHRcdGVyciA9IG5ldGxpbmtfcG9saWN5X2R1bXBfYWRkX3BvbGljeShcdTAwMjZjdHgtXHUwMDNlc3RhdGUsXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjEwLVx0XHRcdFx0XHRcdFx0ICAgICBpLmR1bXBpdC5wb2xpY3ksXG4tLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTYyMy1lcnJfZnJlZV9zdGF0ZTpcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE2MjQ6XHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVx1MDAzZXN0YXRlKTtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2MjUtZXJyX2ZyZWVfb3BfaXRlcjpcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYz0xNjQ4PXN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5X3B1dF9vcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2NzQtXHRpZiAoZG9pdC1cdTAwM2Vwb2xpY3kpIHtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE2NzU6XHRcdGlkeCA9IG5ldGxpbmtfcG9saWN5X2R1bXBfZ2V0X3BvbGljeV9pZHgoY3R4LVx1MDAzZXN0YXRlLFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTY3Ni1cdFx0XHRcdFx0XHRcdCBkb2l0LVx1MDAzZXBvbGljeSxcbi0tXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNjgyLVx0aWYgKGR1bXBpdC1cdTAwM2Vwb2xpY3kpIHtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE2ODM6XHRcdGlkeCA9IG5ldGxpbmtfcG9saWN5X2R1bXBfZ2V0X3BvbGljeV9pZHgoY3R4LVx1MDAzZXN0YXRlLFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTY4NC1cdFx0XHRcdFx0XHRcdCBkdW1waXQtXHUwMDNlcG9saWN5LFxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jPTE3MDE9c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3koc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3MzAtXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzMxOlx0d2hpbGUgKG5ldGxpbmtfcG9saWN5X2R1bXBfbG9vcChjdHgtXHUwMDNlc3RhdGUpKSB7XG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNzMyLVx0XHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3NDEtXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzQyOlx0XHRpZiAobmV0bGlua19wb2xpY3lfZHVtcF93cml0ZShza2IsIGN0eC1cdTAwM2VzdGF0ZSkpXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNzQzLVx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jPTE3NTc9c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTc2MS1cdGtmcmVlKGN0eC1cdTAwM2VvcF9pdGVyKTtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE3NjI6XHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVx1MDAzZXN0YXRlKTtcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3NjMtXHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xNi1cbm5ldC9uZXRsaW5rL3BvbGljeS5jOjE3OnN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlIHtcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTE4LVx0dW5zaWduZWQgaW50IHBvbGljeV9pZHg7XG4tLVxubmV0L25ldGxpbmsvcG9saWN5LmMtMjYtXG5uZXQvbmV0bGluay9wb2xpY3kuYzoyNzpzdGF0aWMgaW50IGFkZF9wb2xpY3koc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKipzdGF0ZXAsXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yOC1cdFx0ICAgICAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSxcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMC17XG5uZXQvbmV0bGluay9wb2xpY3kuYzozMTpcdHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSA9ICpzdGF0ZXA7XG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMi1cdHVuc2lnbmVkIGludCBvbGRfbl9hbGxvYywgbl9hbGxvYywgaTtcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy02Ny0vKipcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjY4OiAqIG5ldGxpbmtfcG9saWN5X2R1bXBfZ2V0X3BvbGljeV9pZHggLSByZXRyaWV2ZSBwb2xpY3kgaW5kZXhcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTY5LSAqIEBzdGF0ZTogdGhlIHBvbGljeSBkdW1wIHN0YXRlXG4tLVxubmV0L25ldGxpbmsvcG9saWN5LmMtODEtICovXG5uZXQvbmV0bGluay9wb2xpY3kuYzo4MjppbnQgbmV0bGlua19wb2xpY3lfZHVtcF9nZXRfcG9saWN5X2lkeChzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXG5uZXQvbmV0bGluay9wb2xpY3kuYy04My1cdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcG9saWN5LFxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTEwMC1cbm5ldC9uZXRsaW5rL3BvbGljeS5jOjEwMTpzdGF0aWMgc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKmFsbG9jX3N0YXRlKHZvaWQpXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xMDIte1xubmV0L25ldGxpbmsvcG9saWN5LmM6MTAzOlx0c3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlO1xubmV0L25ldGxpbmsvcG9saWN5LmMtMTA0LVxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTExMy0vKipcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjExNDogKiBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3kgLSBhZGQgYSBwb2xpY3kgdG8gdGhlIGR1bXBcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTExNS0gKiBAcHN0YXRlOiBzdGF0ZSB0byBhZGQgdG8sIG1heSBiZSByZWFsbG9jYXRlZCwgbXVzdCBiZSAlTlVMTCB0aGUgZmlyc3QgdGltZVxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTEyNS0gKi9cbm5ldC9uZXRsaW5rL3BvbGljeS5jOjEyNjppbnQgbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICoqcHN0YXRlLFxubmV0L25ldGxpbmsvcG9saWN5LmMtMTI3LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSxcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xMjkte1xubmV0L25ldGxpbmsvcG9saWN5LmM6MTMwOlx0c3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlID0gKnBzdGF0ZTtcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTEzMS1cdHVuc2lnbmVkIGludCBwb2xpY3lfaWR4O1xuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTE4Mi1cdGlmICghKnBzdGF0ZSlcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjE4MzpcdFx0bmV0bGlua19wb2xpY3lfZHVtcF9mcmVlKHN0YXRlKTtcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTE4NC1cdGVsc2Vcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYz0xODk9c3RhdGljIGJvb2xcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjE5MDpuZXRsaW5rX3BvbGljeV9kdW1wX2ZpbmlzaGVkKHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSlcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTE5MS17XG4tLVxubmV0L25ldGxpbmsvcG9saWN5LmMtMTk2LS8qKlxubmV0L25ldGxpbmsvcG9saWN5LmM6MTk3OiAqIG5ldGxpbmtfcG9saWN5X2R1bXBfbG9vcCAtIGR1bXBpbmcgbG9vcCBpbmRpY2F0b3Jcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTE5OC0gKiBAc3RhdGU6IHRoZSBwb2xpY3kgZHVtcCBzdGF0ZVxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIwMy0gKi9cbm5ldC9uZXRsaW5rL3BvbGljeS5jOjIwNDpib29sIG5ldGxpbmtfcG9saWN5X2R1bXBfbG9vcChzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUpXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yMDUte1xubmV0L25ldGxpbmsvcG9saWN5LmM6MjA2Olx0cmV0dXJuICFuZXRsaW5rX3BvbGljeV9kdW1wX2ZpbmlzaGVkKHN0YXRlKTtcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIwNy19XG5uZXQvbmV0bGluay9wb2xpY3kuYy0yMDgtXG5uZXQvbmV0bGluay9wb2xpY3kuYzoyMDk6aW50IG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdClcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIxMC17XG4tLVxubmV0L25ldGxpbmsvcG9saWN5LmM9MjU3PXN0YXRpYyBpbnRcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjI1ODpfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yNTktXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yNjIte1xubmV0L25ldGxpbmsvcG9saWN5LmM6MjYzOlx0aW50IGVzdGltYXRlID0gbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUocHQpO1xubmV0L25ldGxpbmsvcG9saWN5LmMtMjY0LVx0ZW51bSBuZXRsaW5rX2F0dHJpYnV0ZV90eXBlIHR5cGU7XG4tLVxubmV0L25ldGxpbmsvcG9saWN5LmMtMjg1LVx0XHQgICAgKG5sYV9wdXRfdTMyKHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9QT0xJQ1lfSURYLFxubmV0L25ldGxpbmsvcG9saWN5LmM6Mjg2Olx0XHRcdFx0IG5ldGxpbmtfcG9saWN5X2R1bXBfZ2V0X3BvbGljeV9pZHgoc3RhdGUsXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yODctXHRcdFx0XHRcdFx0XHRcdCAgICBwdC1cdTAwM2VuZXN0ZWRfcG9saWN5LFxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQyMi0vKipcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjQyMzogKiBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIgLSB3cml0ZSBhIGdpdmVuIGF0dHJpYnV0ZSBwb2xpY3lcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQyNC0gKiBAc2tiOiB0aGUgbWVzc2FnZSBza2IgdG8gd3JpdGUgdG9cbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy00MzEtICovXG5uZXQvbmV0bGluay9wb2xpY3kuYzo0MzI6aW50IG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGxpbmsvcG9saWN5LmMtNDMzLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQzNS17XG5uZXQvbmV0bGluay9wb2xpY3kuYzo0MzY6XHRyZXR1cm4gX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoTlVMTCwgc2tiLCBwdCwgbmVzdGF0dHIpO1xubmV0L25ldGxpbmsvcG9saWN5LmMtNDM3LX1cbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy00MzktLyoqXG5uZXQvbmV0bGluay9wb2xpY3kuYzo0NDA6ICogbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZSAtIHdyaXRlIGN1cnJlbnQgcG9saWN5IGR1bXAgYXR0cmlidXRlc1xubmV0L25ldGxpbmsvcG9saWN5LmMtNDQxLSAqIEBza2I6IHRoZSBtZXNzYWdlIHNrYiB0byB3cml0ZSB0b1xuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQ0NS0gKi9cbm5ldC9uZXRsaW5rL3BvbGljeS5jOjQ0NjppbnQgbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGxpbmsvcG9saWN5LmM6NDQ3Olx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSlcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQ0OC17XG4tLVxubmV0L25ldGxpbmsvcG9saWN5LmMtNDYyLVxubmV0L25ldGxpbmsvcG9saWN5LmM6NDYzOlx0ZXJyID0gX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoc3RhdGUsIHNrYiwgcHQsIHN0YXRlLVx1MDAzZWF0dHJfaWR4KTtcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQ2NC1cdGlmIChlcnIgPT0gLUVOT0RBVEEpIHtcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy00ODItXHRpZiAoYWdhaW4pIHtcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjQ4MzpcdFx0aWYgKG5ldGxpbmtfcG9saWN5X2R1bXBfZmluaXNoZWQoc3RhdGUpKVxubmV0L25ldGxpbmsvcG9saWN5LmMtNDg0LVx0XHRcdHJldHVybiAtRU5PREFUQTtcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy00OTUtLyoqXG5uZXQvbmV0bGluay9wb2xpY3kuYzo0OTY6ICogbmV0bGlua19wb2xpY3lfZHVtcF9mcmVlIC0gZnJlZSBwb2xpY3kgZHVtcCBzdGF0ZVxubmV0L25ldGxpbmsvcG9saWN5LmMtNDk3LSAqIEBzdGF0ZTogdGhlIHBvbGljeSBkdW1wIHN0YXRlIHRvIGZyZWVcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy01MDAtICovXG5uZXQvbmV0bGluay9wb2xpY3kuYzo1MDE6dm9pZCBuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlKVxubmV0L25ldGxpbmsvcG9saWN5LmMtNTAyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAxNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBkaWdnaW5nIGludG8gdGhlIGhlYXJ0IG9mIG5ldGxpbmsgcG9saWN5IGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQvbmV0bGluay9wb2xpY3kuY2AuIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGEgZmV3IGtleSBmdW5jdGlvbnM6IGBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZWAsIGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAsIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJgLCBhbmQgYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCBmb3IgZHVtcGluZyBhbmQgd3JpdGluZyBuZXRsaW5rIGF0dHJpYnV0ZSBwb2xpY2llcy4KCkxvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIGl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBwaXZvdGFsIGluIGdlbmVyaWMgbmV0bGluayYjMzk7cyBwb2xpY3kgZHVtcGluZywgYWNjZXNzZWQgdGhyb3VnaCBgY3RybF9kdW1wcG9saWN5YCwgYW5kIGFsc28gaW52b2x2ZWQgaW4gbmV0bGluayBBQ0sgVExWIGZpbGxpbmcsIG5vdGFibHkgdGhyb3VnaCBgbmV0bGlua19hY2tfdGx2X2ZpbGxgIGFuZCBgbmV0bGlua19hY2tfdGx2X2xlbmAgdmlhIGBOTE1TR0VSUl9BVFRSX1BPTElDWWAuIFRoZSBjb25uZWN0aW9uIHRvIGBDVFJMX0NNRF9HRVRQT0xJQ1lgIHN1Z2dlc3RzIHRoaXMgcG9saWN5IGR1bXBpbmcgZnVuY3Rpb25hbGl0eSBpcyBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgd2hpY2ggbWFrZXMgaXQgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBGdXJ0aGVybW9yZSwgZXh0YWNrIHBvbGljeSBkdW1waW5nIGlzIHJldHVybmVkIHdoZW4gdGhlIG5ldGxpbmsgbWVzc2FnZXMgYXJlIGludmFsaWQgZHVlIHRvIGF0dHJpYnV0ZXMgcG9saWN5IGNoZWNrcy4KCkdpdmVuIHRoZSBwb3RlbnRpYWwgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBhbmQgdGhlIHJvbGUgaW4gZXJyb3IgaGFuZGxpbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgYnVpbGQgY29uZmlndXJhdGlvbiBiZXR0ZXIuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYG5ldC9uZXRsaW5rL3BvbGljeS5jYCBpcyBhbHdheXMgY29tcGlsZWQgb3IgaWYgdGhlcmUgYXJlIEtjb25maWcgb3B0aW9ucyBnb3Zlcm5pbmcgaXRzIGluY2x1c2lvbi4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwIOKAkyB0aW1lIHRvIGRpdmUgaW50byBgbmV0L25ldGxpbmsvTWFrZWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGxpbmsvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIG5ldGxpbmsgZHJpdmVyLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmoteSAgXHRcdFx0XHQ6PSBhZl9uZXRsaW5rLm8gZ2VuZXRsaW5rLm8gcG9saWN5Lm9cbiAgIDc6XHRcbiAgIDg6XHRvYmotJChDT05GSUdfTkVUTElOS19ESUFHKVx0JiM0Mzs9IG5ldGxpbmtfZGlhZy5vXG4gICA5Olx0bmV0bGlua19kaWFnLXlcdFx0XHQ6PSBkaWFnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc3NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGNvZGU6CgoqKkFuYWx5emluZyBOZXRsaW5rIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYG5ldC9uZXRsaW5rL01ha2VmaWxlYCBhbmQgc2VlIGBvYmoteSA6PSBhZl9uZXRsaW5rLm8gZ2VuZXRsaW5rLm8gcG9saWN5Lm9gLiBUaGlzIHRlbGxzIG1lIHRoYXQgYGFmX25ldGxpbmsub2AsIGBnZW5ldGxpbmsub2AsIGFuZCBgcG9saWN5Lm9gIGFyZSBnZXR0aW5nIGJ1aWx0IGludG8gdGhlIG5ldGxpbmsgbW9kdWxlLiBNYWtlcyBzZW5zZS4gTm93LCB0aGUgY29udGV4dCBpcyB0aGF0IHRoZSBlbnRpcmUgYG5ldC9uZXRsaW5rL2AgZGlyZWN0b3J5IGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBlbmFibGluZyBjb25kaXRpb24uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgY2hlY2sgd2hlcmUgdGhpcyBpcyBjb250cm9sbGVkLiBJIGltbWVkaWF0ZWx5IHN1c3BlY3QgaXQmIzM5O3MgdGllZCB0byBgQ09ORklHX05FVGAsIHNpbmNlIHRoYXQmIzM5O3MgdGhlIHN0YW5kYXJkIG5ldHdvcmtpbmcgb3B0aW9uIGluIHRoZSBrZXJuZWwuIExldCBtZSBkb3VibGUgY2hlY2ssIGVpdGhlciBpbiB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLCBvciBwZXJoYXBzIHRoZSBgbmV0L01ha2VmaWxlYC4gSSYjMzk7bGwgb3BlbiB0aG9zZSB1cCBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSByZXZlYWxzLiBNeSBpbnR1aXRpb24gc2F5cyBgQ09ORklHX05FVGAgaXMgdGhlIGtleS4gSXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IGRlcGVuZGVuY3kgdGhhdCB3b3VsZCBlbmFibGUgdGhlIGVudGlyZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgYW5kIGJ5IGV4dGVuc2lvbiwgdGhlIG5ldGxpbmsgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBuZXR3b3JraW5nLlxuICAgNDpcdCNcbiAgIDU6XHQjIDIgU2VwIDIwMDAsIENocmlzdG9waCBIZWxsd2lnIFx1MDAzY2hjaEBpbmZyYWRlYWQub3JnXHUwMDNlXG4gICA2Olx0IyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy5cbiAgIDc6XHQjXG4gICA4Olx0XG4gICA5Olx0b2JqLXlcdFx0XHRcdDo9IGRldnJlcy5vIHNvY2tldC5vIGNvcmUvXG4gIDEwOlx0XG4gIDExOlx0b2JqLSQoQ09ORklHX0NPTVBBVClcdFx0JiM0Mzs9IGNvbXBhdC5vXG4gIDEyOlx0XG4gIDEzOlx0IyBMTEMgaGFzIHRvIGJlIGxpbmtlZCBiZWZvcmUgdGhlIGZpbGVzIGluIG5ldC84MDIvXG4gIDE0Olx0b2JqLSQoQ09ORklHX0xMQylcdFx0JiM0Mzs9IGxsYy9cbiAgMTU6XHRvYmoteVx0XHRcdFx0JiM0Mzs9IGV0aGVybmV0LyA4MDIvIHNjaGVkLyBuZXRsaW5rLyBicGYvIGV0aHRvb2wvXG4gIDE2Olx0b2JqLSQoQ09ORklHX05FVEZJTFRFUilcdFx0JiM0Mzs9IG5ldGZpbHRlci9cbiAgMTc6XHRvYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IGlwdjQvXG4gIDE4Olx0b2JqLSQoQ09ORklHX1RMUylcdFx0JiM0Mzs9IHRscy9cbiAgMTk6XHRvYmotJChDT05GSUdfWEZSTSlcdFx0JiM0Mzs9IHhmcm0vXG4gIDIwOlx0b2JqLSQoQ09ORklHX1VOSVgpXHRcdCYjNDM7PSB1bml4L1xuICAyMTpcdG9iai0kKENPTkZJR19JTkVUX1BTUClcdFx0JiM0Mzs9IHBzcC9cbiAgMjI6XHRvYmoteVx0XHRcdFx0JiM0Mzs9IGlwdjYvXG4gIDIzOlx0b2JqLSQoQ09ORklHX1BBQ0tFVClcdFx0JiM0Mzs9IHBhY2tldC9cbiAgMjQ6XHRvYmotJChDT05GSUdfTkVUX0tFWSlcdFx0JiM0Mzs9IGtleS9cbiAgMjU6XHRvYmotJChDT05GSUdfQlJJREdFKVx0XHQmIzQzOz0gYnJpZGdlL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUzMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0bGluayBQb2xpY3kgRHVtcCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBuZXRsaW5rL2AgZGlyZWN0b3J5LiBJIHNlZSBpdCYjMzk7cyBpbmNsdWRlZCB2aWEgYG9iai15YCBpbiB0aGUgYG5ldC9NYWtlZmlsZWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGUgY2VudHJhbCBjb25maWd1cmF0aW9uIG9wdGlvbiwgYXMgZXhwZWN0ZWQsIHNlZW1zIHRvIGJlIGBDT05GSUdfTkVUYC4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSYjMzk7dmUgbm90ZWQgYSBmZXcga2V5IG9uZXM6IGBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZWAsIGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAsIGFuZCB0aGUgZnVuY3Rpb25zIGNhbGxpbmcgdGhlbS4gU3BlY2lmaWNhbGx5LCBgbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyYCB3aGljaCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZWAgYW5kIGFsc28sIHRoZSBleHBvcnRlZCBlbnRyeSBwb2ludHMgYXJlIGBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZWAsIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJgLCBgbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZWAgYW5kIGBjdHJsX2R1bXBwb2xpY3lgLgoKSSB0aGluayB0aGVzZSBsb29rIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIGRlZXBlciBhbmFseXNpcy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlYCwgYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAsIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlYCwgYW5kIGBjdHJsX2R1bXBwb2xpY3lgIGFyZSBhbGwgcmVsZXZhbnQuIFRpbWUgdG8gY2hlY2sgYGN0cmxfZHVtcHBvbGljeWAgaW4gYG5ldC9uZXRsaW5rL2dlbmV0bGluay5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0bGluay9nZW5ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY5NTpcdFx0cmV0dXJuIDA7XG4xNjk2Olx0ZXJyOlxuMTY5NzpcdFx0Z2VubG1zZ19jYW5jZWwoc2tiLCBoZHIpO1xuMTY5ODpcdFx0cmV0dXJuIC1FTk9CVUZTO1xuMTY5OTpcdH1cbjE3MDA6XHRcbjE3MDE6XHRzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4xNzAyOlx0e1xuMTcwMzpcdFx0c3RydWN0IGN0cmxfZHVtcF9wb2xpY3lfY3R4ICpjdHggPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbjE3MDQ6XHRcdHZvaWQgKmhkcjtcbjE3MDU6XHRcbjE3MDY6XHRcdGlmIChjdHgtXHUwMDNlZHVtcF9tYXApIHtcbjE3MDc6XHRcdFx0aWYgKGN0eC1cdTAwM2VzaW5nbGVfb3ApIHtcbjE3MDg6XHRcdFx0XHRzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZG9pdCwgZHVtcGl0O1xuMTcwOTpcdFxuMTcxMDpcdFx0XHRcdGlmIChXQVJOX09OKGdlbmxfZ2V0X2NtZF9ib3RoKGN0eC1cdTAwM2VvcCwgY3R4LVx1MDAzZXJ0LFxuMTcxMTpcdFx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNmRvaXQsIFx1MDAyNmR1bXBpdCkpKVxuMTcxMjpcdFx0XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNzEzOlx0XG4xNzE0Olx0XHRcdFx0aWYgKGN0cmxfZHVtcHBvbGljeV9wdXRfb3Aoc2tiLCBjYiwgXHUwMDI2ZG9pdCwgXHUwMDI2ZHVtcGl0KSlcbjE3MTU6XHRcdFx0XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuMTcxNjpcdFxuMTcxNzpcdFx0XHRcdC8qIGRvbmUgd2l0aCB0aGUgcGVyLW9wIHBvbGljeSBpbmRleCBsaXN0ICovXG4xNzE4Olx0XHRcdFx0Y3R4LVx1MDAzZWR1bXBfbWFwID0gMDtcbjE3MTk6XHRcdFx0fVxuMTcyMDpcdFxuMTcyMTpcdFx0XHR3aGlsZSAoY3R4LVx1MDAzZWR1bXBfbWFwKSB7XG4xNzIyOlx0XHRcdFx0aWYgKGN0cmxfZHVtcHBvbGljeV9wdXRfb3Aoc2tiLCBjYixcbjE3MjM6XHRcdFx0XHRcdFx0XHQgICBcdTAwMjZjdHgtXHUwMDNlb3BfaXRlci1cdTAwM2Vkb2l0LFxuMTcyNDpcdFx0XHRcdFx0XHRcdCAgIFx1MDAyNmN0eC1cdTAwM2VvcF9pdGVyLVx1MDAzZWR1bXBpdCkpXG4xNzI1Olx0XHRcdFx0XHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbjE3MjY6XHRcbjE3Mjc6XHRcdFx0XHRjdHgtXHUwMDNlZHVtcF9tYXAgPSBnZW5sX29wX2l0ZXJfbmV4dChjdHgtXHUwMDNlb3BfaXRlcik7XG4xNzI4Olx0XHRcdH1cbjE3Mjk6XHRcdH1cbjE3MzA6XHRcbjE3MzE6XHRcdHdoaWxlIChuZXRsaW5rX3BvbGljeV9kdW1wX2xvb3AoY3R4LVx1MDAzZXN0YXRlKSkge1xuMTczMjpcdFx0XHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xuMTczMzpcdFxuMTczNDpcdFx0XHRoZHIgPSBjdHJsX2R1bXBwb2xpY3lfcHJlcChza2IsIGNiKTtcbjE3MzU6XHRcdFx0aWYgKCFoZHIpXG4xNzM2Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xNzM3Olx0XG4xNzM4Olx0XHRcdG5lc3QgPSBubGFfbmVzdF9zdGFydChza2IsIENUUkxfQVRUUl9QT0xJQ1kpO1xuMTczOTpcdFx0XHRpZiAoIW5lc3QpXG4xNzQwOlx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xNzQxOlx0XG4xNzQyOlx0XHRcdGlmIChuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlKHNrYiwgY3R4LVx1MDAzZXN0YXRlKSlcbjE3NDM6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjE3NDQ6XHRcbjE3NDU6XHRcdFx0bmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XG4xNzQ2Olx0XG4xNzQ3Olx0XHRcdGdlbmxtc2dfZW5kKHNrYiwgaGRyKTtcbjE3NDg6XHRcdH1cbjE3NDk6XHRcbjE3NTA6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuMTc1MTpcdFxuMTc1MjpcdG5sYV9wdXRfZmFpbHVyZTpcbjE3NTM6XHRcdGdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTtcbjE3NTQ6XHRcdHJldHVybiBza2ItXHUwMDNlbGVuO1xuMTc1NTpcdH1cbjE3NTY6XHRcbjE3NTc6XHRzdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbjE3NTg6XHR7XG4xNzU5Olx0XHRzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHggKmN0eCA9ICh2b2lkICopY2ItXHUwMDNlY3R4O1xuMTc2MDpcdFxuMTc2MTpcdFx0a2ZyZWUoY3R4LVx1MDAzZW9wX2l0ZXIpO1xuMTc2MjpcdFx0bmV0bGlua19wb2xpY3lfZHVtcF9mcmVlKGN0eC1cdTAwM2VzdGF0ZSk7XG4xNzYzOlx0XHRyZXR1cm4gMDtcbjE3NjQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTAxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgZm9yIE5MQV9CRSBQb2xpY2llcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBzZWUgaWYgd2UgaGF2ZSBhbnkgYE5MQV9CRTE2YCBvciBgTkxBX0JFMzJgIHBvbGljaWVzIGx1cmtpbmcgaW4gdGhlIGtlcm5lbCB0aGF0IG1pZ2h0IGJlIHJpcGUgZm9yIGR1bXBpbmcuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgZ3JlcC4gSXQmIzM5O3MgdGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBiYXNlbGluZSBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBzb3VyY2UuIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzOyBhIHNpbXBsZSBzZWFyY2ggd2lsbCB0ZWxsIG1lIGlmIHRob3NlIHBvbGljaWVzIGV2ZW4gZXhpc3QgaW4gdGhlIGNvZGViYXNlLiBGcm9tIHRoZXJlLCBJIGNhbiBkZWNpZGUgaG93IHRvIHByb2NlZWQgd2l0aCB0aGUgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05MQV9CRSgxNnwzMikmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTg3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZ2VuZXZlX3BvbGljeVtJRkxBX0dFTkVWRV9NQVggJiM0MzsgMV0gPSB7XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTg4OS1cdFtJRkxBX0dFTkVWRV9HUk9fSElOVF1cdFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjE4OTA6XHRbSUZMQV9HRU5FVkVfTE9DQUxdXHRcdD0geyAudHlwZSA9IE5MQV9CRTMyIH0sXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xODkxLVx0W0lGTEFfR0VORVZFX0xPQ0FMNl1cdFx0PSBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IGluNl9hZGRyKSksXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jPTY2PWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG92cG5fcGVlcl9ubF9wb2xpY3lbT1ZQTl9BX1BFRVJfVFhfSUQgJiM0MzsgMV0gPSB7XG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtNjctXHRbT1ZQTl9BX1BFRVJfSURdID0gTkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VMzIsIFx1MDAyNm92cG5fYV9wZWVyX2lkX3JhbmdlKSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzo2ODpcdFtPVlBOX0FfUEVFUl9SRU1PVEVfSVBWNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtNjktXHRbT1ZQTl9BX1BFRVJfUkVNT1RFX0lQVjZdID0gTkxBX1BPTElDWV9FWEFDVF9MRU4oMTYpLFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTcwLVx0W09WUE5fQV9QRUVSX1JFTU9URV9JUFY2X1NDT1BFX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jOjcxOlx0W09WUE5fQV9QRUVSX1JFTU9URV9QT1JUXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9CRTE2LCAxKSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy03Mi1cdFtPVlBOX0FfUEVFUl9TT0NLRVRdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtNzMtXHRbT1ZQTl9BX1BFRVJfU09DS0VUX05FVE5TSURdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM6NzQ6XHRbT1ZQTl9BX1BFRVJfVlBOX0lQVjRdID0geyAudHlwZSA9IE5MQV9CRTMyLCB9LFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTc1LVx0W09WUE5fQV9QRUVSX1ZQTl9JUFY2XSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKDE2KSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzo3NjpcdFtPVlBOX0FfUEVFUl9MT0NBTF9JUFY0XSA9IHsgLnR5cGUgPSBOTEFfQkUzMiwgfSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy03Ny1cdFtPVlBOX0FfUEVFUl9MT0NBTF9JUFY2XSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKDE2KSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzo3ODpcdFtPVlBOX0FfUEVFUl9MT0NBTF9QT1JUXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9CRTE2LCAxKSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy03OS1cdFtPVlBOX0FfUEVFUl9LRUVQQUxJVkVfSU5URVJWQUxdID0gTkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VMzIsIFx1MDAyNm92cG5fYV9wZWVyX2tlZXBhbGl2ZV9pbnRlcnZhbF9yYW5nZSksXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jPTk3PWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG92cG5fcGVlcl9uZXdfaW5wdXRfbmxfcG9saWN5W09WUE5fQV9QRUVSX1RYX0lEICYjNDM7IDFdID0ge1xuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTk4LVx0W09WUE5fQV9QRUVSX0lEXSA9IE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCBcdTAwMjZvdnBuX2FfcGVlcl9pZF9yYW5nZSksXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM6OTk6XHRbT1ZQTl9BX1BFRVJfUkVNT1RFX0lQVjRdID0geyAudHlwZSA9IE5MQV9CRTMyLCB9LFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTEwMC1cdFtPVlBOX0FfUEVFUl9SRU1PVEVfSVBWNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtMTAxLVx0W09WUE5fQV9QRUVSX1JFTU9URV9JUFY2X1NDT1BFX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jOjEwMjpcdFtPVlBOX0FfUEVFUl9SRU1PVEVfUE9SVF0gPSBOTEFfUE9MSUNZX01JTihOTEFfQkUxNiwgMSksXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtMTAzLVx0W09WUE5fQV9QRUVSX1NPQ0tFVF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzoxMDQ6XHRbT1ZQTl9BX1BFRVJfVlBOX0lQVjRdID0geyAudHlwZSA9IE5MQV9CRTMyLCB9LFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTEwNS1cdFtPVlBOX0FfUEVFUl9WUE5fSVBWNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM6MTA2Olx0W09WUE5fQV9QRUVSX0xPQ0FMX0lQVjRdID0geyAudHlwZSA9IE5MQV9CRTMyLCB9LFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTEwNy1cdFtPVlBOX0FfUEVFUl9MT0NBTF9JUFY2XSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKDE2KSxcbi0tXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM9MTEzPWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG92cG5fcGVlcl9zZXRfaW5wdXRfbmxfcG9saWN5W09WUE5fQV9QRUVSX1RYX0lEICYjNDM7IDFdID0ge1xuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTExNC1cdFtPVlBOX0FfUEVFUl9JRF0gPSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1UzMiwgXHUwMDI2b3Zwbl9hX3BlZXJfaWRfcmFuZ2UpLFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jOjExNTpcdFtPVlBOX0FfUEVFUl9SRU1PVEVfSVBWNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtMTE2LVx0W09WUE5fQV9QRUVSX1JFTU9URV9JUFY2XSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKDE2KSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy0xMTctXHRbT1ZQTl9BX1BFRVJfUkVNT1RFX0lQVjZfU0NPUEVfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM6MTE4Olx0W09WUE5fQV9QRUVSX1JFTU9URV9QT1JUXSA9IE5MQV9QT0xJQ1lfTUlOKE5MQV9CRTE2LCAxKSxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzoxMTk6XHRbT1ZQTl9BX1BFRVJfVlBOX0lQVjRdID0geyAudHlwZSA9IE5MQV9CRTMyLCB9LFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTEyMC1cdFtPVlBOX0FfUEVFUl9WUE5fSVBWNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM6MTIxOlx0W09WUE5fQV9QRUVSX0xPQ0FMX0lQVjRdID0geyAudHlwZSA9IE5MQV9CRTMyLCB9LFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTEyMi1cdFtPVlBOX0FfUEVFUl9MT0NBTF9JUFY2XSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKDE2KSxcbi0tXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg9MTc3PWVudW0ge1xuLS1cbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0xOTUtXHROTEFfUkVKRUNULFxuaW5jbHVkZS9uZXQvbmV0bGluay5oOjE5NjpcdE5MQV9CRTE2LFxuaW5jbHVkZS9uZXQvbmV0bGluay5oOjE5NzpcdE5MQV9CRTMyLFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTE5OC1cdE5MQV9TSU5ULFxuLS1cbmluY2x1ZGUvbmV0L25ldGxpbmsuaD0yMTM9ZW51bSBubGFfcG9saWN5X3ZhbGlkYXRpb24ge1xuLS1cbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0yNTAtICogICAgTkxBX1MzMiwgTkxBX1M2NCxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDoyNTE6ICogICAgTkxBX0JFMTYsIE5MQV9CRTMyLFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTI1Mi0gKiAgICBOTEFfTVNFQ1MgICAgICAgICAgICBMZWF2aW5nIHRoZSBsZW5ndGggZmllbGQgemVybyB3aWxsIHZlcmlmeSB0aGVcbi0tXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtMjgyLSAqICAgIE5MQV9VNjQsXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6MjgzOiAqICAgIE5MQV9CRTE2LFxuaW5jbHVkZS9uZXQvbmV0bGluay5oOjI4NDogKiAgICBOTEFfQkUzMixcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0yODUtICogICAgTkxBX1NJTlQsXG4tLVxuaW5jbHVkZS9uZXQvbmV0bGluay5oPTM0Nj1zdHJ1Y3QgbmxhX3BvbGljeSB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTQwNS1cdCB0cCA9PSBOTEFfVTY0IHx8IHRwID09IE5MQV9VSU5UIHx8XHRcdFx0XFxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDo0MDY6XHQgdHAgPT0gTkxBX0JFMTYgfHwgdHAgPT0gTkxBX0JFMzIpXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtNDA3LSNkZWZpbmUgX19OTEFfSVNfU0lOVF9UWVBFKHRwKVx0XHRcdFx0XHRcdFxcXG4tLVxubGliL25sYXR0ci5jPTI0PXN0YXRpYyBjb25zdCB1OCBubGFfYXR0cl9sZW5bTkxBX1RZUEVfTUFYJiM0MzsxXSA9IHtcbi0tXG5saWIvbmxhdHRyLmMtMzItXHRbTkxBX1M2NF1cdD0gc2l6ZW9mKHM2NCksXG5saWIvbmxhdHRyLmM6MzM6XHRbTkxBX0JFMTZdXHQ9IHNpemVvZihfX2JlMTYpLFxubGliL25sYXR0ci5jOjM0Olx0W05MQV9CRTMyXVx0PSBzaXplb2YoX19iZTMyKSxcbmxpYi9ubGF0dHIuYy0zNS19O1xuLS1cbmxpYi9ubGF0dHIuYz0zNz1zdGF0aWMgY29uc3QgdTggbmxhX2F0dHJfbWlubGVuW05MQV9UWVBFX01BWCYjNDM7MV0gPSB7XG4tLVxubGliL25sYXR0ci5jLTQ3LVx0W05MQV9TNjRdXHQ9IHNpemVvZihzNjQpLFxubGliL25sYXR0ci5jOjQ4Olx0W05MQV9CRTE2XVx0PSBzaXplb2YoX19iZTE2KSxcbmxpYi9ubGF0dHIuYzo0OTpcdFtOTEFfQkUzMl1cdD0gc2l6ZW9mKF9fYmUzMiksXG5saWIvbmxhdHRyLmMtNTAtfTtcbi0tXG5saWIvbmxhdHRyLmM9MTE5PXZvaWQgbmxhX2dldF9yYW5nZV91bnNpZ25lZChjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXG4tLVxubGliL25sYXR0ci5jLTEzMS1cdGNhc2UgTkxBX1UxNjpcbmxpYi9ubGF0dHIuYzoxMzI6XHRjYXNlIE5MQV9CRTE2OlxubGliL25sYXR0ci5jLTEzMy1cdGNhc2UgTkxBX0JJTkFSWTpcbi0tXG5saWIvbmxhdHRyLmMtMTM2LVx0Y2FzZSBOTEFfVTMyOlxubGliL25sYXR0ci5jOjEzNzpcdGNhc2UgTkxBX0JFMzI6XG5saWIvbmxhdHRyLmMtMTM4LVx0XHRyYW5nZS1cdTAwM2VtYXggPSBVMzJfTUFYO1xuLS1cbmxpYi9ubGF0dHIuYz0xNzA9c3RhdGljIGludCBubGFfdmFsaWRhdGVfcmFuZ2VfdW5zaWduZWQoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxuLS1cbmxpYi9ubGF0dHIuYy0xOTktXHRcdGJyZWFrO1xubGliL25sYXR0ci5jOjIwMDpcdGNhc2UgTkxBX0JFMTY6XG5saWIvbmxhdHRyLmMtMjAxLVx0XHR2YWx1ZSA9IG50b2hzKG5sYV9nZXRfYmUxNihubGEpKTtcbmxpYi9ubGF0dHIuYy0yMDItXHRcdGJyZWFrO1xubGliL25sYXR0ci5jOjIwMzpcdGNhc2UgTkxBX0JFMzI6XG5saWIvbmxhdHRyLmMtMjA0LVx0XHR2YWx1ZSA9IG50b2hsKG5sYV9nZXRfYmUzMihubGEpKTtcbi0tXG5saWIvbmxhdHRyLmM9MzI1PXN0YXRpYyBpbnQgbmxhX3ZhbGlkYXRlX2ludF9yYW5nZShjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXG4tLVxubGliL25sYXR0ci5jLTMzNy1cdGNhc2UgTkxBX0JJTkFSWTpcbmxpYi9ubGF0dHIuYzozMzg6XHRjYXNlIE5MQV9CRTE2OlxubGliL25sYXR0ci5jOjMzOTpcdGNhc2UgTkxBX0JFMzI6XG5saWIvbmxhdHRyLmMtMzQwLVx0XHRyZXR1cm4gbmxhX3ZhbGlkYXRlX3JhbmdlX3Vuc2lnbmVkKHB0LCBubGEsIGV4dGFjaywgdmFsaWRhdGUpO1xuLS1cbmxpYi9ubGF0dHIuYz0zNTM9c3RhdGljIGludCBubGFfdmFsaWRhdGVfbWFzayhjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXG4tLVxubGliL25sYXR0ci5jLTM3NC1cdFx0YnJlYWs7XG5saWIvbmxhdHRyLmM6Mzc1Olx0Y2FzZSBOTEFfQkUxNjpcbmxpYi9ubGF0dHIuYy0zNzYtXHRcdHZhbHVlID0gbnRvaHMobmxhX2dldF9iZTE2KG5sYSkpO1xubGliL25sYXR0ci5jLTM3Ny1cdFx0YnJlYWs7XG5saWIvbmxhdHRyLmM6Mzc4Olx0Y2FzZSBOTEFfQkUzMjpcbmxpYi9ubGF0dHIuYy0zNzktXHRcdHZhbHVlID0gbnRvaGwobmxhX2dldF9iZTMyKG5sYSkpO1xuLS1cbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTg0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZmliX3J1bGVfcG9saWN5W0ZSQV9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L2NvcmUvZmliX3J1bGVzLmMtODY4LVx0W0ZSQV9EU0NQXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIElORVRfRFNDUF9NQVNLIFx1MDAzZVx1MDAzZSAyKSxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjg2OTpcdFtGUkFfRkxPV0xBQkVMXSA9IHsgLnR5cGUgPSBOTEFfQkUzMiB9LFxubmV0L2NvcmUvZmliX3J1bGVzLmM6ODcwOlx0W0ZSQV9GTE9XTEFCRUxfTUFTS10gPSB7IC50eXBlID0gTkxBX0JFMzIgfSxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTg3MS1cdFtGUkFfU1BPUlRfTUFTS10gPSB7IC50eXBlID0gTkxBX1UxNiB9LFxuLS1cbm5ldC9pcHY0L2ZvdV9ubC5jPTE1PWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZvdV9ubF9wb2xpY3lbRk9VX0FUVFJfSUZJTkRFWCAmIzQzOyAxXSA9IHtcbm5ldC9pcHY0L2ZvdV9ubC5jOjE2Olx0W0ZPVV9BVFRSX1BPUlRdID0geyAudHlwZSA9IE5MQV9CRTE2LCB9LFxubmV0L2lwdjQvZm91X25sLmMtMTctXHRbRk9VX0FUVFJfQUZdID0geyAudHlwZSA9IE5MQV9VOCwgfSxcbi0tXG5uZXQvaXB2NC9mb3VfbmwuYy0yMC1cdFtGT1VfQVRUUl9SRU1DU1VNX05PUEFSVElBTF0gPSB7IC50eXBlID0gTkxBX0ZMQUcsIH0sXG5uZXQvaXB2NC9mb3VfbmwuYzoyMTpcdFtGT1VfQVRUUl9MT0NBTF9WNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXG5uZXQvaXB2NC9mb3VfbmwuYy0yMi1cdFtGT1VfQVRUUl9MT0NBTF9WNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXG5uZXQvaXB2NC9mb3VfbmwuYzoyMzpcdFtGT1VfQVRUUl9QRUVSX1Y0XSA9IHsgLnR5cGUgPSBOTEFfQkUzMiwgfSxcbm5ldC9pcHY0L2ZvdV9ubC5jLTI0LVx0W0ZPVV9BVFRSX1BFRVJfVjZdID0gTkxBX1BPTElDWV9FWEFDVF9MRU4oMTYpLFxubmV0L2lwdjQvZm91X25sLmM6MjU6XHRbRk9VX0FUVFJfUEVFUl9QT1JUXSA9IHsgLnR5cGUgPSBOTEFfQkUxNiwgfSxcbm5ldC9pcHY0L2ZvdV9ubC5jLTI2LVx0W0ZPVV9BVFRSX0lGSU5ERVhdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jPTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBydG1fbmhfcG9saWN5X25ld1tdID0ge1xuLS1cbm5ldC9pcHY0L25leHRob3AuYy00MS1cdFtOSEFfRkRCXVx0XHQ9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyOlx0W05IQV9EU1RfUE9SVF1cdFx0PSBOTEFfUE9MSUNZX01JTihOTEFfQkUxNiwgMSksXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDMtXHRbTkhBX1JFU19HUk9VUF1cdFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRtX2lwdjZfcG9saWN5W1JUQV9NQVgmIzQzOzFdID0ge1xuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTE0NC1cdFtSVEFfTkhfSURdXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbm5ldC9pcHY2L3JvdXRlLmM6NTE0NTpcdFtSVEFfRkxPV0xBQkVMXVx0XHQ9IHsgLnR5cGUgPSBOTEFfQkUzMiB9LFxubmV0L2lwdjYvcm91dGUuYy01MTQ2LX07XG4tLVxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5jPTE1PWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG1wdGNwX3BtX2FkZHJlc3NfbmxfcG9saWN5W01QVENQX1BNX0FERFJfQVRUUl9JRl9JRFggJiM0MzsgMV0gPSB7XG4tLVxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5jLTE3LVx0W01QVENQX1BNX0FERFJfQVRUUl9JRF0gPSB7IC50eXBlID0gTkxBX1U4LCB9LFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5jOjE4Olx0W01QVENQX1BNX0FERFJfQVRUUl9BRERSNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmMtMTktXHRbTVBUQ1BfUE1fQUREUl9BVFRSX0FERFI2XSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKDE2KSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MjYxNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXhwX25sYV9wb2xpY3lbQ1RBX0VYUEVDVF9NQVgmIzQzOzFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yNjIzLVx0W0NUQV9FWFBFQ1RfWk9ORV1cdD0geyAudHlwZSA9IE5MQV9VMTYgfSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyNjI0Olx0W0NUQV9FWFBFQ1RfRkxBR1NdXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZfQ1RfRVhQRUNUX01BU0spLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI2MjUtXHRbQ1RBX0VYUEVDVF9DTEFTU11cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzQ3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXhwX25hdF9ubGFfcG9saWN5W0NUQV9FWFBFQ1RfTkFUX01BWCYjNDM7MV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MzQ4MDpcdFtDVEFfRVhQRUNUX05BVF9ESVJdXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBJUF9DVF9ESVJfUkVQTFkpLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0ODEtXHRbQ1RBX0VYUEVDVF9OQVRfVFVQTEVdXHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3RhYmxlX3BvbGljeVtORlRBX1RBQkxFX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTU1LVx0XHRcdFx0ICAgIC5sZW4gPSBORlRfVEFCTEVfTUFYTkFNRUxFTiAtIDEgfSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNTY6XHRbTkZUQV9UQUJMRV9GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfVEFCTEVfRl9NQVNLKSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTctXHRbTkZUQV9UQUJMRV9IQU5ETEVdXHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTkxOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2NoYWluX3BvbGljeVtORlRBX0NIQUlOX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTI4LVx0W05GVEFfQ0hBSU5fQ09VTlRFUlNdXHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxOTI5Olx0W05GVEFfQ0hBSU5fRkxBR1NdXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZUX0NIQUlOX0ZMQUdTKSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5MzAtXHRbTkZUQV9DSEFJTl9JRF1cdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTQ3Mzc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9zZXRfcG9saWN5W05GVEFfU0VUX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NzQxLVx0XHRcdFx0XHQgICAgLmxlbiA9IE5GVF9TRVRfTUFYTkFNRUxFTiAtIDEgfSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQ3NDI6XHRbTkZUQV9TRVRfRkxBR1NdXHRcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDc0My1cdFx0XHRcdFx0XHRcdCAgTkZUX1NFVF9BTk9OWU1PVVMgfFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTYwODA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9zZXRfZWxlbV9wb2xpY3lbTkZUQV9TRVRfRUxFTV9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjA4Mi1cdFtORlRBX1NFVF9FTEVNX0RBVEFdXHRcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjYwODM6XHRbTkZUQV9TRVRfRUxFTV9GTEFHU11cdFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9TRVRfRUxFTV9JTlRFUlZBTF9FTkQgfFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjA4NC1cdFx0XHRcdFx0XHRcdFx0ICAgIE5GVF9TRVRfRUxFTV9DQVRDSEFMTCksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9ODgwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2Zsb3d0YWJsZV9wb2xpY3lbTkZUQV9GTE9XVEFCTEVfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg4MTUtXHRbTkZUQV9GTE9XVEFCTEVfSEFORExFXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4ODE2Olx0W05GVEFfRkxPV1RBQkxFX0ZMQUdTXVx0XHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZUX0ZMT1dUQUJMRV9NQVNLKSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg4MTctfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmM9MzcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZm5sX2FjY3RfcG9saWN5W05GQUNDVF9NQVgmIzQzOzFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2FjY3QuYy0zNzUtXHRbTkZBQ0NUX1BLVFNdID0geyAudHlwZSA9IE5MQV9VNjQgfSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2FjY3QuYzozNzY6XHRbTkZBQ0NUX0ZMQUdTXSA9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZBQ0NUX0ZfUVVPVEEpLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5jLTM3Ny1cdFtORkFDQ1RfUVVPVEFdID0geyAudHlwZSA9IE5MQV9VNjQgfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZm5sX2N0aGVscGVyX3R1cGxlX3BvbFtORkNUSF9UVVBMRV9NQVgmIzQzOzFdID0ge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3MDpcdFtORkNUSF9UVVBMRV9MM1BST1RPTlVNXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTE2LCBORlBST1RPX0lQVjYpLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy03MS1cdFtORkNUSF9UVVBMRV9MNFBST1RPTlVNXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xNzg9bmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5X3NldFtORkNUSF9QT0xJQ1lfU0VUX01BWCYjNDM7MV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjE3OTpcdFtORkNUSF9QT0xJQ1lfU0VUX05VTV0gPSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZfQ1RfTUFYX0VYUEVDVF9DTEFTU0VTKSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTgwLX07XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZm5sX2hvb2tfbmxhX3BvbGljeVtORk5MQV9IT09LX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzoyNzpcdFtORk5MQV9IT09LX0hPT0tOVU1dXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTI4LVx0W05GTkxBX0hPT0tfUFJJT1JJVFldXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM9OTAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnVsYV9jZmdfcG9saWN5W05GVUxBX0NGR19NQVgmIzQzOzFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTkwNS1cdFtORlVMQV9DRkdfTkxCVUZTSVpdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYzo5MDY6XHRbTkZVTEFfQ0ZHX0ZMQUdTXVx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMTYsIE5GVUxOTF9DRkdfRl9TRVEgfFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtOTA3LVx0XHRcdFx0XHRcdCAgTkZVTE5MX0NGR19GX1NFUV9HTE9CQUwgfFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTg1OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZxYV9jZmdfcG9saWN5W05GUUFfQ0ZHX01BWCYjNDM7MV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xODYyLVx0W05GUUFfQ0ZHX01BU0tdXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTg2MzpcdFtORlFBX0NGR19GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlFBX0NGR19GX01BWCAtIDEpLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xODY0LX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfYml0d2lzZS5jPTEzMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2JpdHdpc2VfcG9saWN5W05GVEFfQklUV0lTRV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmM6MTMyOlx0W05GVEFfQklUV0lTRV9TUkVHXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmM6MTMzOlx0W05GVEFfQklUV0lTRV9TUkVHMl1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxubmV0L25ldGZpbHRlci9uZnRfYml0d2lzZS5jOjEzNDpcdFtORlRBX0JJVFdJU0VfRFJFR11cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxubmV0L25ldGZpbHRlci9uZnRfYml0d2lzZS5jLTEzNS1cdFtORlRBX0JJVFdJU0VfTEVOXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYy0xMzctXHRbTkZUQV9CSVRXSVNFX1hPUl1cdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYzoxMzg6XHRbTkZUQV9CSVRXSVNFX09QXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYy0xMzktXHRbTkZUQV9CSVRXSVNFX0RBVEFdXHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfYnl0ZW9yZGVyLmM9NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9ieXRlb3JkZXJfcG9saWN5W05GVEFfQllURU9SREVSX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2J5dGVvcmRlci5jOjc2Olx0W05GVEFfQllURU9SREVSX1NSRUddXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2J5dGVvcmRlci5jOjc3Olx0W05GVEFfQllURU9SREVSX0RSRUddXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2J5dGVvcmRlci5jOjc4Olx0W05GVEFfQllURU9SREVSX09QXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2J5dGVvcmRlci5jOjc5Olx0W05GVEFfQllURU9SREVSX0xFTl1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9ieXRlb3JkZXIuYzo4MDpcdFtORlRBX0JZVEVPUkRFUl9TSVpFXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2J5dGVvcmRlci5jLTgxLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY21wLmM9NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9jbXBfcG9saWN5W05GVEFfQ01QX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jOjY3Olx0W05GVEFfQ01QX1NSRUddXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxubmV0L25ldGZpbHRlci9uZnRfY21wLmMtNjgtXHRbTkZUQV9DTVBfT1BdXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYz0xMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF90YXJnZXRfcG9saWN5W05GVEFfVEFSR0VUX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy0xMzgtXHRcdFx0XHQgICAgLmxlbiA9IFhUX0VYVEVOU0lPTl9NQVhOQU1FTEVOLCB9LFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmM6MTM5Olx0W05GVEFfVEFSR0VUX1JFVl1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy0xNDAtXHRbTkZUQV9UQVJHRVRfSU5GT11cdD0geyAudHlwZSA9IE5MQV9CSU5BUlkgfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYz0xOTY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9ydWxlX2NvbXBhdF9wb2xpY3lbTkZUQV9SVUxFX0NPTVBBVF9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy0xOTctXHRbTkZUQV9SVUxFX0NPTVBBVF9QUk9UT11cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jOjE5ODpcdFtORlRBX1JVTEVfQ09NUEFUX0ZMQUdTXVx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9SVUxFX0NPTVBBVF9GX01BU0spLFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMtMTk5LX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmM9NDYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfbWF0Y2hfcG9saWN5W05GVEFfTUFUQ0hfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jLTQ2My1cdFx0XHRcdCAgICAubGVuID0gWFRfRVhURU5TSU9OX01BWE5BTUVMRU4gfSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jOjQ2NDpcdFtORlRBX01BVENIX1JFVl1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy00NjUtXHRbTkZUQV9NQVRDSF9JTkZPXVx0PSB7IC50eXBlID0gTkxBX0JJTkFSWSB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jPTc5Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9jb21wYXRfcG9saWN5X2dldFtORlRBX0NPTVBBVF9NQVgmIzQzOzFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jLTc5OS1cdFx0XHRcdCAgICAubGVuID0gTkZUX0NPTVBBVF9OQU1FX01BWC0xIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYzo4MDA6XHRbTkZUQV9DT01QQVRfUkVWXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jLTgwMS1cdFtORlRBX0NPTVBBVF9UWVBFXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Nvbm5saW1pdC5jPTE2MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2Nvbm5saW1pdF9wb2xpY3lbTkZUQV9DT05OTElNSVRfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmMtMTYxLVx0W05GVEFfQ09OTkxJTUlUX0NPVU5UXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmM6MTYyOlx0W05GVEFfQ09OTkxJTUlUX0ZMQUdTXVx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9DT05OTElNSVRfRl9JTlYpLFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmMtMTYzLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0zMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9jdF9wb2xpY3lbTkZUQV9DVF9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjMzNzpcdFtORlRBX0NUX0RSRUddXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzozMzg6XHRbTkZUQV9DVF9LRVldXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTMzOS1cdFtORlRBX0NUX0RJUkVDVElPTl1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX1U4LCBJUF9DVF9ESVJfUkVQTFkpLFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzozNDA6XHRbTkZUQV9DVF9TUkVHXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMzQxLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmM9MTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfZHluc2V0X3BvbGljeVtORlRBX0RZTlNFVF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtMTYxLVx0W05GVEFfRFlOU0VUX1NFVF9JRF1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jOjE2MjpcdFtORlRBX0RZTlNFVF9PUF1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYy0xNjMtXHRbTkZUQV9EWU5TRVRfU1JFR19LRVldXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtMTY2LVx0W05GVEFfRFlOU0VUX0VYUFJdXHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYzoxNjc6XHRbTkZUQV9EWU5TRVRfRkxBR1NdXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZUX0RZTlNFVF9GX0lOViB8XG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYy0xNjgtXHRcdFx0XHRcdFx0ICBORlRfRFlOU0VUX0ZfRVhQUiksXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZXh0aGRyLmM9NDg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfZXh0aGRyX3BvbGljeVtORlRBX0VYVEhEUl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9leHRoZHIuYzo0ODk6XHRbTkZUQV9FWFRIRFJfRFJFR11cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9leHRoZHIuYy00OTAtXHRbTkZUQV9FWFRIRFJfVFlQRV1cdFx0PSB7IC50eXBlID0gTkxBX1U4IH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9leHRoZHIuYy00OTEtXHRbTkZUQV9FWFRIRFJfT0ZGU0VUXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9leHRoZHIuYzo0OTI6XHRbTkZUQV9FWFRIRFJfTEVOXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxubmV0L25ldGZpbHRlci9uZnRfZXh0aGRyLmM6NDkzOlx0W05GVEFfRVhUSERSX0ZMQUdTXVx0XHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZUX0VYVEhEUl9GX1BSRVNFTlQpLFxubmV0L25ldGZpbHRlci9uZnRfZXh0aGRyLmM6NDk0Olx0W05GVEFfRVhUSERSX09QXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxubmV0L25ldGZpbHRlci9uZnRfZXh0aGRyLmM6NDk1Olx0W05GVEFfRVhUSERSX1NSRUddXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxubmV0L25ldGZpbHRlci9uZnRfZXh0aGRyLmMtNDk2LX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmliLmM9MjE9Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2ZpYl9wb2xpY3lbTkZUQV9GSUJfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfZmliLmM6MjI6XHRbTkZUQV9GSUJfRFJFR11cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9maWIuYy0yMy1cdFtORlRBX0ZJQl9SRVNVTFRdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9maWIuYy0yNC1cdFtORlRBX0ZJQl9GTEFHU11cdD1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jOjI1Olx0XHROTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVEFfRklCX0ZfQUxMKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jLTI2LX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jPTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfZndkX25ldGRldl9wb2xpY3lbTkZUQV9GV0RfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYy00Mi1cdFtORlRBX0ZXRF9TUkVHX0FERFJdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9md2RfbmV0ZGV2LmM6NDM6XHRbTkZUQV9GV0RfTkZQUk9UT11cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9md2RfbmV0ZGV2LmMtNDQtfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9oYXNoLmM9NjA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9oYXNoX3BvbGljeVtORlRBX0hBU0hfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfaGFzaC5jOjYxOlx0W05GVEFfSEFTSF9TUkVHXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9oYXNoLmM6NjI6XHRbTkZUQV9IQVNIX0RSRUddXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2hhc2guYzo2MzpcdFtORlRBX0hBU0hfTEVOXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxubmV0L25ldGZpbHRlci9uZnRfaGFzaC5jLTY0LVx0W05GVEFfSEFTSF9NT0RVTFVTXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2ltbWVkaWF0ZS5jPTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfaW1tZWRpYXRlX3BvbGljeVtORlRBX0lNTUVESUFURV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9pbW1lZGlhdGUuYzoyODpcdFtORlRBX0lNTUVESUFURV9EUkVHXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9pbW1lZGlhdGUuYy0yOS1cdFtORlRBX0lNTUVESUFURV9EQVRBXVx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmM9MzIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfaW5uZXJfcG9saWN5W05GVEFfSU5ORVJfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYy0zMjItXHRbTkZUQV9JTk5FUl9OVU1dXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jOjMyMzpcdFtORlRBX0lOTkVSX0ZMQUdTXVx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9JTk5FUl9NQVNLKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMzI0LVx0W05GVEFfSU5ORVJfSERSU0laRV1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9saW1pdC5jPTE4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2xpbWl0X3BvbGljeVtORlRBX0xJTUlUX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9saW1pdC5jLTE5MS1cdFtORlRBX0xJTUlUX1RZUEVdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9saW1pdC5jOjE5MjpcdFtORlRBX0xJTUlUX0ZMQUdTXVx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9MSU1JVF9GX0lOViksXG5uZXQvbmV0ZmlsdGVyL25mdF9saW1pdC5jLTE5My19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvZy5jPTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfbG9nX3BvbGljeVtORlRBX0xPR19NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbG9nLmMtNzEtXHRbTkZUQV9MT0dfTEVWRUxdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9sb2cuYzo3MjpcdFtORlRBX0xPR19GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORl9MT0dfTUFTSyksXG5uZXQvbmV0ZmlsdGVyL25mdF9sb2cuYy03My19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jPTEyND1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2xvb2t1cF9wb2xpY3lbTkZUQV9MT09LVVBfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jLTEyNy1cdFtORlRBX0xPT0tVUF9TRVRfSURdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9sb29rdXAuYzoxMjg6XHRbTkZUQV9MT09LVVBfU1JFR11cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxubmV0L25ldGZpbHRlci9uZnRfbG9va3VwLmM6MTI5Olx0W05GVEFfTE9PS1VQX0RSRUddXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jLTEzMC1cdFtORlRBX0xPT0tVUF9GTEFHU11cdD1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jOjEzMTpcdFx0TkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfTE9PS1VQX0ZfSU5WKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jLTEzMi19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21hc3EuYz0yMj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X21hc3FfcG9saWN5W05GVEFfTUFTUV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9tYXNxLmMtMjMtXHRbTkZUQV9NQVNRX0ZMQUdTXVx0XHQ9XG5uZXQvbmV0ZmlsdGVyL25mdF9tYXNxLmM6MjQ6XHRcdE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZfTkFUX1JBTkdFX01BU0spLFxubmV0L25ldGZpbHRlci9uZnRfbWFzcS5jLTI1LVx0W05GVEFfTUFTUV9SRUdfUFJPVE9fTUlOXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz01MTY9Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X21ldGFfcG9saWN5W05GVEFfTUVUQV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NTE3Olx0W05GVEFfTUVUQV9EUkVHXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NTE4Olx0W05GVEFfTUVUQV9LRVldXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM6NTE5Olx0W05GVEFfTUVUQV9TUkVHXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmMtNTIwLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbmF0LmM9MTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfbmF0X3BvbGljeVtORlRBX05BVF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbmF0LmMtMTM1LVx0W05GVEFfTkFUX0ZMQUdTXVx0ID1cbm5ldC9uZXRmaWx0ZXIvbmZ0X25hdC5jOjEzNjpcdFx0TkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORl9OQVRfUkFOR0VfTUFTSyksXG5uZXQvbmV0ZmlsdGVyL25mdF9uYXQuYy0xMzctfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9udW1nZW4uYz00NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X25nX3BvbGljeVtORlRBX05HX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X251bWdlbi5jOjQ2Olx0W05GVEFfTkdfRFJFR11cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9udW1nZW4uYy00Ny1cdFtORlRBX05HX01PRFVMVVNdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfb2JqcmVmLmM9MjY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfb2JqcmVmX3BvbGljeVtORlRBX09CSlJFRl9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfb2JqcmVmLmMtMjY3LVx0W05GVEFfT0JKUkVGX0lNTV9UWVBFXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxubmV0L25ldGZpbHRlci9uZnRfb2JqcmVmLmM6MjY4Olx0W05GVEFfT0JKUkVGX1NFVF9TUkVHXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9vYmpyZWYuYy0yNjktXHRbTkZUQV9PQkpSRUZfU0VUX05BTUVdXHQ9IHsgLnR5cGUgPSBOTEFfU1RSSU5HLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X29zZi5jPTE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfb3NmX3BvbGljeVtORlRBX09TRl9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9vc2YuYzoxNTpcdFtORlRBX09TRl9EUkVHXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X29zZi5jLTE2LVx0W05GVEFfT1NGX1RUTF1cdFx0PSB7IC50eXBlID0gTkxBX1U4IH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9vc2YuYzoxNzpcdFtORlRBX09TRl9GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfT1NGX0ZfVkVSU0lPTiksXG5uZXQvbmV0ZmlsdGVyL25mdF9vc2YuYy0xOC19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0yMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9wYXlsb2FkX3BvbGljeVtORlRBX1BBWUxPQURfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIxMjpcdFtORlRBX1BBWUxPQURfU1JFR11cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjEzOlx0W05GVEFfUEFZTE9BRF9EUkVHXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMTQtXHRbTkZUQV9QQVlMT0FEX0JBU0VdXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMTU6XHRbTkZUQV9QQVlMT0FEX09GRlNFVF1cdFx0PSB7IC50eXBlID0gTkxBX0JFMzIgfSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMTY6XHRbTkZUQV9QQVlMT0FEX0xFTl1cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMTctXHRbTkZUQV9QQVlMT0FEX0NTVU1fVFlQRV1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMTg6XHRbTkZUQV9QQVlMT0FEX0NTVU1fT0ZGU0VUXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMTk6XHRbTkZUQV9QQVlMT0FEX0NTVU1fRkxBR1NdXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZUX1BBWUxPQURfTDRDU1VNX1BTRVVET0hEUiksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjIwLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcXVldWUuYz05NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3F1ZXVlX3BvbGljeVtORlRBX1FVRVVFX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9xdWV1ZS5jLTk3LVx0W05GVEFfUVVFVUVfVE9UQUxdXHQ9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9xdWV1ZS5jOjk4Olx0W05GVEFfUVVFVUVfRkxBR1NdXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUxNiwgTkZUX1FVRVVFX0ZMQUdfTUFTSyksXG5uZXQvbmV0ZmlsdGVyL25mdF9xdWV1ZS5jLTk5LVx0W05GVEFfUVVFVUVfU1JFR19RTlVNXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3F1b3RhLmM9NDc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9xdW90YV9wb2xpY3lbTkZUQV9RVU9UQV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9xdW90YS5jLTQ4LVx0W05GVEFfUVVPVEFfQllURVNdXHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXG5uZXQvbmV0ZmlsdGVyL25mdF9xdW90YS5jOjQ5Olx0W05GVEFfUVVPVEFfRkxBR1NdXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZUX1FVT1RBX0ZfSU5WKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3F1b3RhLmMtNTAtXHRbTkZUQV9RVU9UQV9DT05TVU1FRF1cdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9yYW5nZS5jPTQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfcmFuZ2VfcG9saWN5W05GVEFfUkFOR0VfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfcmFuZ2UuYzo0NDpcdFtORlRBX1JBTkdFX1NSRUddXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxubmV0L25ldGZpbHRlci9uZnRfcmFuZ2UuYzo0NTpcdFtORlRBX1JBTkdFX09QXVx0XHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9yYW5nZS5jLTQ2LVx0W05GVEFfUkFOR0VfRlJPTV9EQVRBXVx0XHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcmVkaXIuYz0yMj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3JlZGlyX3BvbGljeVtORlRBX1JFRElSX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWRpci5jLTI1LVx0W05GVEFfUkVESVJfRkxBR1NdXHRcdD1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlZGlyLmM6MjY6XHRcdE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZfTkFUX1JBTkdFX01BU0spLFxubmV0L25ldGZpbHRlci9uZnRfcmVkaXIuYy0yNy19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlamVjdC5jPTIwPWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9yZWplY3RfcG9saWN5W05GVEFfUkVKRUNUX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlamVjdC5jOjIxOlx0W05GVEFfUkVKRUNUX1RZUEVdXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWplY3QuYy0yMi1cdFtORlRBX1JFSkVDVF9JQ01QX0NPREVdXHRcdD0geyAudHlwZSA9IE5MQV9VOCB9LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmM9MTA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfcnRfcG9saWN5W05GVEFfUlRfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfcnQuYzoxMDg6XHRbTkZUQV9SVF9EUkVHXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmM6MTA5Olx0W05GVEFfUlRfS0VZXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxubmV0L25ldGZpbHRlci9uZnRfcnQuYy0xMTAtfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zb2NrZXQuYz0xNjY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9zb2NrZXRfcG9saWN5W05GVEFfU09DS0VUX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NvY2tldC5jOjE2NzpcdFtORlRBX1NPQ0tFVF9LRVldXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9zb2NrZXQuYzoxNjg6XHRbTkZUQV9TT0NLRVRfRFJFR11cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG5uZXQvbmV0ZmlsdGVyL25mdF9zb2NrZXQuYzoxNjk6XHRbTkZUQV9TT0NLRVRfTEVWRUxdXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF9zb2NrZXQuYy0xNzAtfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jPTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfc3lucHJveHlfcG9saWN5W05GVEFfU1lOUFJPWFlfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3N5bnByb3h5LmMtMjAtXHRbTkZUQV9TWU5QUk9YWV9XU0NBTEVdXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1U4LCBUQ1BfTUFYX1dTQ0FMRSksXG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jOjIxOlx0W05GVEFfU1lOUFJPWFlfRkxBR1NdXHRcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORl9TWU5QUk9YWV9PUFRfTUFTSyksXG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jLTIyLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfdHByb3h5LmM9MTg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfdHByb3h5X3BvbGljeVtORlRBX1RQUk9YWV9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYzoxODY6XHRbTkZUQV9UUFJPWFlfRkFNSUxZXSAgID0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYy0xODctXHRbTkZUQV9UUFJPWFlfUkVHX0FERFJdID0geyAudHlwZSA9IE5MQV9VMzIgfSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF90dW5uZWwuYz02OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3R1bm5lbF9wb2xpY3lbTkZUQV9UVU5ORUxfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmM6Njk6XHRbTkZUQV9UVU5ORUxfS0VZXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jOjcwOlx0W05GVEFfVFVOTkVMX0RSRUddXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jOjcxOlx0W05GVEFfVFVOTkVMX01PREVdXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfVFVOTkVMX01PREVfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jLTcyLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmM9NDA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfdHVubmVsX2tleV9wb2xpY3lbTkZUQV9UVU5ORUxfS0VZX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF90dW5uZWwuYy00MTAtXHRbTkZUQV9UVU5ORUxfS0VZX0lEXVx0PSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jOjQxMTpcdFtORlRBX1RVTk5FTF9LRVlfRkxBR1NdXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZUX1RVTk5FTF9GX01BU0spLFxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmMtNDEyLVx0W05GVEFfVFVOTkVMX0tFWV9UT1NdXHQ9IHsgLnR5cGUgPSBOTEFfVTgsIH0sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jPTE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfeGZybV9wb2xpY3lbTkZUQV9YRlJNX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoyMDpcdFtORlRBX1hGUk1fS0VZXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTIxLVx0W05GVEFfWEZSTV9ESVJdXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1U4LCBYRlJNX1BPTElDWV9PVVQpLFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jOjIyOlx0W05GVEFfWEZSTV9TUE5VTV1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIFhGUk1fTUFYX0RFUFRIIC0gMSksXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MjM6XHRbTkZUQV9YRlJNX0RSRUddXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yNC19O1xuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jPTIwOT1pbnQgbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0KVxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIzNi1cdFx0ICAgICAgIDIgKiAobmxhX2F0dHJfc2l6ZSgwKSAmIzQzOyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7XG5uZXQvbmV0bGluay9wb2xpY3kuYzoyMzc6XHRjYXNlIE5MQV9CRTE2OlxubmV0L25ldGxpbmsvcG9saWN5LmM6MjM4Olx0Y2FzZSBOTEFfQkUzMjpcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIzOS1cdFx0Lyogc2FtZSBhcyB0aGUgdW5zaWduZWQgdHlwZXMsIHBsdXMgdGhlIGJ5dGUgb3JkZXIgKi9cbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYz0yNTg9X19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlLFxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTI5Ni1cdGNhc2UgTkxBX1U2NDpcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjI5NzpcdGNhc2UgTkxBX0JFMTY6XG5uZXQvbmV0bGluay9wb2xpY3kuYzoyOTg6XHRjYXNlIE5MQV9CRTMyOlxubmV0L25ldGxpbmsvcG9saWN5LmMtMjk5LVx0Y2FzZSBOTEFfVUlOVDpcbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMDQtXHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VODtcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjMwNTpcdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTE2IHx8IHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMTYpXG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMDYtXHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VMTY7XG5uZXQvbmV0bGluay9wb2xpY3kuYzozMDc6XHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1UzMiB8fCBwdC1cdTAwM2V0eXBlID09IE5MQV9CRTMyKVxubmV0L25ldGxpbmsvcG9saWN5LmMtMzA4LVx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTMyO1xuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTMxMy1cbm5ldC9uZXRsaW5rL3BvbGljeS5jOjMxNDpcdFx0aWYgKChwdC1cdTAwM2V0eXBlID09IE5MQV9CRTE2IHx8IHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpIFx1MDAyNlx1MDAyNlxubmV0L25ldGxpbmsvcG9saWN5LmMtMzE1LVx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIsXG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz02MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZsX3BvbGljeVtUQ0FfRkxPV0VSX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTY3Ny1cdFtUQ0FfRkxPV0VSX0tFWV9FTkNfVURQX0RTVF9QT1JUX01BU0tdXHQ9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjY3ODpcdFtUQ0FfRkxPV0VSX0tFWV9GTEFHU11cdFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTY3OS1cdFx0XHRcdFx0XHRcdCAgVENBX0ZMT1dFUl9LRVlfRkxBR1NfUE9MSUNZX01BU0spLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzo2ODA6XHRbVENBX0ZMT1dFUl9LRVlfRkxBR1NfTUFTS11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy02ODEtXHRcdFx0XHRcdFx0XHQgIFRDQV9GTE9XRVJfS0VZX0ZMQUdTX1BPTElDWV9NQVNLKSxcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTc0Mi1cdFtUQ0FfRkxPV0VSX0tFWV9DRk1dXHRcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6NzQzOlx0W1RDQV9GTE9XRVJfS0VZX0VOQ19GTEFHU11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy03NDQtXHRcdFx0XHRcdFx0XHQgIFRDQV9GTE9XRVJfS0VZX0VOQ19GTEFHU19QT0xJQ1lfTUFTSyksXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjc0NTpcdFtUQ0FfRkxPV0VSX0tFWV9FTkNfRkxBR1NfTUFTS11cdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy03NDYtXHRcdFx0XHRcdFx0XHQgIFRDQV9GTE9XRVJfS0VZX0VOQ19GTEFHU19QT0xJQ1lfTUFTSyksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MzUzCgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDEwNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQ6IE5ldGxpbmsgUG9saWN5IER1bXBpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0IGZvY3VzZXMgb24gZXh0ZW5kaW5nIHRoZSBOZXRsaW5rIHBvbGljeSBkdW1waW5nIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGluIGBuZXQvbmV0bGluay9wb2xpY3kuY2AuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhZHZlcnRpc2luZyBiaWctZW5kaWFuIGludGVnZXIgYXR0cmlidXRlcyAoYE5MQV9CRTE2YCwgYE5MQV9CRTMyYCkgYnkgYWRkaW5nIGBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVJgLiBUaGlzIG1lYW5zIHRoZSBtb2RpZmljYXRpb25zIGFyZSBpbiB0aGUgc2l6ZSBlc3RpbWF0aW9uIHdpdGggYG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlYCBhbmQgd3JpdGluZyBsb2dpYyB3aXRoIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJgIGFuZCBgbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZWAuCgpUaGUgcmVsZXZhbnQgZnVuY3Rpb25zIGhlcmUgYXJlOiBgbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGVgLCBgbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyYCwgYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVgLCBhbmQgYGN0cmxfZHVtcHBvbGljeWAuIFdlIGNhbiByZWFjaCB0aGlzIGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCBzdGFuZGFyZCBOZXRsaW5rIHNvY2tldHMgKGBBRl9ORVRMSU5LYCksIGluY2x1ZGluZyBHZW5lcmljIE5ldGxpbmsgcG9saWN5IGR1bXBzIChgQ1RSTF9DTURfR0VUUE9MSUNZYCkgYW5kIGFsc28gdGhyb3VnaCBleHRhY2sgZXJyb3IgcmVwb3J0aW5nLgoKRnJvbSBhIGNvbmZpZ3VyYXRpb24gc3RhbmRwb2ludCwgYE5FVGAgaXMgc3VmZmljaWVudCBmb3IgYmFzZSBmdW5jdGlvbmFsaXR5LiBGb3IgdGhlIHNwZWNpZmljIGZhbWlsaWVzIGxpa2UgYE5FVF9GT1VgIG9yIGBNUFRDUGAgd2hpY2ggdXNlIHRoZSBiaWctZW5kaWFuIGF0dHJpYnV0ZXMsIHdlIG5lZWQgdG8gaGF2ZSB0aG9zZSBlbmFibGVkLCBidXQgZm9yIGZ1enppbmcgdGhlICpjb3JlKiBwb2xpY3kgZHVtcCBjb2RlLCBgTkVUYCBpcyB0aGUga2V5LiBgR0VORVJJQ19ORVRMSU5LYCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2l0aCBgTkVUYC4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSByZWxldmFudCBzeW1ib2xzIGFyZSBub24tc3RhdGljIGFuZCBnbG9iYWxseSBhY2Nlc3NpYmxlLCBzbyB3ZSBjYW4gZGlyZWN0bHkgdGFyZ2V0IHRoZW0uIEdpdmVuIHRoYXQgaXQmIzM5O3MgYWNjZXNzaWJsZSB2aWEgYm90aCBHZW5lcmljIE5ldGxpbmsgYW5kIGVycm9yIHJlcG9ydGluZywgaXQgZGVmaW5pdGVseSBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdHJsX2R1bXBwb2xpY3kmIzM0OywKICAgICYjMzQ7bmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUmIzM0OywKICAgICYjMzQ7bmV0bGlua19wb2xpY3lfZHVtcF93cml0ZSYjMzQ7LAogICAgJiMzNDtuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTmV0bGluayBwb2xpY3kgZHVtcGluZyBsb2dpYyBpbiBuZXQvbmV0bGluay9wb2xpY3kuYyB0byBzdXBwb3J0IGJpZy1lbmRpYW4gaW50ZWdlciBhdHRyaWJ1dGVzIChOTEFfQkUxNiBhbmQgTkxBX0JFMzIpIGJ5IGVtaXR0aW5nIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUiBhbmQgYWRqdXN0aW5nIHRoZSBhdHRyaWJ1dGUgc2l6ZSBlc3RpbWF0aW9uLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIEFGX05FVExJTksgc29ja2V0cyB0aHJvdWdoIEdlbmVyaWMgTmV0bGluayBwb2xpY3kgZHVtcGluZyAoQ1RSTF9DTURfR0VUUE9MSUNZKSBhcyB3ZWxsIGFzIG5ldGxpbmsgZXh0YWNrIGVycm9yIHJlcG9ydGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3RybF9kdW1wcG9saWN5JiMzNDssCiAgICAmIzM0O25ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlJiMzNDssCiAgICAmIzM0O25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGUmIzM0OywKICAgICYjMzQ7bmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE5ldGxpbmsgcG9saWN5IGR1bXBpbmcgbG9naWMgaW4gbmV0L25ldGxpbmsvcG9saWN5LmMgdG8gc3VwcG9ydCBiaWctZW5kaWFuIGludGVnZXIgYXR0cmlidXRlcyAoTkxBX0JFMTYgYW5kIE5MQV9CRTMyKSBieSBlbWl0dGluZyBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIgYW5kIGFkanVzdGluZyB0aGUgYXR0cmlidXRlIHNpemUgZXN0aW1hdGlvbi4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBBRl9ORVRMSU5LIHNvY2tldHMgdGhyb3VnaCBHZW5lcmljIE5ldGxpbmsgcG9saWN5IGR1bXBpbmcgKENUUkxfQ01EX0dFVFBPTElDWSkgYXMgd2VsbCBhcyBuZXRsaW5rIGV4dGFjayBlcnJvciByZXBvcnRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIE5ldGxpbmsgcG9saWN5IGR1bXAgc3VwcG9ydCBmb3IgYmlnLWVuZGlhbiBpbnRlZ2VyIGF0dHJpYnV0ZSB0eXBlcyAoTkxBX0JFMTYgYW5kIE5MQV9CRTMyKSBieSBlbWl0dGluZyB0aGUgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSIGF0dHJpYnV0ZSBpbiBuZXRsaW5rIHBvbGljeSBkZXNjcmlwdGlvbnMuIFxuXG5BbGwgdmFsdWVzIHdyaXR0ZW4gdG8gdGhlIE5ldGxpbmsgc2tiIGFyZSBleHBsaWNpdCwgZnVsbHkgaW5pdGlhbGl6ZWQgY29uc3RhbnRzIChzdWNoIGFzIE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU4pIG9yIHJhbmdlIHZhbHVlcyBpbml0aWFsaXplZCBieSBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlcywgb3IgcGFkZGluZ3MgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGlzIGFueSBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBjaGVja3MgYXJlIHN1ZmZpY2llbnQgZm9yIHRlc3RpbmcgYnVmZmVyIHNpemVzIGFuZCBuZXRsaW5rIG1lc3NhZ2UgZm9ybWF0dGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZlZDQxYTRlYjQxNjY4MjczZTU0Mzk4NzQ0OWYwMjkyN2E2ODI2MzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDAwOjIzOjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sCmluZGV4IDhiNDQ3MmE2YWEzNmEuLjdlN2MxNThlM2U3MzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ubGN0cmwueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmxjdHJsLnlhbWwKQEAgLTQyLDYgJiM0Mzs0MiwxNiBAQCBkZWZpbml0aW9uczoKICAgICAgIC0gYml0ZmllbGQzMgogICAgICAgLSBzaW50CiAgICAgICAtIHVpbnQKJiM0MzsgIC0KJiM0MzsgICAgbmFtZTogcG9saWN5LWJ5dGUtb3JkZXIKJiM0MzsgICAgZG9jOiB8CiYjNDM7ICAgICAgQnl0ZSBvcmRlciBvZiBhbiBpbnRlZ2VyIGF0dHJpYnV0ZS4gWmVybyBpcyBsZWZ0IHVudXNlZCBzbyB0aGF0IGl0CiYjNDM7ICAgICAgY2FuIGJlIHRha2VuIHRvIG1lYW4gaG9zdCBieXRlIG9yZGVyLgomIzQzOyAgICBlbnVtLW5hbWU6IG5ldGxpbmstcG9saWN5LWJ5dGUtb3JkZXIKJiM0MzsgICAgdHlwZTogZW51bQomIzQzOyAgICB2YWx1ZS1zdGFydDogMQomIzQzOyAgICBlbnRyaWVzOgomIzQzOyAgICAgIC0gYmlnLWVuZGlhbgogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTUyLDYgJiM0MzsxNjIsMTEgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAtCiAgICAgICAgIG5hbWU6IHBhZAogICAgICAgICB0eXBlOiBwYWQKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBieXRlLW9yZGVyCiYjNDM7ICAgICAgICBkb2M6IEJ5dGUgb3JkZXIgb2YgdGhlIGF0dHJpYnV0ZSwgYWJzZW50IG1lYW5zIGhvc3QgYnl0ZSBvcmRlci4KJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZW51bTogcG9saWN5LWJ5dGUtb3JkZXIKICAgLQogICAgIG5hbWU6IG9wLXBvbGljeS1hdHRycwogICAgIG5hbWUtcHJlZml4OiBjdHJsLWF0dHItcG9saWN5LQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRsaW5rLmgKaW5kZXggZjg3YWFmMjhhNjQ5MS4uODJjNDFhZWI0MzU3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGxpbmsuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oCkBAIC0zMjksNiAmIzQzOzMyOSwxNyBAQCBlbnVtIG5ldGxpbmtfYXR0cmlidXRlX3R5cGUgewogCU5MX0FUVFJfVFlQRV9VSU5ULAogfTsKIAomIzQzOy8qKgomIzQzOyAqIGVudW0gbmV0bGlua19wb2xpY3lfYnl0ZV9vcmRlciAtIGJ5dGUgb3JkZXIgb2YgYW4gaW50ZWdlciBhdHRyaWJ1dGUKJiM0MzsgKiBATkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTjogYmlnIGVuZGlhbiAobmV0d29yayBieXRlIG9yZGVyKQomIzQzOyAqCiYjNDM7ICogWmVybyBpcyBsZWZ0IHVuYXNzaWduZWQgc28gdGhhdCBpdCBrZWVwcyBtZWFuaW5nIGhvc3QgYnl0ZSBvcmRlciwKJiM0MzsgKiB3aGljaCBpcyBhbHNvIHdoYXQgYSBtaXNzaW5nIGJ5dGUgb3JkZXIgbWVhbnMuCiYjNDM7ICovCiYjNDM7ZW51bSBuZXRsaW5rX3BvbGljeV9ieXRlX29yZGVyIHsKJiM0MzsJTkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTiA9IDEsCiYjNDM7fTsKJiM0MzsKIC8qKgogICogZW51bSBuZXRsaW5rX3BvbGljeV90eXBlX2F0dHIgLSBwb2xpY3kgdHlwZSBhdHRyaWJ1dGVzCiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9VTlNQRUM6IHVudXNlZApAQCAtMzU2LDYgJiM0MzszNjcsOCBAQCBlbnVtIG5ldGxpbmtfYXR0cmlidXRlX3R5cGUgewogICoJYml0ZmllbGQzMiB0eXBlIChVMzIpCiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLOiBtYXNrIG9mIHZhbGlkIGJpdHMgZm9yIHVuc2lnbmVkIGludGVnZXJzIChVNjQpCiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9QQUQ6IHBhZCBhdHRyaWJ1dGUgZm9yIDY0LWJpdCBhbGlnbm1lbnQKJiM0MzsgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSOiBieXRlIG9yZGVyIG9mIGFuIGludGVnZXIgYXR0cmlidXRlLAomIzQzOyAqCSZhbXA7ZW51bSBuZXRsaW5rX3BvbGljeV9ieXRlX29yZGVyLCBhYnNlbnQgaWYgaG9zdCBieXRlIG9yZGVyIChVMzIpCiAgKgogICogQF9fTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVg6IG51bWJlciBvZiBhdHRyaWJ1dGVzCiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlcgpAQCAtMzc0LDYgJiM0MzszODcsNyBAQCBlbnVtIG5ldGxpbmtfcG9saWN5X3R5cGVfYXR0ciB7CiAJTkxfUE9MSUNZX1RZUEVfQVRUUl9CSVRGSUVMRDMyX01BU0ssCiAJTkxfUE9MSUNZX1RZUEVfQVRUUl9QQUQsCiAJTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLLAomIzQzOwlOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MX1BPTElDWV9UWVBFX0FUVFJfTUFYLApkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvcG9saWN5LmMgYi9uZXQvbmV0bGluay9wb2xpY3kuYwppbmRleCAwOGIwMDZjNDhmMDZlLi41NzRkNDRiN2Q1MTgyIDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0bGluay9wb2xpY3kuYwpAQCAtMjM0LDYgJiM0MzsyMzQsMTEgQEAgaW50IG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdCkKIAkJLyogbWF4aW11bSBpcyBjb21tb24sIHU2NCBtaW4vbWF4IHdpdGggcGFkZGluZyAqLwogCQlyZXR1cm4gY29tbW9uICYjNDM7CiAJCSAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgJiM0MzsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTY0KSkpOwomIzQzOwljYXNlIE5MQV9CRTE2OgomIzQzOwljYXNlIE5MQV9CRTMyOgomIzQzOwkJLyogc2FtZSBhcyB0aGUgdW5zaWduZWQgdHlwZXMsIHBsdXMgdGhlIGJ5dGUgb3JkZXIgKi8KJiM0MzsJCXJldHVybiBjb21tb24gJiM0MzsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTMyKSkgJiM0MzsKJiM0MzsJCSAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgJiM0MzsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTY0KSkpOwogCWNhc2UgTkxBX0JJVEZJRUxEMzI6CiAJCXJldHVybiBjb21tb24gJiM0MzsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTMyKSk7CiAJY2FzZSBOTEFfU1RSSU5HOgpAQCAtMjg5LDIxICYjNDM7Mjk0LDI4IEBAIF9fbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyKHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSwKIAljYXNlIE5MQV9VMTY6CiAJY2FzZSBOTEFfVTMyOgogCWNhc2UgTkxBX1U2NDoKJiM0MzsJY2FzZSBOTEFfQkUxNjoKJiM0MzsJY2FzZSBOTEFfQkUzMjoKIAljYXNlIE5MQV9VSU5UOgogCWNhc2UgTkxBX01TRUNTOiB7CiAJCXN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gcmFuZ2U7CiAKIAkJaWYgKHB0LSZndDt0eXBlID09IE5MQV9VOCkKIAkJCXR5cGUgPSBOTF9BVFRSX1RZUEVfVTg7Ci0JCWVsc2UgaWYgKHB0LSZndDt0eXBlID09IE5MQV9VMTYpCiYjNDM7CQllbHNlIGlmIChwdC0mZ3Q7dHlwZSA9PSBOTEFfVTE2IHx8IHB0LSZndDt0eXBlID09IE5MQV9CRTE2KQogCQkJdHlwZSA9IE5MX0FUVFJfVFlQRV9VMTY7Ci0JCWVsc2UgaWYgKHB0LSZndDt0eXBlID09IE5MQV9VMzIpCiYjNDM7CQllbHNlIGlmIChwdC0mZ3Q7dHlwZSA9PSBOTEFfVTMyIHx8IHB0LSZndDt0eXBlID09IE5MQV9CRTMyKQogCQkJdHlwZSA9IE5MX0FUVFJfVFlQRV9VMzI7CiAJCWVsc2UgaWYgKHB0LSZndDt0eXBlID09IE5MQV9VNjQpCiAJCQl0eXBlID0gTkxfQVRUUl9UWVBFX1U2NDsKIAkJZWxzZQogCQkJdHlwZSA9IE5MX0FUVFJfVFlQRV9VSU5UOwogCiYjNDM7CQlpZiAoKHB0LSZndDt0eXBlID09IE5MQV9CRTE2IHx8IHB0LSZndDt0eXBlID09IE5MQV9CRTMyKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIsCiYjNDM7CQkJCU5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU4pKQomIzQzOwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwomIzQzOwogCQlpZiAocHQtJmd0O3ZhbGlkYXRpb25fdHlwZSA9PSBOTEFfVkFMSURBVEVfTUFTSykgewogCQkJaWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLLAogCQkJCQkgICAgICBwdC0mZ3Q7bWFzaywKZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weQppbmRleCA4NjgyYmY1ODhlMWZhLi5mYjVhY2I4YWNkZWQxIDEwMDY0NAotLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5CkBAIC0xMTUsNiAmIzQzOzExNSw3IEBAIGNsYXNzIE5ldGxpbms6CiAgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9CSVRGSUVMRDMyX01BU0sgPSAxMAogICAgIE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEID0gMTEKICAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0sgPSAxMgomIzQzOyAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIgPSAxMwogCiAgICAgQXR0clR5cGUgPSBFbnVtKCYjMzk7QXR0clR5cGUmIzM5OywgWyYjMzk7ZmxhZyYjMzk7LCAmIzM5O3U4JiMzOTssICYjMzk7dTE2JiMzOTssICYjMzk7dTMyJiMzOTssICYjMzk7dTY0JiMzOTssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzOTtzOCYjMzk7LCAmIzM5O3MxNiYjMzk7LCAmIzM5O3MzMiYjMzk7LCAmIzM5O3M2NCYjMzk7LApAQCAtMTIyLDYgJiM0MzsxMjMsOCBAQCBjbGFzcyBOZXRsaW5rOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzk7bmVzdGVkJiMzOTssICYjMzk7bmVzdGVkLWFycmF5JiMzOTssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzOTtiaXRmaWVsZDMyJiMzOTssICYjMzk7c2ludCYjMzk7LCAmIzM5O3VpbnQmIzM5O10pCiAKJiM0MzsgICAgQnl0ZU9yZGVyID0gRW51bSgmIzM5O0J5dGVPcmRlciYjMzk7LCBbJiMzOTtiaWctZW5kaWFuJiMzOTtdLCBzdGFydD0xKQomIzQzOwogY2xhc3MgTmxFcnJvcihFeGNlcHRpb24pOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBubF9tc2cpOgogICAgICAgICBzZWxmLm5sX21zZyA9IG5sX21zZwpAQCAtMTU4LDcgJiM0MzsxNjEsNyBAQCBjbGFzcyBObFBvbGljeToKIAogICAgIEVhY2ggcG9saWN5IGVudHJ5IGFsd2F5cyBoYXMgYSAmIzM5O3R5cGUmIzM5OyBhdHRyaWJ1dGUgKGUuZy4gdTMyLCBzdHJpbmcsCiAgICAgbmVzdGVkKS4gT3B0aW9uYWwgYXR0cmlidXRlcyBkZXBlbmRpbmcgb24gdGhlICYjMzk7dHlwZSYjMzk7OiBtaW4tdmFsdWUsCi0gICAgbWF4LXZhbHVlLCBtaW4tbGVuZ3RoLCBtYXgtbGVuZ3RoLCBtYXNrLgomIzQzOyAgICBtYXgtdmFsdWUsIG1pbi1sZW5ndGgsIG1heC1sZW5ndGgsIG1hc2ssIGJ5dGUtb3JkZXIuCiAKICAgICBQb2xpY2llcyBjYW4gZm9ybSBpbmZpbml0ZSBuZXN0aW5nIGxvb3BzLiBUaGVzZSBsb29wcyBhcmUgdHJpbW1lZAogICAgIHdoZW4gcG9saWN5IGlzIGNvbnZlcnRlZCB0byBhIGRpY3Qgd2l0aCBwb2wudG9fZGljdCgpLgpAQCAtNDU0LDYgJiM0Mzs0NTcsOSBAQCBkZWYgX2dlbmxfZGVjb2RlX3BvbGljeShyYXcpOgogICAgICAgICAgICAgcG9saWN5WyYjMzk7Yml0ZmllbGQzMi1tYXNrJiMzOTtdID0gYXR0ci5hc19zY2FsYXIoJiMzOTt1MzImIzM5OykKICAgICAgICAgZWxpZiBhdHRyLnR5cGUgPT0gTmV0bGluay5OTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0s6CiAgICAgICAgICAgICBwb2xpY3lbJiMzOTttYXNrJiMzOTtdID0gYXR0ci5hc19zY2FsYXIoJiMzOTt1NjQmIzM5OykKJiM0MzsgICAgICAgIGVsaWYgYXR0ci50eXBlID09IE5ldGxpbmsuTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSOgomIzQzOyAgICAgICAgICAgIGJ5dGVfb3JkZXIgPSBhdHRyLmFzX3NjYWxhcigmIzM5O3UzMiYjMzk7KQomIzQzOyAgICAgICAgICAgIHBvbGljeVsmIzM5O2J5dGUtb3JkZXImIzM5O10gPSBOZXRsaW5rLkJ5dGVPcmRlcihieXRlX29yZGVyKS5uYW1lCiAgICAgcmV0dXJuIHBvbGljeQogCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIFBvbGljeSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBmaXJlIHVwIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gdGhyb3VnaCB0aGUgcGF0Y2ggc3RlcC1ieS1zdGVwLgoKRmlyc3QsIEkgc2VlIHNvbWUgdXBkYXRlcyB0byBkb2N1bWVudGF0aW9uIGFuZCBoZWFkZXJzOiB0aGUgYG5sY3RybC55YW1sYCBzcGVjIGlzIGdldHRpbmcgYSBgcG9saWN5LWJ5dGUtb3JkZXJgIGVudW0gYW5kIGBieXRlLW9yZGVyYCBhdHRyaWJ1dGUsIGFuZCB0aGUgYG5ldGxpbmsuaGAgaGVhZGVyIGRlZmluZXMgY29uc3RhbnRzIGZvciBiaWctZW5kaWFuIGJ5dGUgb3JkZXIuIE5vdGhpbmcgYWxhcm1pbmcgc28gZmFyOyBpdCBzZWVtcyB3ZSBhcmUgaW50cm9kdWNpbmcgYmlnLWVuZGlhbiBzdXBwb3J0IGluIHRoZSBuZXRsaW5rIHBvbGljeS4KCk5leHQsIEkgc2VlIGNoYW5nZXMgaW4gYG5ldC9uZXRsaW5rL3BvbGljeS5jYC4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSB0d28gZnVuY3Rpb25zIHdlcmUgdXBkYXRlZDogYG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlKClgIGFuZCBgX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoKWAuIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZCB0byBoYW5kbGUgYE5MQV9CRTE2YCBhbmQgYE5MQV9CRTMyYCB3aGljaCBpcyBwcm9taXNpbmchIFRoZSBzaXplIGVzdGltYXRpb24gZnVuY3Rpb24gbm93IGFjY291bnRzIGZvciB0aGUgYnl0ZSBvcmRlciBhdHRyaWJ1dGUsIHdoaWNoIGlzIGdvb2QuIFRoZSB3cml0ZSBmdW5jdGlvbiBzZXRzIHRoZSBhdHRyaWJ1dGUgdHlwZSB0byBgVTE2YCBvciBgVTMyYCBhcyBhcHByb3ByaWF0ZSBhbmQgdGhlbiBhZGRzIGEgYE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUmAgYXR0cmlidXRlIHdpdGggYE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU5gIGlmIHRoZSBvcmlnaW5hbCB0eXBlIHdhcyBgTkxBX0JFMTZgIG9yIGBOTEFfQkUzMmAuIFRoaXMgbG9va3MgcmVhc29uYWJsZS4gSXQgY2FsbHMgYG5sYV9wdXRfdTMyYCB0byBhY3R1YWxseSBwdXQgdGhlIGJ5dGUgb3JkZXIgaW5mb3JtYXRpb24gaW50byB0aGUgc2tiISBBZnRlciB0aGF0LCBpdCBjb250aW51ZXMgd2l0aCB0aGUgcmFuZ2UgYW5kIG1hc2sgY2hlY2tzLgoKRmluYWxseSwgc29tZSBweXRob24gdG9vbGluZyBpcyBhbHNvIGdldHRpbmcgdXBkYXRlZC4gTGlrZWx5IHRoZSBZQU1MIHBhcnNlciBhbmQgY29kZSBnZW5lcmF0b3IuCgpOb3csIEkgdGhpbmsgSSYjMzk7bGwgZGl2ZSBhIGxpdHRsZSBkZWVwZXIgaW50byB0aGF0IGBuZXRsaW5rL3BvbGljeS5jYCBmaWxlIGFuZCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhvc2UgdHdvIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgZGF0YSBpcyBiZWluZyBkdW1wZWQgYW5kIHdyaXR0ZW4uIEkgd2FudCB0byBjaGVjayBmb3IgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIHdoZW4gY2FsY3VsYXRpbmcgc2l6ZXMsIG9yIGFueSBvdGhlciBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBmbG93IGFyb3VuZCB0aG9zZSBgbmV0bGlua19wb2xpY3lgIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhhdCB0aGlzIGJ5dGUtb3JkZXIgYWRkaXRpb24gaXMgYmVpbmcgaGFuZGxlZCBzYWZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGxpbmsvcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMjA6XHRcdGNhc2UgTkxBX05FU1RFRF9BUlJBWTpcbiAyMjE6XHRcdFx0LyogY29tbW9uLCBwb2xpY3kgaWR4LCBwb2xpY3kgbWF4YXR0ciAqL1xuIDIyMjpcdFx0XHRyZXR1cm4gY29tbW9uICYjNDM7IDIgKiBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKTtcbiAyMjM6XHRcdGNhc2UgTkxBX1U4OlxuIDIyNDpcdFx0Y2FzZSBOTEFfVTE2OlxuIDIyNTpcdFx0Y2FzZSBOTEFfVTMyOlxuIDIyNjpcdFx0Y2FzZSBOTEFfVTY0OlxuIDIyNzpcdFx0Y2FzZSBOTEFfTVNFQ1M6XG4gMjI4Olx0XHRjYXNlIE5MQV9TODpcbiAyMjk6XHRcdGNhc2UgTkxBX1MxNjpcbiAyMzA6XHRcdGNhc2UgTkxBX1MzMjpcbiAyMzE6XHRcdGNhc2UgTkxBX1M2NDpcbiAyMzI6XHRcdGNhc2UgTkxBX1NJTlQ6XG4gMjMzOlx0XHRjYXNlIE5MQV9VSU5UOlxuIDIzNDpcdFx0XHQvKiBtYXhpbXVtIGlzIGNvbW1vbiwgdTY0IG1pbi9tYXggd2l0aCBwYWRkaW5nICovXG4gMjM1Olx0XHRcdHJldHVybiBjb21tb24gJiM0MztcbiAyMzY6XHRcdFx0ICAgICAgIDIgKiAobmxhX2F0dHJfc2l6ZSgwKSAmIzQzOyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7XG4gMjM3Olx0XHRjYXNlIE5MQV9CRTE2OlxuIDIzODpcdFx0Y2FzZSBOTEFfQkUzMjpcbiAyMzk6XHRcdFx0Lyogc2FtZSBhcyB0aGUgdW5zaWduZWQgdHlwZXMsIHBsdXMgdGhlIGJ5dGUgb3JkZXIgKi9cbiAyNDA6XHRcdFx0cmV0dXJuIGNvbW1vbiAmIzQzOyBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKSAmIzQzO1xuIDI0MTpcdFx0XHQgICAgICAgMiAqIChubGFfYXR0cl9zaXplKDApICYjNDM7IG5sYV9hdHRyX3NpemUoc2l6ZW9mKHU2NCkpKTtcbiAyNDI6XHRcdGNhc2UgTkxBX0JJVEZJRUxEMzI6XG4gMjQzOlx0XHRcdHJldHVybiBjb21tb24gJiM0MzsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTMyKSk7XG4gMjQ0Olx0XHRjYXNlIE5MQV9TVFJJTkc6XG4gMjQ1Olx0XHRjYXNlIE5MQV9OVUxfU1RSSU5HOlxuIDI0NjpcdFx0Y2FzZSBOTEFfQklOQVJZOlxuIDI0NzpcdFx0XHQvKiBtYXhpbXVtIGlzIGNvbW1vbiwgdTMyIG1pbi1sZW5ndGgvbWF4LWxlbmd0aCAqL1xuIDI0ODpcdFx0XHRyZXR1cm4gY29tbW9uICYjNDM7IDIgKiBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKTtcbiAyNDk6XHRcdGNhc2UgTkxBX0ZMQUc6XG4gMjUwOlx0XHRcdHJldHVybiBjb21tb247XG4gMjUxOlx0XHR9XG4gMjUyOlx0XG4gMjUzOlx0XHQvKiB0aGlzIHNob3VsZCB0aGVuIGNhdXNlIGEgd2FybmluZyBsYXRlciAqL1xuIDI1NDpcdFx0cmV0dXJuIDA7XG4gMjU1Olx0fVxuIDI1NjpcdFxuIDI1NzpcdHN0YXRpYyBpbnRcbiAyNTg6XHRfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXG4gMjU5Olx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAyNjA6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXG4gMjYxOlx0XHRcdFx0XHQgaW50IG5lc3RhdHRyKVxuIDI2MjpcdHtcbiAyNjM6XHRcdGludCBlc3RpbWF0ZSA9IG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlKHB0KTtcbiAyNjQ6XHRcdGVudW0gbmV0bGlua19hdHRyaWJ1dGVfdHlwZSB0eXBlO1xuIDI2NTpcdFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcbiAyNjY6XHRcbiAyNjc6XHRcdGF0dHIgPSBubGFfbmVzdF9zdGFydChza2IsIG5lc3RhdHRyKTtcbiAyNjg6XHRcdGlmICghYXR0cilcbiAyNjk6XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIDI3MDpcdFxuIDI3MTpcdFx0c3dpdGNoIChwdC1cdTAwM2V0eXBlKSB7XG4gMjcyOlx0XHRkZWZhdWx0OlxuIDI3MzpcdFx0Y2FzZSBOTEFfVU5TUEVDOlxuIDI3NDpcdFx0Y2FzZSBOTEFfUkVKRUNUOlxuIDI3NTpcdFx0XHQvKiBza2lwIC0gdXNlIE5MQV9NSU5fTEVOIHRvIGFkdmVydGlzZSBzdWNoICovXG4gMjc2Olx0XHRcdG5sYV9uZXN0X2NhbmNlbChza2IsIGF0dHIpO1xuIDI3NzpcdFx0XHRyZXR1cm4gLUVOT0RBVEE7XG4gMjc4Olx0XHRjYXNlIE5MQV9ORVNURUQ6XG4gMjc5Olx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfTkVTVEVEO1xuIDI4MDpcdFx0XHRmYWxsdGhyb3VnaDtcbiAyODE6XHRcdGNhc2UgTkxBX05FU1RFRF9BUlJBWTpcbiAyODI6XHRcdFx0aWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX05FU1RFRF9BUlJBWSlcbiAyODM6XHRcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX05FU1RFRF9BUlJBWTtcbiAyODQ6XHRcdFx0aWYgKHN0YXRlIFx1MDAyNlx1MDAyNiBwdC1cdTAwM2VuZXN0ZWRfcG9saWN5IFx1MDAyNlx1MDAyNiBwdC1cdTAwM2VsZW4gXHUwMDI2XHUwMDI2XG4gMjg1Olx0XHRcdCAgICAobmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BPTElDWV9JRFgsXG4gMjg2Olx0XHRcdFx0XHQgbmV0bGlua19wb2xpY3lfZHVtcF9nZXRfcG9saWN5X2lkeChzdGF0ZSxcbiAyODc6XHRcdFx0XHRcdFx0XHRcdFx0ICAgIHB0LVx1MDAzZW5lc3RlZF9wb2xpY3ksXG4gMjg4Olx0XHRcdFx0XHRcdFx0XHRcdCAgICBwdC1cdTAwM2VsZW4pKSB8fFxuIDI4OTpcdFx0XHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9QT0xJQ1lfTUFYVFlQRSxcbiAyOTA6XHRcdFx0XHRcdCBwdC1cdTAwM2VsZW4pKSlcbiAyOTE6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiAyOTI6XHRcdFx0YnJlYWs7XG4gMjkzOlx0XHRjYXNlIE5MQV9VODpcbiAyOTQ6XHRcdGNhc2UgTkxBX1UxNjpcbiAyOTU6XHRcdGNhc2UgTkxBX1UzMjpcbiAyOTY6XHRcdGNhc2UgTkxBX1U2NDpcbiAyOTc6XHRcdGNhc2UgTkxBX0JFMTY6XG4gMjk4Olx0XHRjYXNlIE5MQV9CRTMyOlxuIDI5OTpcdFx0Y2FzZSBOTEFfVUlOVDpcbiAzMDA6XHRcdGNhc2UgTkxBX01TRUNTOiB7XG4gMzAxOlx0XHRcdHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gcmFuZ2U7XG4gMzAyOlx0XG4gMzAzOlx0XHRcdGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9VOClcbiAzMDQ6XHRcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1U4O1xuIDMwNTpcdFx0XHRlbHNlIGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9VMTYgfHwgcHQtXHUwMDNldHlwZSA9PSBOTEFfQkUxNilcbiAzMDY6XHRcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1UxNjtcbiAzMDc6XHRcdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTMyIHx8IHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpXG4gMzA4Olx0XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VMzI7XG4gMzA5Olx0XHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1U2NClcbiAzMTA6XHRcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1U2NDtcbiAzMTE6XHRcdFx0ZWxzZVxuIDMxMjpcdFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVUlOVDtcbiAzMTM6XHRcbiAzMTQ6XHRcdFx0aWYgKChwdC1cdTAwM2V0eXBlID09IE5MQV9CRTE2IHx8IHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpIFx1MDAyNlx1MDAyNlxuIDMxNTpcdFx0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIsXG4gMzE2Olx0XHRcdFx0XHROTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOKSlcbiAzMTc6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiAzMTg6XHRcbiAzMTk6XHRcdFx0aWYgKHB0LVx1MDAzZXZhbGlkYXRpb25fdHlwZSA9PSBOTEFfVkFMSURBVEVfTUFTSykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODI0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBEZWVwZXIgaW50byBBdHRyaWJ1dGUgVmFsaWRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3R0ZW4gYSBoYW5kbGUgb24gdGhpcyBgX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJgIGZ1bmN0aW9uLiBJIHNlZSB3aGVyZSB0aGluZ3MgYXJlIGhlYWRlZCB3aXRoIGF0dHJpYnV0ZSBoYW5kbGluZy4gTm93LCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIHVuZGVyc3RhbmQgKmhvdyogdGhlIGNvZGUgdmFsaWRhdGVzIHRoZSByYW5nZSBhbmQgbWFzayB2YWx1ZXMgZm9yIHRoZXNlIGF0dHJpYnV0ZXMuIEkga25vdyB3aGF0IHRoZSBwb2xpY3kgZnJhbWV3b3JrICpzaG91bGQqIGJlIGRvaW5nLCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIHRvIG1ha2Ugc3VyZSBpdCBhbGlnbnMgd2l0aCBteSBtZW50YWwgbW9kZWwuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgdmFsaWRhdGlvbiBpcyBhY3R1YWxseSBwZXJmb3JtZWQgaW4gdGhpcyBmdW5jdGlvbiwgb3Igb3RoZXIgZnVuY3Rpb25zIGl0IGNhbGxzLCB3aXRoIHJlc3BlY3QgdG8gbmV0bGluayBhdHRyaWJ1dGVzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgdGhlIG92ZXJhbGwgc2VjdXJpdHkgYW5kIHJvYnVzdG5lc3Mgb2YgdGhlIG5ldGxpbmsgcG9saWN5LiBUaW1lIHRvIGtlZXAgcmVhZGluZyBhbmQgc2VlIGhvdyBpdCYjMzk7cyBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRsaW5rL3BvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTU6XHRcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSLFxuIDMxNjpcdFx0XHRcdFx0TkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTikpXG4gMzE3Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMzE4Olx0XG4gMzE5Olx0XHRcdGlmIChwdC1cdTAwM2V2YWxpZGF0aW9uX3R5cGUgPT0gTkxBX1ZBTElEQVRFX01BU0spIHtcbiAzMjA6XHRcdFx0XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0ssXG4gMzIxOlx0XHRcdFx0XHRcdCAgICAgIHB0LVx1MDAzZW1hc2ssXG4gMzIyOlx0XHRcdFx0XHRcdCAgICAgIE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEKSlcbiAzMjM6XHRcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDMyNDpcdFx0XHRcdGJyZWFrO1xuIDMyNTpcdFx0XHR9IGVsc2UgaWYgKHB0LVx1MDAzZXZhbGlkYXRpb25fdHlwZSA9PSBOTEFfVkFMSURBVEVfRlVOQ1RJT04pIHtcbiAzMjY6XHRcdFx0XHRicmVhaztcbiAzMjc6XHRcdFx0fVxuIDMyODpcdFxuIDMyOTpcdFx0XHRubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKHB0LCBcdTAwMjZyYW5nZSk7XG4gMzMwOlx0XG4gMzMxOlx0XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfTUlOX1ZBTFVFX1UsXG4gMzMyOlx0XHRcdFx0XHQgICAgICByYW5nZS5taW4sIE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEKSB8fFxuIDMzMzpcdFx0XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BWF9WQUxVRV9VLFxuIDMzNDpcdFx0XHRcdFx0ICAgICAgcmFuZ2UubWF4LCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRCkpXG4gMzM1Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMzM2Olx0XHRcdGJyZWFrO1xuIDMzNzpcdFx0fVxuIDMzODpcdFx0Y2FzZSBOTEFfUzg6XG4gMzM5Olx0XHRjYXNlIE5MQV9TMTY6XG4gMzQwOlx0XHRjYXNlIE5MQV9TMzI6XG4gMzQxOlx0XHRjYXNlIE5MQV9TNjQ6XG4gMzQyOlx0XHRjYXNlIE5MQV9TSU5UOiB7XG4gMzQzOlx0XHRcdHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb25fc2lnbmVkIHJhbmdlO1xuIDM0NDpcdFxuIDM0NTpcdFx0XHRpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfUzgpXG4gMzQ2Olx0XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9TODtcbiAzNDc6XHRcdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfUzE2KVxuIDM0ODpcdFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfUzE2O1xuIDM0OTpcdFx0XHRlbHNlIGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9TMzIpXG4gMzUwOlx0XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9TMzI7XG4gMzUxOlx0XHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1M2NClcbiAzNTI6XHRcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1M2NDtcbiAzNTM6XHRcdFx0ZWxzZVxuIDM1NDpcdFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfU0lOVDtcbiAzNTU6XHRcbiAzNTY6XHRcdFx0aWYgKHB0LVx1MDAzZXZhbGlkYXRpb25fdHlwZSA9PSBOTEFfVkFMSURBVEVfRlVOQ1RJT04pXG4gMzU3Olx0XHRcdFx0YnJlYWs7XG4gMzU4Olx0XG4gMzU5Olx0XHRcdG5sYV9nZXRfcmFuZ2Vfc2lnbmVkKHB0LCBcdTAwMjZyYW5nZSk7XG4gMzYwOlx0XG4gMzYxOlx0XHRcdGlmIChubGFfcHV0X3M2NChza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfTUlOX1ZBTFVFX1MsXG4gMzYyOlx0XHRcdFx0XHRyYW5nZS5taW4sIE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEKSB8fFxuIDM2MzpcdFx0XHQgICAgbmxhX3B1dF9zNjQoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BWF9WQUxVRV9TLFxuIDM2NDpcdFx0XHRcdFx0cmFuZ2UubWF4LCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRCkpXG4gMzY1Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMzY2Olx0XHRcdGJyZWFrO1xuIDM2NzpcdFx0fVxuIDM2ODpcdFx0Y2FzZSBOTEFfQklURklFTEQzMjpcbiAzNjk6XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9CSVRGSUVMRDMyO1xuIDM3MDpcdFx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JJVEZJRUxEMzJfTUFTSyxcbiAzNzE6XHRcdFx0XHRcdHB0LVx1MDAzZWJpdGZpZWxkMzJfdmFsaWQpKVxuIDM3MjpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDM3MzpcdFx0XHRicmVhaztcbiAzNzQ6XHRcdGNhc2UgTkxBX1NUUklORzpcbiAzNzU6XHRcdGNhc2UgTkxBX05VTF9TVFJJTkc6XG4gMzc2Olx0XHRjYXNlIE5MQV9CSU5BUlk6XG4gMzc3Olx0XHRcdGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9TVFJJTkcpXG4gMzc4Olx0XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9TVFJJTkc7XG4gMzc5Olx0XHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX05VTF9TVFJJTkcpXG4gMzgwOlx0XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9OVUxfU1RSSU5HO1xuIDM4MTpcdFx0XHRlbHNlXG4gMzgyOlx0XHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9CSU5BUlk7XG4gMzgzOlx0XG4gMzg0Olx0XHRcdGlmIChwdC1cdTAwM2V2YWxpZGF0aW9uX3R5cGUgPT0gTkxBX1ZBTElEQVRFX1JBTkdFIHx8XG4gMzg1Olx0XHRcdCAgICBwdC1cdTAwM2V2YWxpZGF0aW9uX3R5cGUgPT0gTkxBX1ZBTElEQVRFX1JBTkdFX1dBUk5fVE9PX0xPTkcpIHtcbiAzODY6XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIHJhbmdlO1xuIDM4NzpcdFxuIDM4ODpcdFx0XHRcdG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQocHQsIFx1MDAyNnJhbmdlKTtcbiAzODk6XHRcbiAzOTA6XHRcdFx0XHRpZiAocmFuZ2UubWluIFx1MDAyNlx1MDAyNlxuIDM5MTpcdFx0XHRcdCAgICBubGFfcHV0X3UzMihza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfTUlOX0xFTkdUSCxcbiAzOTI6XHRcdFx0XHRcdFx0cmFuZ2UubWluKSlcbiAzOTM6XHRcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDM5NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDQwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIEF0dHJpYnV0ZSBIYW5kbGluZyoqCgpSaWdodCwgc28gSSYjMzk7bSByZXZpc2l0aW5nIHRoaXMgY29kZSwgYW5kIEkgbmVlZCB0byBiZSBleHRyYSB0aG9yb3VnaC4gSSYjMzk7dmUgYWxyZWFkeSBzY3J1dGluaXplZCBzb21lIGFzcGVjdHMsIGJ1dCBub3cgSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIG5vdCBqdXN0IGFzc3VtZSBldmVyeXRoaW5nJiMzOTtzIGtvc2hlciB3aXRoIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgbmV0d29yayBhdHRyaWJ1dGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIGBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkYC4gVGhlIHByaW1hcnkgY29uY2VybiBoZXJlIGlzIG1ha2luZyBzdXJlIHRob3NlIGJpZy1lbmRpYW4gMTYtYml0IChgTkxBX0JFMTZgKSBhbmQgMzItYml0IChgTkxBX0JFMzJgKSB2YWx1ZXMgYXJlIGJlaW5nIHByb2Nlc3NlZCBjb3JyZWN0bHkuIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIGEgc3VidGxlIGJ1ZyBvciBhbiBlZGdlIGNhc2Ugd2hlcmUgdGhlIGByYW5nZWAgdmFyaWFibGUgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgZG9lc24mIzM5O3QgaGFwcGVuLCBhcyB0aGF0IHdvdWxkIGJlIGEgc2VyaW91cyByZWxpYWJpbGl0eSBpc3N1ZS4gR290dGEgY292ZXIgYWxsIG15IGJhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGxpbmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRsaW5rL3BvbGljeS5jPTI1OD1fX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXG4tLVxubmV0L25ldGxpbmsvcG9saWN5LmMtMzI4LVxubmV0L25ldGxpbmsvcG9saWN5LmM6MzI5Olx0XHRubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKHB0LCBcdTAwMjZyYW5nZSk7XG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMzAtXG4tLVxubmV0L25ldGxpbmsvcG9saWN5LmMtMzg3LVxubmV0L25ldGxpbmsvcG9saWN5LmM6Mzg4Olx0XHRcdG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQocHQsIFx1MDAyNnJhbmdlKTtcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTM4OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg4OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gbmxhX2dldF9yYW5nZV91bnNpZ25lZCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkYC4gTGV0JiMzOTtzIGNsYXJpZnkgaXRzIGZ1bmN0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8ganVtcCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgc3VzcGVjdCBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiB0aGUgY29yZSBOZXRsaW5rIGF0dHJpYnV0ZSBoYW5kbGluZyBjb2RlLiBUaGUgYGxpYi9gIGRpcmVjdG9yeSBpcyB1c3VhbGx5IHRoZSBwbGFjZSBmb3IgdGhvc2Uga2luZHMgb2YgdXRpbGl0eSBmdW5jdGlvbnMuIFNvLCBJJiMzOTtsbCBgZ3JlcGAgZm9yIGBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkYCB3aXRoaW4gYGxpYi9ubGF0dHIuY2AsIG9yIHBvdGVudGlhbGx5IGFueSBvdGhlciByZWxldmFudCBgLmNgIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5LCB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGl2ZSBkZWZpbml0aW9uIGFuZCBkaXZlIGludG8gaXRzIGltcGxlbWVudGF0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBjb2RlLCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGxpbmsuaD0yNDYxPXN0YXRpYyBpbmxpbmUgYm9vbCBubGFfaXNfbGFzdChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIGludCByZW0pXG4tLVxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTI0NjUtXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6MjQ2Njp2b2lkIG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTI0NjctXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gKnJhbmdlKTtcbi0tXG5saWIvbmxhdHRyLmM9ODk9c3RhdGljIGludCBubGFfdmFsaWRhdGVfYXJyYXkoY29uc3Qgc3RydWN0IG5sYXR0ciAqaGVhZCwgaW50IGxlbiwgaW50IG1heHR5cGUsXG4tLVxubGliL25sYXR0ci5jLTExOC1cbmxpYi9ubGF0dHIuYzoxMTk6dm9pZCBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdCxcbmxpYi9ubGF0dHIuYy0xMjAtXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gKnJhbmdlKVxuLS1cbmxpYi9ubGF0dHIuYz0xNzA9c3RhdGljIGludCBubGFfdmFsaWRhdGVfcmFuZ2VfdW5zaWduZWQoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxuLS1cbmxpYi9ubGF0dHIuYy0yMDktXG5saWIvbmxhdHRyLmM6MjEwOlx0bmxhX2dldF9yYW5nZV91bnNpZ25lZChwdCwgXHUwMDI2cmFuZ2UpO1xubGliL25sYXR0ci5jLTIxMS1cbi0tXG5uZXQvbmV0bGluay9wb2xpY3kuYz0yNTg9X19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlLFxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTMyOC1cbm5ldC9uZXRsaW5rL3BvbGljeS5jOjMyOTpcdFx0bmxhX2dldF9yYW5nZV91bnNpZ25lZChwdCwgXHUwMDI2cmFuZ2UpO1xubmV0L25ldGxpbmsvcG9saWN5LmMtMzMwLVxuLS1cbm5ldC9uZXRsaW5rL3BvbGljeS5jLTM4Ny1cbm5ldC9uZXRsaW5rL3BvbGljeS5jOjM4ODpcdFx0XHRubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKHB0LCBcdTAwMjZyYW5nZSk7XG5uZXQvbmV0bGluay9wb2xpY3kuYy0zODktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gYGxpYi9ubGF0dHIuY2AgLSBMaW5lIDExOSoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIGluIG9uIGBsaWIvbmxhdHRyLmNgIGFnYWluLiBBbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhbnl0aGluZyBOZXRsaW5rLXJlbGF0ZWQuIEFuZCBJJiMzOTttIHplcm9pbmcgaW4gb24gbGluZSAxMTkuIFJpZ2h0LCBzbyB3aGF0JiMzOTtzIHRoZSBjb250ZXh0PyBXaGF0IGFtIEkgbG9va2luZyBmb3IgKnRoaXMqIHRpbWU/IElzIGl0IGEgcG90ZW50aWFsIGJ1Zywgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LCBvciBwZXJoYXBzIGp1c3QgcmVmcmVzaGluZyBteSBtZW1vcnkgb24gYSBzcGVjaWZpYyBhdHRyaWJ1dGUgaGFuZGxpbmcgbWVjaGFuaXNtPyBDaGFuY2VzIGFyZSwgZ2l2ZW4gbXkgYmFja2dyb3VuZCwgSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBpZGVhIG9mIHdoYXQgc2VjdGlvbiBvZiB0aGUgY29kZSB0aGlzIHJlbGF0ZXMgdG8uIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCBhdHRyaWJ1dGUgcGFyc2luZywgdmFsaWRhdGlvbiwgb3IgcGVyaGFwcyBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIGEgTmV0bGluayBtZXNzYWdlLiBMaW5lIDExOS4uLiBMZXQgbWUgcHVsbCB0aGF0IHVwLiBPa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvbmxhdHRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNTpcdFxuIDExNjpcdFx0cmV0dXJuIDA7XG4gMTE3Olx0fVxuIDExODpcdFxuIDExOTpcdHZvaWQgbmxhX2dldF9yYW5nZV91bnNpZ25lZChjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXG4gMTIwOlx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gKnJhbmdlKVxuIDEyMTpcdHtcbiAxMjI6XHRcdFdBUk5fT05fT05DRShwdC1cdTAwM2V2YWxpZGF0aW9uX3R5cGUgIT0gTkxBX1ZBTElEQVRFX1JBTkdFX1BUUiBcdTAwMjZcdTAwMjZcbiAxMjM6XHRcdFx0ICAgICAocHQtXHUwMDNlbWluIFx1MDAzYyAwIHx8IHB0LVx1MDAzZW1heCBcdTAwM2MgMCkpO1xuIDEyNDpcdFxuIDEyNTpcdFx0cmFuZ2UtXHUwMDNlbWluID0gMDtcbiAxMjY6XHRcbiAxMjc6XHRcdHN3aXRjaCAocHQtXHUwMDNldHlwZSkge1xuIDEyODpcdFx0Y2FzZSBOTEFfVTg6XG4gMTI5Olx0XHRcdHJhbmdlLVx1MDAzZW1heCA9IFU4X01BWDtcbiAxMzA6XHRcdFx0YnJlYWs7XG4gMTMxOlx0XHRjYXNlIE5MQV9VMTY6XG4gMTMyOlx0XHRjYXNlIE5MQV9CRTE2OlxuIDEzMzpcdFx0Y2FzZSBOTEFfQklOQVJZOlxuIDEzNDpcdFx0XHRyYW5nZS1cdTAwM2VtYXggPSBVMTZfTUFYO1xuIDEzNTpcdFx0XHRicmVhaztcbiAxMzY6XHRcdGNhc2UgTkxBX1UzMjpcbiAxMzc6XHRcdGNhc2UgTkxBX0JFMzI6XG4gMTM4Olx0XHRcdHJhbmdlLVx1MDAzZW1heCA9IFUzMl9NQVg7XG4gMTM5Olx0XHRcdGJyZWFrO1xuIDE0MDpcdFx0Y2FzZSBOTEFfVTY0OlxuIDE0MTpcdFx0Y2FzZSBOTEFfVUlOVDpcbiAxNDI6XHRcdGNhc2UgTkxBX01TRUNTOlxuIDE0MzpcdFx0XHRyYW5nZS1cdTAwM2VtYXggPSBVNjRfTUFYO1xuIDE0NDpcdFx0XHRicmVhaztcbiAxNDU6XHRcdGRlZmF1bHQ6XG4gMTQ2Olx0XHRcdFdBUk5fT05fT05DRSgxKTtcbiAxNDc6XHRcdFx0cmV0dXJuO1xuIDE0ODpcdFx0fVxuIDE0OTpcdFxuIDE1MDpcdFx0c3dpdGNoIChwdC1cdTAwM2V2YWxpZGF0aW9uX3R5cGUpIHtcbiAxNTE6XHRcdGNhc2UgTkxBX1ZBTElEQVRFX1JBTkdFOlxuIDE1MjpcdFx0Y2FzZSBOTEFfVkFMSURBVEVfUkFOR0VfV0FSTl9UT09fTE9ORzpcbiAxNTM6XHRcdFx0cmFuZ2UtXHUwMDNlbWluID0gcHQtXHUwMDNlbWluO1xuIDE1NDpcdFx0XHRyYW5nZS1cdTAwM2VtYXggPSBwdC1cdTAwM2VtYXg7XG4gMTU1Olx0XHRcdGJyZWFrO1xuIDE1NjpcdFx0Y2FzZSBOTEFfVkFMSURBVEVfUkFOR0VfUFRSOlxuIDE1NzpcdFx0XHQqcmFuZ2UgPSAqcHQtXHUwMDNlcmFuZ2U7XG4gMTU4Olx0XHRcdGJyZWFrO1xuIDE1OTpcdFx0Y2FzZSBOTEFfVkFMSURBVEVfTUlOOlxuIDE2MDpcdFx0XHRyYW5nZS1cdTAwM2VtaW4gPSBwdC1cdTAwM2VtaW47XG4gMTYxOlx0XHRcdGJyZWFrO1xuIDE2MjpcdFx0Y2FzZSBOTEFfVkFMSURBVEVfTUFYOlxuIDE2MzpcdFx0XHRyYW5nZS1cdTAwM2VtYXggPSBwdC1cdTAwM2VtYXg7XG4gMTY0Olx0XHRcdGJyZWFrO1xuIDE2NTpcdFx0ZGVmYXVsdDpcbiAxNjY6XHRcdFx0YnJlYWs7XG4gMTY3Olx0XHR9XG4gMTY4Olx0fVxuIDE2OTpcdFxuIDE3MDpcdHN0YXRpYyBpbnQgbmxhX3ZhbGlkYXRlX3JhbmdlX3Vuc2lnbmVkKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdCxcbiAxNzE6XHRcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4gMTcyOlx0XHRcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuIDE3MzpcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCB2YWxpZGF0ZSlcbiAxNzQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjY2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5ldGxpbmsgUG9saWN5IER1bXBpbmcqKgoKT2theSwgc28gSSBqdXN0IHJlYWxpemVkIHNvbWV0aGluZyBhYm91dCB0aGUgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24uIGBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkYCAqYWxyZWFkeSogaGFuZGxlcyBgTkxBX0JFMTZgIGFuZCBgTkxBX0JFMzJgISBBbmQgdGhlIGByYW5nZWAgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkIHJpZ2h0IGZyb20gdGhlIHN0YXJ0IHdpdGggYHJhbmdlLSZndDttaW4gPSAwOyByYW5nZS0mZ3Q7bWF4ID0gLi4uYC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIGxlc3Mgd29yayBuZWVkZWQgb24gdGhhdCBzaWRlLgoKTm93LCBJIG5lZWQgdG8gZm9jdXMgb24gaG93IGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAgYWN0dWFsbHkgZHVtcHMgcG9saWNpZXMgd2hlbiBkZWFsaW5nIHdpdGggbmV0bGluayB1c2Vyc3BhY2UgbWVzc2FnZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBjaGVja2luZyB0aGUgY2FzZSB3aGVuIHRoZSBwb2xpY3kgdHlwZSBgcHQtJmd0O3R5cGVgIGlzIGVpdGhlciBgTkxBX0JFMTZgIG9yIGBOTEFfQkUzMmAuCgpIZXJlJiMzOTtzIHdoYXQgSSBzZWU6IGl0IGNhbGxzIGBubGFfcHV0X3UzMmAgdG8gcHV0IGEgc3BlY2lmaWMgYXR0cmlidXRlLCBgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSYCwgd2l0aCB0aGUgdmFsdWUgYE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU5gLCB3aGljaCBlZmZlY3RpdmVseSBzZXRzIGEgMzItYml0IGNvbnN0YW50LCBgMWAsIGluIHRoZSBuZXRsaW5rIHNrYi4gRm9sbG93aW5nIHRoYXQsIGl0JiMzOTtzIHVzaW5nIGBubGFfcHV0X3U2NF82NGJpdGAgdG8gaGFuZGxlIHRoZSBtaW4vbWF4L21hc2sgdmFsdWVzIOKAkyBwYWRkaW5nIGhhbmRsZWQgY29ycmVjdGx5IHdpdGggYE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEYCBpcyB6ZXJvZWQgb3V0IGFzIGV4cGVjdGVkIGJ5IGBubGFfcHV0X3U2NF82NGJpdGAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgaXQgbWFrZXMgc2Vuc2UgdG8gdmVyaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmxhX3B1dF91NjRfNjRiaXRgIGFnYWluOyBjYW4mIzM5O3QgYmUgdG9vIGNhcmVmdWwuIEdvdHRhIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25sYV9wdXRfdTY0XzY0Yml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNzUxIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTM4MjI9c3RhdGljIGludCBubGFfcHV0X3N0YXR1c19pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzg3OS1cdFx0ICAgICAgIGRldmljZS1cdTAwM2VzdGF0ZS5pKSB8fFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozODgwOlx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fRURfVVVJRCxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzg4MS1cdFx0XHQgICAgIGRldmljZS1cdTAwM2VlZF91dWlkLCAwKSB8fFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozODgyOlx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQ0FQQUNJVFksXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4ODMtXHRcdFx0ICAgICBnZXRfY2FwYWNpdHkoZGV2aWNlLVx1MDAzZXZkaXNrKSwgMCkgfHxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg4NDpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX1NFTkRfQ05ULFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zODg1LVx0XHRcdCAgICAgZGV2aWNlLVx1MDAzZXNlbmRfY250LCAwKSB8fFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozODg2Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fUkVDVl9DTlQsXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4ODctXHRcdFx0ICAgICBkZXZpY2UtXHUwMDNlcmVjdl9jbnQsIDApIHx8XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM4ODg6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19SRUFEX0NOVCxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzg4OS1cdFx0XHQgICAgIGRldmljZS1cdTAwM2VyZWFkX2NudCwgMCkgfHxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg5MDpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX1dSSVRfQ05ULFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zODkxLVx0XHRcdCAgICAgZGV2aWNlLVx1MDAzZXdyaXRfY250LCAwKSB8fFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozODkyOlx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQUxfV1JJVF9DTlQsXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4OTMtXHRcdFx0ICAgICBkZXZpY2UtXHUwMDNlYWxfd3JpdF9jbnQsIDApIHx8XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM4OTQ6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19CTV9XUklUX0NOVCxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzg5NS1cdFx0XHQgICAgIGRldmljZS1cdTAwM2VibV93cml0X2NudCwgMCkgfHxcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM5MTYtXHRcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9TVEFURV9JTkZPX0RJU0tfRkxBR1MsIGRldmljZS1cdTAwM2VsZGV2LVx1MDAzZW1kLmZsYWdzKSB8fFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozOTE3Olx0XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19CSVRTX1RPVEFMLCBkcmJkX2JtX2JpdHMoZGV2aWNlKSwgMCkgfHxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MzkxODpcdFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQklUU19PT1MsXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM5MTktXHRcdFx0XHQgICAgICBkcmJkX2JtX3RvdGFsX3dlaWdodChkZXZpY2UpLCAwKSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM5MjItXHRcdCAgICBDX1BBVVNFRF9TWU5DX1QgXHUwMDNlPSBkZXZpY2UtXHUwMDNlc3RhdGUuY29ubikge1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozOTIzOlx0XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX0JJVFNfUlNfVE9UQUwsXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM5MjQtXHRcdFx0XHRcdCAgICAgIGRldmljZS1cdTAwM2Vyc190b3RhbCwgMCkgfHxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MzkyNTpcdFx0XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19CSVRTX1JTX0ZBSUxFRCxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzkyNi1cdFx0XHRcdFx0ICAgICAgZGV2aWNlLVx1MDAzZXJzX2ZhaWxlZCwgMCkpXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM9MTkwMD1pbnQgZGlza19jb25mX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZGlza19jb25mICpzKVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTE5MTQtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MTkxNTpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9ESVNLX0NPTkZfRElTS19TSVpFLCBzLVx1MDAzZWRpc2tfc2l6ZSwgMCkpXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0xOTE2LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYz0yMDk0PWludCByZXNpemVfcGFybXNfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCByZXNpemVfcGFybXMgKnMpXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjEwMC1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjIxMDE6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfUkVTSVpFX1BBUk1TX1JFU0laRV9TSVpFLCBzLVx1MDAzZXJlc2l6ZV9zaXplLCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxMDItXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jPTIxMjE9aW50IHN0YXRlX2luZm9fdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGF0ZV9pbmZvICpzKVxuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxMzEtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjEzMjpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX0NBUEFDSVRZLCBzLVx1MDAzZWNhcGFjaXR5LCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxMzMtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjEzNDpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX0VEX1VVSUQsIHMtXHUwMDNlZWRfdXVpZCwgMCkpXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yMTM1LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yMTQ0LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjIxNDU6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19CSVRTX1RPVEFMLCBzLVx1MDAzZWJpdHNfdG90YWwsIDApKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjE0Ni1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyMTQ3Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQklUU19PT1MsIHMtXHUwMDNlYml0c19vb3MsIDApKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjE0OC1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyMTQ5Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQklUU19SU19UT1RBTCwgcy1cdTAwM2ViaXRzX3JzX3RvdGFsLCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNTAtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE1MTpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX0JJVFNfUlNfRkFJTEVELCBzLVx1MDAzZWJpdHNfcnNfZmFpbGVkLCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNTItXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNTctXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE1ODpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX1NFTkRfQ05ULCBzLVx1MDAzZXNlbmRfY250LCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNTktXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2MDpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX1JFQ1ZfQ05ULCBzLVx1MDAzZXJlY3ZfY250LCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjEtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2MjpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX1JFQURfQ05ULCBzLVx1MDAzZXJlYWRfY250LCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjMtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2NDpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX1dSSVRfQ05ULCBzLVx1MDAzZXdyaXRfY250LCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjUtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2NjpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX0FMX1dSSVRfQ05ULCBzLVx1MDAzZWFsX3dyaXRfY250LCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjctXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2ODpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX0JNX1dSSVRfQ05ULCBzLVx1MDAzZWJtX3dyaXRfY250LCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjktXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jPTIxODY9aW50IHN0YXJ0X292X3Bhcm1zX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhcnRfb3ZfcGFybXMgKnMpXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjE5Mi1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjIxOTM6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBUlRfT1ZfUEFSTVNfT1ZfU1RBUlRfU0VDVE9SLCBzLVx1MDAzZW92X3N0YXJ0X3NlY3RvciwgMCkpXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yMTk0LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjIxOTU6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBUlRfT1ZfUEFSTVNfT1ZfU1RPUF9TRUNUT1IsIHMtXHUwMDNlb3Zfc3RvcF9zZWN0b3IsIDApKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjE5Ni1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM9MjM5ND1pbnQgZGV2aWNlX3N0YXRpc3RpY3NfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkZXZpY2Vfc3RhdGlzdGljcyAqcylcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yNDAwLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjQwMTpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9ERVZJQ0VfU1RBVElTVElDU19ERVZfU0laRSwgcy1cdTAwM2VkZXZfc2l6ZSwgMCkpXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yNDAyLVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjI0MDM6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfREVWSUNFX1NUQVRJU1RJQ1NfREVWX1JFQUQsIHMtXHUwMDNlZGV2X3JlYWQsIDApKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQwNC1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyNDA1Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX0RFVklDRV9TVEFUSVNUSUNTX0RFVl9XUklURSwgcy1cdTAwM2VkZXZfd3JpdGUsIDApKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQwNi1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyNDA3Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX0RFVklDRV9TVEFUSVNUSUNTX0RFVl9BTF9XUklURVMsIHMtXHUwMDNlZGV2X2FsX3dyaXRlcywgMCkpXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yNDA4LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjI0MDk6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfREVWSUNFX1NUQVRJU1RJQ1NfREVWX0JNX1dSSVRFUywgcy1cdTAwM2VkZXZfYm1fd3JpdGVzLCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0MTAtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0MjAtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjQyMTpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9ERVZJQ0VfU1RBVElTVElDU19ERVZfRVhQT1NFRF9EQVRBX1VVSUQsIHMtXHUwMDNlZGV2X2V4cG9zZWRfZGF0YV91dWlkLCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0MjItXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjQyMzpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9ERVZJQ0VfU1RBVElTVElDU19ERVZfQ1VSUkVOVF9VVUlELCBzLVx1MDAzZWRldl9jdXJyZW50X3V1aWQsIDApKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQyNC1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM9MjQ1OT1pbnQgcGVlcl9kZXZpY2Vfc3RhdGlzdGljc190b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBlZXJfZGV2aWNlX3N0YXRpc3RpY3MgKnMpXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQ2NS1cbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjI0NjY6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfUEVFUl9ERVZJQ0VfU1RBVElTVElDU19QRUVSX0RFVl9SRUNFSVZFRCwgcy1cdTAwM2VwZWVyX2Rldl9yZWNlaXZlZCwgMCkpXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yNDY3LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjI0Njg6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfUEVFUl9ERVZJQ0VfU1RBVElTVElDU19QRUVSX0RFVl9TRU5ULCBzLVx1MDAzZXBlZXJfZGV2X3NlbnQsIDApKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQ2OS1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQ3My1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyNDc0Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1BFRVJfREVWSUNFX1NUQVRJU1RJQ1NfUEVFUl9ERVZfT1VUX09GX1NZTkMsIHMtXHUwMDNlcGVlcl9kZXZfb3V0X29mX3N5bmMsIDApKVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQ3NS1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyNDc2Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1BFRVJfREVWSUNFX1NUQVRJU1RJQ1NfUEVFUl9ERVZfUkVTWU5DX0ZBSUxFRCwgcy1cdTAwM2VwZWVyX2Rldl9yZXN5bmNfZmFpbGVkLCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0NzctXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjQ3ODpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9QRUVSX0RFVklDRV9TVEFUSVNUSUNTX1BFRVJfREVWX0JJVE1BUF9VVUlELCBzLVx1MDAzZXBlZXJfZGV2X2JpdG1hcF91dWlkLCAwKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0NzktXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9MjE4PXN0YXRpYyBpbnQgX3JkbWFfbmxfcHV0X2RyaXZlcl91NjQoc3RydWN0IHNrX2J1ZmYgKm1zZywgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTIyMy1cdFx0cmV0dXJuIC1FTVNHU0laRTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MjI0Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX0RSSVZFUl9VNjQsIHZhbHVlLFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yMjUtXHRcdFx0ICAgICAgUkRNQV9OTERFVl9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0yOTA9c3RhdGljIGludCBmaWxsX2Rldl9pbmZvKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTMwMi1cdEJVSUxEX0JVR19PTihzaXplb2YoZGV2aWNlLVx1MDAzZWF0dHJzLmRldmljZV9jYXBfZmxhZ3MpICE9IHNpemVvZih1NjQpKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MzAzOlx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX0NBUF9GTEFHUyxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzA0LVx0XHRcdCAgICAgIGRldmljZS1cdTAwM2VhdHRycy5kZXZpY2VfY2FwX2ZsYWdzLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzEyLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzozMTM6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfTk9ERV9HVUlELFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0zMTQtXHRcdFx0ICAgICAgYmU2NF90b19jcHUoZGV2aWNlLVx1MDAzZW5vZGVfZ3VpZCksXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0zMTYtXHRcdHJldHVybiAtRU1TR1NJWkU7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjMxNzpcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9TWVNfSU1BR0VfR1VJRCxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzE4LVx0XHRcdCAgICAgIGJlNjRfdG9fY3B1KGRldmljZS1cdTAwM2VhdHRycy5zeXNfaW1hZ2VfZ3VpZCksXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0zNTk9c3RhdGljIGludCBmaWxsX3BvcnRfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzgyLVx0XHRcdCgodTY0KWF0dHIucG9ydF9jYXBfZmxhZ3MyIFx1MDAzY1x1MDAzYyAzMik7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjM4MzpcdFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX0NBUF9GTEFHUyxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzg0LVx0XHRcdFx0ICAgICAgY2FwX2ZsYWdzLCBSRE1BX05MREVWX0FUVFJfUEFEKSlcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzg1LVx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjM4NjpcdFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX1NVQk5FVF9QUkVGSVgsXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTM4Ny1cdFx0XHRcdCAgICAgIGF0dHIuc3VibmV0X3ByZWZpeCwgUkRNQV9OTERFVl9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz00MTY9c3RhdGljIGludCBmaWxsX3Jlc19pbmZvX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy00MjctXHRcdGdvdG8gZXJyO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzo0Mjg6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfUkVTX1NVTU1BUllfRU5UUllfQ1VSUiwgY3VycixcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtNDI5LVx0XHRcdCAgICAgIFJETUFfTkxERVZfQVRUUl9QQUQpKVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy00MzAtXHRcdGdvdG8gZXJyO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzo0MzE6XHRpZiAobWF4IFx1MDAyNlx1MDAyNiBubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9SRVNfU1VNTUFSWV9FTlRSWV9NQVgsXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTQzMi1cdFx0XHRcdCAgICAgbWF4LCBSRE1BX05MREVWX0FUVFJfUEFEKSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jPTY4MT1zdGF0aWMgaW50IGZpbGxfcmVzX2NxX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIGJvb2wgaGFzX2NhcF9uZXRfYWRtaW4sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy02ODgtXHRcdHJldHVybiAtRU1TR1NJWkU7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjY4OTpcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9SRVNfVVNFQ05ULFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy02OTAtXHRcdFx0ICAgICAgYXRvbWljX3JlYWQoXHUwMDI2Y3EtXHUwMDNldXNlY250KSwgUkRNQV9OTERFVl9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz03MjY9c3RhdGljIGludCBmaWxsX3Jlc19tcl9lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBib29sIGhhc19jYXBfbmV0X2FkbWluLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtNzM4LVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzo3Mzk6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfUkVTX01STEVOLCBtci1cdTAwM2VsZW5ndGgsXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTc0MC1cdFx0XHQgICAgICBSRE1BX05MREVWX0FUVFJfUEFEKSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jPTc3Mj1zdGF0aWMgaW50IGZpbGxfcmVzX3BkX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIGJvb2wgaGFzX2NhcF9uZXRfYWRtaW4sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy03ODUtXHR9XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjc4NjpcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9SRVNfVVNFQ05ULFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy03ODctXHRcdFx0ICAgICAgYXRvbWljX3JlYWQoXHUwMDI2cGQtXHUwMDNldXNlY250KSwgUkRNQV9OTERFVl9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0xMDI2PWludCByZG1hX25sX3N0YXRfaHdjb3VudGVyX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xMDM3LVx0XHRnb3RvIGVycjtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MTAzODpcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9TVEFUX0hXQ09VTlRFUl9FTlRSWV9WQUxVRSxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMTAzOS1cdFx0XHQgICAgICB2YWx1ZSwgUkRNQV9OTERFVl9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0xOTA2PXN0YXRpYyBpbnQgbmxkZXZfZ2V0X2NoYXJkZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xOTYyLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzoxOTYzOlx0ZXJyID0gbmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfQ0hBUkRFVixcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMTk2NC1cdFx0XHRcdGh1Z2VfZW5jb2RlX2RldihkYXRhLmNkZXYtXHUwMDNlZGV2dCksXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xOTY3LVx0XHRnb3RvIG91dF9kYXRhO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzoxOTY4Olx0ZXJyID0gbmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfQ0hBUkRFVl9BQkksIGRhdGEuYWJpLFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xOTY5LVx0XHRcdFx0UkRNQV9OTERFVl9BVFRSX1BBRCk7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0yNzIwPXN0YXRpYyBpbnQgZmlsbF9mcm1yX3Bvb2xfa2V5KHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBpYl9mcm1yX2tleSAqa2V5KVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjczMi1cdFx0Z290byBlcnI7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjI3MzM6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfRlJNUl9QT09MX0tFWV9WRU5ET1JfS0VZLFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzM0LVx0XHRcdCAgICAgIGtleS1cdTAwM2V2ZW5kb3Jfa2V5LCBSRE1BX05MREVWX0FUVFJfUEFEKSlcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjczNS1cdFx0Z290byBlcnI7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjI3MzY6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfRlJNUl9QT09MX0tFWV9OVU1fRE1BX0JMT0NLUyxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjczNy1cdFx0XHQgICAgICBrZXktXHUwMDNlbnVtX2RtYV9ibG9ja3MsIFJETUFfTkxERVZfQVRUUl9QQUQpKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjc0MC1cdGlmIChrZXktXHUwMDNla2VybmVsX3ZlbmRvcl9rZXkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjI3NDE6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQobXNnLFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzQyLVx0XHRcdCAgICAgIFJETUFfTkxERVZfQVRUUl9GUk1SX1BPT0xfS0VZX0tFUk5FTF9WRU5ET1JfS0VZLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9Mjc1Mz1zdGF0aWMgaW50IGZpbGxfZnJtcl9wb29sX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBpYl9mcm1yX3Bvb2wgKnBvb2wpXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzYxLVx0XHRnb3RvIGVycl91bmxvY2s7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjI3NjI6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfRlJNUl9QT09MX01BWF9JTl9VU0UsXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTI3NjMtXHRcdFx0ICAgICAgcG9vbC1cdTAwM2VtYXhfaW5fdXNlLCBSRE1BX05MREVWX0FUVFJfUEFEKSlcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjc2NC1cdFx0Z290byBlcnJfdW5sb2NrO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzoyNzY1Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX0ZSTVJfUE9PTF9JTl9VU0UsXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTI3NjYtXHRcdFx0ICAgICAgcG9vbC1cdTAwM2Vpbl91c2UsIFJETUFfTkxERVZfQVRUUl9QQUQpKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYz0zMDE0PWludCBib25kXzNhZF9zdGF0c19maWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kXzNhZF9zdGF0cyAqc3RhdHMpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwMTgtXHR2YWwgPSBhdG9taWM2NF9yZWFkKFx1MDAyNnN0YXRzLVx1MDAzZWxhY3BkdV9yeCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MzAxOTpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEJPTkRfM0FEX1NUQVRfTEFDUERVX1JYLCB2YWwsXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzAyMC1cdFx0XHQgICAgICBCT05EXzNBRF9TVEFUX1BBRCkpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwMjItXHR2YWwgPSBhdG9taWM2NF9yZWFkKFx1MDAyNnN0YXRzLVx1MDAzZWxhY3BkdV90eCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MzAyMzpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEJPTkRfM0FEX1NUQVRfTEFDUERVX1RYLCB2YWwsXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzAyNC1cdFx0XHQgICAgICBCT05EXzNBRF9TVEFUX1BBRCkpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwMjYtXHR2YWwgPSBhdG9taWM2NF9yZWFkKFx1MDAyNnN0YXRzLVx1MDAzZWxhY3BkdV91bmtub3duX3J4KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzozMDI3Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgQk9ORF8zQURfU1RBVF9MQUNQRFVfVU5LTk9XTl9SWCwgdmFsLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwMjgtXHRcdFx0ICAgICAgQk9ORF8zQURfU1RBVF9QQUQpKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDMwLVx0dmFsID0gYXRvbWljNjRfcmVhZChcdTAwMjZzdGF0cy1cdTAwM2VsYWNwZHVfaWxsZWdhbF9yeCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MzAzMTpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEJPTkRfM0FEX1NUQVRfTEFDUERVX0lMTEVHQUxfUlgsIHZhbCxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDMyLVx0XHRcdCAgICAgIEJPTkRfM0FEX1NUQVRfUEFEKSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzAzNS1cdHZhbCA9IGF0b21pYzY0X3JlYWQoXHUwMDI2c3RhdHMtXHUwMDNlbWFya2VyX3J4KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzozMDM2Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgQk9ORF8zQURfU1RBVF9NQVJLRVJfUlgsIHZhbCxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDM3LVx0XHRcdCAgICAgIEJPTkRfM0FEX1NUQVRfUEFEKSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzAzOS1cdHZhbCA9IGF0b21pYzY0X3JlYWQoXHUwMDI2c3RhdHMtXHUwMDNlbWFya2VyX3R4KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzozMDQwOlx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgQk9ORF8zQURfU1RBVF9NQVJLRVJfVFgsIHZhbCxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDQxLVx0XHRcdCAgICAgIEJPTkRfM0FEX1NUQVRfUEFEKSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA0My1cdHZhbCA9IGF0b21pYzY0X3JlYWQoXHUwMDI2c3RhdHMtXHUwMDNlbWFya2VyX3Jlc3BfcngpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjMwNDQ6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBCT05EXzNBRF9TVEFUX01BUktFUl9SRVNQX1JYLCB2YWwsXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA0NS1cdFx0XHQgICAgICBCT05EXzNBRF9TVEFUX1BBRCkpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwNDctXHR2YWwgPSBhdG9taWM2NF9yZWFkKFx1MDAyNnN0YXRzLVx1MDAzZW1hcmtlcl9yZXNwX3R4KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzozMDQ4Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgQk9ORF8zQURfU1RBVF9NQVJLRVJfUkVTUF9UWCwgdmFsLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwNDktXHRcdFx0ICAgICAgQk9ORF8zQURfU1RBVF9QQUQpKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDUxLVx0dmFsID0gYXRvbWljNjRfcmVhZChcdTAwMjZzdGF0cy1cdTAwM2VtYXJrZXJfdW5rbm93bl9yeCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MzA1MjpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEJPTkRfM0FEX1NUQVRfTUFSS0VSX1VOS05PV05fUlgsIHZhbCxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDUzLVx0XHRcdCAgICAgIEJPTkRfM0FEX1NUQVRfUEFEKSlcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0yMTgwPXN0YXRpYyBpbnQgZ3RwX2dlbmxfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBzbmRfcG9ydGlkLCB1MzIgc25kX3NlcSxcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0yMjE4LVx0Y2FzZSBHVFBfVjA6XG5kcml2ZXJzL25ldC9ndHAuYzoyMjE5Olx0XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBHVFBBX1RJRCwgcGN0eC1cdTAwM2V1LnYwLnRpZCwgR1RQQV9QQUQpIHx8XG5kcml2ZXJzL25ldC9ndHAuYy0yMjIwLVx0XHQgICAgbmxhX3B1dF91MTYoc2tiLCBHVFBBX0ZMT1csIHBjdHgtXHUwMDNldS52MC5mbG93KSlcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz0xNTU1PXN0YXRpYyBpbnQgbmxhX3B1dF9zY2koc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBzY2lfdCB2YWx1ZSxcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0xNTU3LXtcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjE1NTg6XHRyZXR1cm4gbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBhdHRydHlwZSwgKF9fZm9yY2UgdTY0KXZhbHVlLCBwYWRhdHRyKTtcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTE1NTktfVxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jPTI4NjE9c3RhdGljIGludCBjb3B5X3J4X3NjX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtYWNzZWNfcnhfc2Nfc3RhdHMgKnN1bSlcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NjIte1xuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mjg2MzpcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfSU5fT0NURVRTX1ZBTElEQVRFRCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NjQtXHRcdFx0ICAgICAgc3VtLVx1MDAzZUluT2N0ZXRzVmFsaWRhdGVkLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjg2NS1cdFx0XHQgICAgICBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX1BBRCkgfHxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4NjY6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX0lOX09DVEVUU19ERUNSWVBURUQsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODY3LVx0XHRcdCAgICAgIHN1bS1cdTAwM2VJbk9jdGV0c0RlY3J5cHRlZCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NjgtXHRcdFx0ICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQpIHx8XG5kcml2ZXJzL25ldC9tYWNzZWMuYzoyODY5Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX1VOQ0hFQ0tFRCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NzAtXHRcdFx0ICAgICAgc3VtLVx1MDAzZUluUGt0c1VuY2hlY2tlZCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NzEtXHRcdFx0ICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQpIHx8XG5kcml2ZXJzL25ldC9tYWNzZWMuYzoyODcyOlx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX0RFTEFZRUQsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODczLVx0XHRcdCAgICAgIHN1bS1cdTAwM2VJblBrdHNEZWxheWVkLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjg3NC1cdFx0XHQgICAgICBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX1BBRCkgfHxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4NzU6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX0lOX1BLVFNfT0ssXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODc2LVx0XHRcdCAgICAgIHN1bS1cdTAwM2VJblBrdHNPSyxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NzctXHRcdFx0ICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQpIHx8XG5kcml2ZXJzL25ldC9tYWNzZWMuYzoyODc4Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX0lOVkFMSUQsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODc5LVx0XHRcdCAgICAgIHN1bS1cdTAwM2VJblBrdHNJbnZhbGlkLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjg4MC1cdFx0XHQgICAgICBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX1BBRCkgfHxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4ODE6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX0lOX1BLVFNfTEFURSxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4ODItXHRcdFx0ICAgICAgc3VtLVx1MDAzZUluUGt0c0xhdGUsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODgzLVx0XHRcdCAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mjg4NDpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfSU5fUEtUU19OT1RfVkFMSUQsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODg1LVx0XHRcdCAgICAgIHN1bS1cdTAwM2VJblBrdHNOb3RWYWxpZCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4ODYtXHRcdFx0ICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQpIHx8XG5kcml2ZXJzL25ldC9tYWNzZWMuYzoyODg3Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX05PVF9VU0lOR19TQSxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4ODgtXHRcdFx0ICAgICAgc3VtLVx1MDAzZUluUGt0c05vdFVzaW5nU0EsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODg5LVx0XHRcdCAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mjg5MDpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfSU5fUEtUU19VTlVTRURfU0EsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODkxLVx0XHRcdCAgICAgIHN1bS1cdTAwM2VJblBrdHNVbnVzZWRTQSxcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz0yOTM2PXN0YXRpYyBpbnQgY29weV90eF9zY19zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWFjc2VjX3R4X3NjX3N0YXRzICpzdW0pXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yOTM3LXtcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI5Mzg6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfVFhTQ19TVEFUU19BVFRSX09VVF9QS1RTX1BST1RFQ1RFRCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI5MzktXHRcdFx0ICAgICAgc3VtLVx1MDAzZU91dFBrdHNQcm90ZWN0ZWQsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yOTQwLVx0XHRcdCAgICAgIE1BQ1NFQ19UWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mjk0MTpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19UWFNDX1NUQVRTX0FUVFJfT1VUX1BLVFNfRU5DUllQVEVELFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjk0Mi1cdFx0XHQgICAgICBzdW0tXHUwMDNlT3V0UGt0c0VuY3J5cHRlZCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI5NDMtXHRcdFx0ICAgICAgTUFDU0VDX1RYU0NfU1RBVFNfQVRUUl9QQUQpIHx8XG5kcml2ZXJzL25ldC9tYWNzZWMuYzoyOTQ0Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1RYU0NfU1RBVFNfQVRUUl9PVVRfT0NURVRTX1BST1RFQ1RFRCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI5NDUtXHRcdFx0ICAgICAgc3VtLVx1MDAzZU91dE9jdGV0c1Byb3RlY3RlZCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI5NDYtXHRcdFx0ICAgICAgTUFDU0VDX1RYU0NfU1RBVFNfQVRUUl9QQUQpIHx8XG5kcml2ZXJzL25ldC9tYWNzZWMuYzoyOTQ3Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1RYU0NfU1RBVFNfQVRUUl9PVVRfT0NURVRTX0VOQ1JZUFRFRCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI5NDgtXHRcdFx0ICAgICAgc3VtLVx1MDAzZU91dE9jdGV0c0VuY3J5cHRlZCxcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz0yOTk2PXN0YXRpYyBpbnQgY29weV9zZWN5X3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtYWNzZWNfZGV2X3N0YXRzICpzdW0pXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yOTk3LXtcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI5OTg6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX09VVF9QS1RTX1VOVEFHR0VELFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjk5OS1cdFx0XHQgICAgICBzdW0tXHUwMDNlT3V0UGt0c1VudGFnZ2VkLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAwMC1cdFx0XHQgICAgICBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX1BBRCkgfHxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjMwMDE6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX0lOX1BLVFNfVU5UQUdHRUQsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDAyLVx0XHRcdCAgICAgIHN1bS1cdTAwM2VJblBrdHNVbnRhZ2dlZCxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTMwMDMtXHRcdFx0ICAgICAgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9QQUQpIHx8XG5kcml2ZXJzL25ldC9tYWNzZWMuYzozMDA0Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9PVVRfUEtUU19UT09fTE9ORyxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTMwMDUtXHRcdFx0ICAgICAgc3VtLVx1MDAzZU91dFBrdHNUb29Mb25nLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAwNi1cdFx0XHQgICAgICBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX1BBRCkgfHxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjMwMDc6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX0lOX1BLVFNfTk9fVEFHLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAwOC1cdFx0XHQgICAgICBzdW0tXHUwMDNlSW5Qa3RzTm9UYWcsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDA5LVx0XHRcdCAgICAgIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfUEFEKSB8fFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6MzAxMDpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfSU5fUEtUU19CQURfVEFHLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAxMS1cdFx0XHQgICAgICBzdW0tXHUwMDNlSW5Qa3RzQmFkVGFnLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAxMi1cdFx0XHQgICAgICBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX1BBRCkgfHxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjMwMTM6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX0lOX1BLVFNfVU5LTk9XTl9TQ0ksXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDE0LVx0XHRcdCAgICAgIHN1bS1cdTAwM2VJblBrdHNVbmtub3duU0NJLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAxNS1cdFx0XHQgICAgICBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX1BBRCkgfHxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjMwMTY6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX0lOX1BLVFNfTk9fU0NJLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAxNy1cdFx0XHQgICAgICBzdW0tXHUwMDNlSW5Qa3RzTm9TQ0ksXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDE4LVx0XHRcdCAgICAgIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfUEFEKSB8fFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6MzAxOTpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfSU5fUEtUU19PVkVSUlVOLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAyMC1cdFx0XHQgICAgICBzdW0tXHUwMDNlSW5Qa3RzT3ZlcnJ1bixcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz0zMDI3PXN0YXRpYyBpbnQgbmxhX3B1dF9zZWN5KHN0cnVjdCBtYWNzZWNfc2VjeSAqc2VjeSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDQ5LVx0XHRcdE1BQ1NFQ19TRUNZX0FUVFJfUEFEKSB8fFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6MzA1MDpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19TRUNZX0FUVFJfQ0lQSEVSX1NVSVRFLFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzA1MS1cdFx0XHQgICAgICBjc2lkLCBNQUNTRUNfU0VDWV9BVFRSX1BBRCkgfHxcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz00Mzg3PXN0YXRpYyBpbnQgbWFjc2VjX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jLTQ0MTItXHQgICAgbmxhX3B1dF91OChza2IsIElGTEFfTUFDU0VDX0lDVl9MRU4sIHNlY3ktXHUwMDNlaWN2X2xlbikgfHxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjQ0MTM6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBJRkxBX01BQ1NFQ19DSVBIRVJfU1VJVEUsXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDE0LVx0XHRcdCAgICAgIGNzaWQsIElGTEFfTUFDU0VDX1BBRCkgfHxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz0yMDk9c3RhdGljIGludCBfX3ZuaWZpbHRlcl9lbnRyeV9maWxsX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjE5LVx0dnhsYW5fdm5pZmlsdGVyX3N0YXRzX2dldCh2YmVnaW4sIFx1MDAyNnZzdGF0cyk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzoyMjA6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUlhfQllURVMsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0yMjEtXHRcdFx0ICAgICAgdnN0YXRzLnJ4X2J5dGVzLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUEFEKSB8fFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6MjIyOlx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1JYX1BLVFMsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0yMjMtXHRcdFx0ICAgICAgdnN0YXRzLnJ4X3BhY2tldHMsIFZOSUZJTFRFUl9FTlRSWV9TVEFUU19QQUQpIHx8XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzoyMjQ6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUlhfRFJPUFMsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0yMjUtXHRcdFx0ICAgICAgdnN0YXRzLnJ4X2Ryb3BzLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUEFEKSB8fFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6MjI2Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1JYX0VSUk9SUyxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTIyNy1cdFx0XHQgICAgICB2c3RhdHMucnhfZXJyb3JzLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUEFEKSB8fFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6MjI4Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1RYX0JZVEVTLFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjI5LVx0XHRcdCAgICAgIHZzdGF0cy50eF9ieXRlcywgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1BBRCkgfHxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjIzMDpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIFZOSUZJTFRFUl9FTlRSWV9TVEFUU19UWF9QS1RTLFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjMxLVx0XHRcdCAgICAgIHZzdGF0cy50eF9wYWNrZXRzLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUEFEKSB8fFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6MjMyOlx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1RYX0RST1BTLFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjMzLVx0XHRcdCAgICAgIHZzdGF0cy50eF9kcm9wcywgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1BBRCkgfHxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjIzNDpcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIFZOSUZJTFRFUl9FTlRSWV9TVEFUU19UWF9FUlJPUlMsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0yMzUtXHRcdFx0ICAgICAgdnN0YXRzLnR4X2Vycm9ycywgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1BBRCkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYz03Nz1nZXRfcGVlcihzdHJ1Y3Qgd2dfcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGR1bXBfY3R4ICpjdHgpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy0xMTEtXHRcdFx0XHRwZWVyLVx1MDAzZXBlcnNpc3RlbnRfa2VlcGFsaXZlX2ludGVydmFsKSB8fFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzoxMTI6XHRcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIFdHUEVFUl9BX1RYX0JZVEVTLCBwZWVyLVx1MDAzZXR4X2J5dGVzLFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYy0xMTMtXHRcdFx0XHQgICAgICBXR1BFRVJfQV9VTlNQRUMpIHx8XG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjExNDpcdFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgV0dQRUVSX0FfUlhfQllURVMsIHBlZXItXHUwMDNlcnhfYnl0ZXMsXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTExNS1cdFx0XHRcdCAgICAgIFdHUEVFUl9BX1VOU1BFQykgfHxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jPTI4Njc9c3RhdGljIGludCB3aWxfcmZfc2VjdG9yX2dldF9jZmcoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jLTI5NDYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jOjI5NDc6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBRQ0FfQVRUUl9UU0YsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jLTI5NDgtXHRcdFx0ICAgICAgbGU2NF90b19jcHUocmVwbHkuZXZ0LnRzZiksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuYz0zMTAwPXN0YXRpYyBpbnQgd2lsX3JmX3NlY3Rvcl9nZXRfc2VsZWN0ZWQoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jLTMxNzMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jOjMxNzQ6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBRQ0FfQVRUUl9UU0YsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jLTMxNzUtXHRcdFx0ICAgICAgbGU2NF90b19jcHUocmVwbHkuZXZ0LnRzZiksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jPTUzNz1tdDc2X3Rlc3Rtb2RlX2R1bXBfc3RhdHMoc3RydWN0IG10NzZfcGh5ICpwaHksIHN0cnVjdCBza19idWZmICptc2cpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jLTU2MC1cdCAgICBubGFfcHV0X3UzMihtc2csIE1UNzZfVE1fU1RBVFNfQVRUUl9UWF9ET05FLCB0ZC1cdTAwM2V0eF9kb25lKSB8fFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jOjU2MTpcdCAgICBubGFfcHV0X3U2NF82NGJpdChtc2csIE1UNzZfVE1fU1RBVFNfQVRUUl9SWF9QQUNLRVRTLCByeF9wYWNrZXRzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jLTU2Mi1cdFx0XHQgICAgICBNVDc2X1RNX1NUQVRTX0FUVFJfUEFEKSB8fFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jOjU2MzpcdCAgICBubGFfcHV0X3U2NF82NGJpdChtc2csIE1UNzZfVE1fU1RBVFNfQVRUUl9SWF9GQ1NfRVJST1IsIHJ4X2Zjc19lcnJvcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdGVzdG1vZGUuYy01NjQtXHRcdFx0ICAgICAgTVQ3Nl9UTV9TVEFUU19BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MTY0Nj1zdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV90eF9mcmFtZV9ubChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNzM0LVx0aW5mby1cdTAwM2VyYXRlX2RyaXZlcl9kYXRhWzBdID0gKHZvaWQgKiljb29raWU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNzM1Olx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgSFdTSU1fQVRUUl9DT09LSUUsIGNvb2tpZSwgSFdTSU1fQVRUUl9QQUQpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMTczNi1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MzU5Nz1zdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX3NlbmRfcG1zcl9mdG1fcmVxdWVzdF9wZWVyKHN0cnVjdCBza19idWZmICptc2csXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzY3OC1cdGlmIChyZXF1ZXN0LVx1MDAzZWluZ3Jlc3NfZGlzdGFuY2UgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzozNjc5Olx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgTkw4MDIxMV9QTVNSX0ZUTV9SRVFfQVRUUl9JTkdSRVNTLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzY4MC1cdFx0XHQgICAgICByZXF1ZXN0LVx1MDAzZWluZ3Jlc3NfZGlzdGFuY2UsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzY4NC1cdGlmIChyZXF1ZXN0LVx1MDAzZWVncmVzc19kaXN0YW5jZSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jOjM2ODU6XHQgICAgbmxhX3B1dF91NjRfNjRiaXQobXNnLCBOTDgwMjExX1BNU1JfRlRNX1JFUV9BVFRSX0VHUkVTUyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jLTM2ODYtXHRcdFx0ICAgICAgcmVxdWVzdC1cdTAwM2VlZ3Jlc3NfZGlzdGFuY2UsXG4tLVxuZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdXNlci5jPTI4NTU9c3RhdGljIGludCB0Y211X3NlbmRfZGV2X3NpemVfZXZlbnQoc3RydWN0IHRjbXVfZGV2ICp1ZGV2LCB1NjQgc2l6ZSlcbi0tXG5kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV91c2VyLmMtMjg2NC1cdFx0cmV0dXJuIHJldDtcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VzZXIuYzoyODY1Olx0cmV0ID0gbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBUQ01VX0FUVFJfREVWX1NJWkUsXG5kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV91c2VyLmMtMjg2Ni1cdFx0XHRcdHNpemUsIFRDTVVfQVRUUl9QQUQpO1xuLS1cbmRyaXZlcnMvdmRwYS9tbHg1L25ldC9tbHg1X3ZuZXQuYz0zNTUzPXN0YXRpYyBpbnQgbWx4NV92ZHBhX2dldF92ZW5kb3JfdnFfc3RhdHMoc3RydWN0IHZkcGFfZGV2aWNlICp2ZGV2LCB1MTYgaWR4LFxuLS1cbmRyaXZlcnMvdmRwYS9tbHg1L25ldC9tbHg1X3ZuZXQuYy0zNTkwLVxuZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jOjM1OTE6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX1ZFTkRPUl9BVFRSX1ZBTFVFLCByZWNlaXZlZF9kZXNjLFxuZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jLTM1OTItXHRcdFx0ICAgICAgVkRQQV9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jLTM1OTctXG5kcml2ZXJzL3ZkcGEvbWx4NS9uZXQvbWx4NV92bmV0LmM6MzU5ODpcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfVkVORE9SX0FUVFJfVkFMVUUsIGNvbXBsZXRlZF9kZXNjLFxuZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jLTM1OTktXHRcdFx0ICAgICAgVkRQQV9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy92ZHBhL3ZkcGEuYz00NTA9c3RhdGljIGludCB2ZHBhX21nbXRkZXZfZmlsbChjb25zdCBzdHJ1Y3QgdmRwYV9tZ210X2RldiAqbWRldiwgc3RydWN0IHNrX2J1ZmYgKm1zZyxcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTQ2Mi1cbmRyaXZlcnMvdmRwYS92ZHBhLmM6NDYzOlx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX01HTVRERVZfU1VQUE9SVEVEX0NMQVNTRVMsXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTQ2NC1cdFx0XHQgICAgICB2ZHBhX21nbXRkZXZfZ2V0X2NsYXNzZXMobWRldiwgTlVMTCksXG4tLVxuZHJpdmVycy92ZHBhL3ZkcGEuYy00NzMtXHR9XG5kcml2ZXJzL3ZkcGEvdmRwYS5jOjQ3NDpcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfU1VQUE9SVEVEX0ZFQVRVUkVTLFxuZHJpdmVycy92ZHBhL3ZkcGEuYy00NzUtXHRcdFx0ICAgICAgbWRldi1cdTAwM2VzdXBwb3J0ZWRfZmVhdHVyZXMsIFZEUEFfQVRUUl9QQUQpKSB7XG4tLVxuZHJpdmVycy92ZHBhL3ZkcGEuYz04ODY9c3RhdGljIGludCB2ZHBhX2Rldl9uZXRfY29uZmlnX2ZpbGwoc3RydWN0IHZkcGFfZGV2aWNlICp2ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqbXNnKVxuLS1cbmRyaXZlcnMvdmRwYS92ZHBhLmMtODk0LVxuZHJpdmVycy92ZHBhL3ZkcGEuYzo4OTU6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX0ZFQVRVUkVTLCBmZWF0dXJlc19kZXZpY2UsXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTg5Ni1cdFx0XHQgICAgICBWRFBBX0FUVFJfUEFEKSlcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYS5jPTkxMj12ZHBhX2Rldl9ibGtfY2FwYWNpdHlfY29uZmlnX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTkxOC1cbmRyaXZlcnMvdmRwYS92ZHBhLmM6OTE5Olx0cmV0dXJuIG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9CTEtfQ0ZHX0NBUEFDSVRZLFxuZHJpdmVycy92ZHBhL3ZkcGEuYy05MjAtXHRcdFx0XHQgdmFsX3U2NCwgVkRQQV9BVFRSX1BBRCk7XG4tLVxuZHJpdmVycy92ZHBhL3ZkcGEuYz0xMDczPXN0YXRpYyBpbnQgdmRwYV9kZXZfYmxrX2NvbmZpZ19maWxsKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTEwODItXG5kcml2ZXJzL3ZkcGEvdmRwYS5jOjEwODM6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX0ZFQVRVUkVTLCBmZWF0dXJlc19kZXZpY2UsXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTEwODQtXHRcdFx0ICAgICAgVkRQQV9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy92ZHBhL3ZkcGEuYz0xMTIxPXZkcGFfZGV2X2NvbmZpZ19maWxsKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRldiwgc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTExNTItXHRcdGZlYXR1cmVzX2RyaXZlciA9IHZkZXYtXHUwMDNlY29uZmlnLVx1MDAzZWdldF9kcml2ZXJfZmVhdHVyZXModmRldik7XG5kcml2ZXJzL3ZkcGEvdmRwYS5jOjExNTM6XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfTkVHT1RJQVRFRF9GRUFUVVJFUywgZmVhdHVyZXNfZHJpdmVyLFxuZHJpdmVycy92ZHBhL3ZkcGEuYy0xMTU0LVx0XHRcdFx0ICAgICAgVkRQQV9BVFRSX1BBRCkpIHtcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYS5jPTExODU9c3RhdGljIGludCB2ZHBhX2ZpbGxfc3RhdHNfcmVjKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRldiwgc3RydWN0IHNrX2J1ZmYgKm1zZyxcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTEyMDAtXHRmZWF0dXJlcyA9IHZkZXYtXHUwMDNlY29uZmlnLVx1MDAzZWdldF9kcml2ZXJfZmVhdHVyZXModmRldik7XG5kcml2ZXJzL3ZkcGEvdmRwYS5jOjEyMDE6XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX05FR09USUFURURfRkVBVFVSRVMsXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTEyMDItXHRcdFx0ICAgICAgZmVhdHVyZXMsIFZEUEFfQVRUUl9QQUQpKVxuLS1cbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYz0yODU9c3RhdGljIGludCB2ZHBhc2ltX25ldF9nZXRfc3RhdHMoc3RydWN0IHZkcGFzaW0gKnZkcGFzaW0sIHUxNiBpZHgsXG4tLVxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMwOS1cdFx0XHRicmVhaztcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYzozMTA6XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfVkVORE9SX0FUVFJfVkFMVUUsXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzExLVx0XHRcdFx0ICAgICAgcnhfcGt0cywgVkRQQV9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMxNS1cdFx0XHRicmVhaztcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYzozMTY6XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfVkVORE9SX0FUVFJfVkFMVUUsXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzE3LVx0XHRcdFx0ICAgICAgcnhfYnl0ZXMsIFZEUEFfQVRUUl9QQUQpKVxuLS1cbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zMjEtXHRcdFx0YnJlYWs7XG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmM6MzIyOlx0XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX1ZFTkRPUl9BVFRSX1ZBTFVFLFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMyMy1cdFx0XHRcdCAgICAgIHJ4X2Vycm9ycywgVkRQQV9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMyNy1cdFx0XHRicmVhaztcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYzozMjg6XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfVkVORE9SX0FUVFJfVkFMVUUsXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzI5LVx0XHRcdFx0ICAgICAgcnhfb3ZlcnJ1bnMsIFZEUEFfQVRUUl9QQUQpKVxuLS1cbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zMzMtXHRcdFx0YnJlYWs7XG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmM6MzM0Olx0XHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX1ZFTkRPUl9BVFRSX1ZBTFVFLFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMzNS1cdFx0XHRcdCAgICAgIHJ4X2Ryb3BzLCBWRFBBX0FUVFJfUEFEKSlcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzUwLVx0XHRcdGJyZWFrO1xuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jOjM1MTpcdFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9WRU5ET1JfQVRUUl9WQUxVRSxcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zNTItXHRcdFx0XHQgICAgICB0eF9wa3RzLCBWRFBBX0FUVFJfUEFEKSlcbi0tXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzU2LVx0XHRcdGJyZWFrO1xuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jOjM1NzpcdFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9WRU5ET1JfQVRUUl9WQUxVRSxcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zNTgtXHRcdFx0XHQgICAgICB0eF9ieXRlcywgVkRQQV9BVFRSX1BBRCkpXG4tLVxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTM2Mi1cdFx0XHRicmVhaztcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYzozNjM6XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfVkVORE9SX0FUVFJfVkFMVUUsXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzY0LVx0XHRcdFx0ICAgICAgdHhfZXJyb3JzLCBWRFBBX0FUVFJfUEFEKSlcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYwNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0bGluayBQb2xpY3kgRHVtcCBmb3IgQmlnLUVuZGlhbiBBdHRyaWJ1dGUgU3VwcG9ydCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgcGF0Y2ggaW50ZWdyYXRlcyBiaWctZW5kaWFuIGF0dHJpYnV0ZXMgKGBOTEFfQkUxNmAgYW5kIGBOTEFfQkUzMmApIGludG8gdGhlIG5ldGxpbmsgcG9saWN5IGR1bXAgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoKWAgY2FsbGVkIGJ5IGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlKClgLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaG93IG5ldGxpbmsgcG9saWNpZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSBnZW5lcmljIG5ldGxpbmsgb3IgcnRuZXRsaW5rIHBvbGljeSBkdW1wcy4KCkZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGUgY2hhbmdlcyBpbiBzaXplIGNhbGN1bGF0aW9uLiBJdCBzZWVtcyB0byBoYW5kbGUgdGhlIGJpZy1lbmRpYW4gdHlwZXMgc2ltaWxhcmx5IHRvIHRoZWlyIHVuc2lnbmVkIGNvdW50ZXJwYXJ0cywgYnV0IHdpdGggYW4gYWRkZWQgY29uc2lkZXJhdGlvbiBmb3IgYnl0ZSBvcmRlci4gVGhlIHNpemUgY2FsY3VsYXRpb24gY29kZSBzbmlwcGV0IHNob3dzIHRoZSBhZGRlZCBvdmVyaGVhZCB0byBhY2NvdW50IGZvciB0aGUgYnl0ZSBvcmRlciBpbmZvcm1hdGlvbi4gSSYjMzk7bSBzZWVpbmcgYG5sYV9hdHRyX3NpemUoKWAgY2FsbHMsIHdoaWNoIEkgcHJlc3VtZSByZWxhdGUgdG8gYXR0cmlidXRlIGFsaWdubWVudCBhbmQgcGFkZGluZy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGRvdWJsZSBjaGVjayB0aGF0IHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgY29ycmVjdCBieSByZS1ldmFsdWF0aW5nIHRoZSBgbmxhX2F0dHJfc2l6ZSgpYCBtYWNyby4KClNlY29uZCwgdGhlIGFjdHVhbCBkdW1waW5nIHByb2Nlc3MgaXRzZWxmLCB3aGljaCBpbmNsdWRlcyB0aGUgYE5MQV9CRTE2YCBhbmQgYE5MQV9CRTMyYCBjYXNlcywgaXMgd2hhdCYjMzk7cyByZWFsbHkgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIHRoZSBjb2RlIGlzIGNvcnJlY3RseSBtYXBwaW5nIHRoZSBhdHRyaWJ1dGUgdHlwZXMgdG8gYE5MX0FUVFJfVFlQRV9VMTZgIGFuZCBgTkxfQVRUUl9UWVBFX1UzMmAsIHJlc3BlY3RpdmVseS4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGUgY29uZGl0aW9uYWwgYG5sYV9wdXRfdTMyYCBjYWxsIHdoaWNoIHNldHMgdGhlIGBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVJgIGF0dHJpYnV0ZSBhbmQgZmxhZ3MgaXQgYXMgYE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU5gLiBUaGlzIGltcGxpZXMgdGhlIGJ5dGUgb3JkZXIgaXMgZXhwbGljaXRseSB0YWdnZWQgd2hlbiBlbmNvdW50ZXJpbmcgYSBiaWctZW5kaWFuIGF0dHJpYnV0ZS4gU28gaXQgc2VlbXMgdGhlIGludGVudGlvbiBpcyB0byBpbmZvcm0gdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBhYm91dCB0aGUgYnl0ZSBvcmRlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHdyaXR0ZW4gY29uc2lzdGVudGx5LgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGNyb3NzLXJlZmVyZW5jZSB0aGlzIGxvZ2ljLCBsaWtlbHkgYXJvdW5kIGxpbmUgNDMwIGluIGBuZXQvbmV0bGluay9wb2xpY3kuY2AgdG8gY29uZmlybSB0aGUgY29kZSBmbG93IGFuZCB0aGF0IG5vIG90aGVyIGNyaXRpY2FsIG1vZGlmaWNhdGlvbnMgd2VyZSBtYWRlIHRoYXQgbWlnaHQgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGluY29uc2lzdGVuY2llcy4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBgdHlwZWAgdmFyaWFibGUgaXMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgaW4gdGhlIHNrYiB3cml0aW5nIGFuZCB0aGF0IHRoZSBieXRlIG9yZGVyIGluZm9ybWF0aW9uIGlzIGNvcnJlY3RseSBwcm9wYWdhdGVkIHRvIHVzZXJzcGFjZS4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIGFsaWducyB3aXRoIHRoZSBjdXJyZW50IHBvbGljeSBkdW1wIHN0cnVjdHVyZSBhbmQgdGhhdCB0aGlzIGFkZGl0aW9uIGlzIGFyY2hpdGVjdHVyYWxseSBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0bGluay9wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDEwOlx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1RZUEUsIHR5cGUpKVxuIDQxMTpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA0MTI6XHRcbiA0MTM6XHRcdG5sYV9uZXN0X2VuZChza2IsIGF0dHIpO1xuIDQxNDpcdFx0V0FSTl9PTihhdHRyLVx1MDAzZW5sYV9sZW4gXHUwMDNlIGVzdGltYXRlKTtcbiA0MTU6XHRcbiA0MTY6XHRcdHJldHVybiAwO1xuIDQxNzpcdG5sYV9wdXRfZmFpbHVyZTpcbiA0MTg6XHRcdG5sYV9uZXN0X2NhbmNlbChza2IsIGF0dHIpO1xuIDQxOTpcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIDQyMDpcdH1cbiA0MjE6XHRcbiA0MjI6XHQvKipcbiA0MjM6XHQgKiBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIgLSB3cml0ZSBhIGdpdmVuIGF0dHJpYnV0ZSBwb2xpY3lcbiA0MjQ6XHQgKiBAc2tiOiB0aGUgbWVzc2FnZSBza2IgdG8gd3JpdGUgdG9cbiA0MjU6XHQgKiBAcHQ6IHRoZSBhdHRyaWJ1dGUmIzM5O3MgcG9saWN5XG4gNDI2Olx0ICogQG5lc3RhdHRyOiB0aGUgbmVzdGVkIGF0dHJpYnV0ZSBJRCB0byB1c2VcbiA0Mjc6XHQgKlxuIDQyODpcdCAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvdGhlcndpc2U7IC0lRU5PREFUQSBpc1xuIDQyOTpcdCAqXHQgICAgc3BlY2lhbCwgaW5kaWNhdGluZyB0aGF0IHRoZXJlJiMzOTtzIG5vIHBvbGljeSBkYXRhIGFuZFxuIDQzMDpcdCAqXHQgICAgdGhlIGF0dHJpYnV0ZSBpcyBnZW5lcmFsbHkgcmVqZWN0ZWQuXG4gNDMxOlx0ICovXG4gNDMyOlx0aW50IG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDQzMzpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxuIDQzNDpcdFx0XHRcdFx0ICAgaW50IG5lc3RhdHRyKVxuIDQzNTpcdHtcbiA0MzY6XHRcdHJldHVybiBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihOVUxMLCBza2IsIHB0LCBuZXN0YXR0cik7XG4gNDM3Olx0fVxuIDQzODpcdFxuIDQzOTpcdC8qKlxuIDQ0MDpcdCAqIG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGUgLSB3cml0ZSBjdXJyZW50IHBvbGljeSBkdW1wIGF0dHJpYnV0ZXNcbiA0NDE6XHQgKiBAc2tiOiB0aGUgbWVzc2FnZSBza2IgdG8gd3JpdGUgdG9cbiA0NDI6XHQgKiBAc3RhdGU6IHRoZSBwb2xpY3kgZHVtcCBzdGF0ZVxuIDQ0MzpcdCAqXG4gNDQ0Olx0ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZVxuIDQ0NTpcdCAqL1xuIDQ0NjpcdGludCBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlKHN0cnVjdCBza19idWZmICpza2IsXG4gNDQ3Olx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlKVxuIDQ0ODpcdHtcbiA0NDk6XHRcdGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdDtcbiA0NTA6XHRcdHN0cnVjdCBubGF0dHIgKnBvbGljeTtcbiA0NTE6XHRcdGJvb2wgYWdhaW47XG4gNDUyOlx0XHRpbnQgZXJyO1xuIDQ1MzpcdFxuIDQ1NDpcdHNlbmRfYXR0cmlidXRlOlxuIDQ1NTpcdFx0YWdhaW4gPSBmYWxzZTtcbiA0NTY6XHRcbiA0NTc6XHRcdHB0ID0gXHUwMDI2c3RhdGUtXHUwMDNlcG9saWNpZXNbc3RhdGUtXHUwMDNlcG9saWN5X2lkeF0ucG9saWN5W3N0YXRlLVx1MDAzZWF0dHJfaWR4XTtcbiA0NTg6XHRcbiA0NTk6XHRcdHBvbGljeSA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgc3RhdGUtXHUwMDNlcG9saWN5X2lkeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDQxCgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDcxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBbmFseXNpczogTmVlZHNLTVNBTiA9IEZhbHNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhZGRzIE5ldGxpbmsgcG9saWN5IGR1bXBpbmcgZm9yIGJpZy1lbmRpYW4gYXR0cmlidXRlcy4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgdGh1cyB3YXJyYW50aW5nIEtNU0FOPyBJJiMzOTt2ZSBnb25lIHRocm91Z2ggdGhlIGZvdXIga2V5IGNyaXRlcmlhLgoKRmlyc3QsIGNyaXRlcmlhIG9uZSBmb2N1c2VzIG9uIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggdXNlcyBgbmxhX3B1dF91MzJgIHRvIHB1dCBhIDMyLWJpdCBjb25zdGFudCwgYE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU5gICh3aGljaCBpcyBqdXN0IHRoZSB2YWx1ZSAxLCBhIGZ1bGx5IGluaXRpYWxpemVkIGNvbnN0YW50KSBpbnRvIHRoZSBOZXRsaW5rIGJ1ZmZlci4gQWxzbywgYG5sYV9nZXRfcmFuZ2VfdW5zaWduZWRgIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgdGhlIGByYW5nZWAgc3RydWN0dXJlLiBTbywgbm90aGluZyB1bmluaXRpYWxpemVkIGlzIGJlaW5nIGV4cG9zZWQgaGVyZS4KCk5leHQsIHdlIGNoZWNrIGZvciBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFdlIGhhdmUgYSBjaGVjayBhZ2FpbnN0IGBwdC0mZ3Q7dHlwZWAsIGJ1dCBgcHRgIGlzIGZyb20gYSBjb25zdGFudCBwb2xpY3kgdGFibGUuIE5vIHJpc2sgdGhlcmUgZWl0aGVyLgoKVGhpcmQsIGFyZSB0aGVyZSBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vcGUuIE5vIG1lbW9yeSBhbGxvY2F0aW9uIGlzIGludm9sdmVkLCBzbyB0aGlzIGNyaXRlcmlhIGlzIG5vdCBtZXQuCgpGaW5hbGx5LCB3ZSBhc3Nlc3MgcG90ZW50aWFsIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byBhY2Nlc3Mgb2YgdW5pbml0aWFsaXplZCBieXRlcy4gV2Ugc2VlIHRoZSBzaXplIGVzdGltYXRlIHdhcyBwcm9wZXJseSB1cGRhdGVkLCBtZWFuaW5nIGJ1ZmZlciBzaXplIGNoZWNrcyBhbmQgYWxsb2NhdGlvbnMgYXJlIGV4YWN0LiBObyBjb25jZXJucyBhcm91bmQgYnVmZmVyIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KClNvLCB0byBzdW1tYXJpemUsIG5vIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGFyZSBiZWluZyB3cml0dGVuIHRvIHRoZSBOZXRsaW5rIGJ1ZmZlci4gQWxsIHZhbHVlcyBhcmUgZWl0aGVyIGV4cGxpY2l0IGNvbnN0YW50cyBvciBkZXJpdmVkIGZyb20gZnVuY3Rpb25zIHRoYXQgZXhwbGljaXRseSBpbml0aWFsaXplIHRoZWlyIG91dHB1dC4gS01TQU4gLyBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBpbiBwbGFjZSB0byBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuCgpUaHVzLCBiYXNlZCBvbiBteSBhbmFseXNpcywgTmVlZHNLTVNBTiBpcyBjbGVhcmx5ICpmYWxzZSouIFdlIGNhbiBwcm9jZWVkIHdpdGggdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIE5ldGxpbmsgcG9saWN5IGR1bXAgc3VwcG9ydCBmb3IgYmlnLWVuZGlhbiBpbnRlZ2VyIGF0dHJpYnV0ZSB0eXBlcyAoTkxBX0JFMTYgYW5kIE5MQV9CRTMyKSBieSBlbWl0dGluZyB0aGUgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSIGF0dHJpYnV0ZSBpbiBuZXRsaW5rIHBvbGljeSBkZXNjcmlwdGlvbnMuIFxuXG5BbGwgdmFsdWVzIHdyaXR0ZW4gdG8gdGhlIE5ldGxpbmsgc2tiIGFyZSBleHBsaWNpdCwgZnVsbHkgaW5pdGlhbGl6ZWQgY29uc3RhbnRzIChzdWNoIGFzIE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU4pIG9yIHJhbmdlIHZhbHVlcyBpbml0aWFsaXplZCBieSBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKCkuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlcywgb3IgcGFkZGluZ3MgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGlzIGFueSBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBjaGVja3MgYXJlIHN1ZmZpY2llbnQgZm9yIHRlc3RpbmcgYnVmZmVyIHNpemVzIGFuZCBuZXRsaW5rIG1lc3NhZ2UgZm9ybWF0dGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTmV0bGluayBwb2xpY3kgZHVtcCBzdXBwb3J0IGZvciBiaWctZW5kaWFuIGludGVnZXIgYXR0cmlidXRlIHR5cGVzIChOTEFfQkUxNiBhbmQgTkxBX0JFMzIpIGJ5IGVtaXR0aW5nIHRoZSBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIgYXR0cmlidXRlIGluIG5ldGxpbmsgcG9saWN5IGRlc2NyaXB0aW9ucy4gXG5cbkFsbCB2YWx1ZXMgd3JpdHRlbiB0byB0aGUgTmV0bGluayBza2IgYXJlIGV4cGxpY2l0LCBmdWxseSBpbml0aWFsaXplZCBjb25zdGFudHMgKHN1Y2ggYXMgTkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTikgb3IgcmFuZ2UgdmFsdWVzIGluaXRpYWxpemVkIGJ5IG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQoKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBwYWRkaW5ncyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgaXMgYW55IGNvbnRyb2wgZmxvdyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGNoZWNrcyBhcmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyBidWZmZXIgc2l6ZXMgYW5kIG5ldGxpbmsgbWVzc2FnZSBmb3JtYXR0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzowMi4yNDcwMTUzMDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzU2OTg2NjM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdHJsX2R1bXBwb2xpY3lcIixcbiAgICBcIm5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlXCIsXG4gICAgXCJuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlXCIsXG4gICAgXCJuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgTmV0bGluayBwb2xpY3kgZHVtcCBzdXBwb3J0IGZvciBiaWctZW5kaWFuIGludGVnZXIgYXR0cmlidXRlIHR5cGVzIChOTEFfQkUxNiBhbmQgTkxBX0JFMzIpIGJ5IGVtaXR0aW5nIHRoZSBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIgYXR0cmlidXRlIGluIG5ldGxpbmsgcG9saWN5IGRlc2NyaXB0aW9ucy4gXFxuXFxuQWxsIHZhbHVlcyB3cml0dGVuIHRvIHRoZSBOZXRsaW5rIHNrYiBhcmUgZXhwbGljaXQsIGZ1bGx5IGluaXRpYWxpemVkIGNvbnN0YW50cyAoc3VjaCBhcyBOTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOKSBvciByYW5nZSB2YWx1ZXMgaW5pdGlhbGl6ZWQgYnkgbmxhX2dldF9yYW5nZV91bnNpZ25lZCgpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIG9yIHBhZGRpbmdzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyBhbnkgY29udHJvbCBmbG93IGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgY2hlY2tzIGFyZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIGJ1ZmZlciBzaXplcyBhbmQgbmV0bGluayBtZXNzYWdlIGZvcm1hdHRpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTmV0bGluayBwb2xpY3kgZHVtcGluZyBsb2dpYyBpbiBuZXQvbmV0bGluay9wb2xpY3kuYyB0byBzdXBwb3J0IGJpZy1lbmRpYW4gaW50ZWdlciBhdHRyaWJ1dGVzIChOTEFfQkUxNiBhbmQgTkxBX0JFMzIpIGJ5IGVtaXR0aW5nIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUiBhbmQgYWRqdXN0aW5nIHRoZSBhdHRyaWJ1dGUgc2l6ZSBlc3RpbWF0aW9uLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIEFGX05FVExJTksgc29ja2V0cyB0aHJvdWdoIEdlbmVyaWMgTmV0bGluayBwb2xpY3kgZHVtcGluZyAoQ1RSTF9DTURfR0VUUE9MSUNZKSBhcyB3ZWxsIGFzIG5ldGxpbmsgZXh0YWNrIGVycm9yIHJlcG9ydGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6MDIuMjQ3MDQzNjY5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzY5NTI1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZWQ0MWE0ZWI0MTY2ODI3M2U1NDM5ODc0NDlmMDI5MjdhNjgyNjM0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMDA6MjM6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sXFxuaW5kZXggOGI0NDcyYTZhYTM2YS4uN2U3YzE1OGUzZTczNyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmxjdHJsLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmxjdHJsLnlhbWxcXG5AQCAtNDIsNiArNDIsMTYgQEAgZGVmaW5pdGlvbnM6XFxuICAgICAgIC0gYml0ZmllbGQzMlxcbiAgICAgICAtIHNpbnRcXG4gICAgICAgLSB1aW50XFxuKyAgLVxcbisgICAgbmFtZTogcG9saWN5LWJ5dGUtb3JkZXJcXG4rICAgIGRvYzogfFxcbisgICAgICBCeXRlIG9yZGVyIG9mIGFuIGludGVnZXIgYXR0cmlidXRlLiBaZXJvIGlzIGxlZnQgdW51c2VkIHNvIHRoYXQgaXRcXG4rICAgICAgY2FuIGJlIHRha2VuIHRvIG1lYW4gaG9zdCBieXRlIG9yZGVyLlxcbisgICAgZW51bS1uYW1lOiBuZXRsaW5rLXBvbGljeS1ieXRlLW9yZGVyXFxuKyAgICB0eXBlOiBlbnVtXFxuKyAgICB2YWx1ZS1zdGFydDogMVxcbisgICAgZW50cmllczpcXG4rICAgICAgLSBiaWctZW5kaWFuXFxuIFxcbiBhdHRyaWJ1dGUtc2V0czpcXG4gICAtXFxuQEAgLTE1Miw2ICsxNjIsMTEgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgIC1cXG4gICAgICAgICBuYW1lOiBwYWRcXG4gICAgICAgICB0eXBlOiBwYWRcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGJ5dGUtb3JkZXJcXG4rICAgICAgICBkb2M6IEJ5dGUgb3JkZXIgb2YgdGhlIGF0dHJpYnV0ZSwgYWJzZW50IG1lYW5zIGhvc3QgYnl0ZSBvcmRlci5cXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBlbnVtOiBwb2xpY3ktYnl0ZS1vcmRlclxcbiAgIC1cXG4gICAgIG5hbWU6IG9wLXBvbGljeS1hdHRyc1xcbiAgICAgbmFtZS1wcmVmaXg6IGN0cmwtYXR0ci1wb2xpY3ktXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oXFxuaW5kZXggZjg3YWFmMjhhNjQ5MS4uODJjNDFhZWI0MzU3NCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGxpbmsuaFxcbkBAIC0zMjksNiArMzI5LDE3IEBAIGVudW0gbmV0bGlua19hdHRyaWJ1dGVfdHlwZSB7XFxuIFxcdE5MX0FUVFJfVFlQRV9VSU5ULFxcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIGVudW0gbmV0bGlua19wb2xpY3lfYnl0ZV9vcmRlciAtIGJ5dGUgb3JkZXIgb2YgYW4gaW50ZWdlciBhdHRyaWJ1dGVcXG4rICogQE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU46IGJpZyBlbmRpYW4gKG5ldHdvcmsgYnl0ZSBvcmRlcilcXG4rICpcXG4rICogWmVybyBpcyBsZWZ0IHVuYXNzaWduZWQgc28gdGhhdCBpdCBrZWVwcyBtZWFuaW5nIGhvc3QgYnl0ZSBvcmRlcixcXG4rICogd2hpY2ggaXMgYWxzbyB3aGF0IGEgbWlzc2luZyBieXRlIG9yZGVyIG1lYW5zLlxcbisgKi9cXG4rZW51bSBuZXRsaW5rX3BvbGljeV9ieXRlX29yZGVyIHtcXG4rXFx0TkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTiA9IDEsXFxuK307XFxuK1xcbiAvKipcXG4gICogZW51bSBuZXRsaW5rX3BvbGljeV90eXBlX2F0dHIgLSBwb2xpY3kgdHlwZSBhdHRyaWJ1dGVzXFxuICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX1VOU1BFQzogdW51c2VkXFxuQEAgLTM1Niw2ICszNjcsOCBAQCBlbnVtIG5ldGxpbmtfYXR0cmlidXRlX3R5cGUge1xcbiAgKlxcdGJpdGZpZWxkMzIgdHlwZSAoVTMyKVxcbiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLOiBtYXNrIG9mIHZhbGlkIGJpdHMgZm9yIHVuc2lnbmVkIGludGVnZXJzIChVNjQpXFxuICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRDogcGFkIGF0dHJpYnV0ZSBmb3IgNjQtYml0IGFsaWdubWVudFxcbisgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSOiBieXRlIG9yZGVyIG9mIGFuIGludGVnZXIgYXR0cmlidXRlLFxcbisgKlxcdFxcdTAwMjZlbnVtIG5ldGxpbmtfcG9saWN5X2J5dGVfb3JkZXIsIGFic2VudCBpZiBob3N0IGJ5dGUgb3JkZXIgKFUzMilcXG4gICpcXG4gICogQF9fTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVg6IG51bWJlciBvZiBhdHRyaWJ1dGVzXFxuICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyXFxuQEAgLTM3NCw2ICszODcsNyBAQCBlbnVtIG5ldGxpbmtfcG9saWN5X3R5cGVfYXR0ciB7XFxuIFxcdE5MX1BPTElDWV9UWVBFX0FUVFJfQklURklFTEQzMl9NQVNLLFxcbiBcXHROTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRCxcXG4gXFx0TkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLLFxcbitcXHROTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIsXFxuIFxcbiBcXHQvKiBrZWVwIGxhc3QgKi9cXG4gXFx0X19OTF9QT0xJQ1lfVFlQRV9BVFRSX01BWCxcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvcG9saWN5LmMgYi9uZXQvbmV0bGluay9wb2xpY3kuY1xcbmluZGV4IDA4YjAwNmM0OGYwNmUuLjU3NGQ0NGI3ZDUxODIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGxpbmsvcG9saWN5LmNcXG4rKysgYi9uZXQvbmV0bGluay9wb2xpY3kuY1xcbkBAIC0yMzQsNiArMjM0LDExIEBAIGludCBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZShjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQpXFxuIFxcdFxcdC8qIG1heGltdW0gaXMgY29tbW9uLCB1NjQgbWluL21heCB3aXRoIHBhZGRpbmcgKi9cXG4gXFx0XFx0cmV0dXJuIGNvbW1vbiArXFxuIFxcdFxcdCAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgKyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7XFxuK1xcdGNhc2UgTkxBX0JFMTY6XFxuK1xcdGNhc2UgTkxBX0JFMzI6XFxuK1xcdFxcdC8qIHNhbWUgYXMgdGhlIHVuc2lnbmVkIHR5cGVzLCBwbHVzIHRoZSBieXRlIG9yZGVyICovXFxuK1xcdFxcdHJldHVybiBjb21tb24gKyBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKSArXFxuK1xcdFxcdCAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgKyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7XFxuIFxcdGNhc2UgTkxBX0JJVEZJRUxEMzI6XFxuIFxcdFxcdHJldHVybiBjb21tb24gKyBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKTtcXG4gXFx0Y2FzZSBOTEFfU1RSSU5HOlxcbkBAIC0yODksMjEgKzI5NCwyOCBAQCBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXFxuIFxcdGNhc2UgTkxBX1UxNjpcXG4gXFx0Y2FzZSBOTEFfVTMyOlxcbiBcXHRjYXNlIE5MQV9VNjQ6XFxuK1xcdGNhc2UgTkxBX0JFMTY6XFxuK1xcdGNhc2UgTkxBX0JFMzI6XFxuIFxcdGNhc2UgTkxBX1VJTlQ6XFxuIFxcdGNhc2UgTkxBX01TRUNTOiB7XFxuIFxcdFxcdHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gcmFuZ2U7XFxuIFxcbiBcXHRcXHRpZiAocHQtXFx1MDAzZXR5cGUgPT0gTkxBX1U4KVxcbiBcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1U4O1xcbi1cXHRcXHRlbHNlIGlmIChwdC1cXHUwMDNldHlwZSA9PSBOTEFfVTE2KVxcbitcXHRcXHRlbHNlIGlmIChwdC1cXHUwMDNldHlwZSA9PSBOTEFfVTE2IHx8IHB0LVxcdTAwM2V0eXBlID09IE5MQV9CRTE2KVxcbiBcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1UxNjtcXG4tXFx0XFx0ZWxzZSBpZiAocHQtXFx1MDAzZXR5cGUgPT0gTkxBX1UzMilcXG4rXFx0XFx0ZWxzZSBpZiAocHQtXFx1MDAzZXR5cGUgPT0gTkxBX1UzMiB8fCBwdC1cXHUwMDNldHlwZSA9PSBOTEFfQkUzMilcXG4gXFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VMzI7XFxuIFxcdFxcdGVsc2UgaWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9VNjQpXFxuIFxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTY0O1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVUlOVDtcXG4gXFxuK1xcdFxcdGlmICgocHQtXFx1MDAzZXR5cGUgPT0gTkxBX0JFMTYgfHwgcHQtXFx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUixcXG4rXFx0XFx0XFx0XFx0TkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTikpXFxuK1xcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbitcXG4gXFx0XFx0aWYgKHB0LVxcdTAwM2V2YWxpZGF0aW9uX3R5cGUgPT0gTkxBX1ZBTElEQVRFX01BU0spIHtcXG4gXFx0XFx0XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBwdC1cXHUwMDNlbWFzayxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5IGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5XFxuaW5kZXggODY4MmJmNTg4ZTFmYS4uZmI1YWNiOGFjZGVkMSAxMDA2NDRcXG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHlcXG4rKysgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHlcXG5AQCAtMTE1LDYgKzExNSw3IEBAIGNsYXNzIE5ldGxpbms6XFxuICAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JJVEZJRUxEMzJfTUFTSyA9IDEwXFxuICAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRCA9IDExXFxuICAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0sgPSAxMlxcbisgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSID0gMTNcXG4gXFxuICAgICBBdHRyVHlwZSA9IEVudW0oJ0F0dHJUeXBlJywgWydmbGFnJywgJ3U4JywgJ3UxNicsICd1MzInLCAndTY0JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzOCcsICdzMTYnLCAnczMyJywgJ3M2NCcsXFxuQEAgLTEyMiw2ICsxMjMsOCBAQCBjbGFzcyBOZXRsaW5rOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25lc3RlZCcsICduZXN0ZWQtYXJyYXknLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGZpZWxkMzInLCAnc2ludCcsICd1aW50J10pXFxuIFxcbisgICAgQnl0ZU9yZGVyID0gRW51bSgnQnl0ZU9yZGVyJywgWydiaWctZW5kaWFuJ10sIHN0YXJ0PTEpXFxuK1xcbiBjbGFzcyBObEVycm9yKEV4Y2VwdGlvbik6XFxuICAgICBkZWYgX19pbml0X18oc2VsZiwgbmxfbXNnKTpcXG4gICAgICAgICBzZWxmLm5sX21zZyA9IG5sX21zZ1xcbkBAIC0xNTgsNyArMTYxLDcgQEAgY2xhc3MgTmxQb2xpY3k6XFxuIFxcbiAgICAgRWFjaCBwb2xpY3kgZW50cnkgYWx3YXlzIGhhcyBhICd0eXBlJyBhdHRyaWJ1dGUgKGUuZy4gdTMyLCBzdHJpbmcsXFxuICAgICBuZXN0ZWQpLiBPcHRpb25hbCBhdHRyaWJ1dGVzIGRlcGVuZGluZyBvbiB0aGUgJ3R5cGUnOiBtaW4tdmFsdWUsXFxuLSAgICBtYXgtdmFsdWUsIG1pbi1sZW5ndGgsIG1heC1sZW5ndGgsIG1hc2suXFxuKyAgICBtYXgtdmFsdWUsIG1pbi1sZW5ndGgsIG1heC1sZW5ndGgsIG1hc2ssIGJ5dGUtb3JkZXIuXFxuIFxcbiAgICAgUG9saWNpZXMgY2FuIGZvcm0gaW5maW5pdGUgbmVzdGluZyBsb29wcy4gVGhlc2UgbG9vcHMgYXJlIHRyaW1tZWRcXG4gICAgIHdoZW4gcG9saWN5IGlzIGNvbnZlcnRlZCB0byBhIGRpY3Qgd2l0aCBwb2wudG9fZGljdCgpLlxcbkBAIC00NTQsNiArNDU3LDkgQEAgZGVmIF9nZW5sX2RlY29kZV9wb2xpY3kocmF3KTpcXG4gICAgICAgICAgICAgcG9saWN5WydiaXRmaWVsZDMyLW1hc2snXSA9IGF0dHIuYXNfc2NhbGFyKCd1MzInKVxcbiAgICAgICAgIGVsaWYgYXR0ci50eXBlID09IE5ldGxpbmsuTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLOlxcbiAgICAgICAgICAgICBwb2xpY3lbJ21hc2snXSA9IGF0dHIuYXNfc2NhbGFyKCd1NjQnKVxcbisgICAgICAgIGVsaWYgYXR0ci50eXBlID09IE5ldGxpbmsuTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSOlxcbisgICAgICAgICAgICBieXRlX29yZGVyID0gYXR0ci5hc19zY2FsYXIoJ3UzMicpXFxuKyAgICAgICAgICAgIHBvbGljeVsnYnl0ZS1vcmRlciddID0gTmV0bGluay5CeXRlT3JkZXIoYnl0ZV9vcmRlcikubmFtZVxcbiAgICAgcmV0dXJuIHBvbGljeVxcbiBcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjAyLjg4NDg4OTI3OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzI5NjQ3MTU1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY3RybF9kdW1wcG9saWN5XCIsXG4gICAgXCJuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZVwiLFxuICAgIFwibmV0bGlua19wb2xpY3lfZHVtcF93cml0ZVwiLFxuICAgIFwibmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTmV0bGluayBwb2xpY3kgZHVtcGluZyBsb2dpYyBpbiBuZXQvbmV0bGluay9wb2xpY3kuYyB0byBzdXBwb3J0IGJpZy1lbmRpYW4gaW50ZWdlciBhdHRyaWJ1dGVzIChOTEFfQkUxNiBhbmQgTkxBX0JFMzIpIGJ5IGVtaXR0aW5nIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUiBhbmQgYWRqdXN0aW5nIHRoZSBhdHRyaWJ1dGUgc2l6ZSBlc3RpbWF0aW9uLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIEFGX05FVExJTksgc29ja2V0cyB0aHJvdWdoIEdlbmVyaWMgTmV0bGluayBwb2xpY3kgZHVtcGluZyAoQ1RSTF9DTURfR0VUUE9MSUNZKSBhcyB3ZWxsIGFzIG5ldGxpbmsgZXh0YWNrIGVycm9yIHJlcG9ydGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZWQ0MWE0ZWI0MTY2ODI3M2U1NDM5ODc0NDlmMDI5MjdhNjgyNjM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwMDoyMzowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ubGN0cmwueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ubGN0cmwueWFtbFxuaW5kZXggOGI0NDcyYTZhYTM2YS4uN2U3YzE1OGUzZTczNyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ubGN0cmwueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sXG5AQCAtNDIsNiArNDIsMTYgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLSBiaXRmaWVsZDMyXG4gICAgICAgLSBzaW50XG4gICAgICAgLSB1aW50XG4rICAtXG4rICAgIG5hbWU6IHBvbGljeS1ieXRlLW9yZGVyXG4rICAgIGRvYzogfFxuKyAgICAgIEJ5dGUgb3JkZXIgb2YgYW4gaW50ZWdlciBhdHRyaWJ1dGUuIFplcm8gaXMgbGVmdCB1bnVzZWQgc28gdGhhdCBpdFxuKyAgICAgIGNhbiBiZSB0YWtlbiB0byBtZWFuIGhvc3QgYnl0ZSBvcmRlci5cbisgICAgZW51bS1uYW1lOiBuZXRsaW5rLXBvbGljeS1ieXRlLW9yZGVyXG4rICAgIHR5cGU6IGVudW1cbisgICAgdmFsdWUtc3RhcnQ6IDFcbisgICAgZW50cmllczpcbisgICAgICAtIGJpZy1lbmRpYW5cbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xNTIsNiArMTYyLDExIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHBhZFxuICAgICAgICAgdHlwZTogcGFkXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogYnl0ZS1vcmRlclxuKyAgICAgICAgZG9jOiBCeXRlIG9yZGVyIG9mIHRoZSBhdHRyaWJ1dGUsIGFic2VudCBtZWFucyBob3N0IGJ5dGUgb3JkZXIuXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGVudW06IHBvbGljeS1ieXRlLW9yZGVyXG4gICAtXG4gICAgIG5hbWU6IG9wLXBvbGljeS1hdHRyc1xuICAgICBuYW1lLXByZWZpeDogY3RybC1hdHRyLXBvbGljeS1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGxpbmsuaFxuaW5kZXggZjg3YWFmMjhhNjQ5MS4uODJjNDFhZWI0MzU3NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRsaW5rLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRsaW5rLmhcbkBAIC0zMjksNiArMzI5LDE3IEBAIGVudW0gbmV0bGlua19hdHRyaWJ1dGVfdHlwZSB7XG4gXHROTF9BVFRSX1RZUEVfVUlOVCxcbiB9O1xuIFxuKy8qKlxuKyAqIGVudW0gbmV0bGlua19wb2xpY3lfYnl0ZV9vcmRlciAtIGJ5dGUgb3JkZXIgb2YgYW4gaW50ZWdlciBhdHRyaWJ1dGVcbisgKiBATkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTjogYmlnIGVuZGlhbiAobmV0d29yayBieXRlIG9yZGVyKVxuKyAqXG4rICogWmVybyBpcyBsZWZ0IHVuYXNzaWduZWQgc28gdGhhdCBpdCBrZWVwcyBtZWFuaW5nIGhvc3QgYnl0ZSBvcmRlcixcbisgKiB3aGljaCBpcyBhbHNvIHdoYXQgYSBtaXNzaW5nIGJ5dGUgb3JkZXIgbWVhbnMuXG4rICovXG4rZW51bSBuZXRsaW5rX3BvbGljeV9ieXRlX29yZGVyIHtcbitcdE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU4gPSAxLFxuK307XG4rXG4gLyoqXG4gICogZW51bSBuZXRsaW5rX3BvbGljeV90eXBlX2F0dHIgLSBwb2xpY3kgdHlwZSBhdHRyaWJ1dGVzXG4gICogQE5MX1BPTElDWV9UWVBFX0FUVFJfVU5TUEVDOiB1bnVzZWRcbkBAIC0zNTYsNiArMzY3LDggQEAgZW51bSBuZXRsaW5rX2F0dHJpYnV0ZV90eXBlIHtcbiAgKlx0Yml0ZmllbGQzMiB0eXBlIChVMzIpXG4gICogQE5MX1BPTElDWV9UWVBFX0FUVFJfTUFTSzogbWFzayBvZiB2YWxpZCBiaXRzIGZvciB1bnNpZ25lZCBpbnRlZ2VycyAoVTY0KVxuICAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRDogcGFkIGF0dHJpYnV0ZSBmb3IgNjQtYml0IGFsaWdubWVudFxuKyAqIEBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVI6IGJ5dGUgb3JkZXIgb2YgYW4gaW50ZWdlciBhdHRyaWJ1dGUsXG4rICpcdFx1MDAyNmVudW0gbmV0bGlua19wb2xpY3lfYnl0ZV9vcmRlciwgYWJzZW50IGlmIGhvc3QgYnl0ZSBvcmRlciAoVTMyKVxuICAqXG4gICogQF9fTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVg6IG51bWJlciBvZiBhdHRyaWJ1dGVzXG4gICogQE5MX1BPTElDWV9UWVBFX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXJcbkBAIC0zNzQsNiArMzg3LDcgQEAgZW51bSBuZXRsaW5rX3BvbGljeV90eXBlX2F0dHIge1xuIFx0TkxfUE9MSUNZX1RZUEVfQVRUUl9CSVRGSUVMRDMyX01BU0ssXG4gXHROTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRCxcbiBcdE5MX1BPTElDWV9UWVBFX0FUVFJfTUFTSyxcbitcdE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUixcbiBcbiBcdC8qIGtlZXAgbGFzdCAqL1xuIFx0X19OTF9QT0xJQ1lfVFlQRV9BVFRSX01BWCxcbmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9wb2xpY3kuYyBiL25ldC9uZXRsaW5rL3BvbGljeS5jXG5pbmRleCAwOGIwMDZjNDhmMDZlLi41NzRkNDRiN2Q1MTgyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGxpbmsvcG9saWN5LmNcbisrKyBiL25ldC9uZXRsaW5rL3BvbGljeS5jXG5AQCAtMjM0LDYgKzIzNCwxMSBAQCBpbnQgbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0KVxuIFx0XHQvKiBtYXhpbXVtIGlzIGNvbW1vbiwgdTY0IG1pbi9tYXggd2l0aCBwYWRkaW5nICovXG4gXHRcdHJldHVybiBjb21tb24gK1xuIFx0XHQgICAgICAgMiAqIChubGFfYXR0cl9zaXplKDApICsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTY0KSkpO1xuK1x0Y2FzZSBOTEFfQkUxNjpcbitcdGNhc2UgTkxBX0JFMzI6XG4rXHRcdC8qIHNhbWUgYXMgdGhlIHVuc2lnbmVkIHR5cGVzLCBwbHVzIHRoZSBieXRlIG9yZGVyICovXG4rXHRcdHJldHVybiBjb21tb24gKyBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKSArXG4rXHRcdCAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgKyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7XG4gXHRjYXNlIE5MQV9CSVRGSUVMRDMyOlxuIFx0XHRyZXR1cm4gY29tbW9uICsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTMyKSk7XG4gXHRjYXNlIE5MQV9TVFJJTkc6XG5AQCAtMjg5LDIxICsyOTQsMjggQEAgX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlLFxuIFx0Y2FzZSBOTEFfVTE2OlxuIFx0Y2FzZSBOTEFfVTMyOlxuIFx0Y2FzZSBOTEFfVTY0OlxuK1x0Y2FzZSBOTEFfQkUxNjpcbitcdGNhc2UgTkxBX0JFMzI6XG4gXHRjYXNlIE5MQV9VSU5UOlxuIFx0Y2FzZSBOTEFfTVNFQ1M6IHtcbiBcdFx0c3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiByYW5nZTtcbiBcbiBcdFx0aWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1U4KVxuIFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTg7XG4tXHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1UxNilcbitcdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTE2IHx8IHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMTYpXG4gXHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VMTY7XG4tXHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1UzMilcbitcdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTMyIHx8IHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpXG4gXHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VMzI7XG4gXHRcdGVsc2UgaWYgKHB0LVx1MDAzZXR5cGUgPT0gTkxBX1U2NClcbiBcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1U2NDtcbiBcdFx0ZWxzZVxuIFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVUlOVDtcbiBcbitcdFx0aWYgKChwdC1cdTAwM2V0eXBlID09IE5MQV9CRTE2IHx8IHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIsXG4rXHRcdFx0XHROTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOKSlcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcbiBcdFx0aWYgKHB0LVx1MDAzZXZhbGlkYXRpb25fdHlwZSA9PSBOTEFfVkFMSURBVEVfTUFTSykge1xuIFx0XHRcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfTUFTSyxcbiBcdFx0XHRcdFx0ICAgICAgcHQtXHUwMDNlbWFzayxcbmRpZmYgLS1naXQgYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHkgYi90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHlcbmluZGV4IDg2ODJiZjU4OGUxZmEuLmZiNWFjYjhhY2RlZDEgMTAwNjQ0XG4tLS0gYS90b29scy9uZXQveW5sL3B5eW5sL2xpYi95bmwucHlcbisrKyBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weVxuQEAgLTExNSw2ICsxMTUsNyBAQCBjbGFzcyBOZXRsaW5rOlxuICAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JJVEZJRUxEMzJfTUFTSyA9IDEwXG4gICAgIE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEID0gMTFcbiAgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLID0gMTJcbisgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSID0gMTNcbiBcbiAgICAgQXR0clR5cGUgPSBFbnVtKCdBdHRyVHlwZScsIFsnZmxhZycsICd1OCcsICd1MTYnLCAndTMyJywgJ3U2NCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzOCcsICdzMTYnLCAnczMyJywgJ3M2NCcsXG5AQCAtMTIyLDYgKzEyMyw4IEBAIGNsYXNzIE5ldGxpbms6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXN0ZWQnLCAnbmVzdGVkLWFycmF5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpdGZpZWxkMzInLCAnc2ludCcsICd1aW50J10pXG4gXG4rICAgIEJ5dGVPcmRlciA9IEVudW0oJ0J5dGVPcmRlcicsIFsnYmlnLWVuZGlhbiddLCBzdGFydD0xKVxuK1xuIGNsYXNzIE5sRXJyb3IoRXhjZXB0aW9uKTpcbiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5sX21zZyk6XG4gICAgICAgICBzZWxmLm5sX21zZyA9IG5sX21zZ1xuQEAgLTE1OCw3ICsxNjEsNyBAQCBjbGFzcyBObFBvbGljeTpcbiBcbiAgICAgRWFjaCBwb2xpY3kgZW50cnkgYWx3YXlzIGhhcyBhICd0eXBlJyBhdHRyaWJ1dGUgKGUuZy4gdTMyLCBzdHJpbmcsXG4gICAgIG5lc3RlZCkuIE9wdGlvbmFsIGF0dHJpYnV0ZXMgZGVwZW5kaW5nIG9uIHRoZSAndHlwZSc6IG1pbi12YWx1ZSxcbi0gICAgbWF4LXZhbHVlLCBtaW4tbGVuZ3RoLCBtYXgtbGVuZ3RoLCBtYXNrLlxuKyAgICBtYXgtdmFsdWUsIG1pbi1sZW5ndGgsIG1heC1sZW5ndGgsIG1hc2ssIGJ5dGUtb3JkZXIuXG4gXG4gICAgIFBvbGljaWVzIGNhbiBmb3JtIGluZmluaXRlIG5lc3RpbmcgbG9vcHMuIFRoZXNlIGxvb3BzIGFyZSB0cmltbWVkXG4gICAgIHdoZW4gcG9saWN5IGlzIGNvbnZlcnRlZCB0byBhIGRpY3Qgd2l0aCBwb2wudG9fZGljdCgpLlxuQEAgLTQ1NCw2ICs0NTcsOSBAQCBkZWYgX2dlbmxfZGVjb2RlX3BvbGljeShyYXcpOlxuICAgICAgICAgICAgIHBvbGljeVsnYml0ZmllbGQzMi1tYXNrJ10gPSBhdHRyLmFzX3NjYWxhcigndTMyJylcbiAgICAgICAgIGVsaWYgYXR0ci50eXBlID09IE5ldGxpbmsuTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLOlxuICAgICAgICAgICAgIHBvbGljeVsnbWFzayddID0gYXR0ci5hc19zY2FsYXIoJ3U2NCcpXG4rICAgICAgICBlbGlmIGF0dHIudHlwZSA9PSBOZXRsaW5rLk5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUjpcbisgICAgICAgICAgICBieXRlX29yZGVyID0gYXR0ci5hc19zY2FsYXIoJ3UzMicpXG4rICAgICAgICAgICAgcG9saWN5WydieXRlLW9yZGVyJ10gPSBOZXRsaW5rLkJ5dGVPcmRlcihieXRlX29yZGVyKS5uYW1lXG4gICAgIHJldHVybiBwb2xpY3lcbiBcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjAyLjg4NDg5MTIxOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwNjM4MjQwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIFBvbGljeSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdG8gYnJlYWsgaXQgZG93biBwaWVjZSBieSBwaWVjZSwgc3RhcnRpbmcgd2l0aCBhIGdyYW51bGFyIGxvb2sgYXQgdGhlIGNvZGUgY2hhbmdlcy4gSSBzZWUgbW9kaWZpY2F0aW9ucyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogdGhlIGRvY3VtZW50YXRpb24gKGBubGN0cmwueWFtbGApLCBhIGhlYWRlciBmaWxlIChgbmV0bGluay5oYCksIHRoZSBjb3JlIHBvbGljeSBpbXBsZW1lbnRhdGlvbiAoYHBvbGljeS5jYCksIGFuZCBhIHVzZXItc3BhY2UgUHl0aG9uIHNjcmlwdCAoYHlubC5weWApLiBUaGlzIHN1Z2dlc3RzIGNoYW5nZXMgdG8gYm90aCB0aGUga2VybmVsIGFuZCB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiByZWxhdGVkIHRvIE5ldGxpbmsgcG9saWN5IGhhbmRsaW5nLlxuXG5GaXJzdCwgSSdsbCBleGFtaW5lIHRoZSBzcGVjaWZpYyBhZGRpdGlvbnMgYW5kIG1vZGlmaWNhdGlvbnMgaW4gZWFjaCBmaWxlLiBUaGUgYWRkaXRpb24gb2YgYGVudW0gbmV0bGlua19wb2xpY3lfYnl0ZV9vcmRlcmAgYW5kIGBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVJgIGluIHRoZSBoZWFkZXIgaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmc7IHRoaXMgbGlrZWx5IGluZGljYXRlcyBhIG5ldyBmZWF0dXJlIG9yIGVuaGFuY2VtZW50IHJlbGF0ZWQgdG8gYnl0ZSBvcmRlciBoYW5kbGluZyB3aXRoaW4gTmV0bGluayBhdHRyaWJ1dGVzLiBUaGUgbW9kaWZpY2F0aW9uIG9mIGBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZWAgYW5kIGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAgaW4gYHBvbGljeS5jYCB0byBoYW5kbGUgYE5MQV9CRTE2YCBhbmQgYE5MQV9CRTMyYCBzdXBwb3J0cyBteSBoeXBvdGhlc2lzLiBUaGUgaW5jbHVzaW9uIG9mIGBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVJgIHRlbGxzIG1lIHRoYXQgd2UgYXJlIGFkZGluZyBzb21lIGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IHRoZSBieXRlIG9yZGVyIHdoZW4gZHVtcGluZyB0aGUgYXR0cmlidXRlLlxuXG5Ob3csIG15IGF0dGVudGlvbiBpbW1lZGlhdGVseSBzaGlmdHMgdG8gYG5ldC9uZXRsaW5rL3BvbGljeS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlOiB3aG8gY2FsbHMgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zLCB3aGF0IGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUgcmVsZXZhbnQsIGFuZCB3aGF0IG90aGVyIHN5bWJvbHMgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlbT8gVGhlIHNwZWNpZmljIGNvbnRleHQgb2YgdGhlIGNhbGxzIGlzIGNyaXRpY2FsLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBlZmZpY2llbnRseSB0cmFjZSB0aGVzZSBjYWxscywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoYXQgYWZmZWN0cyB0aGUgYnl0ZSBvcmRlciBoYW5kbGluZy4gT25jZSBJIGhhdmUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGVwZW5kZW5jaWVzLCBJIGNhbiBiZXR0ZXIgYXNzZXNzIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk3OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjA2Ljk0ODcxODY2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRsaW5rL3BvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjA6XFx0XFx0Y2FzZSBOTEFfTkVTVEVEX0FSUkFZOlxcbiAyMjE6XFx0XFx0XFx0LyogY29tbW9uLCBwb2xpY3kgaWR4LCBwb2xpY3kgbWF4YXR0ciAqL1xcbiAyMjI6XFx0XFx0XFx0cmV0dXJuIGNvbW1vbiArIDIgKiBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKTtcXG4gMjIzOlxcdFxcdGNhc2UgTkxBX1U4OlxcbiAyMjQ6XFx0XFx0Y2FzZSBOTEFfVTE2OlxcbiAyMjU6XFx0XFx0Y2FzZSBOTEFfVTMyOlxcbiAyMjY6XFx0XFx0Y2FzZSBOTEFfVTY0OlxcbiAyMjc6XFx0XFx0Y2FzZSBOTEFfTVNFQ1M6XFxuIDIyODpcXHRcXHRjYXNlIE5MQV9TODpcXG4gMjI5OlxcdFxcdGNhc2UgTkxBX1MxNjpcXG4gMjMwOlxcdFxcdGNhc2UgTkxBX1MzMjpcXG4gMjMxOlxcdFxcdGNhc2UgTkxBX1M2NDpcXG4gMjMyOlxcdFxcdGNhc2UgTkxBX1NJTlQ6XFxuIDIzMzpcXHRcXHRjYXNlIE5MQV9VSU5UOlxcbiAyMzQ6XFx0XFx0XFx0LyogbWF4aW11bSBpcyBjb21tb24sIHU2NCBtaW4vbWF4IHdpdGggcGFkZGluZyAqL1xcbiAyMzU6XFx0XFx0XFx0cmV0dXJuIGNvbW1vbiArXFxuIDIzNjpcXHRcXHRcXHQgICAgICAgMiAqIChubGFfYXR0cl9zaXplKDApICsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTY0KSkpO1xcbiAyMzc6XFx0XFx0Y2FzZSBOTEFfQkUxNjpcXG4gMjM4OlxcdFxcdGNhc2UgTkxBX0JFMzI6XFxuIDIzOTpcXHRcXHRcXHQvKiBzYW1lIGFzIHRoZSB1bnNpZ25lZCB0eXBlcywgcGx1cyB0aGUgYnl0ZSBvcmRlciAqL1xcbiAyNDA6XFx0XFx0XFx0cmV0dXJuIGNvbW1vbiArIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpICtcXG4gMjQxOlxcdFxcdFxcdCAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgKyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7XFxuIDI0MjpcXHRcXHRjYXNlIE5MQV9CSVRGSUVMRDMyOlxcbiAyNDM6XFx0XFx0XFx0cmV0dXJuIGNvbW1vbiArIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpO1xcbiAyNDQ6XFx0XFx0Y2FzZSBOTEFfU1RSSU5HOlxcbiAyNDU6XFx0XFx0Y2FzZSBOTEFfTlVMX1NUUklORzpcXG4gMjQ2OlxcdFxcdGNhc2UgTkxBX0JJTkFSWTpcXG4gMjQ3OlxcdFxcdFxcdC8qIG1heGltdW0gaXMgY29tbW9uLCB1MzIgbWluLWxlbmd0aC9tYXgtbGVuZ3RoICovXFxuIDI0ODpcXHRcXHRcXHRyZXR1cm4gY29tbW9uICsgMiAqIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpO1xcbiAyNDk6XFx0XFx0Y2FzZSBOTEFfRkxBRzpcXG4gMjUwOlxcdFxcdFxcdHJldHVybiBjb21tb247XFxuIDI1MTpcXHRcXHR9XFxuIDI1MjpcXHRcXG4gMjUzOlxcdFxcdC8qIHRoaXMgc2hvdWxkIHRoZW4gY2F1c2UgYSB3YXJuaW5nIGxhdGVyICovXFxuIDI1NDpcXHRcXHRyZXR1cm4gMDtcXG4gMjU1OlxcdH1cXG4gMjU2OlxcdFxcbiAyNTc6XFx0c3RhdGljIGludFxcbiAyNTg6XFx0X19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlLFxcbiAyNTk6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsXFxuIDI2MDpcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxcbiAyNjE6XFx0XFx0XFx0XFx0XFx0IGludCBuZXN0YXR0cilcXG4gMjYyOlxcdHtcXG4gMjYzOlxcdFxcdGludCBlc3RpbWF0ZSA9IG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlKHB0KTtcXG4gMjY0OlxcdFxcdGVudW0gbmV0bGlua19hdHRyaWJ1dGVfdHlwZSB0eXBlO1xcbiAyNjU6XFx0XFx0c3RydWN0IG5sYXR0ciAqYXR0cjtcXG4gMjY2OlxcdFxcbiAyNjc6XFx0XFx0YXR0ciA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgbmVzdGF0dHIpO1xcbiAyNjg6XFx0XFx0aWYgKCFhdHRyKVxcbiAyNjk6XFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiAyNzA6XFx0XFxuIDI3MTpcXHRcXHRzd2l0Y2ggKHB0LVxcdTAwM2V0eXBlKSB7XFxuIDI3MjpcXHRcXHRkZWZhdWx0OlxcbiAyNzM6XFx0XFx0Y2FzZSBOTEFfVU5TUEVDOlxcbiAyNzQ6XFx0XFx0Y2FzZSBOTEFfUkVKRUNUOlxcbiAyNzU6XFx0XFx0XFx0Lyogc2tpcCAtIHVzZSBOTEFfTUlOX0xFTiB0byBhZHZlcnRpc2Ugc3VjaCAqL1xcbiAyNzY6XFx0XFx0XFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgYXR0cik7XFxuIDI3NzpcXHRcXHRcXHRyZXR1cm4gLUVOT0RBVEE7XFxuIDI3ODpcXHRcXHRjYXNlIE5MQV9ORVNURUQ6XFxuIDI3OTpcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX05FU1RFRDtcXG4gMjgwOlxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiAyODE6XFx0XFx0Y2FzZSBOTEFfTkVTVEVEX0FSUkFZOlxcbiAyODI6XFx0XFx0XFx0aWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9ORVNURURfQVJSQVkpXFxuIDI4MzpcXHRcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX05FU1RFRF9BUlJBWTtcXG4gMjg0OlxcdFxcdFxcdGlmIChzdGF0ZSBcXHUwMDI2XFx1MDAyNiBwdC1cXHUwMDNlbmVzdGVkX3BvbGljeSBcXHUwMDI2XFx1MDAyNiBwdC1cXHUwMDNlbGVuIFxcdTAwMjZcXHUwMDI2XFxuIDI4NTpcXHRcXHRcXHQgICAgKG5sYV9wdXRfdTMyKHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9QT0xJQ1lfSURYLFxcbiAyODY6XFx0XFx0XFx0XFx0XFx0IG5ldGxpbmtfcG9saWN5X2R1bXBfZ2V0X3BvbGljeV9pZHgoc3RhdGUsXFxuIDI4NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgcHQtXFx1MDAzZW5lc3RlZF9wb2xpY3ksXFxuIDI4ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgcHQtXFx1MDAzZWxlbikpIHx8XFxuIDI4OTpcXHRcXHRcXHQgICAgIG5sYV9wdXRfdTMyKHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9QT0xJQ1lfTUFYVFlQRSxcXG4gMjkwOlxcdFxcdFxcdFxcdFxcdCBwdC1cXHUwMDNlbGVuKSkpXFxuIDI5MTpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gMjkyOlxcdFxcdFxcdGJyZWFrO1xcbiAyOTM6XFx0XFx0Y2FzZSBOTEFfVTg6XFxuIDI5NDpcXHRcXHRjYXNlIE5MQV9VMTY6XFxuIDI5NTpcXHRcXHRjYXNlIE5MQV9VMzI6XFxuIDI5NjpcXHRcXHRjYXNlIE5MQV9VNjQ6XFxuIDI5NzpcXHRcXHRjYXNlIE5MQV9CRTE2OlxcbiAyOTg6XFx0XFx0Y2FzZSBOTEFfQkUzMjpcXG4gMjk5OlxcdFxcdGNhc2UgTkxBX1VJTlQ6XFxuIDMwMDpcXHRcXHRjYXNlIE5MQV9NU0VDUzoge1xcbiAzMDE6XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfcmFuZ2VfdmFsaWRhdGlvbiByYW5nZTtcXG4gMzAyOlxcdFxcbiAzMDM6XFx0XFx0XFx0aWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9VOClcXG4gMzA0OlxcdFxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTg7XFxuIDMwNTpcXHRcXHRcXHRlbHNlIGlmIChwdC1cXHUwMDNldHlwZSA9PSBOTEFfVTE2IHx8IHB0LVxcdTAwM2V0eXBlID09IE5MQV9CRTE2KVxcbiAzMDY6XFx0XFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VMTY7XFxuIDMwNzpcXHRcXHRcXHRlbHNlIGlmIChwdC1cXHUwMDNldHlwZSA9PSBOTEFfVTMyIHx8IHB0LVxcdTAwM2V0eXBlID09IE5MQV9CRTMyKVxcbiAzMDg6XFx0XFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VMzI7XFxuIDMwOTpcXHRcXHRcXHRlbHNlIGlmIChwdC1cXHUwMDNldHlwZSA9PSBOTEFfVTY0KVxcbiAzMTA6XFx0XFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VNjQ7XFxuIDMxMTpcXHRcXHRcXHRlbHNlXFxuIDMxMjpcXHRcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1VJTlQ7XFxuIDMxMzpcXHRcXG4gMzE0OlxcdFxcdFxcdGlmICgocHQtXFx1MDAzZXR5cGUgPT0gTkxBX0JFMTYgfHwgcHQtXFx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpIFxcdTAwMjZcXHUwMDI2XFxuIDMxNTpcXHRcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIsXFxuIDMxNjpcXHRcXHRcXHRcXHRcXHROTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOKSlcXG4gMzE3OlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHRcXHRpZiAocHQtXFx1MDAzZXZhbGlkYXRpb25fdHlwZSA9PSBOTEFfVkFMSURBVEVfTUFTSykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzowNi45NDg4MjAyMjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Nzg4MzUwMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBOZXRsaW5rIFBvbGljeSBEdW1waW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG5ldGxpbmsgcG9saWN5IGR1bXAgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjYWxsZXJzIG9mIGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAgYW5kIGBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZWAuIFNlZWluZyB3aGVyZSB0aGV5J3JlIGludm9rZWQgd2lsbCBnaXZlIG1lIGEgY29uY3JldGUgcGljdHVyZSBvZiB0aGVpciByb2xlIHdpdGhpbiB0aGUgc3lzdGVtLlxuXG5JJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggb2YgdGhlIGBuZXQvbmV0bGluay9wb2xpY3kuY2AgZmlsZSBpdHNlbGYgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgY29udGV4dC4gVGhlbiwgSSB3aWxsIGFsc28gbGV2ZXJhZ2UgYGdyZXBgIHRvIHF1aWNrbHkgZmluZCBhbGwgaW5zdGFuY2VzIG9mIGBuZXRsaW5rX3BvbGljeV9kdW1wYCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoYXQnbGwgbGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgcGF0dGVybnMsIHVzZS1jYXNlcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIG5ldGxpbmsgcG9saWN5IGZyYW1ld29yay4gVGhpcyBjb21iaW5hdGlvbiBvZiB0YXJnZXRlZCBzZWFyY2hlcyBhbmQgYnJvYWRlciBmaWxlIGFuYWx5c2lzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzUxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzoxNC43MzcxNzI3NTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0OTc3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0bGlua19wb2xpY3lfZHVtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0bGlua1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0bGluay9hZl9uZXRsaW5rLmM9MjE2Mz1uZXRsaW5rX2Fja190bHZfbGVuKHN0cnVjdCBuZXRsaW5rX3NvY2sgKm5saywgaW50IGVycixcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMTgzLVxcdGlmIChleHRhY2stXFx1MDAzZXBvbGljeSlcXG5uZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjE4NDpcXHRcXHR0bHZsZW4gKz0gbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUoZXh0YWNrLVxcdTAwM2Vwb2xpY3kpO1xcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMTg1LVxcdGlmIChleHRhY2stXFx1MDAzZW1pc3NfdHlwZSlcXG4tLVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYz0yMjAwPW5ldGxpbmtfYWNrX3Rsdl9maWxsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLCBpbnQgZXJyLFxcbi0tXFxubmV0L25ldGxpbmsvYWZfbmV0bGluay5jLTIyMTUtXFx0aWYgKGV4dGFjay1cXHUwMDNlcG9saWN5KVxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoyMjE2OlxcdFxcdG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihza2IsIGV4dGFjay1cXHUwMDNlcG9saWN5LFxcbm5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYy0yMjE3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBOTE1TR0VSUl9BVFRSX1BPTElDWSk7XFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYz0xNTEyPXN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCB7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTUxMzpcXHRzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGU7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTUxNC1cXHRjb25zdCBzdHJ1Y3QgZ2VubF9mYW1pbHkgKnJ0O1xcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM9MTUyOT1zdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNTcxLVxcdFxcdGlmIChkb2l0LnBvbGljeSkge1xcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE1NzI6XFx0XFx0XFx0ZXJyID0gbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlLFxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE1NzMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkb2l0LnBvbGljeSxcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE1NzgtXFx0XFx0aWYgKGR1bXAucG9saWN5KSB7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTU3OTpcXHRcXHRcXHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXFx1MDAyNmN0eC1cXHUwMDNlc3RhdGUsXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTU4MC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGR1bXAucG9saWN5LFxcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTYwMS1cXHRcXHRpZiAoaS5kb2l0LnBvbGljeSkge1xcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE2MDI6XFx0XFx0XFx0ZXJyID0gbmV0bGlua19wb2xpY3lfZHVtcF9hZGRfcG9saWN5KFxcdTAwMjZjdHgtXFx1MDAzZXN0YXRlLFxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2MDMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBpLmRvaXQucG9saWN5LFxcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTYwOC1cXHRcXHRpZiAoaS5kdW1waXQucG9saWN5KSB7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTYwOTpcXHRcXHRcXHRlcnIgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3koXFx1MDAyNmN0eC1cXHUwMDNlc3RhdGUsXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTYxMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGkuZHVtcGl0LnBvbGljeSxcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2MjMtZXJyX2ZyZWVfc3RhdGU6XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTYyNDpcXHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVxcdTAwM2VzdGF0ZSk7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTYyNS1lcnJfZnJlZV9vcF9pdGVyOlxcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM9MTY0OD1zdGF0aWMgaW50IGN0cmxfZHVtcHBvbGljeV9wdXRfb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2NzQtXFx0aWYgKGRvaXQtXFx1MDAzZXBvbGljeSkge1xcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjE2NzU6XFx0XFx0aWR4ID0gbmV0bGlua19wb2xpY3lfZHVtcF9nZXRfcG9saWN5X2lkeChjdHgtXFx1MDAzZXN0YXRlLFxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2NzYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGRvaXQtXFx1MDAzZXBvbGljeSxcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE2ODItXFx0aWYgKGR1bXBpdC1cXHUwMDNlcG9saWN5KSB7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTY4MzpcXHRcXHRpZHggPSBuZXRsaW5rX3BvbGljeV9kdW1wX2dldF9wb2xpY3lfaWR4KGN0eC1cXHUwMDNlc3RhdGUsXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTY4NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgZHVtcGl0LVxcdTAwM2Vwb2xpY3ksXFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYz0xNzAxPXN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jLTE3MzAtXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTczMTpcXHR3aGlsZSAobmV0bGlua19wb2xpY3lfZHVtcF9sb29wKGN0eC1cXHUwMDNlc3RhdGUpKSB7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTczMi1cXHRcXHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xcbi0tXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTc0MS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYzoxNzQyOlxcdFxcdGlmIChuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlKHNrYiwgY3R4LVxcdTAwM2VzdGF0ZSkpXFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTc0My1cXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbm5ldC9uZXRsaW5rL2dlbmV0bGluay5jPTE3NTc9c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvbmV0bGluay9nZW5ldGxpbmsuYy0xNzYxLVxcdGtmcmVlKGN0eC1cXHUwMDNlb3BfaXRlcik7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6MTc2MjpcXHRuZXRsaW5rX3BvbGljeV9kdW1wX2ZyZWUoY3R4LVxcdTAwM2VzdGF0ZSk7XFxubmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMtMTc2My1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTE2LVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjE3OnN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlIHtcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xOC1cXHR1bnNpZ25lZCBpbnQgcG9saWN5X2lkeDtcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTI2LVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjI3OnN0YXRpYyBpbnQgYWRkX3BvbGljeShzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqKnN0YXRlcCxcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yOC1cXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcG9saWN5LFxcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtMzAte1xcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjMxOlxcdHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSA9ICpzdGF0ZXA7XFxubmV0L25ldGxpbmsvcG9saWN5LmMtMzItXFx0dW5zaWduZWQgaW50IG9sZF9uX2FsbG9jLCBuX2FsbG9jLCBpO1xcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtNjctLyoqXFxubmV0L25ldGxpbmsvcG9saWN5LmM6Njg6ICogbmV0bGlua19wb2xpY3lfZHVtcF9nZXRfcG9saWN5X2lkeCAtIHJldHJpZXZlIHBvbGljeSBpbmRleFxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTY5LSAqIEBzdGF0ZTogdGhlIHBvbGljeSBkdW1wIHN0YXRlXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy04MS0gKi9cXG5uZXQvbmV0bGluay9wb2xpY3kuYzo4MjppbnQgbmV0bGlua19wb2xpY3lfZHVtcF9nZXRfcG9saWN5X2lkeChzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXFxubmV0L25ldGxpbmsvcG9saWN5LmMtODMtXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwb2xpY3ksXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xMDAtXFxubmV0L25ldGxpbmsvcG9saWN5LmM6MTAxOnN0YXRpYyBzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqYWxsb2Nfc3RhdGUodm9pZClcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xMDIte1xcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjEwMzpcXHRzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGU7XFxubmV0L25ldGxpbmsvcG9saWN5LmMtMTA0LVxcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtMTEzLS8qKlxcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjExNDogKiBuZXRsaW5rX3BvbGljeV9kdW1wX2FkZF9wb2xpY3kgLSBhZGQgYSBwb2xpY3kgdG8gdGhlIGR1bXBcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xMTUtICogQHBzdGF0ZTogc3RhdGUgdG8gYWRkIHRvLCBtYXkgYmUgcmVhbGxvY2F0ZWQsIG11c3QgYmUgJU5VTEwgdGhlIGZpcnN0IHRpbWVcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTEyNS0gKi9cXG5uZXQvbmV0bGluay9wb2xpY3kuYzoxMjY6aW50IG5ldGxpbmtfcG9saWN5X2R1bXBfYWRkX3BvbGljeShzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqKnBzdGF0ZSxcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xMjctXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSxcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTEyOS17XFxubmV0L25ldGxpbmsvcG9saWN5LmM6MTMwOlxcdHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSA9ICpwc3RhdGU7XFxubmV0L25ldGxpbmsvcG9saWN5LmMtMTMxLVxcdHVuc2lnbmVkIGludCBwb2xpY3lfaWR4O1xcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtMTgyLVxcdGlmICghKnBzdGF0ZSlcXG5uZXQvbmV0bGluay9wb2xpY3kuYzoxODM6XFx0XFx0bmV0bGlua19wb2xpY3lfZHVtcF9mcmVlKHN0YXRlKTtcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xODQtXFx0ZWxzZVxcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmM9MTg5PXN0YXRpYyBib29sXFxubmV0L25ldGxpbmsvcG9saWN5LmM6MTkwOm5ldGxpbmtfcG9saWN5X2R1bXBfZmluaXNoZWQoc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlKVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTE5MS17XFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xOTYtLyoqXFxubmV0L25ldGxpbmsvcG9saWN5LmM6MTk3OiAqIG5ldGxpbmtfcG9saWN5X2R1bXBfbG9vcCAtIGR1bXBpbmcgbG9vcCBpbmRpY2F0b3JcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0xOTgtICogQHN0YXRlOiB0aGUgcG9saWN5IGR1bXAgc3RhdGVcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIwMy0gKi9cXG5uZXQvbmV0bGluay9wb2xpY3kuYzoyMDQ6Ym9vbCBuZXRsaW5rX3BvbGljeV9kdW1wX2xvb3Aoc3RydWN0IG5ldGxpbmtfcG9saWN5X2R1bXBfc3RhdGUgKnN0YXRlKVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIwNS17XFxubmV0L25ldGxpbmsvcG9saWN5LmM6MjA2OlxcdHJldHVybiAhbmV0bGlua19wb2xpY3lfZHVtcF9maW5pc2hlZChzdGF0ZSk7XFxubmV0L25ldGxpbmsvcG9saWN5LmMtMjA3LX1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yMDgtXFxubmV0L25ldGxpbmsvcG9saWN5LmM6MjA5OmludCBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZShjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQpXFxubmV0L25ldGxpbmsvcG9saWN5LmMtMjEwLXtcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jPTI1Nz1zdGF0aWMgaW50XFxubmV0L25ldGxpbmsvcG9saWN5LmM6MjU4Ol9fbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyKHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSxcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yNTktXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy0yNjIte1xcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjI2MzpcXHRpbnQgZXN0aW1hdGUgPSBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZShwdCk7XFxubmV0L25ldGxpbmsvcG9saWN5LmMtMjY0LVxcdGVudW0gbmV0bGlua19hdHRyaWJ1dGVfdHlwZSB0eXBlO1xcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtMjg1LVxcdFxcdCAgICAobmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BPTElDWV9JRFgsXFxubmV0L25ldGxpbmsvcG9saWN5LmM6Mjg2OlxcdFxcdFxcdFxcdCBuZXRsaW5rX3BvbGljeV9kdW1wX2dldF9wb2xpY3lfaWR4KHN0YXRlLFxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTI4Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgcHQtXFx1MDAzZW5lc3RlZF9wb2xpY3ksXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy00MjItLyoqXFxubmV0L25ldGxpbmsvcG9saWN5LmM6NDIzOiAqIG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0ciAtIHdyaXRlIGEgZ2l2ZW4gYXR0cmlidXRlIHBvbGljeVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQyNC0gKiBAc2tiOiB0aGUgbWVzc2FnZSBza2IgdG8gd3JpdGUgdG9cXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQzMS0gKi9cXG5uZXQvbmV0bGluay9wb2xpY3kuYzo0MzI6aW50IG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQzMy1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy00MzUte1xcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjQzNjpcXHRyZXR1cm4gX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoTlVMTCwgc2tiLCBwdCwgbmVzdGF0dHIpO1xcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQzNy19XFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy00MzktLyoqXFxubmV0L25ldGxpbmsvcG9saWN5LmM6NDQwOiAqIG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGUgLSB3cml0ZSBjdXJyZW50IHBvbGljeSBkdW1wIGF0dHJpYnV0ZXNcXG5uZXQvbmV0bGluay9wb2xpY3kuYy00NDEtICogQHNrYjogdGhlIG1lc3NhZ2Ugc2tiIHRvIHdyaXRlIHRvXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy00NDUtICovXFxubmV0L25ldGxpbmsvcG9saWN5LmM6NDQ2OmludCBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGxpbmsvcG9saWN5LmM6NDQ3OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSlcXG5uZXQvbmV0bGluay9wb2xpY3kuYy00NDgte1xcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtNDYyLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjQ2MzpcXHRlcnIgPSBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdGF0ZSwgc2tiLCBwdCwgc3RhdGUtXFx1MDAzZWF0dHJfaWR4KTtcXG5uZXQvbmV0bGluay9wb2xpY3kuYy00NjQtXFx0aWYgKGVyciA9PSAtRU5PREFUQSkge1xcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtNDgyLVxcdGlmIChhZ2Fpbikge1xcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjQ4MzpcXHRcXHRpZiAobmV0bGlua19wb2xpY3lfZHVtcF9maW5pc2hlZChzdGF0ZSkpXFxubmV0L25ldGxpbmsvcG9saWN5LmMtNDg0LVxcdFxcdFxcdHJldHVybiAtRU5PREFUQTtcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQ5NS0vKipcXG5uZXQvbmV0bGluay9wb2xpY3kuYzo0OTY6ICogbmV0bGlua19wb2xpY3lfZHVtcF9mcmVlIC0gZnJlZSBwb2xpY3kgZHVtcCBzdGF0ZVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTQ5Ny0gKiBAc3RhdGU6IHRoZSBwb2xpY3kgZHVtcCBzdGF0ZSB0byBmcmVlXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy01MDAtICovXFxubmV0L25ldGxpbmsvcG9saWN5LmM6NTAxOnZvaWQgbmV0bGlua19wb2xpY3lfZHVtcF9mcmVlKHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSlcXG5uZXQvbmV0bGluay9wb2xpY3kuYy01MDIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzoxNC43OTE2NzczNTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODQwMjM3NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiBuZXRsaW5rIHBvbGljeSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L25ldGxpbmsvcG9saWN5LmNgLiBJIHNlZSBpdCdzIHRvdWNoaW5nIGEgZmV3IGtleSBmdW5jdGlvbnM6IGBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZWAsIGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAsIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJgLCBhbmQgYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCBmb3IgZHVtcGluZyBhbmQgd3JpdGluZyBuZXRsaW5rIGF0dHJpYnV0ZSBwb2xpY2llcy5cblxuTG9va2luZyBhdCB0aGUgY2FsbCBncmFwaCwgaXQgbG9va3MgbGlrZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHBpdm90YWwgaW4gZ2VuZXJpYyBuZXRsaW5rJ3MgcG9saWN5IGR1bXBpbmcsIGFjY2Vzc2VkIHRocm91Z2ggYGN0cmxfZHVtcHBvbGljeWAsIGFuZCBhbHNvIGludm9sdmVkIGluIG5ldGxpbmsgQUNLIFRMViBmaWxsaW5nLCBub3RhYmx5IHRocm91Z2ggYG5ldGxpbmtfYWNrX3Rsdl9maWxsYCBhbmQgYG5ldGxpbmtfYWNrX3Rsdl9sZW5gIHZpYSBgTkxNU0dFUlJfQVRUUl9QT0xJQ1lgLiBUaGUgY29ubmVjdGlvbiB0byBgQ1RSTF9DTURfR0VUUE9MSUNZYCBzdWdnZXN0cyB0aGlzIHBvbGljeSBkdW1waW5nIGZ1bmN0aW9uYWxpdHkgaXMgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHdoaWNoIG1ha2VzIGl0IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gRnVydGhlcm1vcmUsIGV4dGFjayBwb2xpY3kgZHVtcGluZyBpcyByZXR1cm5lZCB3aGVuIHRoZSBuZXRsaW5rIG1lc3NhZ2VzIGFyZSBpbnZhbGlkIGR1ZSB0byBhdHRyaWJ1dGVzIHBvbGljeSBjaGVja3MuXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBhbmQgdGhlIHJvbGUgaW4gZXJyb3IgaGFuZGxpbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgYnVpbGQgY29uZmlndXJhdGlvbiBiZXR0ZXIuIEknbGwgbmVlZCB0byBjaGVjayBpZiBgbmV0L25ldGxpbmsvcG9saWN5LmNgIGlzIGFsd2F5cyBjb21waWxlZCBvciBpZiB0aGVyZSBhcmUgS2NvbmZpZyBvcHRpb25zIGdvdmVybmluZyBpdHMgaW5jbHVzaW9uLiBUaGF0J3MgdGhlIG5leHQgc3RlcCDigJMgdGltZSB0byBkaXZlIGludG8gYG5ldC9uZXRsaW5rL01ha2VmaWxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6MTcuNjMxOTIwMTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0bGluay9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIG5ldGxpbmsgZHJpdmVyLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmoteSAgXFx0XFx0XFx0XFx0Oj0gYWZfbmV0bGluay5vIGdlbmV0bGluay5vIHBvbGljeS5vXFxuICAgNzpcXHRcXG4gICA4OlxcdG9iai0kKENPTkZJR19ORVRMSU5LX0RJQUcpXFx0Kz0gbmV0bGlua19kaWFnLm9cXG4gICA5OlxcdG5ldGxpbmtfZGlhZy15XFx0XFx0XFx0Oj0gZGlhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjE3LjYzMTk5ODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDc0NTc1Mjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZTpcblxuKipBbmFseXppbmcgTmV0bGluayBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgbmV0L25ldGxpbmsvTWFrZWZpbGVgIGFuZCBzZWUgYG9iai15IDo9IGFmX25ldGxpbmsubyBnZW5ldGxpbmsubyBwb2xpY3kub2AuIFRoaXMgdGVsbHMgbWUgdGhhdCBgYWZfbmV0bGluay5vYCwgYGdlbmV0bGluay5vYCwgYW5kIGBwb2xpY3kub2AgYXJlIGdldHRpbmcgYnVpbHQgaW50byB0aGUgbmV0bGluayBtb2R1bGUuIE1ha2VzIHNlbnNlLiBOb3csIHRoZSBjb250ZXh0IGlzIHRoYXQgdGhlIGVudGlyZSBgbmV0L25ldGxpbmsvYCBkaXJlY3RvcnkgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGVuYWJsaW5nIGNvbmRpdGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gYW5kIGNoZWNrIHdoZXJlIHRoaXMgaXMgY29udHJvbGxlZC4gSSBpbW1lZGlhdGVseSBzdXNwZWN0IGl0J3MgdGllZCB0byBgQ09ORklHX05FVGAsIHNpbmNlIHRoYXQncyB0aGUgc3RhbmRhcmQgbmV0d29ya2luZyBvcHRpb24gaW4gdGhlIGtlcm5lbC4gTGV0IG1lIGRvdWJsZSBjaGVjaywgZWl0aGVyIGluIHRoZSBgbmV0L0tjb25maWdgIGZpbGUsIG9yIHBlcmhhcHMgdGhlIGBuZXQvTWFrZWZpbGVgLiBJJ2xsIG9wZW4gdGhvc2UgdXAgYW5kIHNlZSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gcmV2ZWFscy4gTXkgaW50dWl0aW9uIHNheXMgYENPTkZJR19ORVRgIGlzIHRoZSBrZXkuIEl0J3MgdGhlIG1vc3QgbGlrZWx5IGRlcGVuZGVuY3kgdGhhdCB3b3VsZCBlbmFibGUgdGhlIGVudGlyZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgYW5kIGJ5IGV4dGVuc2lvbiwgdGhlIG5ldGxpbmsgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NzQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjE5LjcwNjU3NzU0OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgbGludXggbmV0d29ya2luZy5cXG4gICA0OlxcdCNcXG4gICA1OlxcdCMgMiBTZXAgMjAwMCwgQ2hyaXN0b3BoIEhlbGx3aWcgXFx1MDAzY2hjaEBpbmZyYWRlYWQub3JnXFx1MDAzZVxcbiAgIDY6XFx0IyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy5cXG4gICA3OlxcdCNcXG4gICA4OlxcdFxcbiAgIDk6XFx0b2JqLXlcXHRcXHRcXHRcXHQ6PSBkZXZyZXMubyBzb2NrZXQubyBjb3JlL1xcbiAgMTA6XFx0XFxuICAxMTpcXHRvYmotJChDT05GSUdfQ09NUEFUKVxcdFxcdCs9IGNvbXBhdC5vXFxuICAxMjpcXHRcXG4gIDEzOlxcdCMgTExDIGhhcyB0byBiZSBsaW5rZWQgYmVmb3JlIHRoZSBmaWxlcyBpbiBuZXQvODAyL1xcbiAgMTQ6XFx0b2JqLSQoQ09ORklHX0xMQylcXHRcXHQrPSBsbGMvXFxuICAxNTpcXHRvYmoteVxcdFxcdFxcdFxcdCs9IGV0aGVybmV0LyA4MDIvIHNjaGVkLyBuZXRsaW5rLyBicGYvIGV0aHRvb2wvXFxuICAxNjpcXHRvYmotJChDT05GSUdfTkVURklMVEVSKVxcdFxcdCs9IG5ldGZpbHRlci9cXG4gIDE3OlxcdG9iai0kKENPTkZJR19JTkVUKVxcdFxcdCs9IGlwdjQvXFxuICAxODpcXHRvYmotJChDT05GSUdfVExTKVxcdFxcdCs9IHRscy9cXG4gIDE5OlxcdG9iai0kKENPTkZJR19YRlJNKVxcdFxcdCs9IHhmcm0vXFxuICAyMDpcXHRvYmotJChDT05GSUdfVU5JWClcXHRcXHQrPSB1bml4L1xcbiAgMjE6XFx0b2JqLSQoQ09ORklHX0lORVRfUFNQKVxcdFxcdCs9IHBzcC9cXG4gIDIyOlxcdG9iai15XFx0XFx0XFx0XFx0Kz0gaXB2Ni9cXG4gIDIzOlxcdG9iai0kKENPTkZJR19QQUNLRVQpXFx0XFx0Kz0gcGFja2V0L1xcbiAgMjQ6XFx0b2JqLSQoQ09ORklHX05FVF9LRVkpXFx0XFx0Kz0ga2V5L1xcbiAgMjU6XFx0b2JqLSQoQ09ORklHX0JSSURHRSlcXHRcXHQrPSBicmlkZ2UvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjE5LjcwNjY2Mzk0OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDQ5NTY5NDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXRsaW5rIFBvbGljeSBEdW1wIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBuZXRsaW5rL2AgZGlyZWN0b3J5LiBJIHNlZSBpdCdzIGluY2x1ZGVkIHZpYSBgb2JqLXlgIGluIHRoZSBgbmV0L01ha2VmaWxlYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhcyBleHBlY3RlZCwgc2VlbXMgdG8gYmUgYENPTkZJR19ORVRgLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSd2ZSBub3RlZCBhIGZldyBrZXkgb25lczogYG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlYCwgYF9fbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyYCwgYW5kIHRoZSBmdW5jdGlvbnMgY2FsbGluZyB0aGVtLiBTcGVjaWZpY2FsbHksIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJgIHdoaWNoIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlYCBhbmQgYWxzbywgdGhlIGV4cG9ydGVkIGVudHJ5IHBvaW50cyBhcmUgYG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlYCwgYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAsIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlYCBhbmQgYGN0cmxfZHVtcHBvbGljeWAuXG5cbkkgdGhpbmsgdGhlc2UgbG9vayBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciBkZWVwZXIgYW5hbHlzaXMuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlYCwgYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAsIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlYCwgYW5kIGBjdHJsX2R1bXBwb2xpY3lgIGFyZSBhbGwgcmVsZXZhbnQuIFRpbWUgdG8gY2hlY2sgYGN0cmxfZHVtcHBvbGljeWAgaW4gYG5ldC9uZXRsaW5rL2dlbmV0bGluay5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MzEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzoyNC43NTYyMzY0NzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRsaW5rL2dlbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2OTUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2OTU6XFx0XFx0cmV0dXJuIDA7XFxuMTY5NjpcXHRlcnI6XFxuMTY5NzpcXHRcXHRnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7XFxuMTY5ODpcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuMTY5OTpcXHR9XFxuMTcwMDpcXHRcXG4xNzAxOlxcdHN0YXRpYyBpbnQgY3RybF9kdW1wcG9saWN5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4xNzAyOlxcdHtcXG4xNzAzOlxcdFxcdHN0cnVjdCBjdHJsX2R1bXBfcG9saWN5X2N0eCAqY3R4ID0gKHZvaWQgKiljYi1cXHUwMDNlY3R4O1xcbjE3MDQ6XFx0XFx0dm9pZCAqaGRyO1xcbjE3MDU6XFx0XFxuMTcwNjpcXHRcXHRpZiAoY3R4LVxcdTAwM2VkdW1wX21hcCkge1xcbjE3MDc6XFx0XFx0XFx0aWYgKGN0eC1cXHUwMDNlc2luZ2xlX29wKSB7XFxuMTcwODpcXHRcXHRcXHRcXHRzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZG9pdCwgZHVtcGl0O1xcbjE3MDk6XFx0XFxuMTcxMDpcXHRcXHRcXHRcXHRpZiAoV0FSTl9PTihnZW5sX2dldF9jbWRfYm90aChjdHgtXFx1MDAzZW9wLCBjdHgtXFx1MDAzZXJ0LFxcbjE3MTE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmRvaXQsIFxcdTAwMjZkdW1waXQpKSlcXG4xNzEyOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjE3MTM6XFx0XFxuMTcxNDpcXHRcXHRcXHRcXHRpZiAoY3RybF9kdW1wcG9saWN5X3B1dF9vcChza2IsIGNiLCBcXHUwMDI2ZG9pdCwgXFx1MDAyNmR1bXBpdCkpXFxuMTcxNTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMTcxNjpcXHRcXG4xNzE3OlxcdFxcdFxcdFxcdC8qIGRvbmUgd2l0aCB0aGUgcGVyLW9wIHBvbGljeSBpbmRleCBsaXN0ICovXFxuMTcxODpcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZWR1bXBfbWFwID0gMDtcXG4xNzE5OlxcdFxcdFxcdH1cXG4xNzIwOlxcdFxcbjE3MjE6XFx0XFx0XFx0d2hpbGUgKGN0eC1cXHUwMDNlZHVtcF9tYXApIHtcXG4xNzIyOlxcdFxcdFxcdFxcdGlmIChjdHJsX2R1bXBwb2xpY3lfcHV0X29wKHNrYiwgY2IsXFxuMTcyMzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2Y3R4LVxcdTAwM2VvcF9pdGVyLVxcdTAwM2Vkb2l0LFxcbjE3MjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmN0eC1cXHUwMDNlb3BfaXRlci1cXHUwMDNlZHVtcGl0KSlcXG4xNzI1OlxcdFxcdFxcdFxcdFxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4xNzI2OlxcdFxcbjE3Mjc6XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VkdW1wX21hcCA9IGdlbmxfb3BfaXRlcl9uZXh0KGN0eC1cXHUwMDNlb3BfaXRlcik7XFxuMTcyODpcXHRcXHRcXHR9XFxuMTcyOTpcXHRcXHR9XFxuMTczMDpcXHRcXG4xNzMxOlxcdFxcdHdoaWxlIChuZXRsaW5rX3BvbGljeV9kdW1wX2xvb3AoY3R4LVxcdTAwM2VzdGF0ZSkpIHtcXG4xNzMyOlxcdFxcdFxcdHN0cnVjdCBubGF0dHIgKm5lc3Q7XFxuMTczMzpcXHRcXG4xNzM0OlxcdFxcdFxcdGhkciA9IGN0cmxfZHVtcHBvbGljeV9wcmVwKHNrYiwgY2IpO1xcbjE3MzU6XFx0XFx0XFx0aWYgKCFoZHIpXFxuMTczNjpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4xNzM3OlxcdFxcbjE3Mzg6XFx0XFx0XFx0bmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgQ1RSTF9BVFRSX1BPTElDWSk7XFxuMTczOTpcXHRcXHRcXHRpZiAoIW5lc3QpXFxuMTc0MDpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4xNzQxOlxcdFxcbjE3NDI6XFx0XFx0XFx0aWYgKG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGUoc2tiLCBjdHgtXFx1MDAzZXN0YXRlKSlcXG4xNzQzOlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjE3NDQ6XFx0XFxuMTc0NTpcXHRcXHRcXHRubGFfbmVzdF9lbmQoc2tiLCBuZXN0KTtcXG4xNzQ2OlxcdFxcbjE3NDc6XFx0XFx0XFx0Z2VubG1zZ19lbmQoc2tiLCBoZHIpO1xcbjE3NDg6XFx0XFx0fVxcbjE3NDk6XFx0XFxuMTc1MDpcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuMTc1MTpcXHRcXG4xNzUyOlxcdG5sYV9wdXRfZmFpbHVyZTpcXG4xNzUzOlxcdFxcdGdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTtcXG4xNzU0OlxcdFxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4xNzU1OlxcdH1cXG4xNzU2OlxcdFxcbjE3NTc6XFx0c3RhdGljIGludCBjdHJsX2R1bXBwb2xpY3lfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuMTc1ODpcXHR7XFxuMTc1OTpcXHRcXHRzdHJ1Y3QgY3RybF9kdW1wX3BvbGljeV9jdHggKmN0eCA9ICh2b2lkICopY2ItXFx1MDAzZWN0eDtcXG4xNzYwOlxcdFxcbjE3NjE6XFx0XFx0a2ZyZWUoY3R4LVxcdTAwM2VvcF9pdGVyKTtcXG4xNzYyOlxcdFxcdG5ldGxpbmtfcG9saWN5X2R1bXBfZnJlZShjdHgtXFx1MDAzZXN0YXRlKTtcXG4xNzYzOlxcdFxcdHJldHVybiAwO1xcbjE3NjQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzoyNC43NTYzNzU1NjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyOTQ3MDc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBmb3IgTkxBX0JFIFBvbGljaWVzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gc2VlIGlmIHdlIGhhdmUgYW55IGBOTEFfQkUxNmAgb3IgYE5MQV9CRTMyYCBwb2xpY2llcyBsdXJraW5nIGluIHRoZSBrZXJuZWwgdGhhdCBtaWdodCBiZSByaXBlIGZvciBkdW1waW5nLiBJJ2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgZ3JlcC4gSXQncyB0aGUgcXVpY2tlc3Qgd2F5IHRvIGdldCBhIGJhc2VsaW5lIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwncyBzb3VyY2UuIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzOyBhIHNpbXBsZSBzZWFyY2ggd2lsbCB0ZWxsIG1lIGlmIHRob3NlIHBvbGljaWVzIGV2ZW4gZXhpc3QgaW4gdGhlIGNvZGViYXNlLiBGcm9tIHRoZXJlLCBJIGNhbiBkZWNpZGUgaG93IHRvIHByb2NlZWQgd2l0aCB0aGUgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTAxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzoyNi42ODU4NTE4OTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1ODc4NDkxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkxBX0JFKDE2fDMyKVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9nZW5ldmUuYz0xODcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBnZW5ldmVfcG9saWN5W0lGTEFfR0VORVZFX01BWCArIDFdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTg4OS1cXHRbSUZMQV9HRU5FVkVfR1JPX0hJTlRdXFx0XFx0PSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxODkwOlxcdFtJRkxBX0dFTkVWRV9MT0NBTF1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfQkUzMiB9LFxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE4OTEtXFx0W0lGTEFfR0VORVZFX0xPQ0FMNl1cXHRcXHQ9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSxcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYz02Nj1jb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBvdnBuX3BlZXJfbmxfcG9saWN5W09WUE5fQV9QRUVSX1RYX0lEICsgMV0gPSB7XFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTY3LVxcdFtPVlBOX0FfUEVFUl9JRF0gPSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1UzMiwgXFx1MDAyNm92cG5fYV9wZWVyX2lkX3JhbmdlKSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM6Njg6XFx0W09WUE5fQV9QRUVSX1JFTU9URV9JUFY0XSA9IHsgLnR5cGUgPSBOTEFfQkUzMiwgfSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtNjktXFx0W09WUE5fQV9QRUVSX1JFTU9URV9JUFY2XSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKDE2KSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtNzAtXFx0W09WUE5fQV9QRUVSX1JFTU9URV9JUFY2X1NDT1BFX0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzo3MTpcXHRbT1ZQTl9BX1BFRVJfUkVNT1RFX1BPUlRdID0gTkxBX1BPTElDWV9NSU4oTkxBX0JFMTYsIDEpLFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy03Mi1cXHRbT1ZQTl9BX1BFRVJfU09DS0VUXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy03My1cXHRbT1ZQTl9BX1BFRVJfU09DS0VUX05FVE5TSURdID0geyAudHlwZSA9IE5MQV9TMzIsIH0sXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jOjc0OlxcdFtPVlBOX0FfUEVFUl9WUE5fSVBWNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTc1LVxcdFtPVlBOX0FfUEVFUl9WUE5fSVBWNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jOjc2OlxcdFtPVlBOX0FfUEVFUl9MT0NBTF9JUFY0XSA9IHsgLnR5cGUgPSBOTEFfQkUzMiwgfSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtNzctXFx0W09WUE5fQV9QRUVSX0xPQ0FMX0lQVjZdID0gTkxBX1BPTElDWV9FWEFDVF9MRU4oMTYpLFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzo3ODpcXHRbT1ZQTl9BX1BFRVJfTE9DQUxfUE9SVF0gPSBOTEFfUE9MSUNZX01JTihOTEFfQkUxNiwgMSksXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTc5LVxcdFtPVlBOX0FfUEVFUl9LRUVQQUxJVkVfSU5URVJWQUxdID0gTkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VMzIsIFxcdTAwMjZvdnBuX2FfcGVlcl9rZWVwYWxpdmVfaW50ZXJ2YWxfcmFuZ2UpLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jPTk3PWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG92cG5fcGVlcl9uZXdfaW5wdXRfbmxfcG9saWN5W09WUE5fQV9QRUVSX1RYX0lEICsgMV0gPSB7XFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTk4LVxcdFtPVlBOX0FfUEVFUl9JRF0gPSBOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1UzMiwgXFx1MDAyNm92cG5fYV9wZWVyX2lkX3JhbmdlKSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM6OTk6XFx0W09WUE5fQV9QRUVSX1JFTU9URV9JUFY0XSA9IHsgLnR5cGUgPSBOTEFfQkUzMiwgfSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtMTAwLVxcdFtPVlBOX0FfUEVFUl9SRU1PVEVfSVBWNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTEwMS1cXHRbT1ZQTl9BX1BFRVJfUkVNT1RFX0lQVjZfU0NPUEVfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jOjEwMjpcXHRbT1ZQTl9BX1BFRVJfUkVNT1RFX1BPUlRdID0gTkxBX1BPTElDWV9NSU4oTkxBX0JFMTYsIDEpLFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy0xMDMtXFx0W09WUE5fQV9QRUVSX1NPQ0tFVF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmM6MTA0OlxcdFtPVlBOX0FfUEVFUl9WUE5fSVBWNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTEwNS1cXHRbT1ZQTl9BX1BFRVJfVlBOX0lQVjZdID0gTkxBX1BPTElDWV9FWEFDVF9MRU4oMTYpLFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzoxMDY6XFx0W09WUE5fQV9QRUVSX0xPQ0FMX0lQVjRdID0geyAudHlwZSA9IE5MQV9CRTMyLCB9LFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy0xMDctXFx0W09WUE5fQV9QRUVSX0xPQ0FMX0lQVjZdID0gTkxBX1BPTElDWV9FWEFDVF9MRU4oMTYpLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jPTExMz1jb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBvdnBuX3BlZXJfc2V0X2lucHV0X25sX3BvbGljeVtPVlBOX0FfUEVFUl9UWF9JRCArIDFdID0ge1xcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYy0xMTQtXFx0W09WUE5fQV9QRUVSX0lEXSA9IE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCBcXHUwMDI2b3Zwbl9hX3BlZXJfaWRfcmFuZ2UpLFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzoxMTU6XFx0W09WUE5fQV9QRUVSX1JFTU9URV9JUFY0XSA9IHsgLnR5cGUgPSBOTEFfQkUzMiwgfSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtMTE2LVxcdFtPVlBOX0FfUEVFUl9SRU1PVEVfSVBWNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTExNy1cXHRbT1ZQTl9BX1BFRVJfUkVNT1RFX0lQVjZfU0NPUEVfSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jOjExODpcXHRbT1ZQTl9BX1BFRVJfUkVNT1RFX1BPUlRdID0gTkxBX1BPTElDWV9NSU4oTkxBX0JFMTYsIDEpLFxcbmRyaXZlcnMvbmV0L292cG4vbmV0bGluay1nZW4uYzoxMTk6XFx0W09WUE5fQV9QRUVSX1ZQTl9JUFY0XSA9IHsgLnR5cGUgPSBOTEFfQkUzMiwgfSxcXG5kcml2ZXJzL25ldC9vdnBuL25ldGxpbmstZ2VuLmMtMTIwLVxcdFtPVlBOX0FfUEVFUl9WUE5fSVBWNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jOjEyMTpcXHRbT1ZQTl9BX1BFRVJfTE9DQUxfSVBWNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXFxuZHJpdmVycy9uZXQvb3Zwbi9uZXRsaW5rLWdlbi5jLTEyMi1cXHRbT1ZQTl9BX1BFRVJfTE9DQUxfSVBWNl0gPSBOTEFfUE9MSUNZX0VYQUNUX0xFTigxNiksXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg9MTc3PWVudW0ge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTE5NS1cXHROTEFfUkVKRUNULFxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDoxOTY6XFx0TkxBX0JFMTYsXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oOjE5NzpcXHROTEFfQkUzMixcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtMTk4LVxcdE5MQV9TSU5ULFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oPTIxMz1lbnVtIG5sYV9wb2xpY3lfdmFsaWRhdGlvbiB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtMjUwLSAqICAgIE5MQV9TMzIsIE5MQV9TNjQsXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oOjI1MTogKiAgICBOTEFfQkUxNiwgTkxBX0JFMzIsXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTI1Mi0gKiAgICBOTEFfTVNFQ1MgICAgICAgICAgICBMZWF2aW5nIHRoZSBsZW5ndGggZmllbGQgemVybyB3aWxsIHZlcmlmeSB0aGVcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0yODItICogICAgTkxBX1U2NCxcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6MjgzOiAqICAgIE5MQV9CRTE2LFxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDoyODQ6ICogICAgTkxBX0JFMzIsXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTI4NS0gKiAgICBOTEFfU0lOVCxcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaD0zNDY9c3RydWN0IG5sYV9wb2xpY3kge1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTQwNS1cXHQgdHAgPT0gTkxBX1U2NCB8fCB0cCA9PSBOTEFfVUlOVCB8fFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmg6NDA2OlxcdCB0cCA9PSBOTEFfQkUxNiB8fCB0cCA9PSBOTEFfQkUzMilcXG5pbmNsdWRlL25ldC9uZXRsaW5rLmgtNDA3LSNkZWZpbmUgX19OTEFfSVNfU0lOVF9UWVBFKHRwKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmxpYi9ubGF0dHIuYz0yND1zdGF0aWMgY29uc3QgdTggbmxhX2F0dHJfbGVuW05MQV9UWVBFX01BWCsxXSA9IHtcXG4tLVxcbmxpYi9ubGF0dHIuYy0zMi1cXHRbTkxBX1M2NF1cXHQ9IHNpemVvZihzNjQpLFxcbmxpYi9ubGF0dHIuYzozMzpcXHRbTkxBX0JFMTZdXFx0PSBzaXplb2YoX19iZTE2KSxcXG5saWIvbmxhdHRyLmM6MzQ6XFx0W05MQV9CRTMyXVxcdD0gc2l6ZW9mKF9fYmUzMiksXFxubGliL25sYXR0ci5jLTM1LX07XFxuLS1cXG5saWIvbmxhdHRyLmM9Mzc9c3RhdGljIGNvbnN0IHU4IG5sYV9hdHRyX21pbmxlbltOTEFfVFlQRV9NQVgrMV0gPSB7XFxuLS1cXG5saWIvbmxhdHRyLmMtNDctXFx0W05MQV9TNjRdXFx0PSBzaXplb2YoczY0KSxcXG5saWIvbmxhdHRyLmM6NDg6XFx0W05MQV9CRTE2XVxcdD0gc2l6ZW9mKF9fYmUxNiksXFxubGliL25sYXR0ci5jOjQ5OlxcdFtOTEFfQkUzMl1cXHQ9IHNpemVvZihfX2JlMzIpLFxcbmxpYi9ubGF0dHIuYy01MC19O1xcbi0tXFxubGliL25sYXR0ci5jPTExOT12b2lkIG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxcbi0tXFxubGliL25sYXR0ci5jLTEzMS1cXHRjYXNlIE5MQV9VMTY6XFxubGliL25sYXR0ci5jOjEzMjpcXHRjYXNlIE5MQV9CRTE2OlxcbmxpYi9ubGF0dHIuYy0xMzMtXFx0Y2FzZSBOTEFfQklOQVJZOlxcbi0tXFxubGliL25sYXR0ci5jLTEzNi1cXHRjYXNlIE5MQV9VMzI6XFxubGliL25sYXR0ci5jOjEzNzpcXHRjYXNlIE5MQV9CRTMyOlxcbmxpYi9ubGF0dHIuYy0xMzgtXFx0XFx0cmFuZ2UtXFx1MDAzZW1heCA9IFUzMl9NQVg7XFxuLS1cXG5saWIvbmxhdHRyLmM9MTcwPXN0YXRpYyBpbnQgbmxhX3ZhbGlkYXRlX3JhbmdlX3Vuc2lnbmVkKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdCxcXG4tLVxcbmxpYi9ubGF0dHIuYy0xOTktXFx0XFx0YnJlYWs7XFxubGliL25sYXR0ci5jOjIwMDpcXHRjYXNlIE5MQV9CRTE2OlxcbmxpYi9ubGF0dHIuYy0yMDEtXFx0XFx0dmFsdWUgPSBudG9ocyhubGFfZ2V0X2JlMTYobmxhKSk7XFxubGliL25sYXR0ci5jLTIwMi1cXHRcXHRicmVhaztcXG5saWIvbmxhdHRyLmM6MjAzOlxcdGNhc2UgTkxBX0JFMzI6XFxubGliL25sYXR0ci5jLTIwNC1cXHRcXHR2YWx1ZSA9IG50b2hsKG5sYV9nZXRfYmUzMihubGEpKTtcXG4tLVxcbmxpYi9ubGF0dHIuYz0zMjU9c3RhdGljIGludCBubGFfdmFsaWRhdGVfaW50X3JhbmdlKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdCxcXG4tLVxcbmxpYi9ubGF0dHIuYy0zMzctXFx0Y2FzZSBOTEFfQklOQVJZOlxcbmxpYi9ubGF0dHIuYzozMzg6XFx0Y2FzZSBOTEFfQkUxNjpcXG5saWIvbmxhdHRyLmM6MzM5OlxcdGNhc2UgTkxBX0JFMzI6XFxubGliL25sYXR0ci5jLTM0MC1cXHRcXHRyZXR1cm4gbmxhX3ZhbGlkYXRlX3JhbmdlX3Vuc2lnbmVkKHB0LCBubGEsIGV4dGFjaywgdmFsaWRhdGUpO1xcbi0tXFxubGliL25sYXR0ci5jPTM1Mz1zdGF0aWMgaW50IG5sYV92YWxpZGF0ZV9tYXNrKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdCxcXG4tLVxcbmxpYi9ubGF0dHIuYy0zNzQtXFx0XFx0YnJlYWs7XFxubGliL25sYXR0ci5jOjM3NTpcXHRjYXNlIE5MQV9CRTE2OlxcbmxpYi9ubGF0dHIuYy0zNzYtXFx0XFx0dmFsdWUgPSBudG9ocyhubGFfZ2V0X2JlMTYobmxhKSk7XFxubGliL25sYXR0ci5jLTM3Ny1cXHRcXHRicmVhaztcXG5saWIvbmxhdHRyLmM6Mzc4OlxcdGNhc2UgTkxBX0JFMzI6XFxubGliL25sYXR0ci5jLTM3OS1cXHRcXHR2YWx1ZSA9IG50b2hsKG5sYV9nZXRfYmUzMihubGEpKTtcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jPTg0OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZmliX3J1bGVfcG9saWN5W0ZSQV9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jLTg2OC1cXHRbRlJBX0RTQ1BdXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIElORVRfRFNDUF9NQVNLIFxcdTAwM2VcXHUwMDNlIDIpLFxcbm5ldC9jb3JlL2ZpYl9ydWxlcy5jOjg2OTpcXHRbRlJBX0ZMT1dMQUJFTF0gPSB7IC50eXBlID0gTkxBX0JFMzIgfSxcXG5uZXQvY29yZS9maWJfcnVsZXMuYzo4NzA6XFx0W0ZSQV9GTE9XTEFCRUxfTUFTS10gPSB7IC50eXBlID0gTkxBX0JFMzIgfSxcXG5uZXQvY29yZS9maWJfcnVsZXMuYy04NzEtXFx0W0ZSQV9TUE9SVF9NQVNLXSA9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXFxuLS1cXG5uZXQvaXB2NC9mb3VfbmwuYz0xNT1jb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBmb3VfbmxfcG9saWN5W0ZPVV9BVFRSX0lGSU5ERVggKyAxXSA9IHtcXG5uZXQvaXB2NC9mb3VfbmwuYzoxNjpcXHRbRk9VX0FUVFJfUE9SVF0gPSB7IC50eXBlID0gTkxBX0JFMTYsIH0sXFxubmV0L2lwdjQvZm91X25sLmMtMTctXFx0W0ZPVV9BVFRSX0FGXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sXFxuLS1cXG5uZXQvaXB2NC9mb3VfbmwuYy0yMC1cXHRbRk9VX0FUVFJfUkVNQ1NVTV9OT1BBUlRJQUxdID0geyAudHlwZSA9IE5MQV9GTEFHLCB9LFxcbm5ldC9pcHY0L2ZvdV9ubC5jOjIxOlxcdFtGT1VfQVRUUl9MT0NBTF9WNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXFxubmV0L2lwdjQvZm91X25sLmMtMjItXFx0W0ZPVV9BVFRSX0xPQ0FMX1Y2XSA9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKDE2KSxcXG5uZXQvaXB2NC9mb3VfbmwuYzoyMzpcXHRbRk9VX0FUVFJfUEVFUl9WNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXFxubmV0L2lwdjQvZm91X25sLmMtMjQtXFx0W0ZPVV9BVFRSX1BFRVJfVjZdID0gTkxBX1BPTElDWV9FWEFDVF9MRU4oMTYpLFxcbm5ldC9pcHY0L2ZvdV9ubC5jOjI1OlxcdFtGT1VfQVRUUl9QRUVSX1BPUlRdID0geyAudHlwZSA9IE5MQV9CRTE2LCB9LFxcbm5ldC9pcHY0L2ZvdV9ubC5jLTI2LVxcdFtGT1VfQVRUUl9JRklOREVYXSA9IHsgLnR5cGUgPSBOTEFfUzMyLCB9LFxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jPTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBydG1fbmhfcG9saWN5X25ld1tdID0ge1xcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTQxLVxcdFtOSEFfRkRCXVxcdFxcdD0geyAudHlwZSA9IE5MQV9GTEFHIH0sXFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyOlxcdFtOSEFfRFNUX1BPUlRdXFx0XFx0PSBOTEFfUE9MSUNZX01JTihOTEFfQkUxNiwgMSksXFxubmV0L2lwdjQvbmV4dGhvcC5jLTQzLVxcdFtOSEFfUkVTX0dST1VQXVxcdFxcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRtX2lwdjZfcG9saWN5W1JUQV9NQVgrMV0gPSB7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTUxNDQtXFx0W1JUQV9OSF9JRF1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxubmV0L2lwdjYvcm91dGUuYzo1MTQ1OlxcdFtSVEFfRkxPV0xBQkVMXVxcdFxcdD0geyAudHlwZSA9IE5MQV9CRTMyIH0sXFxubmV0L2lwdjYvcm91dGUuYy01MTQ2LX07XFxuLS1cXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmM9MTU9Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbXB0Y3BfcG1fYWRkcmVzc19ubF9wb2xpY3lbTVBUQ1BfUE1fQUREUl9BVFRSX0lGX0lEWCArIDFdID0ge1xcbi0tXFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5jLTE3LVxcdFtNUFRDUF9QTV9BRERSX0FUVFJfSURdID0geyAudHlwZSA9IE5MQV9VOCwgfSxcXG5uZXQvbXB0Y3AvbXB0Y3BfcG1fZ2VuLmM6MTg6XFx0W01QVENQX1BNX0FERFJfQVRUUl9BRERSNF0gPSB7IC50eXBlID0gTkxBX0JFMzIsIH0sXFxubmV0L21wdGNwL21wdGNwX3BtX2dlbi5jLTE5LVxcdFtNUFRDUF9QTV9BRERSX0FUVFJfQUREUjZdID0gTkxBX1BPTElDWV9FWEFDVF9MRU4oMTYpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTI2MTU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV4cF9ubGFfcG9saWN5W0NUQV9FWFBFQ1RfTUFYKzFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI2MjMtXFx0W0NUQV9FWFBFQ1RfWk9ORV1cXHQ9IHsgLnR5cGUgPSBOTEFfVTE2IH0sXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjI2MjQ6XFx0W0NUQV9FWFBFQ1RfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GX0NUX0VYUEVDVF9NQVNLKSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjYyNS1cXHRbQ1RBX0VYUEVDVF9DTEFTU11cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzQ3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXhwX25hdF9ubGFfcG9saWN5W0NUQV9FWFBFQ1RfTkFUX01BWCsxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MzQ4MDpcXHRbQ1RBX0VYUEVDVF9OQVRfRElSXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIElQX0NUX0RJUl9SRVBMWSksXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0ODEtXFx0W0NUQV9FWFBFQ1RfTkFUX1RVUExFXVxcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF90YWJsZV9wb2xpY3lbTkZUQV9UQUJMRV9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTUtXFx0XFx0XFx0XFx0ICAgIC5sZW4gPSBORlRfVEFCTEVfTUFYTkFNRUxFTiAtIDEgfSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTU2OlxcdFtORlRBX1RBQkxFX0ZMQUdTXVxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfVEFCTEVfRl9NQVNLKSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTU3LVxcdFtORlRBX1RBQkxFX0hBTkRMRV1cXHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xOTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfY2hhaW5fcG9saWN5W05GVEFfQ0hBSU5fTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xOTI4LVxcdFtORlRBX0NIQUlOX0NPVU5URVJTXVxcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxOTI5OlxcdFtORlRBX0NIQUlOX0ZMQUdTXVxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfQ0hBSU5fRkxBR1MpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE5MzAtXFx0W05GVEFfQ0hBSU5fSURdXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDczNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3NldF9wb2xpY3lbTkZUQV9TRVRfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NzQxLVxcdFxcdFxcdFxcdFxcdCAgICAubGVuID0gTkZUX1NFVF9NQVhOQU1FTEVOIC0gMSB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQ3NDI6XFx0W05GVEFfU0VUX0ZMQUdTXVxcdFxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ3NDMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBORlRfU0VUX0FOT05ZTU9VUyB8XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02MDgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfc2V0X2VsZW1fcG9saWN5W05GVEFfU0VUX0VMRU1fTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02MDgyLVxcdFtORlRBX1NFVF9FTEVNX0RBVEFdXFx0XFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjYwODM6XFx0W05GVEFfU0VUX0VMRU1fRkxBR1NdXFx0XFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9TRVRfRUxFTV9JTlRFUlZBTF9FTkQgfFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTYwODQtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIE5GVF9TRVRfRUxFTV9DQVRDSEFMTCksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04ODA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfZmxvd3RhYmxlX3BvbGljeVtORlRBX0ZMT1dUQUJMRV9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg4MTUtXFx0W05GVEFfRkxPV1RBQkxFX0hBTkRMRV1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODgxNjpcXHRbTkZUQV9GTE9XVEFCTEVfRkxBR1NdXFx0XFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9GTE9XVEFCTEVfTUFTSyksXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODgxNy19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5jPTM3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZubF9hY2N0X3BvbGljeVtORkFDQ1RfTUFYKzFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5jLTM3NS1cXHRbTkZBQ0NUX1BLVFNdID0geyAudHlwZSA9IE5MQV9VNjQgfSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19hY2N0LmM6Mzc2OlxcdFtORkFDQ1RfRkxBR1NdID0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORkFDQ1RfRl9RVU9UQSksXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfYWNjdC5jLTM3Ny1cXHRbTkZBQ0NUX1FVT1RBXSA9IHsgLnR5cGUgPSBOTEFfVTY0IH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZm5sX2N0aGVscGVyX3R1cGxlX3BvbFtORkNUSF9UVVBMRV9NQVgrMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzo3MDpcXHRbTkZDVEhfVFVQTEVfTDNQUk9UT05VTV0gPSBOTEFfUE9MSUNZX01BWChOTEFfQkUxNiwgTkZQUk9UT19JUFY2KSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTcxLVxcdFtORkNUSF9UVVBMRV9MNFBST1RPTlVNXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTE3OD1uZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lfc2V0W05GQ1RIX1BPTElDWV9TRVRfTUFYKzFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTc5OlxcdFtORkNUSF9QT0xJQ1lfU0VUX05VTV0gPSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZfQ1RfTUFYX0VYUEVDVF9DTEFTU0VTKSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE4MC19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZm5sX2hvb2tfbmxhX3BvbGljeVtORk5MQV9IT09LX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzoyNzpcXHRbTkZOTEFfSE9PS19IT09LTlVNXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTI4LVxcdFtORk5MQV9IT09LX1BSSU9SSVRZXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jPTkwMD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ1bGFfY2ZnX3BvbGljeVtORlVMQV9DRkdfTUFYKzFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtOTA1LVxcdFtORlVMQV9DRkdfTkxCVUZTSVpdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jOjkwNjpcXHRbTkZVTEFfQ0ZHX0ZMQUdTXVxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTE2LCBORlVMTkxfQ0ZHX0ZfU0VRIHxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy05MDctXFx0XFx0XFx0XFx0XFx0XFx0ICBORlVMTkxfQ0ZHX0ZfU0VRX0dMT0JBTCB8XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE4NTg9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mcWFfY2ZnX3BvbGljeVtORlFBX0NGR19NQVgrMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE4NjItXFx0W05GUUFfQ0ZHX01BU0tdXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTg2MzpcXHRbTkZRQV9DRkdfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GUUFfQ0ZHX0ZfTUFYIC0gMSksXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xODY0LX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmM9MTMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfYml0d2lzZV9wb2xpY3lbTkZUQV9CSVRXSVNFX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYzoxMzI6XFx0W05GVEFfQklUV0lTRV9TUkVHXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYzoxMzM6XFx0W05GVEFfQklUV0lTRV9TUkVHMl1cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmM6MTM0OlxcdFtORlRBX0JJVFdJU0VfRFJFR11cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmMtMTM1LVxcdFtORlRBX0JJVFdJU0VfTEVOXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYy0xMzctXFx0W05GVEFfQklUV0lTRV9YT1JdXFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYzoxMzg6XFx0W05GVEFfQklUV0lTRV9PUF1cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYy0xMzktXFx0W05GVEFfQklUV0lTRV9EQVRBXVxcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2J5dGVvcmRlci5jPTc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfYnl0ZW9yZGVyX3BvbGljeVtORlRBX0JZVEVPUkRFUl9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9ieXRlb3JkZXIuYzo3NjpcXHRbTkZUQV9CWVRFT1JERVJfU1JFR11cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9ieXRlb3JkZXIuYzo3NzpcXHRbTkZUQV9CWVRFT1JERVJfRFJFR11cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9ieXRlb3JkZXIuYzo3ODpcXHRbTkZUQV9CWVRFT1JERVJfT1BdXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9ieXRlb3JkZXIuYzo3OTpcXHRbTkZUQV9CWVRFT1JERVJfTEVOXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXFxubmV0L25ldGZpbHRlci9uZnRfYnl0ZW9yZGVyLmM6ODA6XFx0W05GVEFfQllURU9SREVSX1NJWkVdXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9ieXRlb3JkZXIuYy04MS19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM9NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9jbXBfcG9saWN5W05GVEFfQ01QX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jOjY3OlxcdFtORlRBX0NNUF9TUkVHXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTY4LVxcdFtORlRBX0NNUF9PUF1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYz0xMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF90YXJnZXRfcG9saWN5W05GVEFfVEFSR0VUX01BWCArIDFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMtMTM4LVxcdFxcdFxcdFxcdCAgICAubGVuID0gWFRfRVhURU5TSU9OX01BWE5BTUVMRU4sIH0sXFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmM6MTM5OlxcdFtORlRBX1RBUkdFVF9SRVZdXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy0xNDAtXFx0W05GVEFfVEFSR0VUX0lORk9dXFx0PSB7IC50eXBlID0gTkxBX0JJTkFSWSB9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmM9MTk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfcnVsZV9jb21wYXRfcG9saWN5W05GVEFfUlVMRV9DT01QQVRfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMtMTk3LVxcdFtORlRBX1JVTEVfQ09NUEFUX1BST1RPXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYzoxOTg6XFx0W05GVEFfUlVMRV9DT01QQVRfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9SVUxFX0NPTVBBVF9GX01BU0spLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jLTE5OS19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmM9NDYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfbWF0Y2hfcG9saWN5W05GVEFfTUFUQ0hfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy00NjMtXFx0XFx0XFx0XFx0ICAgIC5sZW4gPSBYVF9FWFRFTlNJT05fTUFYTkFNRUxFTiB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvbXBhdC5jOjQ2NDpcXHRbTkZUQV9NQVRDSF9SRVZdXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy00NjUtXFx0W05GVEFfTUFUQ0hfSU5GT11cXHQ9IHsgLnR5cGUgPSBOTEFfQklOQVJZIH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYz03OTc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mbmxfY29tcGF0X3BvbGljeV9nZXRbTkZUQV9DT01QQVRfTUFYKzFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmMtNzk5LVxcdFxcdFxcdFxcdCAgICAubGVuID0gTkZUX0NPTVBBVF9OQU1FX01BWC0xIH0sXFxubmV0L25ldGZpbHRlci9uZnRfY29tcGF0LmM6ODAwOlxcdFtORlRBX0NPTVBBVF9SRVZdXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb21wYXQuYy04MDEtXFx0W05GVEFfQ09NUEFUX1RZUEVdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY29ubmxpbWl0LmM9MTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfY29ubmxpbWl0X3BvbGljeVtORlRBX0NPTk5MSU1JVF9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYy0xNjEtXFx0W05GVEFfQ09OTkxJTUlUX0NPVU5UXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYzoxNjI6XFx0W05GVEFfQ09OTkxJTUlUX0ZMQUdTXVxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfQ09OTkxJTUlUX0ZfSU5WKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb25ubGltaXQuYy0xNjMtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MzM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfY3RfcG9saWN5W05GVEFfQ1RfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzozMzc6XFx0W05GVEFfQ1RfRFJFR11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjMzODpcXHRbTkZUQV9DVF9LRVldXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTMzOS1cXHRbTkZUQV9DVF9ESVJFQ1RJT05dXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIElQX0NUX0RJUl9SRVBMWSksXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzozNDA6XFx0W05GVEFfQ1RfU1JFR11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTM0MS19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmM9MTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfZHluc2V0X3BvbGljeVtORlRBX0RZTlNFVF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTE2MS1cXHRbTkZUQV9EWU5TRVRfU0VUX0lEXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYzoxNjI6XFx0W05GVEFfRFlOU0VUX09QXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtMTYzLVxcdFtORlRBX0RZTlNFVF9TUkVHX0tFWV1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYy0xNjYtXFx0W05GVEFfRFlOU0VUX0VYUFJdXFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jOjE2NzpcXHRbTkZUQV9EWU5TRVRfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9EWU5TRVRfRl9JTlYgfFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTE2OC1cXHRcXHRcXHRcXHRcXHRcXHQgIE5GVF9EWU5TRVRfRl9FWFBSKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2V4dGhkci5jPTQ4OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2V4dGhkcl9wb2xpY3lbTkZUQV9FWFRIRFJfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZnRfZXh0aGRyLmM6NDg5OlxcdFtORlRBX0VYVEhEUl9EUkVHXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2V4dGhkci5jLTQ5MC1cXHRbTkZUQV9FWFRIRFJfVFlQRV1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTggfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9leHRoZHIuYy00OTEtXFx0W05GVEFfRVhUSERSX09GRlNFVF1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxubmV0L25ldGZpbHRlci9uZnRfZXh0aGRyLmM6NDkyOlxcdFtORlRBX0VYVEhEUl9MRU5dXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9leHRoZHIuYzo0OTM6XFx0W05GVEFfRVhUSERSX0ZMQUdTXVxcdFxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfRVhUSERSX0ZfUFJFU0VOVCksXFxubmV0L25ldGZpbHRlci9uZnRfZXh0aGRyLmM6NDk0OlxcdFtORlRBX0VYVEhEUl9PUF1cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2V4dGhkci5jOjQ5NTpcXHRbTkZUQV9FWFRIRFJfU1JFR11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9leHRoZHIuYy00OTYtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jPTIxPWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9maWJfcG9saWN5W05GVEFfRklCX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jOjIyOlxcdFtORlRBX0ZJQl9EUkVHXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jLTIzLVxcdFtORlRBX0ZJQl9SRVNVTFRdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jLTI0LVxcdFtORlRBX0ZJQl9GTEFHU11cXHQ9XFxubmV0L25ldGZpbHRlci9uZnRfZmliLmM6MjU6XFx0XFx0TkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRBX0ZJQl9GX0FMTCksXFxubmV0L25ldGZpbHRlci9uZnRfZmliLmMtMjYtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYz00MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2Z3ZF9uZXRkZXZfcG9saWN5W05GVEFfRldEX01BWCArIDFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jLTQyLVxcdFtORlRBX0ZXRF9TUkVHX0FERFJdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYzo0MzpcXHRbTkZUQV9GV0RfTkZQUk9UT11cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYy00NC19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfaGFzaC5jPTYwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfaGFzaF9wb2xpY3lbTkZUQV9IQVNIX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2hhc2guYzo2MTpcXHRbTkZUQV9IQVNIX1NSRUddXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfaGFzaC5jOjYyOlxcdFtORlRBX0hBU0hfRFJFR11cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9oYXNoLmM6NjM6XFx0W05GVEFfSEFTSF9MRU5dXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9oYXNoLmMtNjQtXFx0W05GVEFfSEFTSF9NT0RVTFVTXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ltbWVkaWF0ZS5jPTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfaW1tZWRpYXRlX3BvbGljeVtORlRBX0lNTUVESUFURV9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9pbW1lZGlhdGUuYzoyODpcXHRbTkZUQV9JTU1FRElBVEVfRFJFR11cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9pbW1lZGlhdGUuYy0yOS1cXHRbTkZUQV9JTU1FRElBVEVfREFUQV1cXHQ9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jPTMyMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2lubmVyX3BvbGljeVtORlRBX0lOTkVSX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMzIyLVxcdFtORlRBX0lOTkVSX05VTV1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYzozMjM6XFx0W05GVEFfSU5ORVJfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9JTk5FUl9NQVNLKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTMyNC1cXHRbTkZUQV9JTk5FUl9IRFJTSVpFXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2xpbWl0LmM9MTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfbGltaXRfcG9saWN5W05GVEFfTElNSVRfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9saW1pdC5jLTE5MS1cXHRbTkZUQV9MSU1JVF9UWVBFXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9saW1pdC5jOjE5MjpcXHRbTkZUQV9MSU1JVF9GTEFHU11cXHQ9IE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZUX0xJTUlUX0ZfSU5WKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9saW1pdC5jLTE5My19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbG9nLmM9NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9sb2dfcG9saWN5W05GVEFfTE9HX01BWCArIDFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbG9nLmMtNzEtXFx0W05GVEFfTE9HX0xFVkVMXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9sb2cuYzo3MjpcXHRbTkZUQV9MT0dfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GX0xPR19NQVNLKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9sb2cuYy03My19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbG9va3VwLmM9MTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfbG9va3VwX3BvbGljeVtORlRBX0xPT0tVUF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jLTEyNy1cXHRbTkZUQV9MT09LVVBfU0VUX0lEXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9sb29rdXAuYzoxMjg6XFx0W05GVEFfTE9PS1VQX1NSRUddXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfbG9va3VwLmM6MTI5OlxcdFtORlRBX0xPT0tVUF9EUkVHXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jLTEzMC1cXHRbTkZUQV9MT09LVVBfRkxBR1NdXFx0PVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jOjEzMTpcXHRcXHROTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9MT09LVVBfRl9JTlYpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2xvb2t1cC5jLTEzMi19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbWFzcS5jPTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfbWFzcV9wb2xpY3lbTkZUQV9NQVNRX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X21hc3EuYy0yMy1cXHRbTkZUQV9NQVNRX0ZMQUdTXVxcdFxcdD1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tYXNxLmM6MjQ6XFx0XFx0TkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORl9OQVRfUkFOR0VfTUFTSyksXFxubmV0L25ldGZpbHRlci9uZnRfbWFzcS5jLTI1LVxcdFtORlRBX01BU1FfUkVHX1BST1RPX01JTl1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9tZXRhLmM9NTE2PWNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9tZXRhX3BvbGljeVtORlRBX01FVEFfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjUxNzpcXHRbTkZUQV9NRVRBX0RSRUddXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjUxODpcXHRbTkZUQV9NRVRBX0tFWV1cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYzo1MTk6XFx0W05GVEFfTUVUQV9TUkVHXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy01MjAtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X25hdC5jPTEyOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X25hdF9wb2xpY3lbTkZUQV9OQVRfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9uYXQuYy0xMzUtXFx0W05GVEFfTkFUX0ZMQUdTXVxcdCA9XFxubmV0L25ldGZpbHRlci9uZnRfbmF0LmM6MTM2OlxcdFxcdE5MQV9QT0xJQ1lfTUFTSyhOTEFfQkUzMiwgTkZfTkFUX1JBTkdFX01BU0spLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X25hdC5jLTEzNy19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfbnVtZ2VuLmM9NDU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9uZ19wb2xpY3lbTkZUQV9OR19NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9udW1nZW4uYzo0NjpcXHRbTkZUQV9OR19EUkVHXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X251bWdlbi5jLTQ3LVxcdFtORlRBX05HX01PRFVMVVNdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfb2JqcmVmLmM9MjY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfb2JqcmVmX3BvbGljeVtORlRBX09CSlJFRl9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X29ianJlZi5jLTI2Ny1cXHRbTkZUQV9PQkpSRUZfSU1NX1RZUEVdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X29ianJlZi5jOjI2ODpcXHRbTkZUQV9PQkpSRUZfU0VUX1NSRUddXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfb2JqcmVmLmMtMjY5LVxcdFtORlRBX09CSlJFRl9TRVRfTkFNRV1cXHQ9IHsgLnR5cGUgPSBOTEFfU1RSSU5HLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfb3NmLmM9MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9vc2ZfcG9saWN5W05GVEFfT1NGX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X29zZi5jOjE1OlxcdFtORlRBX09TRl9EUkVHXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIE5GVF9SRUczMl9NQVgpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X29zZi5jLTE2LVxcdFtORlRBX09TRl9UVExdXFx0XFx0PSB7IC50eXBlID0gTkxBX1U4IH0sXFxubmV0L25ldGZpbHRlci9uZnRfb3NmLmM6MTc6XFx0W05GVEFfT1NGX0ZMQUdTXVxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfT1NGX0ZfVkVSU0lPTiksXFxubmV0L25ldGZpbHRlci9uZnRfb3NmLmMtMTgtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0yMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9wYXlsb2FkX3BvbGljeVtORlRBX1BBWUxPQURfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIxMjpcXHRbTkZUQV9QQVlMT0FEX1NSRUddXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIxMzpcXHRbTkZUQV9QQVlMT0FEX0RSRUddXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIxNC1cXHRbTkZUQV9QQVlMT0FEX0JBU0VdXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMTU6XFx0W05GVEFfUEFZTE9BRF9PRkZTRVRdXFx0XFx0PSB7IC50eXBlID0gTkxBX0JFMzIgfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjE2OlxcdFtORlRBX1BBWUxPQURfTEVOXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIxNy1cXHRbTkZUQV9QQVlMT0FEX0NTVU1fVFlQRV1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIxODpcXHRbTkZUQV9QQVlMT0FEX0NTVU1fT0ZGU0VUXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIxOTpcXHRbTkZUQV9QQVlMT0FEX0NTVU1fRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9QQVlMT0FEX0w0Q1NVTV9QU0VVRE9IRFIpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMjAtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3F1ZXVlLmM9OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9xdWV1ZV9wb2xpY3lbTkZUQV9RVUVVRV9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3F1ZXVlLmMtOTctXFx0W05GVEFfUVVFVUVfVE9UQUxdXFx0PSB7IC50eXBlID0gTkxBX1UxNiB9LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3F1ZXVlLmM6OTg6XFx0W05GVEFfUVVFVUVfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMTYsIE5GVF9RVUVVRV9GTEFHX01BU0spLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3F1ZXVlLmMtOTktXFx0W05GVEFfUVVFVUVfU1JFR19RTlVNXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3F1b3RhLmM9NDc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9xdW90YV9wb2xpY3lbTkZUQV9RVU9UQV9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9xdW90YS5jLTQ4LVxcdFtORlRBX1FVT1RBX0JZVEVTXVxcdD0geyAudHlwZSA9IE5MQV9VNjQgfSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9xdW90YS5jOjQ5OlxcdFtORlRBX1FVT1RBX0ZMQUdTXVxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORlRfUVVPVEFfRl9JTlYpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3F1b3RhLmMtNTAtXFx0W05GVEFfUVVPVEFfQ09OU1VNRURdXFx0PSB7IC50eXBlID0gTkxBX1U2NCB9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcmFuZ2UuYz00Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3JhbmdlX3BvbGljeVtORlRBX1JBTkdFX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3JhbmdlLmM6NDQ6XFx0W05GVEFfUkFOR0VfU1JFR11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9yYW5nZS5jOjQ1OlxcdFtORlRBX1JBTkdFX09QXVxcdFxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXFxubmV0L25ldGZpbHRlci9uZnRfcmFuZ2UuYy00Ni1cXHRbTkZUQV9SQU5HRV9GUk9NX0RBVEFdXFx0XFx0PSB7IC50eXBlID0gTkxBX05FU1RFRCB9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcmVkaXIuYz0yMj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3JlZGlyX3BvbGljeVtORlRBX1JFRElSX01BWCArIDFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcmVkaXIuYy0yNS1cXHRbTkZUQV9SRURJUl9GTEFHU11cXHRcXHQ9XFxubmV0L25ldGZpbHRlci9uZnRfcmVkaXIuYzoyNjpcXHRcXHROTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GX05BVF9SQU5HRV9NQVNLKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWRpci5jLTI3LX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWplY3QuYz0yMD1jb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfcmVqZWN0X3BvbGljeVtORlRBX1JFSkVDVF9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9yZWplY3QuYzoyMTpcXHRbTkZUQV9SRUpFQ1RfVFlQRV1cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3JlamVjdC5jLTIyLVxcdFtORlRBX1JFSkVDVF9JQ01QX0NPREVdXFx0XFx0PSB7IC50eXBlID0gTkxBX1U4IH0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9ydC5jPTEwNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3J0X3BvbGljeVtORlRBX1JUX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3J0LmM6MTA4OlxcdFtORlRBX1JUX0RSRUddXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYzoxMDk6XFx0W05GVEFfUlRfS0VZXVxcdFxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXFxubmV0L25ldGZpbHRlci9uZnRfcnQuYy0xMTAtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NvY2tldC5jPTE2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3NvY2tldF9wb2xpY3lbTkZUQV9TT0NLRVRfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZnRfc29ja2V0LmM6MTY3OlxcdFtORlRBX1NPQ0tFVF9LRVldXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgMjU1KSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9zb2NrZXQuYzoxNjg6XFx0W05GVEFfU09DS0VUX0RSRUddXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfc29ja2V0LmM6MTY5OlxcdFtORlRBX1NPQ0tFVF9MRVZFTF1cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NvY2tldC5jLTE3MC19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYz0xOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3N5bnByb3h5X3BvbGljeVtORlRBX1NZTlBST1hZX01BWCArIDFdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYy0yMC1cXHRbTkZUQV9TWU5QUk9YWV9XU0NBTEVdXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTgsIFRDUF9NQVhfV1NDQUxFKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9zeW5wcm94eS5jOjIxOlxcdFtORlRBX1NZTlBST1hZX0ZMQUdTXVxcdFxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLCBORl9TWU5QUk9YWV9PUFRfTUFTSyksXFxubmV0L25ldGZpbHRlci9uZnRfc3lucHJveHkuYy0yMi19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfdHByb3h5LmM9MTg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfdHByb3h5X3BvbGljeVtORlRBX1RQUk9YWV9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF90cHJveHkuYzoxODY6XFx0W05GVEFfVFBST1hZX0ZBTUlMWV0gICA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3Rwcm94eS5jLTE4Ny1cXHRbTkZUQV9UUFJPWFlfUkVHX0FERFJdID0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jPTY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfdHVubmVsX3BvbGljeVtORlRBX1RVTk5FTF9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF90dW5uZWwuYzo2OTpcXHRbTkZUQV9UVU5ORUxfS0VZXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX0JFMzIsIDI1NSksXFxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmM6NzA6XFx0W05GVEFfVFVOTkVMX0RSRUddXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmM6NzE6XFx0W05GVEFfVFVOTkVMX01PREVdXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1RVTk5FTF9NT0RFX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmMtNzItfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jPTQwNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3R1bm5lbF9rZXlfcG9saWN5W05GVEFfVFVOTkVMX0tFWV9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3R1bm5lbC5jLTQxMC1cXHRbTkZUQV9UVU5ORUxfS0VZX0lEXVxcdD0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxubmV0L25ldGZpbHRlci9uZnRfdHVubmVsLmM6NDExOlxcdFtORlRBX1RVTk5FTF9LRVlfRkxBR1NdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsIE5GVF9UVU5ORUxfRl9NQVNLKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF90dW5uZWwuYy00MTItXFx0W05GVEFfVFVOTkVMX0tFWV9UT1NdXFx0PSB7IC50eXBlID0gTkxBX1U4LCB9LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jPTE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfeGZybV9wb2xpY3lbTkZUQV9YRlJNX01BWCArIDFdID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoyMDpcXHRbTkZUQV9YRlJNX0tFWV1cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCAyNTUpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYy0yMS1cXHRbTkZUQV9YRlJNX0RJUl1cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VOCwgWEZSTV9QT0xJQ1lfT1VUKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF94ZnJtLmM6MjI6XFx0W05GVEFfWEZSTV9TUE5VTV1cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBYRlJNX01BWF9ERVBUSCAtIDEpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3hmcm0uYzoyMzpcXHRbTkZUQV9YRlJNX0RSRUddXFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxubmV0L25ldGZpbHRlci9uZnRfeGZybS5jLTI0LX07XFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYz0yMDk9aW50IG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdClcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIzNi1cXHRcXHQgICAgICAgMiAqIChubGFfYXR0cl9zaXplKDApICsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTY0KSkpO1xcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjIzNzpcXHRjYXNlIE5MQV9CRTE2Olxcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjIzODpcXHRjYXNlIE5MQV9CRTMyOlxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTIzOS1cXHRcXHQvKiBzYW1lIGFzIHRoZSB1bnNpZ25lZCB0eXBlcywgcGx1cyB0aGUgYnl0ZSBvcmRlciAqL1xcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmM9MjU4PV9fbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyKHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSxcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTI5Ni1cXHRjYXNlIE5MQV9VNjQ6XFxubmV0L25ldGxpbmsvcG9saWN5LmM6Mjk3OlxcdGNhc2UgTkxBX0JFMTY6XFxubmV0L25ldGxpbmsvcG9saWN5LmM6Mjk4OlxcdGNhc2UgTkxBX0JFMzI6XFxubmV0L25ldGxpbmsvcG9saWN5LmMtMjk5LVxcdGNhc2UgTkxBX1VJTlQ6XFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMDQtXFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VODtcXG5uZXQvbmV0bGluay9wb2xpY3kuYzozMDU6XFx0XFx0ZWxzZSBpZiAocHQtXFx1MDAzZXR5cGUgPT0gTkxBX1UxNiB8fCBwdC1cXHUwMDNldHlwZSA9PSBOTEFfQkUxNilcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMDYtXFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VMTY7XFxubmV0L25ldGxpbmsvcG9saWN5LmM6MzA3OlxcdFxcdGVsc2UgaWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9VMzIgfHwgcHQtXFx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpXFxubmV0L25ldGxpbmsvcG9saWN5LmMtMzA4LVxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTMyO1xcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtMzEzLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjMxNDpcXHRcXHRpZiAoKHB0LVxcdTAwM2V0eXBlID09IE5MQV9CRTE2IHx8IHB0LVxcdTAwM2V0eXBlID09IE5MQV9CRTMyKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTMxNS1cXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTYzMD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZmxfcG9saWN5W1RDQV9GTE9XRVJfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTY3Ny1cXHRbVENBX0ZMT1dFUl9LRVlfRU5DX1VEUF9EU1RfUE9SVF9NQVNLXVxcdD0geyAudHlwZSA9IE5MQV9VMTYgfSxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjY3ODpcXHRbVENBX0ZMT1dFUl9LRVlfRkxBR1NdXFx0XFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy02NzktXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBUQ0FfRkxPV0VSX0tFWV9GTEFHU19QT0xJQ1lfTUFTSyksXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzo2ODA6XFx0W1RDQV9GTE9XRVJfS0VZX0ZMQUdTX01BU0tdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy02ODEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBUQ0FfRkxPV0VSX0tFWV9GTEFHU19QT0xJQ1lfTUFTSyksXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTc0Mi1cXHRbVENBX0ZMT1dFUl9LRVlfQ0ZNXVxcdFxcdD0geyAudHlwZSA9IE5MQV9ORVNURUQgfSxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjc0MzpcXHRbVENBX0ZMT1dFUl9LRVlfRU5DX0ZMQUdTXVxcdD0gTkxBX1BPTElDWV9NQVNLKE5MQV9CRTMyLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtNzQ0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgVENBX0ZMT1dFUl9LRVlfRU5DX0ZMQUdTX1BPTElDWV9NQVNLKSxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjc0NTpcXHRbVENBX0ZMT1dFUl9LRVlfRU5DX0ZMQUdTX01BU0tdXFx0PSBOTEFfUE9MSUNZX01BU0soTkxBX0JFMzIsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy03NDYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBUQ0FfRkxPV0VSX0tFWV9FTkNfRkxBR1NfUE9MSUNZX01BU0spLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzozMC4yNzM3MDg5MTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ5OTMwNDEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldDogTmV0bGluayBQb2xpY3kgRHVtcGluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgZm9jdXNlcyBvbiBleHRlbmRpbmcgdGhlIE5ldGxpbmsgcG9saWN5IGR1bXBpbmcgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9uZXRsaW5rL3BvbGljeS5jYC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGFkdmVydGlzaW5nIGJpZy1lbmRpYW4gaW50ZWdlciBhdHRyaWJ1dGVzIChgTkxBX0JFMTZgLCBgTkxBX0JFMzJgKSBieSBhZGRpbmcgYE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUmAuIFRoaXMgbWVhbnMgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGluIHRoZSBzaXplIGVzdGltYXRpb24gd2l0aCBgbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGVgIGFuZCB3cml0aW5nIGxvZ2ljIHdpdGggYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAgYW5kIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlYC5cblxuVGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBoZXJlIGFyZTogYG5ldGxpbmtfcG9saWN5X2R1bXBfYXR0cl9zaXplX2VzdGltYXRlYCwgYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAsIGBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlYCwgYW5kIGBjdHJsX2R1bXBwb2xpY3lgLiBXZSBjYW4gcmVhY2ggdGhpcyBmdW5jdGlvbmFsaXR5IHRocm91Z2ggc3RhbmRhcmQgTmV0bGluayBzb2NrZXRzIChgQUZfTkVUTElOS2ApLCBpbmNsdWRpbmcgR2VuZXJpYyBOZXRsaW5rIHBvbGljeSBkdW1wcyAoYENUUkxfQ01EX0dFVFBPTElDWWApIGFuZCBhbHNvIHRocm91Z2ggZXh0YWNrIGVycm9yIHJlcG9ydGluZy5cblxuRnJvbSBhIGNvbmZpZ3VyYXRpb24gc3RhbmRwb2ludCwgYE5FVGAgaXMgc3VmZmljaWVudCBmb3IgYmFzZSBmdW5jdGlvbmFsaXR5LiBGb3IgdGhlIHNwZWNpZmljIGZhbWlsaWVzIGxpa2UgYE5FVF9GT1VgIG9yIGBNUFRDUGAgd2hpY2ggdXNlIHRoZSBiaWctZW5kaWFuIGF0dHJpYnV0ZXMsIHdlIG5lZWQgdG8gaGF2ZSB0aG9zZSBlbmFibGVkLCBidXQgZm9yIGZ1enppbmcgdGhlICpjb3JlKiBwb2xpY3kgZHVtcCBjb2RlLCBgTkVUYCBpcyB0aGUga2V5LiBgR0VORVJJQ19ORVRMSU5LYCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2l0aCBgTkVUYC5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgcmVsZXZhbnQgc3ltYm9scyBhcmUgbm9uLXN0YXRpYyBhbmQgZ2xvYmFsbHkgYWNjZXNzaWJsZSwgc28gd2UgY2FuIGRpcmVjdGx5IHRhcmdldCB0aGVtLiBHaXZlbiB0aGF0IGl0J3MgYWNjZXNzaWJsZSB2aWEgYm90aCBHZW5lcmljIE5ldGxpbmsgYW5kIGVycm9yIHJlcG9ydGluZywgaXQgZGVmaW5pdGVseSBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzUzLCJPdXRwdXRUb2tlbnMiOjE3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6MzUuNzczMDE2ODg3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY1ODU1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN0cmxfZHVtcHBvbGljeVwiLFxuICAgIFwibmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGVcIixcbiAgICBcIm5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVcIixcbiAgICBcIm5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0clwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE5ldGxpbmsgcG9saWN5IGR1bXBpbmcgbG9naWMgaW4gbmV0L25ldGxpbmsvcG9saWN5LmMgdG8gc3VwcG9ydCBiaWctZW5kaWFuIGludGVnZXIgYXR0cmlidXRlcyAoTkxBX0JFMTYgYW5kIE5MQV9CRTMyKSBieSBlbWl0dGluZyBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIgYW5kIGFkanVzdGluZyB0aGUgYXR0cmlidXRlIHNpemUgZXN0aW1hdGlvbi4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIHZpYSBBRl9ORVRMSU5LIHNvY2tldHMgdGhyb3VnaCBHZW5lcmljIE5ldGxpbmsgcG9saWN5IGR1bXBpbmcgKENUUkxfQ01EX0dFVFBPTElDWSkgYXMgd2VsbCBhcyBuZXRsaW5rIGV4dGFjayBlcnJvciByZXBvcnRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY3RybF9kdW1wcG9saWN5XCIsXG4gICAgXCJuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZVwiLFxuICAgIFwibmV0bGlua19wb2xpY3lfZHVtcF93cml0ZVwiLFxuICAgIFwibmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTmV0bGluayBwb2xpY3kgZHVtcGluZyBsb2dpYyBpbiBuZXQvbmV0bGluay9wb2xpY3kuYyB0byBzdXBwb3J0IGJpZy1lbmRpYW4gaW50ZWdlciBhdHRyaWJ1dGVzIChOTEFfQkUxNiBhbmQgTkxBX0JFMzIpIGJ5IGVtaXR0aW5nIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUiBhbmQgYWRqdXN0aW5nIHRoZSBhdHRyaWJ1dGUgc2l6ZSBlc3RpbWF0aW9uLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgdmlhIEFGX05FVExJTksgc29ja2V0cyB0aHJvdWdoIEdlbmVyaWMgTmV0bGluayBwb2xpY3kgZHVtcGluZyAoQ1RSTF9DTURfR0VUUE9MSUNZKSBhcyB3ZWxsIGFzIG5ldGxpbmsgZXh0YWNrIGVycm9yIHJlcG9ydGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6MzUuODQ5NjA4NzM2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzk2NzI2NDU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjM1Ljg1MDEyMDc1NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMzOTY2NzQ5NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIE5ldGxpbmsgcG9saWN5IGR1bXAgc3VwcG9ydCBmb3IgYmlnLWVuZGlhbiBpbnRlZ2VyIGF0dHJpYnV0ZSB0eXBlcyAoTkxBX0JFMTYgYW5kIE5MQV9CRTMyKSBieSBlbWl0dGluZyB0aGUgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSIGF0dHJpYnV0ZSBpbiBuZXRsaW5rIHBvbGljeSBkZXNjcmlwdGlvbnMuIFxcblxcbkFsbCB2YWx1ZXMgd3JpdHRlbiB0byB0aGUgTmV0bGluayBza2IgYXJlIGV4cGxpY2l0LCBmdWxseSBpbml0aWFsaXplZCBjb25zdGFudHMgKHN1Y2ggYXMgTkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTikgb3IgcmFuZ2UgdmFsdWVzIGluaXRpYWxpemVkIGJ5IG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQoKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBwYWRkaW5ncyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgaXMgYW55IGNvbnRyb2wgZmxvdyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGNoZWNrcyBhcmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyBidWZmZXIgc2l6ZXMgYW5kIG5ldGxpbmsgbWVzc2FnZSBmb3JtYXR0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZlZDQxYTRlYjQxNjY4MjczZTU0Mzk4NzQ0OWYwMjkyN2E2ODI2MzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDAwOjIzOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sXG5pbmRleCA4YjQ0NzJhNmFhMzZhLi43ZTdjMTU4ZTNlNzM3IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL25sY3RybC55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvbmxjdHJsLnlhbWxcbkBAIC00Miw2ICs0MiwxNiBAQCBkZWZpbml0aW9uczpcbiAgICAgICAtIGJpdGZpZWxkMzJcbiAgICAgICAtIHNpbnRcbiAgICAgICAtIHVpbnRcbisgIC1cbisgICAgbmFtZTogcG9saWN5LWJ5dGUtb3JkZXJcbisgICAgZG9jOiB8XG4rICAgICAgQnl0ZSBvcmRlciBvZiBhbiBpbnRlZ2VyIGF0dHJpYnV0ZS4gWmVybyBpcyBsZWZ0IHVudXNlZCBzbyB0aGF0IGl0XG4rICAgICAgY2FuIGJlIHRha2VuIHRvIG1lYW4gaG9zdCBieXRlIG9yZGVyLlxuKyAgICBlbnVtLW5hbWU6IG5ldGxpbmstcG9saWN5LWJ5dGUtb3JkZXJcbisgICAgdHlwZTogZW51bVxuKyAgICB2YWx1ZS1zdGFydDogMVxuKyAgICBlbnRyaWVzOlxuKyAgICAgIC0gYmlnLWVuZGlhblxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTE1Miw2ICsxNjIsMTEgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcGFkXG4gICAgICAgICB0eXBlOiBwYWRcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBieXRlLW9yZGVyXG4rICAgICAgICBkb2M6IEJ5dGUgb3JkZXIgb2YgdGhlIGF0dHJpYnV0ZSwgYWJzZW50IG1lYW5zIGhvc3QgYnl0ZSBvcmRlci5cbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogcG9saWN5LWJ5dGUtb3JkZXJcbiAgIC1cbiAgICAgbmFtZTogb3AtcG9saWN5LWF0dHJzXG4gICAgIG5hbWUtcHJlZml4OiBjdHJsLWF0dHItcG9saWN5LVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmV0bGluay5oXG5pbmRleCBmODdhYWYyOGE2NDkxLi44MmM0MWFlYjQzNTc0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldGxpbmsuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGxpbmsuaFxuQEAgLTMyOSw2ICszMjksMTcgQEAgZW51bSBuZXRsaW5rX2F0dHJpYnV0ZV90eXBlIHtcbiBcdE5MX0FUVFJfVFlQRV9VSU5ULFxuIH07XG4gXG4rLyoqXG4rICogZW51bSBuZXRsaW5rX3BvbGljeV9ieXRlX29yZGVyIC0gYnl0ZSBvcmRlciBvZiBhbiBpbnRlZ2VyIGF0dHJpYnV0ZVxuKyAqIEBOTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOOiBiaWcgZW5kaWFuIChuZXR3b3JrIGJ5dGUgb3JkZXIpXG4rICpcbisgKiBaZXJvIGlzIGxlZnQgdW5hc3NpZ25lZCBzbyB0aGF0IGl0IGtlZXBzIG1lYW5pbmcgaG9zdCBieXRlIG9yZGVyLFxuKyAqIHdoaWNoIGlzIGFsc28gd2hhdCBhIG1pc3NpbmcgYnl0ZSBvcmRlciBtZWFucy5cbisgKi9cbitlbnVtIG5ldGxpbmtfcG9saWN5X2J5dGVfb3JkZXIge1xuK1x0TkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTiA9IDEsXG4rfTtcbitcbiAvKipcbiAgKiBlbnVtIG5ldGxpbmtfcG9saWN5X3R5cGVfYXR0ciAtIHBvbGljeSB0eXBlIGF0dHJpYnV0ZXNcbiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9VTlNQRUM6IHVudXNlZFxuQEAgLTM1Niw2ICszNjcsOCBAQCBlbnVtIG5ldGxpbmtfYXR0cmlidXRlX3R5cGUge1xuICAqXHRiaXRmaWVsZDMyIHR5cGUgKFUzMilcbiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLOiBtYXNrIG9mIHZhbGlkIGJpdHMgZm9yIHVuc2lnbmVkIGludGVnZXJzIChVNjQpXG4gICogQE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEOiBwYWQgYXR0cmlidXRlIGZvciA2NC1iaXQgYWxpZ25tZW50XG4rICogQE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUjogYnl0ZSBvcmRlciBvZiBhbiBpbnRlZ2VyIGF0dHJpYnV0ZSxcbisgKlx0XHUwMDI2ZW51bSBuZXRsaW5rX3BvbGljeV9ieXRlX29yZGVyLCBhYnNlbnQgaWYgaG9zdCBieXRlIG9yZGVyIChVMzIpXG4gICpcbiAgKiBAX19OTF9QT0xJQ1lfVFlQRV9BVFRSX01BWDogbnVtYmVyIG9mIGF0dHJpYnV0ZXNcbiAgKiBATkxfUE9MSUNZX1RZUEVfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlclxuQEAgLTM3NCw2ICszODcsNyBAQCBlbnVtIG5ldGxpbmtfcG9saWN5X3R5cGVfYXR0ciB7XG4gXHROTF9QT0xJQ1lfVFlQRV9BVFRSX0JJVEZJRUxEMzJfTUFTSyxcbiBcdE5MX1BPTElDWV9UWVBFX0FUVFJfUEFELFxuIFx0TkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLLFxuK1x0TkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSLFxuIFxuIFx0Lyoga2VlcCBsYXN0ICovXG4gXHRfX05MX1BPTElDWV9UWVBFX0FUVFJfTUFYLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL3BvbGljeS5jIGIvbmV0L25ldGxpbmsvcG9saWN5LmNcbmluZGV4IDA4YjAwNmM0OGYwNmUuLjU3NGQ0NGI3ZDUxODIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0bGluay9wb2xpY3kuY1xuKysrIGIvbmV0L25ldGxpbmsvcG9saWN5LmNcbkBAIC0yMzQsNiArMjM0LDExIEBAIGludCBuZXRsaW5rX3BvbGljeV9kdW1wX2F0dHJfc2l6ZV9lc3RpbWF0ZShjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQpXG4gXHRcdC8qIG1heGltdW0gaXMgY29tbW9uLCB1NjQgbWluL21heCB3aXRoIHBhZGRpbmcgKi9cbiBcdFx0cmV0dXJuIGNvbW1vbiArXG4gXHRcdCAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgKyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7XG4rXHRjYXNlIE5MQV9CRTE2OlxuK1x0Y2FzZSBOTEFfQkUzMjpcbitcdFx0Lyogc2FtZSBhcyB0aGUgdW5zaWduZWQgdHlwZXMsIHBsdXMgdGhlIGJ5dGUgb3JkZXIgKi9cbitcdFx0cmV0dXJuIGNvbW1vbiArIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpICtcbitcdFx0ICAgICAgIDIgKiAobmxhX2F0dHJfc2l6ZSgwKSArIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHU2NCkpKTtcbiBcdGNhc2UgTkxBX0JJVEZJRUxEMzI6XG4gXHRcdHJldHVybiBjb21tb24gKyBubGFfYXR0cl9zaXplKHNpemVvZih1MzIpKTtcbiBcdGNhc2UgTkxBX1NUUklORzpcbkBAIC0yODksMjEgKzI5NCwyOCBAQCBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXG4gXHRjYXNlIE5MQV9VMTY6XG4gXHRjYXNlIE5MQV9VMzI6XG4gXHRjYXNlIE5MQV9VNjQ6XG4rXHRjYXNlIE5MQV9CRTE2OlxuK1x0Y2FzZSBOTEFfQkUzMjpcbiBcdGNhc2UgTkxBX1VJTlQ6XG4gXHRjYXNlIE5MQV9NU0VDUzoge1xuIFx0XHRzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIHJhbmdlO1xuIFxuIFx0XHRpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTgpXG4gXHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VODtcbi1cdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTE2KVxuK1x0XHRlbHNlIGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9VMTYgfHwgcHQtXHUwMDNldHlwZSA9PSBOTEFfQkUxNilcbiBcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1UxNjtcbi1cdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTMyKVxuK1x0XHRlbHNlIGlmIChwdC1cdTAwM2V0eXBlID09IE5MQV9VMzIgfHwgcHQtXHUwMDNldHlwZSA9PSBOTEFfQkUzMilcbiBcdFx0XHR0eXBlID0gTkxfQVRUUl9UWVBFX1UzMjtcbiBcdFx0ZWxzZSBpZiAocHQtXHUwMDNldHlwZSA9PSBOTEFfVTY0KVxuIFx0XHRcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVTY0O1xuIFx0XHRlbHNlXG4gXHRcdFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VSU5UO1xuIFxuK1x0XHRpZiAoKHB0LVx1MDAzZXR5cGUgPT0gTkxBX0JFMTYgfHwgcHQtXHUwMDNldHlwZSA9PSBOTEFfQkUzMikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUixcbitcdFx0XHRcdE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU4pKVxuK1x0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuK1xuIFx0XHRpZiAocHQtXHUwMDNldmFsaWRhdGlvbl90eXBlID09IE5MQV9WQUxJREFURV9NQVNLKSB7XG4gXHRcdFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9NQVNLLFxuIFx0XHRcdFx0XHQgICAgICBwdC1cdTAwM2VtYXNrLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weSBiL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weVxuaW5kZXggODY4MmJmNTg4ZTFmYS4uZmI1YWNiOGFjZGVkMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL25ldC95bmwvcHl5bmwvbGliL3lubC5weVxuKysrIGIvdG9vbHMvbmV0L3lubC9weXlubC9saWIveW5sLnB5XG5AQCAtMTE1LDYgKzExNSw3IEBAIGNsYXNzIE5ldGxpbms6XG4gICAgIE5MX1BPTElDWV9UWVBFX0FUVFJfQklURklFTEQzMl9NQVNLID0gMTBcbiAgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9QQUQgPSAxMVxuICAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0sgPSAxMlxuKyAgICBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIgPSAxM1xuIFxuICAgICBBdHRyVHlwZSA9IEVudW0oJ0F0dHJUeXBlJywgWydmbGFnJywgJ3U4JywgJ3UxNicsICd1MzInLCAndTY0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3M4JywgJ3MxNicsICdzMzInLCAnczY0JyxcbkBAIC0xMjIsNiArMTIzLDggQEAgY2xhc3MgTmV0bGluazpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25lc3RlZCcsICduZXN0ZWQtYXJyYXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYml0ZmllbGQzMicsICdzaW50JywgJ3VpbnQnXSlcbiBcbisgICAgQnl0ZU9yZGVyID0gRW51bSgnQnl0ZU9yZGVyJywgWydiaWctZW5kaWFuJ10sIHN0YXJ0PTEpXG4rXG4gY2xhc3MgTmxFcnJvcihFeGNlcHRpb24pOlxuICAgICBkZWYgX19pbml0X18oc2VsZiwgbmxfbXNnKTpcbiAgICAgICAgIHNlbGYubmxfbXNnID0gbmxfbXNnXG5AQCAtMTU4LDcgKzE2MSw3IEBAIGNsYXNzIE5sUG9saWN5OlxuIFxuICAgICBFYWNoIHBvbGljeSBlbnRyeSBhbHdheXMgaGFzIGEgJ3R5cGUnIGF0dHJpYnV0ZSAoZS5nLiB1MzIsIHN0cmluZyxcbiAgICAgbmVzdGVkKS4gT3B0aW9uYWwgYXR0cmlidXRlcyBkZXBlbmRpbmcgb24gdGhlICd0eXBlJzogbWluLXZhbHVlLFxuLSAgICBtYXgtdmFsdWUsIG1pbi1sZW5ndGgsIG1heC1sZW5ndGgsIG1hc2suXG4rICAgIG1heC12YWx1ZSwgbWluLWxlbmd0aCwgbWF4LWxlbmd0aCwgbWFzaywgYnl0ZS1vcmRlci5cbiBcbiAgICAgUG9saWNpZXMgY2FuIGZvcm0gaW5maW5pdGUgbmVzdGluZyBsb29wcy4gVGhlc2UgbG9vcHMgYXJlIHRyaW1tZWRcbiAgICAgd2hlbiBwb2xpY3kgaXMgY29udmVydGVkIHRvIGEgZGljdCB3aXRoIHBvbC50b19kaWN0KCkuXG5AQCAtNDU0LDYgKzQ1Nyw5IEBAIGRlZiBfZ2VubF9kZWNvZGVfcG9saWN5KHJhdyk6XG4gICAgICAgICAgICAgcG9saWN5WydiaXRmaWVsZDMyLW1hc2snXSA9IGF0dHIuYXNfc2NhbGFyKCd1MzInKVxuICAgICAgICAgZWxpZiBhdHRyLnR5cGUgPT0gTmV0bGluay5OTF9QT0xJQ1lfVFlQRV9BVFRSX01BU0s6XG4gICAgICAgICAgICAgcG9saWN5WydtYXNrJ10gPSBhdHRyLmFzX3NjYWxhcigndTY0JylcbisgICAgICAgIGVsaWYgYXR0ci50eXBlID09IE5ldGxpbmsuTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSOlxuKyAgICAgICAgICAgIGJ5dGVfb3JkZXIgPSBhdHRyLmFzX3NjYWxhcigndTMyJylcbisgICAgICAgICAgICBwb2xpY3lbJ2J5dGUtb3JkZXInXSA9IE5ldGxpbmsuQnl0ZU9yZGVyKGJ5dGVfb3JkZXIpLm5hbWVcbiAgICAgcmV0dXJuIHBvbGljeVxuIFxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6MzUuODUwMTIxNjg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzOTgzNDg0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRsaW5rIFBvbGljeSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gZmlyZSB1cCBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHRocm91Z2ggdGhlIHBhdGNoIHN0ZXAtYnktc3RlcC5cblxuRmlyc3QsIEkgc2VlIHNvbWUgdXBkYXRlcyB0byBkb2N1bWVudGF0aW9uIGFuZCBoZWFkZXJzOiB0aGUgYG5sY3RybC55YW1sYCBzcGVjIGlzIGdldHRpbmcgYSBgcG9saWN5LWJ5dGUtb3JkZXJgIGVudW0gYW5kIGBieXRlLW9yZGVyYCBhdHRyaWJ1dGUsIGFuZCB0aGUgYG5ldGxpbmsuaGAgaGVhZGVyIGRlZmluZXMgY29uc3RhbnRzIGZvciBiaWctZW5kaWFuIGJ5dGUgb3JkZXIuIE5vdGhpbmcgYWxhcm1pbmcgc28gZmFyOyBpdCBzZWVtcyB3ZSBhcmUgaW50cm9kdWNpbmcgYmlnLWVuZGlhbiBzdXBwb3J0IGluIHRoZSBuZXRsaW5rIHBvbGljeS5cblxuTmV4dCwgSSBzZWUgY2hhbmdlcyBpbiBgbmV0L25ldGxpbmsvcG9saWN5LmNgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgc2VlIHR3byBmdW5jdGlvbnMgd2VyZSB1cGRhdGVkOiBgbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUoKWAgYW5kIGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cigpYC4gSXQgbG9va3MgbGlrZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkIHRvIGhhbmRsZSBgTkxBX0JFMTZgIGFuZCBgTkxBX0JFMzJgIHdoaWNoIGlzIHByb21pc2luZyEgVGhlIHNpemUgZXN0aW1hdGlvbiBmdW5jdGlvbiBub3cgYWNjb3VudHMgZm9yIHRoZSBieXRlIG9yZGVyIGF0dHJpYnV0ZSwgd2hpY2ggaXMgZ29vZC4gVGhlIHdyaXRlIGZ1bmN0aW9uIHNldHMgdGhlIGF0dHJpYnV0ZSB0eXBlIHRvIGBVMTZgIG9yIGBVMzJgIGFzIGFwcHJvcHJpYXRlIGFuZCB0aGVuIGFkZHMgYSBgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSYCBhdHRyaWJ1dGUgd2l0aCBgTkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTmAgaWYgdGhlIG9yaWdpbmFsIHR5cGUgd2FzIGBOTEFfQkUxNmAgb3IgYE5MQV9CRTMyYC4gVGhpcyBsb29rcyByZWFzb25hYmxlLiBJdCBjYWxscyBgbmxhX3B1dF91MzJgIHRvIGFjdHVhbGx5IHB1dCB0aGUgYnl0ZSBvcmRlciBpbmZvcm1hdGlvbiBpbnRvIHRoZSBza2IhIEFmdGVyIHRoYXQsIGl0IGNvbnRpbnVlcyB3aXRoIHRoZSByYW5nZSBhbmQgbWFzayBjaGVja3MuXG5cbkZpbmFsbHksIHNvbWUgcHl0aG9uIHRvb2xpbmcgaXMgYWxzbyBnZXR0aW5nIHVwZGF0ZWQuIExpa2VseSB0aGUgWUFNTCBwYXJzZXIgYW5kIGNvZGUgZ2VuZXJhdG9yLlxuXG5Ob3csIEkgdGhpbmsgSSdsbCBkaXZlIGEgbGl0dGxlIGRlZXBlciBpbnRvIHRoYXQgYG5ldGxpbmsvcG9saWN5LmNgIGZpbGUgYW5kIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aG9zZSB0d28gZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyBkYXRhIGlzIGJlaW5nIGR1bXBlZCBhbmQgd3JpdHRlbi4gSSB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgd2hlbiBjYWxjdWxhdGluZyBzaXplcywgb3IgYW55IG90aGVyIGlzc3VlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZmxvdyBhcm91bmQgdGhvc2UgYG5ldGxpbmtfcG9saWN5YCBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoYXQgdGhpcyBieXRlLW9yZGVyIGFkZGl0aW9uIGlzIGJlaW5nIGhhbmRsZWQgc2FmZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTkwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6NDIuMjQ4NDcyNTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGxpbmsvcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHRcXHRjYXNlIE5MQV9ORVNURURfQVJSQVk6XFxuIDIyMTpcXHRcXHRcXHQvKiBjb21tb24sIHBvbGljeSBpZHgsIHBvbGljeSBtYXhhdHRyICovXFxuIDIyMjpcXHRcXHRcXHRyZXR1cm4gY29tbW9uICsgMiAqIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHUzMikpO1xcbiAyMjM6XFx0XFx0Y2FzZSBOTEFfVTg6XFxuIDIyNDpcXHRcXHRjYXNlIE5MQV9VMTY6XFxuIDIyNTpcXHRcXHRjYXNlIE5MQV9VMzI6XFxuIDIyNjpcXHRcXHRjYXNlIE5MQV9VNjQ6XFxuIDIyNzpcXHRcXHRjYXNlIE5MQV9NU0VDUzpcXG4gMjI4OlxcdFxcdGNhc2UgTkxBX1M4OlxcbiAyMjk6XFx0XFx0Y2FzZSBOTEFfUzE2OlxcbiAyMzA6XFx0XFx0Y2FzZSBOTEFfUzMyOlxcbiAyMzE6XFx0XFx0Y2FzZSBOTEFfUzY0OlxcbiAyMzI6XFx0XFx0Y2FzZSBOTEFfU0lOVDpcXG4gMjMzOlxcdFxcdGNhc2UgTkxBX1VJTlQ6XFxuIDIzNDpcXHRcXHRcXHQvKiBtYXhpbXVtIGlzIGNvbW1vbiwgdTY0IG1pbi9tYXggd2l0aCBwYWRkaW5nICovXFxuIDIzNTpcXHRcXHRcXHRyZXR1cm4gY29tbW9uICtcXG4gMjM2OlxcdFxcdFxcdCAgICAgICAyICogKG5sYV9hdHRyX3NpemUoMCkgKyBubGFfYXR0cl9zaXplKHNpemVvZih1NjQpKSk7XFxuIDIzNzpcXHRcXHRjYXNlIE5MQV9CRTE2OlxcbiAyMzg6XFx0XFx0Y2FzZSBOTEFfQkUzMjpcXG4gMjM5OlxcdFxcdFxcdC8qIHNhbWUgYXMgdGhlIHVuc2lnbmVkIHR5cGVzLCBwbHVzIHRoZSBieXRlIG9yZGVyICovXFxuIDI0MDpcXHRcXHRcXHRyZXR1cm4gY29tbW9uICsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTMyKSkgK1xcbiAyNDE6XFx0XFx0XFx0ICAgICAgIDIgKiAobmxhX2F0dHJfc2l6ZSgwKSArIG5sYV9hdHRyX3NpemUoc2l6ZW9mKHU2NCkpKTtcXG4gMjQyOlxcdFxcdGNhc2UgTkxBX0JJVEZJRUxEMzI6XFxuIDI0MzpcXHRcXHRcXHRyZXR1cm4gY29tbW9uICsgbmxhX2F0dHJfc2l6ZShzaXplb2YodTMyKSk7XFxuIDI0NDpcXHRcXHRjYXNlIE5MQV9TVFJJTkc6XFxuIDI0NTpcXHRcXHRjYXNlIE5MQV9OVUxfU1RSSU5HOlxcbiAyNDY6XFx0XFx0Y2FzZSBOTEFfQklOQVJZOlxcbiAyNDc6XFx0XFx0XFx0LyogbWF4aW11bSBpcyBjb21tb24sIHUzMiBtaW4tbGVuZ3RoL21heC1sZW5ndGggKi9cXG4gMjQ4OlxcdFxcdFxcdHJldHVybiBjb21tb24gKyAyICogbmxhX2F0dHJfc2l6ZShzaXplb2YodTMyKSk7XFxuIDI0OTpcXHRcXHRjYXNlIE5MQV9GTEFHOlxcbiAyNTA6XFx0XFx0XFx0cmV0dXJuIGNvbW1vbjtcXG4gMjUxOlxcdFxcdH1cXG4gMjUyOlxcdFxcbiAyNTM6XFx0XFx0LyogdGhpcyBzaG91bGQgdGhlbiBjYXVzZSBhIHdhcm5pbmcgbGF0ZXIgKi9cXG4gMjU0OlxcdFxcdHJldHVybiAwO1xcbiAyNTU6XFx0fVxcbiAyNTY6XFx0XFxuIDI1NzpcXHRzdGF0aWMgaW50XFxuIDI1ODpcXHRfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXFxuIDI1OTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMjYwOlxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXFxuIDI2MTpcXHRcXHRcXHRcXHRcXHQgaW50IG5lc3RhdHRyKVxcbiAyNjI6XFx0e1xcbiAyNjM6XFx0XFx0aW50IGVzdGltYXRlID0gbmV0bGlua19wb2xpY3lfZHVtcF9hdHRyX3NpemVfZXN0aW1hdGUocHQpO1xcbiAyNjQ6XFx0XFx0ZW51bSBuZXRsaW5rX2F0dHJpYnV0ZV90eXBlIHR5cGU7XFxuIDI2NTpcXHRcXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xcbiAyNjY6XFx0XFxuIDI2NzpcXHRcXHRhdHRyID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBuZXN0YXR0cik7XFxuIDI2ODpcXHRcXHRpZiAoIWF0dHIpXFxuIDI2OTpcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIDI3MDpcXHRcXG4gMjcxOlxcdFxcdHN3aXRjaCAocHQtXFx1MDAzZXR5cGUpIHtcXG4gMjcyOlxcdFxcdGRlZmF1bHQ6XFxuIDI3MzpcXHRcXHRjYXNlIE5MQV9VTlNQRUM6XFxuIDI3NDpcXHRcXHRjYXNlIE5MQV9SRUpFQ1Q6XFxuIDI3NTpcXHRcXHRcXHQvKiBza2lwIC0gdXNlIE5MQV9NSU5fTEVOIHRvIGFkdmVydGlzZSBzdWNoICovXFxuIDI3NjpcXHRcXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCBhdHRyKTtcXG4gMjc3OlxcdFxcdFxcdHJldHVybiAtRU5PREFUQTtcXG4gMjc4OlxcdFxcdGNhc2UgTkxBX05FU1RFRDpcXG4gMjc5OlxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfTkVTVEVEO1xcbiAyODA6XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuIDI4MTpcXHRcXHRjYXNlIE5MQV9ORVNURURfQVJSQVk6XFxuIDI4MjpcXHRcXHRcXHRpZiAocHQtXFx1MDAzZXR5cGUgPT0gTkxBX05FU1RFRF9BUlJBWSlcXG4gMjgzOlxcdFxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfTkVTVEVEX0FSUkFZO1xcbiAyODQ6XFx0XFx0XFx0aWYgKHN0YXRlIFxcdTAwMjZcXHUwMDI2IHB0LVxcdTAwM2VuZXN0ZWRfcG9saWN5IFxcdTAwMjZcXHUwMDI2IHB0LVxcdTAwM2VsZW4gXFx1MDAyNlxcdTAwMjZcXG4gMjg1OlxcdFxcdFxcdCAgICAobmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BPTElDWV9JRFgsXFxuIDI4NjpcXHRcXHRcXHRcXHRcXHQgbmV0bGlua19wb2xpY3lfZHVtcF9nZXRfcG9saWN5X2lkeChzdGF0ZSxcXG4gMjg3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBwdC1cXHUwMDNlbmVzdGVkX3BvbGljeSxcXG4gMjg4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBwdC1cXHUwMDNlbGVuKSkgfHxcXG4gMjg5OlxcdFxcdFxcdCAgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BPTElDWV9NQVhUWVBFLFxcbiAyOTA6XFx0XFx0XFx0XFx0XFx0IHB0LVxcdTAwM2VsZW4pKSlcXG4gMjkxOlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAyOTI6XFx0XFx0XFx0YnJlYWs7XFxuIDI5MzpcXHRcXHRjYXNlIE5MQV9VODpcXG4gMjk0OlxcdFxcdGNhc2UgTkxBX1UxNjpcXG4gMjk1OlxcdFxcdGNhc2UgTkxBX1UzMjpcXG4gMjk2OlxcdFxcdGNhc2UgTkxBX1U2NDpcXG4gMjk3OlxcdFxcdGNhc2UgTkxBX0JFMTY6XFxuIDI5ODpcXHRcXHRjYXNlIE5MQV9CRTMyOlxcbiAyOTk6XFx0XFx0Y2FzZSBOTEFfVUlOVDpcXG4gMzAwOlxcdFxcdGNhc2UgTkxBX01TRUNTOiB7XFxuIDMwMTpcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIHJhbmdlO1xcbiAzMDI6XFx0XFxuIDMwMzpcXHRcXHRcXHRpZiAocHQtXFx1MDAzZXR5cGUgPT0gTkxBX1U4KVxcbiAzMDQ6XFx0XFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9VODtcXG4gMzA1OlxcdFxcdFxcdGVsc2UgaWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9VMTYgfHwgcHQtXFx1MDAzZXR5cGUgPT0gTkxBX0JFMTYpXFxuIDMwNjpcXHRcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1UxNjtcXG4gMzA3OlxcdFxcdFxcdGVsc2UgaWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9VMzIgfHwgcHQtXFx1MDAzZXR5cGUgPT0gTkxBX0JFMzIpXFxuIDMwODpcXHRcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1UzMjtcXG4gMzA5OlxcdFxcdFxcdGVsc2UgaWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9VNjQpXFxuIDMxMDpcXHRcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1U2NDtcXG4gMzExOlxcdFxcdFxcdGVsc2VcXG4gMzEyOlxcdFxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfVUlOVDtcXG4gMzEzOlxcdFxcbiAzMTQ6XFx0XFx0XFx0aWYgKChwdC1cXHUwMDNldHlwZSA9PSBOTEFfQkUxNiB8fCBwdC1cXHUwMDNldHlwZSA9PSBOTEFfQkUzMikgXFx1MDAyNlxcdTAwMjZcXG4gMzE1OlxcdFxcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfQllURV9PUkRFUixcXG4gMzE2OlxcdFxcdFxcdFxcdFxcdE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU4pKVxcbiAzMTc6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDMxODpcXHRcXG4gMzE5OlxcdFxcdFxcdGlmIChwdC1cXHUwMDNldmFsaWRhdGlvbl90eXBlID09IE5MQV9WQUxJREFURV9NQVNLKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjQyLjI0ODU3MjIzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDEwNzEyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gQXR0cmlidXRlIFZhbGlkYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdHRlbiBhIGhhbmRsZSBvbiB0aGlzIGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cmAgZnVuY3Rpb24uIEkgc2VlIHdoZXJlIHRoaW5ncyBhcmUgaGVhZGVkIHdpdGggYXR0cmlidXRlIGhhbmRsaW5nLiBOb3csIEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBhbmQgdW5kZXJzdGFuZCAqaG93KiB0aGUgY29kZSB2YWxpZGF0ZXMgdGhlIHJhbmdlIGFuZCBtYXNrIHZhbHVlcyBmb3IgdGhlc2UgYXR0cmlidXRlcy4gSSBrbm93IHdoYXQgdGhlIHBvbGljeSBmcmFtZXdvcmsgKnNob3VsZCogYmUgZG9pbmcsIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gdG8gbWFrZSBzdXJlIGl0IGFsaWducyB3aXRoIG15IG1lbnRhbCBtb2RlbC4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyB2YWxpZGF0aW9uIGlzIGFjdHVhbGx5IHBlcmZvcm1lZCBpbiB0aGlzIGZ1bmN0aW9uLCBvciBvdGhlciBmdW5jdGlvbnMgaXQgY2FsbHMsIHdpdGggcmVzcGVjdCB0byBuZXRsaW5rIGF0dHJpYnV0ZXMuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGFzc2Vzc2luZyB0aGUgb3ZlcmFsbCBzZWN1cml0eSBhbmQgcm9idXN0bmVzcyBvZiB0aGUgbmV0bGluayBwb2xpY3kuIFRpbWUgdG8ga2VlcCByZWFkaW5nIGFuZCBzZWUgaG93IGl0J3MgZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgyNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6NDQuMTQ5NjQ1ODEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0bGluay9wb2xpY3kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSLFxcbiAzMTY6XFx0XFx0XFx0XFx0XFx0TkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTikpXFxuIDMxNzpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0XFx0aWYgKHB0LVxcdTAwM2V2YWxpZGF0aW9uX3R5cGUgPT0gTkxBX1ZBTElEQVRFX01BU0spIHtcXG4gMzIwOlxcdFxcdFxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfTUFTSyxcXG4gMzIxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHB0LVxcdTAwM2VtYXNrLFxcbiAzMjI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgTkxfUE9MSUNZX1RZUEVfQVRUUl9QQUQpKVxcbiAzMjM6XFx0XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDMyNDpcXHRcXHRcXHRcXHRicmVhaztcXG4gMzI1OlxcdFxcdFxcdH0gZWxzZSBpZiAocHQtXFx1MDAzZXZhbGlkYXRpb25fdHlwZSA9PSBOTEFfVkFMSURBVEVfRlVOQ1RJT04pIHtcXG4gMzI2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzMjc6XFx0XFx0XFx0fVxcbiAzMjg6XFx0XFxuIDMyOTpcXHRcXHRcXHRubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKHB0LCBcXHUwMDI2cmFuZ2UpO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHRcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX01JTl9WQUxVRV9VLFxcbiAzMzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgcmFuZ2UubWluLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRCkgfHxcXG4gMzMzOlxcdFxcdFxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfTUFYX1ZBTFVFX1UsXFxuIDMzNDpcXHRcXHRcXHRcXHRcXHQgICAgICByYW5nZS5tYXgsIE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEKSlcXG4gMzM1OlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAzMzY6XFx0XFx0XFx0YnJlYWs7XFxuIDMzNzpcXHRcXHR9XFxuIDMzODpcXHRcXHRjYXNlIE5MQV9TODpcXG4gMzM5OlxcdFxcdGNhc2UgTkxBX1MxNjpcXG4gMzQwOlxcdFxcdGNhc2UgTkxBX1MzMjpcXG4gMzQxOlxcdFxcdGNhc2UgTkxBX1M2NDpcXG4gMzQyOlxcdFxcdGNhc2UgTkxBX1NJTlQ6IHtcXG4gMzQzOlxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb25fc2lnbmVkIHJhbmdlO1xcbiAzNDQ6XFx0XFxuIDM0NTpcXHRcXHRcXHRpZiAocHQtXFx1MDAzZXR5cGUgPT0gTkxBX1M4KVxcbiAzNDY6XFx0XFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9TODtcXG4gMzQ3OlxcdFxcdFxcdGVsc2UgaWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9TMTYpXFxuIDM0ODpcXHRcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1MxNjtcXG4gMzQ5OlxcdFxcdFxcdGVsc2UgaWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9TMzIpXFxuIDM1MDpcXHRcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1MzMjtcXG4gMzUxOlxcdFxcdFxcdGVsc2UgaWYgKHB0LVxcdTAwM2V0eXBlID09IE5MQV9TNjQpXFxuIDM1MjpcXHRcXHRcXHRcXHR0eXBlID0gTkxfQVRUUl9UWVBFX1M2NDtcXG4gMzUzOlxcdFxcdFxcdGVsc2VcXG4gMzU0OlxcdFxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfU0lOVDtcXG4gMzU1OlxcdFxcbiAzNTY6XFx0XFx0XFx0aWYgKHB0LVxcdTAwM2V2YWxpZGF0aW9uX3R5cGUgPT0gTkxBX1ZBTElEQVRFX0ZVTkNUSU9OKVxcbiAzNTc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM1ODpcXHRcXG4gMzU5OlxcdFxcdFxcdG5sYV9nZXRfcmFuZ2Vfc2lnbmVkKHB0LCBcXHUwMDI2cmFuZ2UpO1xcbiAzNjA6XFx0XFxuIDM2MTpcXHRcXHRcXHRpZiAobmxhX3B1dF9zNjQoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX01JTl9WQUxVRV9TLFxcbiAzNjI6XFx0XFx0XFx0XFx0XFx0cmFuZ2UubWluLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1BBRCkgfHxcXG4gMzYzOlxcdFxcdFxcdCAgICBubGFfcHV0X3M2NChza2IsIE5MX1BPTElDWV9UWVBFX0FUVFJfTUFYX1ZBTFVFX1MsXFxuIDM2NDpcXHRcXHRcXHRcXHRcXHRyYW5nZS5tYXgsIE5MX1BPTElDWV9UWVBFX0FUVFJfUEFEKSlcXG4gMzY1OlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAzNjY6XFx0XFx0XFx0YnJlYWs7XFxuIDM2NzpcXHRcXHR9XFxuIDM2ODpcXHRcXHRjYXNlIE5MQV9CSVRGSUVMRDMyOlxcbiAzNjk6XFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9CSVRGSUVMRDMyO1xcbiAzNzA6XFx0XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgTkxfUE9MSUNZX1RZUEVfQVRUUl9CSVRGSUVMRDMyX01BU0ssXFxuIDM3MTpcXHRcXHRcXHRcXHRcXHRwdC1cXHUwMDNlYml0ZmllbGQzMl92YWxpZCkpXFxuIDM3MjpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gMzczOlxcdFxcdFxcdGJyZWFrO1xcbiAzNzQ6XFx0XFx0Y2FzZSBOTEFfU1RSSU5HOlxcbiAzNzU6XFx0XFx0Y2FzZSBOTEFfTlVMX1NUUklORzpcXG4gMzc2OlxcdFxcdGNhc2UgTkxBX0JJTkFSWTpcXG4gMzc3OlxcdFxcdFxcdGlmIChwdC1cXHUwMDNldHlwZSA9PSBOTEFfU1RSSU5HKVxcbiAzNzg6XFx0XFx0XFx0XFx0dHlwZSA9IE5MX0FUVFJfVFlQRV9TVFJJTkc7XFxuIDM3OTpcXHRcXHRcXHRlbHNlIGlmIChwdC1cXHUwMDNldHlwZSA9PSBOTEFfTlVMX1NUUklORylcXG4gMzgwOlxcdFxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfTlVMX1NUUklORztcXG4gMzgxOlxcdFxcdFxcdGVsc2VcXG4gMzgyOlxcdFxcdFxcdFxcdHR5cGUgPSBOTF9BVFRSX1RZUEVfQklOQVJZO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRcXHRpZiAocHQtXFx1MDAzZXZhbGlkYXRpb25fdHlwZSA9PSBOTEFfVkFMSURBVEVfUkFOR0UgfHxcXG4gMzg1OlxcdFxcdFxcdCAgICBwdC1cXHUwMDNldmFsaWRhdGlvbl90eXBlID09IE5MQV9WQUxJREFURV9SQU5HRV9XQVJOX1RPT19MT05HKSB7XFxuIDM4NjpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19yYW5nZV92YWxpZGF0aW9uIHJhbmdlO1xcbiAzODc6XFx0XFxuIDM4ODpcXHRcXHRcXHRcXHRubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKHB0LCBcXHUwMDI2cmFuZ2UpO1xcbiAzODk6XFx0XFxuIDM5MDpcXHRcXHRcXHRcXHRpZiAocmFuZ2UubWluIFxcdTAwMjZcXHUwMDI2XFxuIDM5MTpcXHRcXHRcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX01JTl9MRU5HVEgsXFxuIDM5MjpcXHRcXHRcXHRcXHRcXHRcXHRyYW5nZS5taW4pKVxcbiAzOTM6XFx0XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDM5NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6NDQuMTQ5Nzg4ODcyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjEwNTE4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byBBdHRyaWJ1dGUgSGFuZGxpbmcqKlxuXG5SaWdodCwgc28gSSdtIHJldmlzaXRpbmcgdGhpcyBjb2RlLCBhbmQgSSBuZWVkIHRvIGJlIGV4dHJhIHRob3JvdWdoLiBJJ3ZlIGFscmVhZHkgc2NydXRpbml6ZWQgc29tZSBhc3BlY3RzLCBidXQgbm93IEknbSB0aGlua2luZywgbGV0J3Mgbm90IGp1c3QgYXNzdW1lIGV2ZXJ5dGhpbmcncyBrb3NoZXIgd2l0aCBob3cgd2UncmUgaGFuZGxpbmcgbmV0d29yayBhdHRyaWJ1dGVzLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgYG5sYV9nZXRfcmFuZ2VfdW5zaWduZWRgLiBUaGUgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgbWFraW5nIHN1cmUgdGhvc2UgYmlnLWVuZGlhbiAxNi1iaXQgKGBOTEFfQkUxNmApIGFuZCAzMi1iaXQgKGBOTEFfQkUzMmApIHZhbHVlcyBhcmUgYmVpbmcgcHJvY2Vzc2VkIGNvcnJlY3RseS4gTXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgYnVnIG9yIGFuIGVkZ2UgY2FzZSB3aGVyZSB0aGUgYHJhbmdlYCB2YXJpYWJsZSBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBkb2Vzbid0IGhhcHBlbiwgYXMgdGhhdCB3b3VsZCBiZSBhIHNlcmlvdXMgcmVsaWFiaWxpdHkgaXNzdWUuIEdvdHRhIGNvdmVyIGFsbCBteSBiYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ0MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6NDYuMjcwODQzNjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDEwMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sYV9nZXRfcmFuZ2VfdW5zaWduZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGxpbmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRsaW5rL3BvbGljeS5jPTI1OD1fX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cihzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUsXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMjgtXFxubmV0L25ldGxpbmsvcG9saWN5LmM6MzI5OlxcdFxcdG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQocHQsIFxcdTAwMjZyYW5nZSk7XFxubmV0L25ldGxpbmsvcG9saWN5LmMtMzMwLVxcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmMtMzg3LVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jOjM4ODpcXHRcXHRcXHRubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKHB0LCBcXHUwMDI2cmFuZ2UpO1xcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTM4OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6NDYuMzIwODU5ODFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEwNTIwMDcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkYC4gTGV0J3MgY2xhcmlmeSBpdHMgZnVuY3Rpb24uIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFNwZWNpZmljYWxseSwgSSBzdXNwZWN0IGl0J3MgZGVmaW5lZCB3aXRoaW4gdGhlIGNvcmUgTmV0bGluayBhdHRyaWJ1dGUgaGFuZGxpbmcgY29kZS4gVGhlIGBsaWIvYCBkaXJlY3RvcnkgaXMgdXN1YWxseSB0aGUgcGxhY2UgZm9yIHRob3NlIGtpbmRzIG9mIHV0aWxpdHkgZnVuY3Rpb25zLiBTbywgSSdsbCBgZ3JlcGAgZm9yIGBubGFfZ2V0X3JhbmdlX3Vuc2lnbmVkYCB3aXRoaW4gYGxpYi9ubGF0dHIuY2AsIG9yIHBvdGVudGlhbGx5IGFueSBvdGhlciByZWxldmFudCBgLmNgIGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5LCB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGl2ZSBkZWZpbml0aW9uIGFuZCBkaXZlIGludG8gaXRzIGltcGxlbWVudGF0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBjb2RlLCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODg5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6NTAuNDI2MDY0NTE5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc1NDA4Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sYV9nZXRfcmFuZ2VfdW5zaWduZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0bGluay5oPTI0NjE9c3RhdGljIGlubGluZSBib29sIG5sYV9pc19sYXN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSwgaW50IHJlbSlcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaC0yNDY1LVxcbmluY2x1ZGUvbmV0L25ldGxpbmsuaDoyNDY2OnZvaWQgbmxhX2dldF9yYW5nZV91bnNpZ25lZChjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXFxuaW5jbHVkZS9uZXQvbmV0bGluay5oLTI0NjctXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gKnJhbmdlKTtcXG4tLVxcbmxpYi9ubGF0dHIuYz04OT1zdGF0aWMgaW50IG5sYV92YWxpZGF0ZV9hcnJheShjb25zdCBzdHJ1Y3QgbmxhdHRyICpoZWFkLCBpbnQgbGVuLCBpbnQgbWF4dHlwZSxcXG4tLVxcbmxpYi9ubGF0dHIuYy0xMTgtXFxubGliL25sYXR0ci5jOjExOTp2b2lkIG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxcbmxpYi9ubGF0dHIuYy0xMjAtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gKnJhbmdlKVxcbi0tXFxubGliL25sYXR0ci5jPTE3MD1zdGF0aWMgaW50IG5sYV92YWxpZGF0ZV9yYW5nZV91bnNpZ25lZChjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXFxuLS1cXG5saWIvbmxhdHRyLmMtMjA5LVxcbmxpYi9ubGF0dHIuYzoyMTA6XFx0bmxhX2dldF9yYW5nZV91bnNpZ25lZChwdCwgXFx1MDAyNnJhbmdlKTtcXG5saWIvbmxhdHRyLmMtMjExLVxcbi0tXFxubmV0L25ldGxpbmsvcG9saWN5LmM9MjU4PV9fbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyKHN0cnVjdCBuZXRsaW5rX3BvbGljeV9kdW1wX3N0YXRlICpzdGF0ZSxcXG4tLVxcbm5ldC9uZXRsaW5rL3BvbGljeS5jLTMyOC1cXG5uZXQvbmV0bGluay9wb2xpY3kuYzozMjk6XFx0XFx0bmxhX2dldF9yYW5nZV91bnNpZ25lZChwdCwgXFx1MDAyNnJhbmdlKTtcXG5uZXQvbmV0bGluay9wb2xpY3kuYy0zMzAtXFxuLS1cXG5uZXQvbmV0bGluay9wb2xpY3kuYy0zODctXFxubmV0L25ldGxpbmsvcG9saWN5LmM6Mzg4OlxcdFxcdFxcdG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQocHQsIFxcdTAwMjZyYW5nZSk7XFxubmV0L25ldGxpbmsvcG9saWN5LmMtMzg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwMDoyMzo1Mi43MDE0ODY0NDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxMzQ1MDE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYGxpYi9ubGF0dHIuY2AgLSBMaW5lIDExOSoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBpbiBvbiBgbGliL25sYXR0ci5jYCBhZ2Fpbi4gQWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYW55dGhpbmcgTmV0bGluay1yZWxhdGVkLiBBbmQgSSdtIHplcm9pbmcgaW4gb24gbGluZSAxMTkuIFJpZ2h0LCBzbyB3aGF0J3MgdGhlIGNvbnRleHQ/IFdoYXQgYW0gSSBsb29raW5nIGZvciAqdGhpcyogdGltZT8gSXMgaXQgYSBwb3RlbnRpYWwgYnVnLCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHksIG9yIHBlcmhhcHMganVzdCByZWZyZXNoaW5nIG15IG1lbW9yeSBvbiBhIHNwZWNpZmljIGF0dHJpYnV0ZSBoYW5kbGluZyBtZWNoYW5pc20/IENoYW5jZXMgYXJlLCBnaXZlbiBteSBiYWNrZ3JvdW5kLCBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIGlkZWEgb2Ygd2hhdCBzZWN0aW9uIG9mIHRoZSBjb2RlIHRoaXMgcmVsYXRlcyB0by4gSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgYXR0cmlidXRlIHBhcnNpbmcsIHZhbGlkYXRpb24sIG9yIHBlcmhhcHMgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHdpdGhpbiBhIE5ldGxpbmsgbWVzc2FnZS4gTGluZSAxMTkuLi4gTGV0IG1lIHB1bGwgdGhhdCB1cC4gT2theSwgbGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjU0LjcxNDkzOTE3NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL25sYXR0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExNTpcXHRcXG4gMTE2OlxcdFxcdHJldHVybiAwO1xcbiAxMTc6XFx0fVxcbiAxMTg6XFx0XFxuIDExOTpcXHR2b2lkIG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQoY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0LFxcbiAxMjA6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX3JhbmdlX3ZhbGlkYXRpb24gKnJhbmdlKVxcbiAxMjE6XFx0e1xcbiAxMjI6XFx0XFx0V0FSTl9PTl9PTkNFKHB0LVxcdTAwM2V2YWxpZGF0aW9uX3R5cGUgIT0gTkxBX1ZBTElEQVRFX1JBTkdFX1BUUiBcXHUwMDI2XFx1MDAyNlxcbiAxMjM6XFx0XFx0XFx0ICAgICAocHQtXFx1MDAzZW1pbiBcXHUwMDNjIDAgfHwgcHQtXFx1MDAzZW1heCBcXHUwMDNjIDApKTtcXG4gMTI0OlxcdFxcbiAxMjU6XFx0XFx0cmFuZ2UtXFx1MDAzZW1pbiA9IDA7XFxuIDEyNjpcXHRcXG4gMTI3OlxcdFxcdHN3aXRjaCAocHQtXFx1MDAzZXR5cGUpIHtcXG4gMTI4OlxcdFxcdGNhc2UgTkxBX1U4OlxcbiAxMjk6XFx0XFx0XFx0cmFuZ2UtXFx1MDAzZW1heCA9IFU4X01BWDtcXG4gMTMwOlxcdFxcdFxcdGJyZWFrO1xcbiAxMzE6XFx0XFx0Y2FzZSBOTEFfVTE2OlxcbiAxMzI6XFx0XFx0Y2FzZSBOTEFfQkUxNjpcXG4gMTMzOlxcdFxcdGNhc2UgTkxBX0JJTkFSWTpcXG4gMTM0OlxcdFxcdFxcdHJhbmdlLVxcdTAwM2VtYXggPSBVMTZfTUFYO1xcbiAxMzU6XFx0XFx0XFx0YnJlYWs7XFxuIDEzNjpcXHRcXHRjYXNlIE5MQV9VMzI6XFxuIDEzNzpcXHRcXHRjYXNlIE5MQV9CRTMyOlxcbiAxMzg6XFx0XFx0XFx0cmFuZ2UtXFx1MDAzZW1heCA9IFUzMl9NQVg7XFxuIDEzOTpcXHRcXHRcXHRicmVhaztcXG4gMTQwOlxcdFxcdGNhc2UgTkxBX1U2NDpcXG4gMTQxOlxcdFxcdGNhc2UgTkxBX1VJTlQ6XFxuIDE0MjpcXHRcXHRjYXNlIE5MQV9NU0VDUzpcXG4gMTQzOlxcdFxcdFxcdHJhbmdlLVxcdTAwM2VtYXggPSBVNjRfTUFYO1xcbiAxNDQ6XFx0XFx0XFx0YnJlYWs7XFxuIDE0NTpcXHRcXHRkZWZhdWx0OlxcbiAxNDY6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbiAxNDc6XFx0XFx0XFx0cmV0dXJuO1xcbiAxNDg6XFx0XFx0fVxcbiAxNDk6XFx0XFxuIDE1MDpcXHRcXHRzd2l0Y2ggKHB0LVxcdTAwM2V2YWxpZGF0aW9uX3R5cGUpIHtcXG4gMTUxOlxcdFxcdGNhc2UgTkxBX1ZBTElEQVRFX1JBTkdFOlxcbiAxNTI6XFx0XFx0Y2FzZSBOTEFfVkFMSURBVEVfUkFOR0VfV0FSTl9UT09fTE9ORzpcXG4gMTUzOlxcdFxcdFxcdHJhbmdlLVxcdTAwM2VtaW4gPSBwdC1cXHUwMDNlbWluO1xcbiAxNTQ6XFx0XFx0XFx0cmFuZ2UtXFx1MDAzZW1heCA9IHB0LVxcdTAwM2VtYXg7XFxuIDE1NTpcXHRcXHRcXHRicmVhaztcXG4gMTU2OlxcdFxcdGNhc2UgTkxBX1ZBTElEQVRFX1JBTkdFX1BUUjpcXG4gMTU3OlxcdFxcdFxcdCpyYW5nZSA9ICpwdC1cXHUwMDNlcmFuZ2U7XFxuIDE1ODpcXHRcXHRcXHRicmVhaztcXG4gMTU5OlxcdFxcdGNhc2UgTkxBX1ZBTElEQVRFX01JTjpcXG4gMTYwOlxcdFxcdFxcdHJhbmdlLVxcdTAwM2VtaW4gPSBwdC1cXHUwMDNlbWluO1xcbiAxNjE6XFx0XFx0XFx0YnJlYWs7XFxuIDE2MjpcXHRcXHRjYXNlIE5MQV9WQUxJREFURV9NQVg6XFxuIDE2MzpcXHRcXHRcXHRyYW5nZS1cXHUwMDNlbWF4ID0gcHQtXFx1MDAzZW1heDtcXG4gMTY0OlxcdFxcdFxcdGJyZWFrO1xcbiAxNjU6XFx0XFx0ZGVmYXVsdDpcXG4gMTY2OlxcdFxcdFxcdGJyZWFrO1xcbiAxNjc6XFx0XFx0fVxcbiAxNjg6XFx0fVxcbiAxNjk6XFx0XFxuIDE3MDpcXHRzdGF0aWMgaW50IG5sYV92YWxpZGF0ZV9yYW5nZV91bnNpZ25lZChjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXFxuIDE3MTpcXHRcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLFxcbiAxNzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4gMTczOlxcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgdmFsaWRhdGUpXFxuIDE3NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjIzOjU0LjcxNTA4NTk4NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTQzMzc1NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE5ldGxpbmsgUG9saWN5IER1bXBpbmcqKlxuXG5Pa2F5LCBzbyBJIGp1c3QgcmVhbGl6ZWQgc29tZXRoaW5nIGFib3V0IHRoZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbi4gYG5sYV9nZXRfcmFuZ2VfdW5zaWduZWRgICphbHJlYWR5KiBoYW5kbGVzIGBOTEFfQkUxNmAgYW5kIGBOTEFfQkUzMmAhIEFuZCB0aGUgYHJhbmdlYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgcmlnaHQgZnJvbSB0aGUgc3RhcnQgd2l0aCBgcmFuZ2UtXHUwMDNlbWluID0gMDsgcmFuZ2UtXHUwMDNlbWF4ID0gLi4uYC4gVGhhdCdzIGdvb2QgdG8ga25vdywgbGVzcyB3b3JrIG5lZWRlZCBvbiB0aGF0IHNpZGUuXG5cbk5vdywgSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyBgX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHJgIGFjdHVhbGx5IGR1bXBzIHBvbGljaWVzIHdoZW4gZGVhbGluZyB3aXRoIG5ldGxpbmsgdXNlcnNwYWNlIG1lc3NhZ2VzLiBTcGVjaWZpY2FsbHksIEknbSBjaGVja2luZyB0aGUgY2FzZSB3aGVuIHRoZSBwb2xpY3kgdHlwZSBgcHQtXHUwMDNldHlwZWAgaXMgZWl0aGVyIGBOTEFfQkUxNmAgb3IgYE5MQV9CRTMyYC5cblxuSGVyZSdzIHdoYXQgSSBzZWU6IGl0IGNhbGxzIGBubGFfcHV0X3UzMmAgdG8gcHV0IGEgc3BlY2lmaWMgYXR0cmlidXRlLCBgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSYCwgd2l0aCB0aGUgdmFsdWUgYE5MX1BPTElDWV9CWVRFX09SREVSX0JJR19FTkRJQU5gLCB3aGljaCBlZmZlY3RpdmVseSBzZXRzIGEgMzItYml0IGNvbnN0YW50LCBgMWAsIGluIHRoZSBuZXRsaW5rIHNrYi4gRm9sbG93aW5nIHRoYXQsIGl0J3MgdXNpbmcgYG5sYV9wdXRfdTY0XzY0Yml0YCB0byBoYW5kbGUgdGhlIG1pbi9tYXgvbWFzayB2YWx1ZXMg4oCTIHBhZGRpbmcgaGFuZGxlZCBjb3JyZWN0bHkgd2l0aCBgTkxfUE9MSUNZX1RZUEVfQVRUUl9QQURgIGlzIHplcm9lZCBvdXQgYXMgZXhwZWN0ZWQgYnkgYG5sYV9wdXRfdTY0XzY0Yml0YC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGl0IG1ha2VzIHNlbnNlIHRvIHZlcmlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG5sYV9wdXRfdTY0XzY0Yml0YCBhZ2FpbjsgY2FuJ3QgYmUgdG9vIGNhcmVmdWwuIEdvdHRhIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjY2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6NTcuNjU4NDY0NjExWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA2MzY2OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sYV9wdXRfdTY0XzY0Yml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTc1MSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz0zODIyPXN0YXRpYyBpbnQgbmxhX3B1dF9zdGF0dXNfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzg3OS1cXHRcXHQgICAgICAgZGV2aWNlLVxcdTAwM2VzdGF0ZS5pKSB8fFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg4MDpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19FRF9VVUlELFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMzg4MS1cXHRcXHRcXHQgICAgIGRldmljZS1cXHUwMDNlZWRfdXVpZCwgMCkgfHxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM4ODI6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQ0FQQUNJVFksXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zODgzLVxcdFxcdFxcdCAgICAgZ2V0X2NhcGFjaXR5KGRldmljZS1cXHUwMDNldmRpc2spLCAwKSB8fFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg4NDpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19TRU5EX0NOVCxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4ODUtXFx0XFx0XFx0ICAgICBkZXZpY2UtXFx1MDAzZXNlbmRfY250LCAwKSB8fFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg4NjpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19SRUNWX0NOVCxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4ODctXFx0XFx0XFx0ICAgICBkZXZpY2UtXFx1MDAzZXJlY3ZfY250LCAwKSB8fFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg4ODpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19SRUFEX0NOVCxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4ODktXFx0XFx0XFx0ICAgICBkZXZpY2UtXFx1MDAzZXJlYWRfY250LCAwKSB8fFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg5MDpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19XUklUX0NOVCxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4OTEtXFx0XFx0XFx0ICAgICBkZXZpY2UtXFx1MDAzZXdyaXRfY250LCAwKSB8fFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg5MjpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19BTF9XUklUX0NOVCxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4OTMtXFx0XFx0XFx0ICAgICBkZXZpY2UtXFx1MDAzZWFsX3dyaXRfY250LCAwKSB8fFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6Mzg5NDpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19CTV9XUklUX0NOVCxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM4OTUtXFx0XFx0XFx0ICAgICBkZXZpY2UtXFx1MDAzZWJtX3dyaXRfY250LCAwKSB8fFxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zOTE2LVxcdFxcdGlmIChubGFfcHV0X3UzMihza2IsIERSQkRfQV9TVEFURV9JTkZPX0RJU0tfRkxBR1MsIGRldmljZS1cXHUwMDNlbGRldi1cXHUwMDNlbWQuZmxhZ3MpIHx8XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzozOTE3OlxcdFxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX0JJVFNfVE9UQUwsIGRyYmRfYm1fYml0cyhkZXZpY2UpLCAwKSB8fFxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MzkxODpcXHRcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19CSVRTX09PUyxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM5MTktXFx0XFx0XFx0XFx0ICAgICAgZHJiZF9ibV90b3RhbF93ZWlnaHQoZGV2aWNlKSwgMCkpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM5MjItXFx0XFx0ICAgIENfUEFVU0VEX1NZTkNfVCBcXHUwMDNlPSBkZXZpY2UtXFx1MDAzZXN0YXRlLmNvbm4pIHtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM5MjM6XFx0XFx0XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQklUU19SU19UT1RBTCxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTM5MjQtXFx0XFx0XFx0XFx0XFx0ICAgICAgZGV2aWNlLVxcdTAwM2Vyc190b3RhbCwgMCkgfHxcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjM5MjU6XFx0XFx0XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQklUU19SU19GQUlMRUQsXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0zOTI2LVxcdFxcdFxcdFxcdFxcdCAgICAgIGRldmljZS1cXHUwMDNlcnNfZmFpbGVkLCAwKSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jPTE5MDA9aW50IGRpc2tfY29uZl90b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGRpc2tfY29uZiAqcylcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTE5MTQtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MTkxNTpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfRElTS19DT05GX0RJU0tfU0laRSwgcy1cXHUwMDNlZGlza19zaXplLCAwKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0xOTE2LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM9MjA5ND1pbnQgcmVzaXplX3Bhcm1zX3RvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcmVzaXplX3Bhcm1zICpzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjEwMC1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyMTAxOlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9SRVNJWkVfUEFSTVNfUkVTSVpFX1NJWkUsIHMtXFx1MDAzZXJlc2l6ZV9zaXplLCAwKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yMTAyLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM9MjEyMT1pbnQgc3RhdGVfaW5mb190b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YXRlX2luZm8gKnMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yMTMxLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjIxMzI6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQ0FQQUNJVFksIHMtXFx1MDAzZWNhcGFjaXR5LCAwKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yMTMzLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjIxMzQ6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fRURfVVVJRCwgcy1cXHUwMDNlZWRfdXVpZCwgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjEzNS1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNDQtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE0NTpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19CSVRTX1RPVEFMLCBzLVxcdTAwM2ViaXRzX3RvdGFsLCAwKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yMTQ2LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjIxNDc6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQklUU19PT1MsIHMtXFx1MDAzZWJpdHNfb29zLCAwKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yMTQ4LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjIxNDk6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1NUQVRFX0lORk9fQklUU19SU19UT1RBTCwgcy1cXHUwMDNlYml0c19yc190b3RhbCwgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjE1MC1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyMTUxOlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFURV9JTkZPX0JJVFNfUlNfRkFJTEVELCBzLVxcdTAwM2ViaXRzX3JzX2ZhaWxlZCwgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjE1Mi1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNTctXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE1ODpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19TRU5EX0NOVCwgcy1cXHUwMDNlc2VuZF9jbnQsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNTktXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2MDpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19SRUNWX0NOVCwgcy1cXHUwMDNlcmVjdl9jbnQsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjEtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2MjpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19SRUFEX0NOVCwgcy1cXHUwMDNlcmVhZF9jbnQsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjMtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2NDpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19XUklUX0NOVCwgcy1cXHUwMDNld3JpdF9jbnQsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjUtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2NjpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19BTF9XUklUX0NOVCwgcy1cXHUwMDNlYWxfd3JpdF9jbnQsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjctXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjE2ODpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfU1RBVEVfSU5GT19CTV9XUklUX0NOVCwgcy1cXHUwMDNlYm1fd3JpdF9jbnQsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxNjktXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYz0yMTg2PWludCBzdGFydF9vdl9wYXJtc190b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YXJ0X292X3Bhcm1zICpzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjE5Mi1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyMTkzOlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFSVF9PVl9QQVJNU19PVl9TVEFSVF9TRUNUT1IsIHMtXFx1MDAzZW92X3N0YXJ0X3NlY3RvciwgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjE5NC1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyMTk1OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9TVEFSVF9PVl9QQVJNU19PVl9TVE9QX1NFQ1RPUiwgcy1cXHUwMDNlb3Zfc3RvcF9zZWN0b3IsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTIxOTYtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYz0yMzk0PWludCBkZXZpY2Vfc3RhdGlzdGljc190b19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGRldmljZV9zdGF0aXN0aWNzICpzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQwMC1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyNDAxOlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9ERVZJQ0VfU1RBVElTVElDU19ERVZfU0laRSwgcy1cXHUwMDNlZGV2X3NpemUsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0MDItXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjQwMzpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfREVWSUNFX1NUQVRJU1RJQ1NfREVWX1JFQUQsIHMtXFx1MDAzZWRldl9yZWFkLCAwKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yNDA0LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjI0MDU6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX0RFVklDRV9TVEFUSVNUSUNTX0RFVl9XUklURSwgcy1cXHUwMDNlZGV2X3dyaXRlLCAwKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yNDA2LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjI0MDc6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX0RFVklDRV9TVEFUSVNUSUNTX0RFVl9BTF9XUklURVMsIHMtXFx1MDAzZWRldl9hbF93cml0ZXMsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0MDgtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjQwOTpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfREVWSUNFX1NUQVRJU1RJQ1NfREVWX0JNX1dSSVRFUywgcy1cXHUwMDNlZGV2X2JtX3dyaXRlcywgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQxMC1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0MjAtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjQyMTpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfREVWSUNFX1NUQVRJU1RJQ1NfREVWX0VYUE9TRURfREFUQV9VVUlELCBzLVxcdTAwM2VkZXZfZXhwb3NlZF9kYXRhX3V1aWQsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0MjItXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmM6MjQyMzpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBEUkJEX0FfREVWSUNFX1NUQVRJU1RJQ1NfREVWX0NVUlJFTlRfVVVJRCwgcy1cXHUwMDNlZGV2X2N1cnJlbnRfdXVpZCwgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQyNC1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jPTI0NTk9aW50IHBlZXJfZGV2aWNlX3N0YXRpc3RpY3NfdG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwZWVyX2RldmljZV9zdGF0aXN0aWNzICpzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQ2NS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyNDY2OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9QRUVSX0RFVklDRV9TVEFUSVNUSUNTX1BFRVJfREVWX1JFQ0VJVkVELCBzLVxcdTAwM2VwZWVyX2Rldl9yZWNlaXZlZCwgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQ2Ny1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyNDY4OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9QRUVSX0RFVklDRV9TVEFUSVNUSUNTX1BFRVJfREVWX1NFTlQsIHMtXFx1MDAzZXBlZXJfZGV2X3NlbnQsIDApKVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jLTI0NjktXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yNDczLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjI0NzQ6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1BFRVJfREVWSUNFX1NUQVRJU1RJQ1NfUEVFUl9ERVZfT1VUX09GX1NZTkMsIHMtXFx1MDAzZXBlZXJfZGV2X291dF9vZl9zeW5jLCAwKSlcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYy0yNDc1LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sX2dlbi5jOjI0NzY6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRFJCRF9BX1BFRVJfREVWSUNFX1NUQVRJU1RJQ1NfUEVFUl9ERVZfUkVTWU5DX0ZBSUxFRCwgcy1cXHUwMDNlcGVlcl9kZXZfcmVzeW5jX2ZhaWxlZCwgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQ3Ny1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubF9nZW4uYzoyNDc4OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIERSQkRfQV9QRUVSX0RFVklDRV9TVEFUSVNUSUNTX1BFRVJfREVWX0JJVE1BUF9VVUlELCBzLVxcdTAwM2VwZWVyX2Rldl9iaXRtYXBfdXVpZCwgMCkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmxfZ2VuLmMtMjQ3OS1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9MjE4PXN0YXRpYyBpbnQgX3JkbWFfbmxfcHV0X2RyaXZlcl91NjQoc3RydWN0IHNrX2J1ZmYgKm1zZywgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjIzLVxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzoyMjQ6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX0RSSVZFUl9VNjQsIHZhbHVlLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjI1LVxcdFxcdFxcdCAgICAgIFJETUFfTkxERVZfQVRUUl9QQUQpKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0yOTA9c3RhdGljIGludCBmaWxsX2Rldl9pbmZvKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzAyLVxcdEJVSUxEX0JVR19PTihzaXplb2YoZGV2aWNlLVxcdTAwM2VhdHRycy5kZXZpY2VfY2FwX2ZsYWdzKSAhPSBzaXplb2YodTY0KSk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzozMDM6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX0NBUF9GTEFHUyxcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTMwNC1cXHRcXHRcXHQgICAgICBkZXZpY2UtXFx1MDAzZWF0dHJzLmRldmljZV9jYXBfZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTMxMi1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjMxMzpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfTk9ERV9HVUlELFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzE0LVxcdFxcdFxcdCAgICAgIGJlNjRfdG9fY3B1KGRldmljZS1cXHUwMDNlbm9kZV9ndWlkKSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzE2LVxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzozMTc6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX1NZU19JTUFHRV9HVUlELFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzE4LVxcdFxcdFxcdCAgICAgIGJlNjRfdG9fY3B1KGRldmljZS1cXHUwMDNlYXR0cnMuc3lzX2ltYWdlX2d1aWQpLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0zNTk9c3RhdGljIGludCBmaWxsX3BvcnRfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0zODItXFx0XFx0XFx0KCh1NjQpYXR0ci5wb3J0X2NhcF9mbGFnczIgXFx1MDAzY1xcdTAwM2MgMzIpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MzgzOlxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9DQVBfRkxBR1MsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0zODQtXFx0XFx0XFx0XFx0ICAgICAgY2FwX2ZsYWdzLCBSRE1BX05MREVWX0FUVFJfUEFEKSlcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTM4NS1cXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6Mzg2OlxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9TVUJORVRfUFJFRklYLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMzg3LVxcdFxcdFxcdFxcdCAgICAgIGF0dHIuc3VibmV0X3ByZWZpeCwgUkRNQV9OTERFVl9BVFRSX1BBRCkpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jPTQxNj1zdGF0aWMgaW50IGZpbGxfcmVzX2luZm9fZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtNDI3LVxcdFxcdGdvdG8gZXJyO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6NDI4OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9SRVNfU1VNTUFSWV9FTlRSWV9DVVJSLCBjdXJyLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtNDI5LVxcdFxcdFxcdCAgICAgIFJETUFfTkxERVZfQVRUUl9QQUQpKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtNDMwLVxcdFxcdGdvdG8gZXJyO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6NDMxOlxcdGlmIChtYXggXFx1MDAyNlxcdTAwMjYgbmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfUkVTX1NVTU1BUllfRU5UUllfTUFYLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtNDMyLVxcdFxcdFxcdFxcdCAgICAgbWF4LCBSRE1BX05MREVWX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9NjgxPXN0YXRpYyBpbnQgZmlsbF9yZXNfY3FfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgYm9vbCBoYXNfY2FwX25ldF9hZG1pbixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtNjg4LVxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzo2ODk6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX1JFU19VU0VDTlQsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy02OTAtXFx0XFx0XFx0ICAgICAgYXRvbWljX3JlYWQoXFx1MDAyNmNxLVxcdTAwM2V1c2VjbnQpLCBSRE1BX05MREVWX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9NzI2PXN0YXRpYyBpbnQgZmlsbF9yZXNfbXJfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgYm9vbCBoYXNfY2FwX25ldF9hZG1pbixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtNzM4LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6NzM5OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9SRVNfTVJMRU4sIG1yLVxcdTAwM2VsZW5ndGgsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy03NDAtXFx0XFx0XFx0ICAgICAgUkRNQV9OTERFVl9BVFRSX1BBRCkpXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jPTc3Mj1zdGF0aWMgaW50IGZpbGxfcmVzX3BkX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIGJvb2wgaGFzX2NhcF9uZXRfYWRtaW4sXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTc4NS1cXHR9XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzo3ODY6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX1JFU19VU0VDTlQsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy03ODctXFx0XFx0XFx0ICAgICAgYXRvbWljX3JlYWQoXFx1MDAyNnBkLVxcdTAwM2V1c2VjbnQpLCBSRE1BX05MREVWX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9MTAyNj1pbnQgcmRtYV9ubF9zdGF0X2h3Y291bnRlcl9lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xMDM3LVxcdFxcdGdvdG8gZXJyO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MTAzODpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfU1RBVF9IV0NPVU5URVJfRU5UUllfVkFMVUUsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xMDM5LVxcdFxcdFxcdCAgICAgIHZhbHVlLCBSRE1BX05MREVWX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM9MTkwNj1zdGF0aWMgaW50IG5sZGV2X2dldF9jaGFyZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xOTYyLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MTk2MzpcXHRlcnIgPSBubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9DSEFSREVWLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMTk2NC1cXHRcXHRcXHRcXHRodWdlX2VuY29kZV9kZXYoZGF0YS5jZGV2LVxcdTAwM2VkZXZ0KSxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMTk2Ny1cXHRcXHRnb3RvIG91dF9kYXRhO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MTk2ODpcXHRlcnIgPSBubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9DSEFSREVWX0FCSSwgZGF0YS5hYmksXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0xOTY5LVxcdFxcdFxcdFxcdFJETUFfTkxERVZfQVRUUl9QQUQpO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0yNzIwPXN0YXRpYyBpbnQgZmlsbF9mcm1yX3Bvb2xfa2V5KHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBpYl9mcm1yX2tleSAqa2V5KVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzMyLVxcdFxcdGdvdG8gZXJyO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmM6MjczMzpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBSRE1BX05MREVWX0FUVFJfRlJNUl9QT09MX0tFWV9WRU5ET1JfS0VZLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjczNC1cXHRcXHRcXHQgICAgICBrZXktXFx1MDAzZXZlbmRvcl9rZXksIFJETUFfTkxERVZfQVRUUl9QQUQpKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjczNS1cXHRcXHRnb3RvIGVycjtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjI3MzY6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX0ZSTVJfUE9PTF9LRVlfTlVNX0RNQV9CTE9DS1MsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzM3LVxcdFxcdFxcdCAgICAgIGtleS1cXHUwMDNlbnVtX2RtYV9ibG9ja3MsIFJETUFfTkxERVZfQVRUUl9QQUQpKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzQwLVxcdGlmIChrZXktXFx1MDAzZWtlcm5lbF92ZW5kb3Jfa2V5IFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzoyNzQxOlxcdCAgICBubGFfcHV0X3U2NF82NGJpdChtc2csXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzQyLVxcdFxcdFxcdCAgICAgIFJETUFfTkxERVZfQVRUUl9GUk1SX1BPT0xfS0VZX0tFUk5FTF9WRU5ET1JfS0VZLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYz0yNzUzPXN0YXRpYyBpbnQgZmlsbF9mcm1yX3Bvb2xfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IGliX2ZybXJfcG9vbCAqcG9vbClcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL25sZGV2LmMtMjc2MS1cXHRcXHRnb3RvIGVycl91bmxvY2s7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYzoyNzYyOlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFJETUFfTkxERVZfQVRUUl9GUk1SX1BPT0xfTUFYX0lOX1VTRSxcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jLTI3NjMtXFx0XFx0XFx0ICAgICAgcG9vbC1cXHUwMDNlbWF4X2luX3VzZSwgUkRNQV9OTERFVl9BVFRSX1BBRCkpXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzY0LVxcdFxcdGdvdG8gZXJyX3VubG9jaztcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9ubGRldi5jOjI3NjU6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUkRNQV9OTERFVl9BVFRSX0ZSTVJfUE9PTF9JTl9VU0UsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbmxkZXYuYy0yNzY2LVxcdFxcdFxcdCAgICAgIHBvb2wtXFx1MDAzZWluX3VzZSwgUkRNQV9OTERFVl9BVFRSX1BBRCkpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM9MzAxND1pbnQgYm9uZF8zYWRfc3RhdHNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZF8zYWRfc3RhdHMgKnN0YXRzKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwMTgtXFx0dmFsID0gYXRvbWljNjRfcmVhZChcXHUwMDI2c3RhdHMtXFx1MDAzZWxhY3BkdV9yeCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjMwMTk6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgQk9ORF8zQURfU1RBVF9MQUNQRFVfUlgsIHZhbCxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzAyMC1cXHRcXHRcXHQgICAgICBCT05EXzNBRF9TVEFUX1BBRCkpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzAyMi1cXHR2YWwgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZzdGF0cy1cXHUwMDNlbGFjcGR1X3R4KTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmM6MzAyMzpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBCT05EXzNBRF9TVEFUX0xBQ1BEVV9UWCwgdmFsLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDI0LVxcdFxcdFxcdCAgICAgIEJPTkRfM0FEX1NUQVRfUEFEKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDI2LVxcdHZhbCA9IGF0b21pYzY0X3JlYWQoXFx1MDAyNnN0YXRzLVxcdTAwM2VsYWNwZHVfdW5rbm93bl9yeCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjMwMjc6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgQk9ORF8zQURfU1RBVF9MQUNQRFVfVU5LTk9XTl9SWCwgdmFsLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDI4LVxcdFxcdFxcdCAgICAgIEJPTkRfM0FEX1NUQVRfUEFEKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDMwLVxcdHZhbCA9IGF0b21pYzY0X3JlYWQoXFx1MDAyNnN0YXRzLVxcdTAwM2VsYWNwZHVfaWxsZWdhbF9yeCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjMwMzE6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgQk9ORF8zQURfU1RBVF9MQUNQRFVfSUxMRUdBTF9SWCwgdmFsLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDMyLVxcdFxcdFxcdCAgICAgIEJPTkRfM0FEX1NUQVRfUEFEKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYy0zMDM1LVxcdHZhbCA9IGF0b21pYzY0X3JlYWQoXFx1MDAyNnN0YXRzLVxcdTAwM2VtYXJrZXJfcngpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzozMDM2OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEJPTkRfM0FEX1NUQVRfTUFSS0VSX1JYLCB2YWwsXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwMzctXFx0XFx0XFx0ICAgICAgQk9ORF8zQURfU1RBVF9QQUQpKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jLTMwMzktXFx0dmFsID0gYXRvbWljNjRfcmVhZChcXHUwMDI2c3RhdHMtXFx1MDAzZW1hcmtlcl90eCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jOjMwNDA6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgQk9ORF8zQURfU1RBVF9NQVJLRVJfVFgsIHZhbCxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA0MS1cXHRcXHRcXHQgICAgICBCT05EXzNBRF9TVEFUX1BBRCkpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA0My1cXHR2YWwgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZzdGF0cy1cXHUwMDNlbWFya2VyX3Jlc3BfcngpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzozMDQ0OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEJPTkRfM0FEX1NUQVRfTUFSS0VSX1JFU1BfUlgsIHZhbCxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA0NS1cXHRcXHRcXHQgICAgICBCT05EXzNBRF9TVEFUX1BBRCkpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA0Ny1cXHR2YWwgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZzdGF0cy1cXHUwMDNlbWFya2VyX3Jlc3BfdHgpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzozMDQ4OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEJPTkRfM0FEX1NUQVRfTUFSS0VSX1JFU1BfVFgsIHZhbCxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA0OS1cXHRcXHRcXHQgICAgICBCT05EXzNBRF9TVEFUX1BBRCkpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA1MS1cXHR2YWwgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZzdGF0cy1cXHUwMDNlbWFya2VyX3Vua25vd25fcngpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYzozMDUyOlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEJPTkRfM0FEX1NUQVRfTUFSS0VSX1VOS05PV05fUlgsIHZhbCxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMtMzA1My1cXHRcXHRcXHQgICAgICBCT05EXzNBRF9TVEFUX1BBRCkpXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYz0yMTgwPXN0YXRpYyBpbnQgZ3RwX2dlbmxfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBzbmRfcG9ydGlkLCB1MzIgc25kX3NlcSxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTIyMTgtXFx0Y2FzZSBHVFBfVjA6XFxuZHJpdmVycy9uZXQvZ3RwLmM6MjIxOTpcXHRcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBHVFBBX1RJRCwgcGN0eC1cXHUwMDNldS52MC50aWQsIEdUUEFfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L2d0cC5jLTIyMjAtXFx0XFx0ICAgIG5sYV9wdXRfdTE2KHNrYiwgR1RQQV9GTE9XLCBwY3R4LVxcdTAwM2V1LnYwLmZsb3cpKVxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9MTU1NT1zdGF0aWMgaW50IG5sYV9wdXRfc2NpKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgc2NpX3QgdmFsdWUsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0xNTU3LXtcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzoxNTU4OlxcdHJldHVybiBubGFfcHV0X3U2NF82NGJpdChza2IsIGF0dHJ0eXBlLCAoX19mb3JjZSB1NjQpdmFsdWUsIHBhZGF0dHIpO1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTE1NTktfVxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9Mjg2MT1zdGF0aWMgaW50IGNvcHlfcnhfc2Nfc3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1hY3NlY19yeF9zY19zdGF0cyAqc3VtKVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NjIte1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4NjM6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9PQ1RFVFNfVkFMSURBVEVELFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NjQtXFx0XFx0XFx0ICAgICAgc3VtLVxcdTAwM2VJbk9jdGV0c1ZhbGlkYXRlZCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODY1LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4NjY6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9PQ1RFVFNfREVDUllQVEVELFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NjctXFx0XFx0XFx0ICAgICAgc3VtLVxcdTAwM2VJbk9jdGV0c0RlY3J5cHRlZCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODY4LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4Njk6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX1VOQ0hFQ0tFRCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODcwLVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlSW5Qa3RzVW5jaGVja2VkLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NzEtXFx0XFx0XFx0ICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQpIHx8XFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mjg3MjpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX0lOX1BLVFNfREVMQVlFRCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODczLVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlSW5Qa3RzRGVsYXllZCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODc0LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4NzU6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX09LLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4NzYtXFx0XFx0XFx0ICAgICAgc3VtLVxcdTAwM2VJblBrdHNPSyxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODc3LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4Nzg6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX0lOVkFMSUQsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjg3OS1cXHRcXHRcXHQgICAgICBzdW0tXFx1MDAzZUluUGt0c0ludmFsaWQsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjg4MC1cXHRcXHRcXHQgICAgICBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX1BBRCkgfHxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzoyODgxOlxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfSU5fUEtUU19MQVRFLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4ODItXFx0XFx0XFx0ICAgICAgc3VtLVxcdTAwM2VJblBrdHNMYXRlLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4ODMtXFx0XFx0XFx0ICAgICAgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9QQUQpIHx8XFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6Mjg4NDpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfUlhTQ19TVEFUU19BVFRSX0lOX1BLVFNfTk9UX1ZBTElELFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI4ODUtXFx0XFx0XFx0ICAgICAgc3VtLVxcdTAwM2VJblBrdHNOb3RWYWxpZCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODg2LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4ODc6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX05PVF9VU0lOR19TQSxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODg4LVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlSW5Qa3RzTm90VXNpbmdTQSxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODg5LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19SWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI4OTA6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1JYU0NfU1RBVFNfQVRUUl9JTl9QS1RTX1VOVVNFRF9TQSxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yODkxLVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlSW5Qa3RzVW51c2VkU0EsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYz0yOTM2PXN0YXRpYyBpbnQgY29weV90eF9zY19zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWFjc2VjX3R4X3NjX3N0YXRzICpzdW0pXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjkzNy17XFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6MjkzODpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfVFhTQ19TVEFUU19BVFRSX09VVF9QS1RTX1BST1RFQ1RFRCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yOTM5LVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlT3V0UGt0c1Byb3RlY3RlZCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yOTQwLVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19UWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI5NDE6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1RYU0NfU1RBVFNfQVRUUl9PVVRfUEtUU19FTkNSWVBURUQsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjk0Mi1cXHRcXHRcXHQgICAgICBzdW0tXFx1MDAzZU91dFBrdHNFbmNyeXB0ZWQsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjk0My1cXHRcXHRcXHQgICAgICBNQUNTRUNfVFhTQ19TVEFUU19BVFRSX1BBRCkgfHxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzoyOTQ0OlxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19UWFNDX1NUQVRTX0FUVFJfT1VUX09DVEVUU19QUk9URUNURUQsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMjk0NS1cXHRcXHRcXHQgICAgICBzdW0tXFx1MDAzZU91dE9jdGV0c1Byb3RlY3RlZCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yOTQ2LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19UWFNDX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI5NDc6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1RYU0NfU1RBVFNfQVRUUl9PVVRfT0NURVRTX0VOQ1JZUFRFRCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yOTQ4LVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlT3V0T2N0ZXRzRW5jcnlwdGVkLFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9Mjk5Nj1zdGF0aWMgaW50IGNvcHlfc2VjeV9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWFjc2VjX2Rldl9zdGF0cyAqc3VtKVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTI5OTcte1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjI5OTg6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9PVVRfUEtUU19VTlRBR0dFRCxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0yOTk5LVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlT3V0UGt0c1VudGFnZ2VkLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTMwMDAtXFx0XFx0XFx0ICAgICAgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9QQUQpIHx8XFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6MzAwMTpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX0lOX1BLVFNfVU5UQUdHRUQsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAwMi1cXHRcXHRcXHQgICAgICBzdW0tXFx1MDAzZUluUGt0c1VudGFnZ2VkLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTMwMDMtXFx0XFx0XFx0ICAgICAgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9QQUQpIHx8XFxuZHJpdmVycy9uZXQvbWFjc2VjLmM6MzAwNDpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX09VVF9QS1RTX1RPT19MT05HLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTMwMDUtXFx0XFx0XFx0ICAgICAgc3VtLVxcdTAwM2VPdXRQa3RzVG9vTG9uZyxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDA2LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjMwMDc6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9JTl9QS1RTX05PX1RBRyxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDA4LVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlSW5Qa3RzTm9UYWcsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAwOS1cXHRcXHRcXHQgICAgICBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX1BBRCkgfHxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozMDEwOlxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfSU5fUEtUU19CQURfVEFHLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTMwMTEtXFx0XFx0XFx0ICAgICAgc3VtLVxcdTAwM2VJblBrdHNCYWRUYWcsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAxMi1cXHRcXHRcXHQgICAgICBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX1BBRCkgfHxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozMDEzOlxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfSU5fUEtUU19VTktOT1dOX1NDSSxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDE0LVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlSW5Qa3RzVW5rbm93blNDSSxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDE1LVxcdFxcdFxcdCAgICAgIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjMwMTY6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1NFQ1lfU1RBVFNfQVRUUl9JTl9QS1RTX05PX1NDSSxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDE3LVxcdFxcdFxcdCAgICAgIHN1bS1cXHUwMDNlSW5Qa3RzTm9TQ0ksXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzAxOC1cXHRcXHRcXHQgICAgICBNQUNTRUNfU0VDWV9TVEFUU19BVFRSX1BBRCkgfHxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzozMDE5OlxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIE1BQ1NFQ19TRUNZX1NUQVRTX0FUVFJfSU5fUEtUU19PVkVSUlVOLFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTMwMjAtXFx0XFx0XFx0ICAgICAgc3VtLVxcdTAwM2VJblBrdHNPdmVycnVuLFxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9MzAyNz1zdGF0aWMgaW50IG5sYV9wdXRfc2VjeShzdHJ1Y3QgbWFjc2VjX3NlY3kgKnNlY3ksIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0zMDQ5LVxcdFxcdFxcdE1BQ1NFQ19TRUNZX0FUVFJfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjMwNTA6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgTUFDU0VDX1NFQ1lfQVRUUl9DSVBIRVJfU1VJVEUsXFxuZHJpdmVycy9uZXQvbWFjc2VjLmMtMzA1MS1cXHRcXHRcXHQgICAgICBjc2lkLCBNQUNTRUNfU0VDWV9BVFRSX1BBRCkgfHxcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jPTQzODc9c3RhdGljIGludCBtYWNzZWNfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDEyLVxcdCAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9NQUNTRUNfSUNWX0xFTiwgc2VjeS1cXHUwMDNlaWN2X2xlbikgfHxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo0NDEzOlxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIElGTEFfTUFDU0VDX0NJUEhFUl9TVUlURSxcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy00NDE0LVxcdFxcdFxcdCAgICAgIGNzaWQsIElGTEFfTUFDU0VDX1BBRCkgfHxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jPTIwOT1zdGF0aWMgaW50IF9fdm5pZmlsdGVyX2VudHJ5X2ZpbGxfc3RhdHMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTIxOS1cXHR2eGxhbl92bmlmaWx0ZXJfc3RhdHNfZ2V0KHZiZWdpbiwgXFx1MDAyNnZzdGF0cyk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6MjIwOlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIFZOSUZJTFRFUl9FTlRSWV9TVEFUU19SWF9CWVRFUyxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0yMjEtXFx0XFx0XFx0ICAgICAgdnN0YXRzLnJ4X2J5dGVzLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjIyMjpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUlhfUEtUUyxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0yMjMtXFx0XFx0XFx0ICAgICAgdnN0YXRzLnJ4X3BhY2tldHMsIFZOSUZJTFRFUl9FTlRSWV9TVEFUU19QQUQpIHx8XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6MjI0OlxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIFZOSUZJTFRFUl9FTlRSWV9TVEFUU19SWF9EUk9QUyxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0yMjUtXFx0XFx0XFx0ICAgICAgdnN0YXRzLnJ4X2Ryb3BzLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjIyNjpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUlhfRVJST1JTLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTIyNy1cXHRcXHRcXHQgICAgICB2c3RhdHMucnhfZXJyb3JzLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjIyODpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBWTklGSUxURVJfRU5UUllfU1RBVFNfVFhfQllURVMsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjI5LVxcdFxcdFxcdCAgICAgIHZzdGF0cy50eF9ieXRlcywgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1BBRCkgfHxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzoyMzA6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1RYX1BLVFMsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjMxLVxcdFxcdFxcdCAgICAgIHZzdGF0cy50eF9wYWNrZXRzLCBWTklGSUxURVJfRU5UUllfU1RBVFNfUEFEKSB8fFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjIzMjpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBWTklGSUxURVJfRU5UUllfU1RBVFNfVFhfRFJPUFMsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjMzLVxcdFxcdFxcdCAgICAgIHZzdGF0cy50eF9kcm9wcywgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1BBRCkgfHxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzoyMzQ6XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1RYX0VSUk9SUyxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0yMzUtXFx0XFx0XFx0ICAgICAgdnN0YXRzLnR4X2Vycm9ycywgVk5JRklMVEVSX0VOVFJZX1NUQVRTX1BBRCkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jPTc3PWdldF9wZWVyKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHVtcF9jdHggKmN0eClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtMTExLVxcdFxcdFxcdFxcdHBlZXItXFx1MDAzZXBlcnNpc3RlbnRfa2VlcGFsaXZlX2ludGVydmFsKSB8fFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM6MTEyOlxcdFxcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIFdHUEVFUl9BX1RYX0JZVEVTLCBwZWVyLVxcdTAwM2V0eF9ieXRlcyxcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jLTExMy1cXHRcXHRcXHRcXHQgICAgICBXR1BFRVJfQV9VTlNQRUMpIHx8XFxuZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzoxMTQ6XFx0XFx0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgV0dQRUVSX0FfUlhfQllURVMsIHBlZXItXFx1MDAzZXJ4X2J5dGVzLFxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMtMTE1LVxcdFxcdFxcdFxcdCAgICAgIFdHUEVFUl9BX1VOU1BFQykgfHxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmM9Mjg2Nz1zdGF0aWMgaW50IHdpbF9yZl9zZWN0b3JfZ2V0X2NmZyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuYy0yOTQ2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmM6Mjk0NzpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBRQ0FfQVRUUl9UU0YsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuYy0yOTQ4LVxcdFxcdFxcdCAgICAgIGxlNjRfdG9fY3B1KHJlcGx5LmV2dC50c2YpLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuYz0zMTAwPXN0YXRpYyBpbnQgd2lsX3JmX3NlY3Rvcl9nZXRfc2VsZWN0ZWQoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmMtMzE3My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jOjMxNzQ6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgUUNBX0FUVFJfVFNGLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmMtMzE3NS1cXHRcXHRcXHQgICAgICBsZTY0X3RvX2NwdShyZXBseS5ldnQudHNmKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdGVzdG1vZGUuYz01Mzc9bXQ3Nl90ZXN0bW9kZV9kdW1wX3N0YXRzKHN0cnVjdCBtdDc2X3BoeSAqcGh5LCBzdHJ1Y3Qgc2tfYnVmZiAqbXNnKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jLTU2MC1cXHQgICAgbmxhX3B1dF91MzIobXNnLCBNVDc2X1RNX1NUQVRTX0FUVFJfVFhfRE9ORSwgdGQtXFx1MDAzZXR4X2RvbmUpIHx8XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jOjU2MTpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQobXNnLCBNVDc2X1RNX1NUQVRTX0FUVFJfUlhfUEFDS0VUUywgcnhfcGFja2V0cyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3Rlc3Rtb2RlLmMtNTYyLVxcdFxcdFxcdCAgICAgIE1UNzZfVE1fU1RBVFNfQVRUUl9QQUQpIHx8XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jOjU2MzpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQobXNnLCBNVDc2X1RNX1NUQVRTX0FUVFJfUlhfRkNTX0VSUk9SLCByeF9mY3NfZXJyb3IsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90ZXN0bW9kZS5jLTU2NC1cXHRcXHRcXHQgICAgICBNVDc2X1RNX1NUQVRTX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTE2NDY9c3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fdHhfZnJhbWVfbmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNzM0LVxcdGluZm8tXFx1MDAzZXJhdGVfZHJpdmVyX2RhdGFbMF0gPSAodm9pZCAqKWNvb2tpZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYzoxNzM1OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIEhXU0lNX0FUVFJfQ09PS0lFLCBjb29raWUsIEhXU0lNX0FUVFJfUEFEKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0xNzM2LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM9MzU5Nz1zdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX3NlbmRfcG1zcl9mdG1fcmVxdWVzdF9wZWVyKHN0cnVjdCBza19idWZmICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0zNjc4LVxcdGlmIChyZXF1ZXN0LVxcdTAwM2VpbmdyZXNzX2Rpc3RhbmNlIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MzY3OTpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQobXNnLCBOTDgwMjExX1BNU1JfRlRNX1JFUV9BVFRSX0lOR1JFU1MsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzY4MC1cXHRcXHRcXHQgICAgICByZXF1ZXN0LVxcdTAwM2VpbmdyZXNzX2Rpc3RhbmNlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtMzY4NC1cXHRpZiAocmVxdWVzdC1cXHUwMDNlZWdyZXNzX2Rpc3RhbmNlIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6MzY4NTpcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQobXNnLCBOTDgwMjExX1BNU1JfRlRNX1JFUV9BVFRSX0VHUkVTUyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy0zNjg2LVxcdFxcdFxcdCAgICAgIHJlcXVlc3QtXFx1MDAzZWVncmVzc19kaXN0YW5jZSxcXG4tLVxcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VzZXIuYz0yODU1PXN0YXRpYyBpbnQgdGNtdV9zZW5kX2Rldl9zaXplX2V2ZW50KHN0cnVjdCB0Y211X2RldiAqdWRldiwgdTY0IHNpemUpXFxuLS1cXG5kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV91c2VyLmMtMjg2NC1cXHRcXHRyZXR1cm4gcmV0O1xcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VzZXIuYzoyODY1OlxcdHJldCA9IG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVENNVV9BVFRSX0RFVl9TSVpFLFxcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VzZXIuYy0yODY2LVxcdFxcdFxcdFxcdHNpemUsIFRDTVVfQVRUUl9QQUQpO1xcbi0tXFxuZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jPTM1NTM9c3RhdGljIGludCBtbHg1X3ZkcGFfZ2V0X3ZlbmRvcl92cV9zdGF0cyhzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkZXYsIHUxNiBpZHgsXFxuLS1cXG5kcml2ZXJzL3ZkcGEvbWx4NS9uZXQvbWx4NV92bmV0LmMtMzU5MC1cXG5kcml2ZXJzL3ZkcGEvbWx4NS9uZXQvbWx4NV92bmV0LmM6MzU5MTpcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX1ZFTkRPUl9BVFRSX1ZBTFVFLCByZWNlaXZlZF9kZXNjLFxcbmRyaXZlcnMvdmRwYS9tbHg1L25ldC9tbHg1X3ZuZXQuYy0zNTkyLVxcdFxcdFxcdCAgICAgIFZEUEFfQVRUUl9QQUQpKVxcbi0tXFxuZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jLTM1OTctXFxuZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jOjM1OTg6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9WRU5ET1JfQVRUUl9WQUxVRSwgY29tcGxldGVkX2Rlc2MsXFxuZHJpdmVycy92ZHBhL21seDUvbmV0L21seDVfdm5ldC5jLTM1OTktXFx0XFx0XFx0ICAgICAgVkRQQV9BVFRSX1BBRCkpXFxuLS1cXG5kcml2ZXJzL3ZkcGEvdmRwYS5jPTQ1MD1zdGF0aWMgaW50IHZkcGFfbWdtdGRldl9maWxsKGNvbnN0IHN0cnVjdCB2ZHBhX21nbXRfZGV2ICptZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxuZHJpdmVycy92ZHBhL3ZkcGEuYy00NjItXFxuZHJpdmVycy92ZHBhL3ZkcGEuYzo0NjM6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX01HTVRERVZfU1VQUE9SVEVEX0NMQVNTRVMsXFxuZHJpdmVycy92ZHBhL3ZkcGEuYy00NjQtXFx0XFx0XFx0ICAgICAgdmRwYV9tZ210ZGV2X2dldF9jbGFzc2VzKG1kZXYsIE5VTEwpLFxcbi0tXFxuZHJpdmVycy92ZHBhL3ZkcGEuYy00NzMtXFx0fVxcbmRyaXZlcnMvdmRwYS92ZHBhLmM6NDc0OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfU1VQUE9SVEVEX0ZFQVRVUkVTLFxcbmRyaXZlcnMvdmRwYS92ZHBhLmMtNDc1LVxcdFxcdFxcdCAgICAgIG1kZXYtXFx1MDAzZXN1cHBvcnRlZF9mZWF0dXJlcywgVkRQQV9BVFRSX1BBRCkpIHtcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhLmM9ODg2PXN0YXRpYyBpbnQgdmRwYV9kZXZfbmV0X2NvbmZpZ19maWxsKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRldiwgc3RydWN0IHNrX2J1ZmYgKm1zZylcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhLmMtODk0LVxcbmRyaXZlcnMvdmRwYS92ZHBhLmM6ODk1OlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfRkVBVFVSRVMsIGZlYXR1cmVzX2RldmljZSxcXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTg5Ni1cXHRcXHRcXHQgICAgICBWRFBBX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhLmM9OTEyPXZkcGFfZGV2X2Jsa19jYXBhY2l0eV9jb25maWdfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxuZHJpdmVycy92ZHBhL3ZkcGEuYy05MTgtXFxuZHJpdmVycy92ZHBhL3ZkcGEuYzo5MTk6XFx0cmV0dXJuIG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9CTEtfQ0ZHX0NBUEFDSVRZLFxcbmRyaXZlcnMvdmRwYS92ZHBhLmMtOTIwLVxcdFxcdFxcdFxcdCB2YWxfdTY0LCBWRFBBX0FUVFJfUEFEKTtcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhLmM9MTA3Mz1zdGF0aWMgaW50IHZkcGFfZGV2X2Jsa19jb25maWdfZmlsbChzdHJ1Y3QgdmRwYV9kZXZpY2UgKnZkZXYsXFxuLS1cXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTEwODItXFxuZHJpdmVycy92ZHBhL3ZkcGEuYzoxMDgzOlxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfRkVBVFVSRVMsIGZlYXR1cmVzX2RldmljZSxcXG5kcml2ZXJzL3ZkcGEvdmRwYS5jLTEwODQtXFx0XFx0XFx0ICAgICAgVkRQQV9BVFRSX1BBRCkpXFxuLS1cXG5kcml2ZXJzL3ZkcGEvdmRwYS5jPTExMjE9dmRwYV9kZXZfY29uZmlnX2ZpbGwoc3RydWN0IHZkcGFfZGV2aWNlICp2ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxcbi0tXFxuZHJpdmVycy92ZHBhL3ZkcGEuYy0xMTUyLVxcdFxcdGZlYXR1cmVzX2RyaXZlciA9IHZkZXYtXFx1MDAzZWNvbmZpZy1cXHUwMDNlZ2V0X2RyaXZlcl9mZWF0dXJlcyh2ZGV2KTtcXG5kcml2ZXJzL3ZkcGEvdmRwYS5jOjExNTM6XFx0XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9ORUdPVElBVEVEX0ZFQVRVUkVTLCBmZWF0dXJlc19kcml2ZXIsXFxuZHJpdmVycy92ZHBhL3ZkcGEuYy0xMTU0LVxcdFxcdFxcdFxcdCAgICAgIFZEUEFfQVRUUl9QQUQpKSB7XFxuLS1cXG5kcml2ZXJzL3ZkcGEvdmRwYS5jPTExODU9c3RhdGljIGludCB2ZHBhX2ZpbGxfc3RhdHNfcmVjKHN0cnVjdCB2ZHBhX2RldmljZSAqdmRldiwgc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhLmMtMTIwMC1cXHRmZWF0dXJlcyA9IHZkZXYtXFx1MDAzZWNvbmZpZy1cXHUwMDNlZ2V0X2RyaXZlcl9mZWF0dXJlcyh2ZGV2KTtcXG5kcml2ZXJzL3ZkcGEvdmRwYS5jOjEyMDE6XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9ORUdPVElBVEVEX0ZFQVRVUkVTLFxcbmRyaXZlcnMvdmRwYS92ZHBhLmMtMTIwMi1cXHRcXHRcXHQgICAgICBmZWF0dXJlcywgVkRQQV9BVFRSX1BBRCkpXFxuLS1cXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmM9Mjg1PXN0YXRpYyBpbnQgdmRwYXNpbV9uZXRfZ2V0X3N0YXRzKHN0cnVjdCB2ZHBhc2ltICp2ZHBhc2ltLCB1MTYgaWR4LFxcbi0tXFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMwOS1cXHRcXHRcXHRicmVhaztcXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmM6MzEwOlxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfVkVORE9SX0FUVFJfVkFMVUUsXFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMxMS1cXHRcXHRcXHRcXHQgICAgICByeF9wa3RzLCBWRFBBX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zMTUtXFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jOjMxNjpcXHRcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX1ZFTkRPUl9BVFRSX1ZBTFVFLFxcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zMTctXFx0XFx0XFx0XFx0ICAgICAgcnhfYnl0ZXMsIFZEUEFfQVRUUl9QQUQpKVxcbi0tXFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMyMS1cXHRcXHRcXHRicmVhaztcXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmM6MzIyOlxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfVkVORE9SX0FUVFJfVkFMVUUsXFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMyMy1cXHRcXHRcXHRcXHQgICAgICByeF9lcnJvcnMsIFZEUEFfQVRUUl9QQUQpKVxcbi0tXFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMyNy1cXHRcXHRcXHRicmVhaztcXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmM6MzI4OlxcdFxcdGlmIChubGFfcHV0X3U2NF82NGJpdChtc2csIFZEUEFfQVRUUl9ERVZfVkVORE9SX0FUVFJfVkFMVUUsXFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jLTMyOS1cXHRcXHRcXHRcXHQgICAgICByeF9vdmVycnVucywgVkRQQV9BVFRSX1BBRCkpXFxuLS1cXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzMzLVxcdFxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYzozMzQ6XFx0XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9WRU5ET1JfQVRUUl9WQUxVRSxcXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzM1LVxcdFxcdFxcdFxcdCAgICAgIHJ4X2Ryb3BzLCBWRFBBX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zNTAtXFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jOjM1MTpcXHRcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX1ZFTkRPUl9BVFRSX1ZBTFVFLFxcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zNTItXFx0XFx0XFx0XFx0ICAgICAgdHhfcGt0cywgVkRQQV9BVFRSX1BBRCkpXFxuLS1cXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzU2LVxcdFxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYzozNTc6XFx0XFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgVkRQQV9BVFRSX0RFVl9WRU5ET1JfQVRUUl9WQUxVRSxcXG5kcml2ZXJzL3ZkcGEvdmRwYV9zaW0vdmRwYV9zaW1fbmV0LmMtMzU4LVxcdFxcdFxcdFxcdCAgICAgIHR4X2J5dGVzLCBWRFBBX0FUVFJfUEFEKSlcXG4tLVxcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zNjItXFx0XFx0XFx0YnJlYWs7XFxuZHJpdmVycy92ZHBhL3ZkcGFfc2ltL3ZkcGFfc2ltX25ldC5jOjM2MzpcXHRcXHRpZiAobmxhX3B1dF91NjRfNjRiaXQobXNnLCBWRFBBX0FUVFJfREVWX1ZFTkRPUl9BVFRSX1ZBTFVFLFxcbmRyaXZlcnMvdmRwYS92ZHBhX3NpbS92ZHBhX3NpbV9uZXQuYy0zNjQtXFx0XFx0XFx0XFx0ICAgICAgdHhfZXJyb3JzLCBWRFBBX0FUVFJfUEFEKSlcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjM6NTkuNjY0ODM3NDExWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3OTA2MTk1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGxpbmsgUG9saWN5IER1bXAgZm9yIEJpZy1FbmRpYW4gQXR0cmlidXRlIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBwYXRjaCBpbnRlZ3JhdGVzIGJpZy1lbmRpYW4gYXR0cmlidXRlcyAoYE5MQV9CRTE2YCBhbmQgYE5MQV9CRTMyYCkgaW50byB0aGUgbmV0bGluayBwb2xpY3kgZHVtcCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBfX25ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0cigpYCBjYWxsZWQgYnkgYG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGUoKWAuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGhvdyBuZXRsaW5rIHBvbGljaWVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgZ2VuZXJpYyBuZXRsaW5rIG9yIHJ0bmV0bGluayBwb2xpY3kgZHVtcHMuXG5cbkZpcnN0LCBJJ20gbm90aW5nIHRoZSBjaGFuZ2VzIGluIHNpemUgY2FsY3VsYXRpb24uIEl0IHNlZW1zIHRvIGhhbmRsZSB0aGUgYmlnLWVuZGlhbiB0eXBlcyBzaW1pbGFybHkgdG8gdGhlaXIgdW5zaWduZWQgY291bnRlcnBhcnRzLCBidXQgd2l0aCBhbiBhZGRlZCBjb25zaWRlcmF0aW9uIGZvciBieXRlIG9yZGVyLiBUaGUgc2l6ZSBjYWxjdWxhdGlvbiBjb2RlIHNuaXBwZXQgc2hvd3MgdGhlIGFkZGVkIG92ZXJoZWFkIHRvIGFjY291bnQgZm9yIHRoZSBieXRlIG9yZGVyIGluZm9ybWF0aW9uLiBJJ20gc2VlaW5nIGBubGFfYXR0cl9zaXplKClgIGNhbGxzLCB3aGljaCBJIHByZXN1bWUgcmVsYXRlIHRvIGF0dHJpYnV0ZSBhbGlnbm1lbnQgYW5kIHBhZGRpbmcuIEknbGwgbWFrZSBzdXJlIHRvIGRvdWJsZSBjaGVjayB0aGF0IHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgY29ycmVjdCBieSByZS1ldmFsdWF0aW5nIHRoZSBgbmxhX2F0dHJfc2l6ZSgpYCBtYWNyby5cblxuU2Vjb25kLCB0aGUgYWN0dWFsIGR1bXBpbmcgcHJvY2VzcyBpdHNlbGYsIHdoaWNoIGluY2x1ZGVzIHRoZSBgTkxBX0JFMTZgIGFuZCBgTkxBX0JFMzJgIGNhc2VzLCBpcyB3aGF0J3MgcmVhbGx5IGludGVyZXN0aW5nLiBJdCBzZWVtcyB0aGUgY29kZSBpcyBjb3JyZWN0bHkgbWFwcGluZyB0aGUgYXR0cmlidXRlIHR5cGVzIHRvIGBOTF9BVFRSX1RZUEVfVTE2YCBhbmQgYE5MX0FUVFJfVFlQRV9VMzJgLCByZXNwZWN0aXZlbHkuIFRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGNvbmRpdGlvbmFsIGBubGFfcHV0X3UzMmAgY2FsbCB3aGljaCBzZXRzIHRoZSBgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSYCBhdHRyaWJ1dGUgYW5kIGZsYWdzIGl0IGFzIGBOTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOYC4gVGhpcyBpbXBsaWVzIHRoZSBieXRlIG9yZGVyIGlzIGV4cGxpY2l0bHkgdGFnZ2VkIHdoZW4gZW5jb3VudGVyaW5nIGEgYmlnLWVuZGlhbiBhdHRyaWJ1dGUuIFNvIGl0IHNlZW1zIHRoZSBpbnRlbnRpb24gaXMgdG8gaW5mb3JtIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgYWJvdXQgdGhlIGJ5dGUgb3JkZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB3cml0dGVuIGNvbnNpc3RlbnRseS5cblxuTm93LCBJJ2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgbG9naWMsIGxpa2VseSBhcm91bmQgbGluZSA0MzAgaW4gYG5ldC9uZXRsaW5rL3BvbGljeS5jYCB0byBjb25maXJtIHRoZSBjb2RlIGZsb3cgYW5kIHRoYXQgbm8gb3RoZXIgY3JpdGljYWwgbW9kaWZpY2F0aW9ucyB3ZXJlIG1hZGUgdGhhdCBtaWdodCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgaW5jb25zaXN0ZW5jaWVzLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIGB0eXBlYCB2YXJpYWJsZSBpcyBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSBpbiB0aGUgc2tiIHdyaXRpbmcgYW5kIHRoYXQgdGhlIGJ5dGUgb3JkZXIgaW5mb3JtYXRpb24gaXMgY29ycmVjdGx5IHByb3BhZ2F0ZWQgdG8gdXNlcnNwYWNlLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyBhbGlnbnMgd2l0aCB0aGUgY3VycmVudCBwb2xpY3kgZHVtcCBzdHJ1Y3R1cmUgYW5kIHRoYXQgdGhpcyBhZGRpdGlvbiBpcyBhcmNoaXRlY3R1cmFsbHkgc291bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjA3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjI0OjA0LjQ1NTQ2MDI3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRsaW5rL3BvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQxMDpcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBOTF9QT0xJQ1lfVFlQRV9BVFRSX1RZUEUsIHR5cGUpKVxcbiA0MTE6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDQxMjpcXHRcXG4gNDEzOlxcdFxcdG5sYV9uZXN0X2VuZChza2IsIGF0dHIpO1xcbiA0MTQ6XFx0XFx0V0FSTl9PTihhdHRyLVxcdTAwM2VubGFfbGVuIFxcdTAwM2UgZXN0aW1hdGUpO1xcbiA0MTU6XFx0XFxuIDQxNjpcXHRcXHRyZXR1cm4gMDtcXG4gNDE3OlxcdG5sYV9wdXRfZmFpbHVyZTpcXG4gNDE4OlxcdFxcdG5sYV9uZXN0X2NhbmNlbChza2IsIGF0dHIpO1xcbiA0MTk6XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiA0MjA6XFx0fVxcbiA0MjE6XFx0XFxuIDQyMjpcXHQvKipcXG4gNDIzOlxcdCAqIG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGVfYXR0ciAtIHdyaXRlIGEgZ2l2ZW4gYXR0cmlidXRlIHBvbGljeVxcbiA0MjQ6XFx0ICogQHNrYjogdGhlIG1lc3NhZ2Ugc2tiIHRvIHdyaXRlIHRvXFxuIDQyNTpcXHQgKiBAcHQ6IHRoZSBhdHRyaWJ1dGUncyBwb2xpY3lcXG4gNDI2OlxcdCAqIEBuZXN0YXR0cjogdGhlIG5lc3RlZCBhdHRyaWJ1dGUgSUQgdG8gdXNlXFxuIDQyNzpcXHQgKlxcbiA0Mjg6XFx0ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZTsgLSVFTk9EQVRBIGlzXFxuIDQyOTpcXHQgKlxcdCAgICBzcGVjaWFsLCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUncyBubyBwb2xpY3kgZGF0YSBhbmRcXG4gNDMwOlxcdCAqXFx0ICAgIHRoZSBhdHRyaWJ1dGUgaXMgZ2VuZXJhbGx5IHJlamVjdGVkLlxcbiA0MzE6XFx0ICovXFxuIDQzMjpcXHRpbnQgbmV0bGlua19wb2xpY3lfZHVtcF93cml0ZV9hdHRyKHN0cnVjdCBza19idWZmICpza2IsXFxuIDQzMzpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQsXFxuIDQzNDpcXHRcXHRcXHRcXHRcXHQgICBpbnQgbmVzdGF0dHIpXFxuIDQzNTpcXHR7XFxuIDQzNjpcXHRcXHRyZXR1cm4gX19uZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlX2F0dHIoTlVMTCwgc2tiLCBwdCwgbmVzdGF0dHIpO1xcbiA0Mzc6XFx0fVxcbiA0Mzg6XFx0XFxuIDQzOTpcXHQvKipcXG4gNDQwOlxcdCAqIG5ldGxpbmtfcG9saWN5X2R1bXBfd3JpdGUgLSB3cml0ZSBjdXJyZW50IHBvbGljeSBkdW1wIGF0dHJpYnV0ZXNcXG4gNDQxOlxcdCAqIEBza2I6IHRoZSBtZXNzYWdlIHNrYiB0byB3cml0ZSB0b1xcbiA0NDI6XFx0ICogQHN0YXRlOiB0aGUgcG9saWN5IGR1bXAgc3RhdGVcXG4gNDQzOlxcdCAqXFxuIDQ0NDpcXHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXFxuIDQ0NTpcXHQgKi9cXG4gNDQ2OlxcdGludCBuZXRsaW5rX3BvbGljeV9kdW1wX3dyaXRlKHN0cnVjdCBza19idWZmICpza2IsXFxuIDQ0NzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19wb2xpY3lfZHVtcF9zdGF0ZSAqc3RhdGUpXFxuIDQ0ODpcXHR7XFxuIDQ0OTpcXHRcXHRjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcHQ7XFxuIDQ1MDpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpwb2xpY3k7XFxuIDQ1MTpcXHRcXHRib29sIGFnYWluO1xcbiA0NTI6XFx0XFx0aW50IGVycjtcXG4gNDUzOlxcdFxcbiA0NTQ6XFx0c2VuZF9hdHRyaWJ1dGU6XFxuIDQ1NTpcXHRcXHRhZ2FpbiA9IGZhbHNlO1xcbiA0NTY6XFx0XFxuIDQ1NzpcXHRcXHRwdCA9IFxcdTAwMjZzdGF0ZS1cXHUwMDNlcG9saWNpZXNbc3RhdGUtXFx1MDAzZXBvbGljeV9pZHhdLnBvbGljeVtzdGF0ZS1cXHUwMDNlYXR0cl9pZHhdO1xcbiA0NTg6XFx0XFxuIDQ1OTpcXHRcXHRwb2xpY3kgPSBubGFfbmVzdF9zdGFydChza2IsIHN0YXRlLVxcdTAwM2Vwb2xpY3lfaWR4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDA6MjQ6MDQuNDU1NTM5MzM5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNjEzMDk3OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQW5hbHlzaXM6IE5lZWRzS01TQU4gPSBGYWxzZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgYWRkcyBOZXRsaW5rIHBvbGljeSBkdW1waW5nIGZvciBiaWctZW5kaWFuIGF0dHJpYnV0ZXMuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHRodXMgd2FycmFudGluZyBLTVNBTj8gSSd2ZSBnb25lIHRocm91Z2ggdGhlIGZvdXIga2V5IGNyaXRlcmlhLlxuXG5GaXJzdCwgY3JpdGVyaWEgb25lIGZvY3VzZXMgb24ga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQuIFRoZSBwYXRjaCB1c2VzIGBubGFfcHV0X3UzMmAgdG8gcHV0IGEgMzItYml0IGNvbnN0YW50LCBgTkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTmAgKHdoaWNoIGlzIGp1c3QgdGhlIHZhbHVlIDEsIGEgZnVsbHkgaW5pdGlhbGl6ZWQgY29uc3RhbnQpIGludG8gdGhlIE5ldGxpbmsgYnVmZmVyLiBBbHNvLCBgbmxhX2dldF9yYW5nZV91bnNpZ25lZGAgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGUgYHJhbmdlYCBzdHJ1Y3R1cmUuIFNvLCBub3RoaW5nIHVuaW5pdGlhbGl6ZWQgaXMgYmVpbmcgZXhwb3NlZCBoZXJlLlxuXG5OZXh0LCB3ZSBjaGVjayBmb3IgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBXZSBoYXZlIGEgY2hlY2sgYWdhaW5zdCBgcHQtXHUwMDNldHlwZWAsIGJ1dCBgcHRgIGlzIGZyb20gYSBjb25zdGFudCBwb2xpY3kgdGFibGUuIE5vIHJpc2sgdGhlcmUgZWl0aGVyLlxuXG5UaGlyZCwgYXJlIHRoZXJlIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlcj8gTm9wZS4gTm8gbWVtb3J5IGFsbG9jYXRpb24gaXMgaW52b2x2ZWQsIHNvIHRoaXMgY3JpdGVyaWEgaXMgbm90IG1ldC5cblxuRmluYWxseSwgd2UgYXNzZXNzIHBvdGVudGlhbCBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFdlIHNlZSB0aGUgc2l6ZSBlc3RpbWF0ZSB3YXMgcHJvcGVybHkgdXBkYXRlZCwgbWVhbmluZyBidWZmZXIgc2l6ZSBjaGVja3MgYW5kIGFsbG9jYXRpb25zIGFyZSBleGFjdC4gTm8gY29uY2VybnMgYXJvdW5kIGJ1ZmZlciBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblNvLCB0byBzdW1tYXJpemUsIG5vIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGFyZSBiZWluZyB3cml0dGVuIHRvIHRoZSBOZXRsaW5rIGJ1ZmZlci4gQWxsIHZhbHVlcyBhcmUgZWl0aGVyIGV4cGxpY2l0IGNvbnN0YW50cyBvciBkZXJpdmVkIGZyb20gZnVuY3Rpb25zIHRoYXQgZXhwbGljaXRseSBpbml0aWFsaXplIHRoZWlyIG91dHB1dC4gS01TQU4gLyBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBpbiBwbGFjZSB0byBjYXRjaCBhbnkgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG5cblRodXMsIGJhc2VkIG9uIG15IGFuYWx5c2lzLCBOZWVkc0tNU0FOIGlzIGNsZWFybHkgKmZhbHNlKi4gV2UgY2FuIHByb2NlZWQgd2l0aCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDQxLCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDAwOjI0OjA5LjgxNjg1MjEyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIE5ldGxpbmsgcG9saWN5IGR1bXAgc3VwcG9ydCBmb3IgYmlnLWVuZGlhbiBpbnRlZ2VyIGF0dHJpYnV0ZSB0eXBlcyAoTkxBX0JFMTYgYW5kIE5MQV9CRTMyKSBieSBlbWl0dGluZyB0aGUgTkxfUE9MSUNZX1RZUEVfQVRUUl9CWVRFX09SREVSIGF0dHJpYnV0ZSBpbiBuZXRsaW5rIHBvbGljeSBkZXNjcmlwdGlvbnMuIFxcblxcbkFsbCB2YWx1ZXMgd3JpdHRlbiB0byB0aGUgTmV0bGluayBza2IgYXJlIGV4cGxpY2l0LCBmdWxseSBpbml0aWFsaXplZCBjb25zdGFudHMgKHN1Y2ggYXMgTkxfUE9MSUNZX0JZVEVfT1JERVJfQklHX0VORElBTikgb3IgcmFuZ2UgdmFsdWVzIGluaXRpYWxpemVkIGJ5IG5sYV9nZXRfcmFuZ2VfdW5zaWduZWQoKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBvciBwYWRkaW5ncyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgaXMgYW55IGNvbnRyb2wgZmxvdyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBTdGFuZGFyZCBLQVNBTiBhbmQgbWVtb3J5IGNoZWNrcyBhcmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyBidWZmZXIgc2l6ZXMgYW5kIG5ldGxpbmsgbWVzc2FnZSBmb3JtYXR0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgTmV0bGluayBwb2xpY3kgZHVtcCBzdXBwb3J0IGZvciBiaWctZW5kaWFuIGludGVnZXIgYXR0cmlidXRlIHR5cGVzIChOTEFfQkUxNiBhbmQgTkxBX0JFMzIpIGJ5IGVtaXR0aW5nIHRoZSBOTF9QT0xJQ1lfVFlQRV9BVFRSX0JZVEVfT1JERVIgYXR0cmlidXRlIGluIG5ldGxpbmsgcG9saWN5IGRlc2NyaXB0aW9ucy4gXFxuXFxuQWxsIHZhbHVlcyB3cml0dGVuIHRvIHRoZSBOZXRsaW5rIHNrYiBhcmUgZXhwbGljaXQsIGZ1bGx5IGluaXRpYWxpemVkIGNvbnN0YW50cyAoc3VjaCBhcyBOTF9QT0xJQ1lfQllURV9PUkRFUl9CSUdfRU5ESUFOKSBvciByYW5nZSB2YWx1ZXMgaW5pdGlhbGl6ZWQgYnkgbmxhX2dldF9yYW5nZV91bnNpZ25lZCgpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIG9yIHBhZGRpbmdzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBpcyBhbnkgY29udHJvbCBmbG93IGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFN0YW5kYXJkIEtBU0FOIGFuZCBtZW1vcnkgY2hlY2tzIGFyZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIGJ1ZmZlciBzaXplcyBhbmQgbmV0bGluayBtZXNzYWdlIGZvcm1hdHRpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowd7s8x[1] Phase: Succeeded StartedAt: 2026-09-09 00:24:21 +0000 UTC FinishedAt: 2026-09-09 00:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 00:24:21 +0000 UTC FinishedAt: 2026-09-09 00:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2] Phase: Succeeded StartedAt: 2026-09-09 00:24:21 +0000 UTC FinishedAt: 2026-09-09 04:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 00:24:21 +0000 UTC FinishedAt: 2026-09-09 04:03:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 00:24:21 +0000 UTC FinishedAt: 2026-09-09 00:24:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 00:24:21 +0000 UTC FinishedAt: 2026-09-09 00:24:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd7s8x/series-workflowd7s8x-convert-artifact-3792434621/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 00:24:31 +0000 UTC FinishedAt: 2026-09-09 00:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 00:24:31 +0000 UTC FinishedAt: 2026-09-09 00:41:02 +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:*d4423209-ec39-4f77-8690-562de96f7ec2,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-workflowd7s8x/series-workflowd7s8x-convert-artifact-3792434621/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": "7d0eb74e-594b-4a98-85bb-dcf13f4a4a74", "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-workflowd7s8x/series-workflowd7s8x-build-action-73735923/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 00:24:31 +0000 UTC FinishedAt: 2026-09-09 00:40:52 +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:*d4423209-ec39-4f77-8690-562de96f7ec2,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-workflowd7s8x/series-workflowd7s8x-convert-artifact-3792434621/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": "7d0eb74e-594b-4a98-85bb-dcf13f4a4a74", "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-workflowd7s8x/series-workflowd7s8x-build-action-73735923/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 00:41:02 +0000 UTC FinishedAt: 2026-09-09 00:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 00:41:02 +0000 UTC FinishedAt: 2026-09-09 00:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 00:41:02 +0000 UTC FinishedAt: 2026-09-09 00:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 00:41:02 +0000 UTC FinishedAt: 2026-09-09 00:41:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd7s8x/series-workflowd7s8x-convert-artifact-578295832/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 00:41:12 +0000 UTC FinishedAt: 2026-09-09 00:43:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 00:41:12 +0000 UTC FinishedAt: 2026-09-09 00:43:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7d0eb74e-594b-4a98-85bb-dcf13f4a4a74,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-workflowd7s8x/series-workflowd7s8x-build-action-73735923/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-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 00:43:12 +0000 UTC FinishedAt: 2026-09-09 00:43:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 00:43:12 +0000 UTC FinishedAt: 2026-09-09 00:43:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 00:43:12 +0000 UTC FinishedAt: 2026-09-09 01:00:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 00:43:12 +0000 UTC FinishedAt: 2026-09-09 01:00:42 +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:*d4423209-ec39-4f77-8690-562de96f7ec2,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-workflowd7s8x/series-workflowd7s8x-convert-artifact-578295832/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": "2ab884ac-07da-45c6-88a2-c93ffe712078", "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-workflowd7s8x/series-workflowd7s8x-build-action-3135991940/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 00:43:12 +0000 UTC FinishedAt: 2026-09-09 01:00:32 +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:*d4423209-ec39-4f77-8690-562de96f7ec2,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-workflowd7s8x/series-workflowd7s8x-convert-artifact-578295832/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": "2ab884ac-07da-45c6-88a2-c93ffe712078", "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-workflowd7s8x/series-workflowd7s8x-build-action-3135991940/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 01:00:42 +0000 UTC FinishedAt: 2026-09-09 01:00:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 01:00:42 +0000 UTC FinishedAt: 2026-09-09 01:00:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 01:00:42 +0000 UTC FinishedAt: 2026-09-09 01:02:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 01:00:42 +0000 UTC FinishedAt: 2026-09-09 01:02:25 +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:*2ab884ac-07da-45c6-88a2-c93ffe712078,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-workflowd7s8x/series-workflowd7s8x-build-action-3135991940/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-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 01:02:35 +0000 UTC FinishedAt: 2026-09-09 04:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 01:02:35 +0000 UTC FinishedAt: 2026-09-09 04:03:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"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:*7d0eb74e-594b-4a98-85bb-dcf13f4a4a74,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2ab884ac-07da-45c6-88a2-c93ffe712078,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-workflowd7s8x/series-workflowd7s8x-build-action-73735923/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-workflowd7s8x/series-workflowd7s8x-build-action-3135991940/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 01:02:35 +0000 UTC FinishedAt: 2026-09-09 01:02:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 01:02:35 +0000 UTC FinishedAt: 2026-09-09 01:02:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"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-workflowd7s8x/series-workflowd7s8x-convert-artifact-3610255345/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 01:02:35 +0000 UTC FinishedAt: 2026-09-09 01:02:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 01:02:35 +0000 UTC FinishedAt: 2026-09-09 01:02:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 01:02:35 +0000 UTC FinishedAt: 2026-09-09 01:02:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 01:02:45 +0000 UTC FinishedAt: 2026-09-09 04:03:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd7s8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctrl_dumppolicy","netlink_policy_dump_attr_size_estimate","netlink_policy_dump_write","netlink_policy_dump_write_attr"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET"],"series_id":"7cfed603-9371-4ed9-9e71-548261f2b282","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 01:02:45 +0000 UTC FinishedAt: 2026-09-09 04:03:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7d0eb74e-594b-4a98-85bb-dcf13f4a4a74,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2ab884ac-07da-45c6-88a2-c93ffe712078,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-workflowd7s8x/series-workflowd7s8x-build-action-73735923/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-workflowd7s8x/series-workflowd7s8x-build-action-3135991940/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-workflowd7s8x/series-workflowd7s8x-convert-artifact-3610255345/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,}