Name: series-workflowt4p7z Phase: Succeeded StartedAt: 2026-09-12 17:09:16 +0000 UTC FinishedAt: 2026-09-12 20:54:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[0] Phase: Succeeded StartedAt: 2026-09-12 17:09:16 +0000 UTC FinishedAt: 2026-09-12 17:14:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 17:09:16 +0000 UTC FinishedAt: 2026-09-12 17:14:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI", "NFC_VIRTUAL_NCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI", "NFC_VIRTUAL_NCI" ], "series_id": "1a4e0f75-80e4-4554-ada4-fa54c189a407" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nci_core_conn_create_rsp_packet", "nci_rsp_packet" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "df2908090cda368b01ff43709f51890076c56157", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfTkNJJiMzNDssCiAgICAmIzM0O05GQ19WSVJUVUFMX05DSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmNpX3JzcF9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIHZhbGlkYXRpb24gY2hlY2sgKGBza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKnJzcClgKSBpbiBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCgpYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgc2tiLVx1MDAzZWRhdGFgIHdoZW4gcGFyc2luZyB0cnVuY2F0ZWQgTkNJIHJlc3BvbnNlIHBhY2tldHMuIE91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFyZSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGJ1Z3MgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgb24gaW5jb21pbmcgTkNJIHJlc3BvbnNlIHBhY2tldHMgaW4gbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCB2aXJ0dWFsIE5DSSBkZXZpY2VzIChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJIC9kZXYvdmlydHVhbF9uY2kpIG9yIGVtdWxhdGVkIFVTQiBORkMgZGV2aWNlcywgYm90aCBvZiB3aGljaCBhcmUgc3VwcG9ydGVkIGFuZCBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzAyOGRkYWU0ZjlmYjY2OThiZDUxNTdmNDBlOTQ3NmFjMjcxNDliNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDE3OjEyOjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL3JzcC5jIGIvbmV0L25mYy9uY2kvcnNwLmNcbmluZGV4IGIwYWI0ZjVhY2JjZTguLjcyYjc0OGYwYmU5ZjIgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9yc3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvcnNwLmNcbkBAIC0zMTIsNiAmIzQzOzMxMiwxMCBAQCBzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIFx0cHJfZGVidWcoXCYjMzQ7c3RhdHVzIDB4JXhcXG5cJiMzNDssIHN0YXR1cyk7XG4gXG4gXHRpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfT0spIHtcbiYjNDM7XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKnJzcCkpIHtcbiYjNDM7XHRcdFx0c3RhdHVzID0gTkNJX1NUQVRVU19TWU5UQVhfRVJST1I7XG4mIzQzO1x0XHRcdGdvdG8gZXhpdDtcbiYjNDM7XHRcdH1cbiBcdFx0cnNwID0gKHN0cnVjdCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3AgKilza2ItXHUwMDNlZGF0YTtcbiBcbiBcdFx0Y29ubl9pbmZvID0gZGV2bV9remFsbG9jKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDssCiAgICAmIzM0O05GQ19OQ0kmIzM0OywKICAgICYjMzQ7TkZDX1ZJUlRVQUxfTkNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfcnNwX3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIG9uIGluY29taW5nIE5DSSByZXNwb25zZSBwYWNrZXRzIGluIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHRocm91Z2ggdmlydHVhbCBOQ0kgZGV2aWNlcyAoQ09ORklHX05GQ19WSVJUVUFMX05DSSAvZGV2L3ZpcnR1YWxfbmNpKSBvciBlbXVsYXRlZCBVU0IgTkZDIGRldmljZXMsIGJvdGggb2Ygd2hpY2ggYXJlIHN1cHBvcnRlZCBhbmQgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcwMjhkZGFlNGY5ZmI2Njk4YmQ1MTU3ZjQwZTk0NzZhYzI3MTQ5YjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAxNzoxMjo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL3JzcC5jIGIvbmV0L25mYy9uY2kvcnNwLmMKaW5kZXggYjBhYjRmNWFjYmNlOC4uNzJiNzQ4ZjBiZTlmMiAxMDA2NDQKLS0tIGEvbmV0L25mYy9uY2kvcnNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvcnNwLmMKQEAgLTMxMiw2ICYjNDM7MzEyLDEwIEBAIHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsCiAJcHJfZGVidWcoJiMzNDtzdGF0dXMgMHgleFxuJiMzNDssIHN0YXR1cyk7CiAKIAlpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfT0spIHsKJiM0MzsJCWlmIChza2ItJmd0O2xlbiAmbHQ7IHNpemVvZigqcnNwKSkgewomIzQzOwkJCXN0YXR1cyA9IE5DSV9TVEFUVVNfU1lOVEFYX0VSUk9SOwomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsJCX0KIAkJcnNwID0gKHN0cnVjdCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3AgKilza2ItJmd0O2RhdGE7CiAKIAkJY29ubl9pbmZvID0gZGV2bV9remFsbG9jKCZhbXA7bmRldi0mZ3Q7bmZjX2Rldi0mZ3Q7ZGV2LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTE2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIFBhdGNoJiMzOTtzIFN1aXRhYmlsaXR5IGZvciBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCBpdHNlbGYgaXMgYWRkaW5nIGEgc2l6ZSBjaGVjayB0byBgbmV0L25mYy9uY2kvcnNwLmNgLiBTcGVjaWZpY2FsbHksIGl0IGNoZWNrcyBpZiBgc2tiLSZndDtsZW5gIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKCpyc3ApYCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBgcnNwYCBzdHJ1Y3QuIFRoaXMgaXMgYSBjbGFzc2ljIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHNwb3QsIGEgbWlzc2luZyBib3VuZHMgY2hlY2suIElmIHRoZSBwYWNrZXQgcmVjZWl2ZWQgaGFzIGluc3VmZmljaWVudCBzaXplLCBhY2Nlc3NpbmcgYHNrYi0mZ3Q7ZGF0YWAgbWlnaHQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3IsIGluIGV4dHJlbWUgY2FzZXMsIGEgY3Jhc2guCgpNeSBpbml0aWFsIGh1bmNoLCBiYXNlZCBwdXJlbHkgb24gdGhpcyBkaWZmLCBpcyB0aGF0IGl0JiMzOTtzICpsaWtlbHkqIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIE1pc3NpbmcgYm91bmRzIGNoZWNrcyBhcmUgYSBmYXZvcml0ZSBwbGF5Z3JvdW5kIGZvciBmdXp6ZXJzIGxpa2Ugc3l6a2FsbGVyLgoKVG8gZ2V0IGEgYmV0dGVyIGdyaXAsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb250ZXh0IGFyb3VuZCBgbmV0L25mYy9uY2kvcnNwLmNgIHdpdGggc29tZXRoaW5nIGxpa2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBORkMgKE5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbikgc3Vic3lzdGVtIGludGVyYWN0cyB3aXRoIHRoaXMgcGFydGljdWxhciBmaWxlLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgYSBjcml0aWNhbCBkYXRhIHBhdGggb3IganVzdCBzb21lIHJhcmVseS11c2VkIGRlYnVnIGZ1bmN0aW9uLiBJZiBJIGNhbiB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIHVzZWQsIEkgY2FuIGV2YWx1YXRlIGhvdyBnb29kIG9mIGEgdGFyZ2V0IGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvcnNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFxuIDMwMTpcdFx0cHJfZGVidWcoXCYjMzQ7c3RhdHVzIDB4JXhcXG5cJiMzNDssIHN0YXR1cyk7XG4gMzAyOlx0XHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7XG4gMzAzOlx0fVxuIDMwNDpcdFxuIDMwNTpcdHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gMzA2Olx0XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMwNzpcdHtcbiAzMDg6XHRcdF9fdTggc3RhdHVzID0gc2tiLVx1MDAzZWRhdGFbMF07XG4gMzA5Olx0XHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvID0gTlVMTDtcbiAzMTA6XHRcdGNvbnN0IHN0cnVjdCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3AgKnJzcDtcbiAzMTE6XHRcbiAzMTI6XHRcdHByX2RlYnVnKFwmIzM0O3N0YXR1cyAweCV4XFxuXCYjMzQ7LCBzdGF0dXMpO1xuIDMxMzpcdFxuIDMxNDpcdFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XG4gMzE1Olx0XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKnJzcCkpIHtcbiAzMTY6XHRcdFx0XHRzdGF0dXMgPSBOQ0lfU1RBVFVTX1NZTlRBWF9FUlJPUjtcbiAzMTc6XHRcdFx0XHRnb3RvIGV4aXQ7XG4gMzE4Olx0XHRcdH1cbiAzMTk6XHRcdFx0cnNwID0gKHN0cnVjdCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3AgKilza2ItXHUwMDNlZGF0YTtcbiAzMjA6XHRcbiAzMjE6XHRcdFx0Y29ubl9pbmZvID0gZGV2bV9remFsbG9jKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsXG4gMzIyOlx0XHRcdFx0XHRcdCBzaXplb2YoKmNvbm5faW5mbyksIEdGUF9LRVJORUwpO1xuIDMyMzpcdFx0XHRpZiAoIWNvbm5faW5mbykge1xuIDMyNDpcdFx0XHRcdHN0YXR1cyA9IE5DSV9TVEFUVVNfUkVKRUNURUQ7XG4gMzI1Olx0XHRcdFx0Z290byBleGl0O1xuIDMyNjpcdFx0XHR9XG4gMzI3Olx0XG4gMzI4Olx0XHRcdGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcyA9IGRldm1fa3phbGxvYyhcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LFxuIDMyOTpcdFx0XHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyksXG4gMzMwOlx0XHRcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4gMzMxOlx0XHRcdGlmICghY29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zKSB7XG4gMzMyOlx0XHRcdFx0c3RhdHVzID0gTkNJX1NUQVRVU19SRUpFQ1RFRDtcbiAzMzM6XHRcdFx0XHRnb3RvIGZyZWVfY29ubl9pbmZvO1xuIDMzNDpcdFx0XHR9XG4gMzM1Olx0XG4gMzM2Olx0XHRcdGNvbm5faW5mby1cdTAwM2VkZXN0X3R5cGUgPSBuZGV2LVx1MDAzZWN1cl9kZXN0X3R5cGU7XG4gMzM3Olx0XHRcdGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcy1cdTAwM2VpZCA9IG5kZXYtXHUwMDNlY3VyX3BhcmFtcy5pZDtcbiAzMzg6XHRcdFx0Y29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zLVx1MDAzZXByb3RvY29sID0gbmRldi1cdTAwM2VjdXJfcGFyYW1zLnByb3RvY29sO1xuIDMzOTpcdFx0XHRjb25uX2luZm8tXHUwMDNlY29ubl9pZCA9IHJzcC1cdTAwM2Vjb25uX2lkO1xuIDM0MDpcdFxuIDM0MTpcdFx0XHQvKiBOb3RlOiBkYXRhX2V4Y2hhbmdlX2NiIGFuZCBkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgbmVlZCB0b1xuIDM0MjpcdFx0XHQgKiBiZSBzcGVjaWZ5IG91dCBvZiBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0XG4gMzQzOlx0XHRcdCAqL1xuIDM0NDpcdFxuIDM0NTpcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZjb25uX2luZm8tXHUwMDNlbGlzdCk7XG4gMzQ2Olx0XHRcdGxpc3RfYWRkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0LCBcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19saXN0KTtcbiAzNDc6XHRcbiAzNDg6XHRcdFx0aWYgKG5kZXYtXHUwMDNlY3VyX3BhcmFtcy5pZCA9PSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlbmZjZWVfaWQpXG4gMzQ5Olx0XHRcdFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbyA9IGNvbm5faW5mbztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDEzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIE5DSSBQYWNrZXQgSGFuZGxpbmcqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgaXMgdXNlZC4gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbiBzcGVjaWZpY2FsbHksIGFuZCB0aGVuLCBtb3JlIGJyb2FkbHksIG1hcCBvdXQgdGhlIGVudGlyZSByZWNlaXZlIGFuZCBkaXNwYXRjaCBwcm9jZXNzIGZvciBOQ0kgcGFja2V0cyB3aXRoaW4gdGhpcyBzeXN0ZW0uIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGRhdGEgZmxvdyBmcm9tIHRoZSBwaHlzaWNhbCBsYXllciB1cCB0byB0aGUgcG9pbnQgd2hlcmUgdGhpcyByZXNwb25zZSBwYWNrZXQgaXMgdWx0aW1hdGVseSBoYW5kbGVkLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhpcyBmdW5jdGlvbiBjYWxsIGlzIGEga2V5IHBpZWNlIGluIHRoZSBjb25uZWN0aW9uIHNldHVwLCB3aGljaCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0sIGJ1dCBJJiMzOTtsbCBmb2N1cyBvbiBob3cgdGhlIHBhY2tldCBpcyByZWNlaXZlZCwgdGhlIHN1YnNlcXVlbnQgcHJvY2Vzc2luZyBpdCB1bmRlcmdvZXMsIGFuZCBob3cgaXQgaXMgcm91dGVkIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyLiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgZm9yIHBhY2tldCBpZGVudGlmaWNhdGlvbiwgdGhlIHJvbGUgb2YgYW55IGludGVycnVwdCBoYW5kbGluZywgYW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHF1ZXVpbmcgb3IgYnVmZmVyaW5nIHVzZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgcG9pbnRzIG9mIGVycm9yLCBhbmQgYW55IGFyZWFzIHRoYXQgbWlnaHQgYmVuZWZpdCBmcm9tIG9wdGltaXphdGlvbiwgZ2l2ZW4gbXkgcGFzdCBleHBlcmllbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvcnNwLmM9Mjk2PXN0YXRpYyB2b2lkIG5jaV9uZmNlZV9tb2RlX3NldF9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuLS1cbm5ldC9uZmMvbmNpL3JzcC5jLTMwNC1cbm5ldC9uZmMvbmNpL3JzcC5jOjMwNTpzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxubmV0L25mYy9uY2kvcnNwLmMtMzA2LVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL25jaS9yc3AuYy0zNDEtXHRcdC8qIE5vdGU6IGRhdGFfZXhjaGFuZ2VfY2IgYW5kIGRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCBuZWVkIHRvXG5uZXQvbmZjL25jaS9yc3AuYzozNDI6XHRcdCAqIGJlIHNwZWNpZnkgb3V0IG9mIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcbm5ldC9uZmMvbmNpL3JzcC5jLTM0My1cdFx0ICovXG4tLVxubmV0L25mYy9uY2kvcnNwLmM9Mzg1PXZvaWQgbmNpX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9uY2kvcnNwLmMtNDIzLVx0Y2FzZSBOQ0lfT1BfQ09SRV9DT05OX0NSRUFURV9SU1A6XG5uZXQvbmZjL25jaS9yc3AuYzo0MjQ6XHRcdG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQobmRldiwgc2tiKTtcbm5ldC9uZmMvbmNpL3JzcC5jLTQyNS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA4MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBuY2lfcnNwX3BhY2tldGAgQ2FsbCBTaXRlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgbmNpX3JzcF9wYWNrZXRgLiBUaW1lIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxscyB0byB0aGF0IGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBkaWZmZXJlbnQgY29udGV4dHMgaW4gd2hpY2ggaXQmIzM5O3MgYmVpbmcgaW52b2tlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHJlc3BvbnNlIHBhY2tldHMgYXJlIGJlaW5nIGhhbmRsZWQsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIHN0YXJ0IHRvIHJlYXNvbiBhYm91dCBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6YXRpb25zLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZXJlJiMzOTtzIGFueSB1bnVzdWFsIG9yIHVuZXhwZWN0ZWQgY29udHJvbCBmbG93IHdoZW4gdGhhdCByb3V0aW5lIGlzIGVudGVyZWQuIFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZGF0YSBkZXBlbmRlbmNpZXM/IExldCYjMzk7cyB0cmFjZSBpdCBhbmQgc2VlIHdoZXJlIHRoZSBkYXRhIGNvbWVzIGZyb20gYW5kIHdoZXJlIGl0IGdvZXMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmNpX3JzcF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjL25jaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9jb3JlLmM9MTU1OT1zdGF0aWMgdm9pZCBuY2lfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTE1NzgtXHRcdGNhc2UgTkNJX01UX1JTUF9QS1Q6XG5uZXQvbmZjL25jaS9jb3JlLmM6MTU3OTpcdFx0XHRuY2lfcnNwX3BhY2tldChuZGV2LCBza2IpO1xubmV0L25mYy9uY2kvY29yZS5jLTE1ODAtXHRcdFx0YnJlYWs7XG4tLVxubmV0L25mYy9uY2kvcnNwLmM9MzY0PXN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi0tXG5uZXQvbmZjL25jaS9yc3AuYy0zODQtXG5uZXQvbmZjL25jaS9yc3AuYzozODU6dm9pZCBuY2lfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9uZmMvbmNpL3JzcC5jLTM4Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU1MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gUmVhY2hpbmcgTkNJIGluIGEgRnV6emluZyBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgd2UgY2FuIGFjdHVhbGx5IGdldCBhdCB0aGUgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGZyb20gd2l0aGluIHN0YW5kYXJkIGZ1enppbmcgc2V0dXBzLCBsaWtlIFN5emthbGxlci4gTXkgZ3V0IHRlbGxzIG1lIGl0ICpzaG91bGQqIGJlIHBvc3NpYmxlLCBidXQgdGhlIHNwZWNpZmljcyBhcmUgZ29pbmcgdG8gbWF0dGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgTkZDL05DSSBkZXZpY2VzIGFyZSBlbXVsYXRlZCBvciBicm91Z2h0IGludG8gZXhpc3RlbmNlLgoKRmlyc3QsIGxldCYjMzk7cyBleHBsb3JlIGlmIHRoZXJlIGFyZSBhbHJlYWR5IHZpcnR1YWwgcmVwcmVzZW50YXRpb25zIG9mIE5GQy9OQ0kuIEkmIzM5O20gdGhpbmtpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIHNvbWV0aGluZyBsaWtlICYjMzQ7dmlydHVhbF9uZmMsJiMzNDsgJiMzNDtyYXcgbmNpLCYjMzQ7IG9yIG1heWJlIGV2ZW4gYSBtb3JlIGRldGFpbGVkICYjMzQ7c2ltdWxhdGVkIG5mYy4mIzM0OyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgdG8gc2VlIHdoYXQmIzM5O3Mgb3V0IHRoZXJlLgoKVG8gc3RhcnQsIEkmIzM5O2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL25mY2AgYW5kIGFsc28gY2hlY2sgYG5ldC9uZmNgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHBsYWNlcyB3aGVyZSBhbnkgcmVsZXZhbnQgZW11bGF0aW9uIG9yIGRyaXZlciBzdXBwb3J0IHdvdWxkIHJlc2lkZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZ3JvdW5kIHRydXRoIG9uIHRoZSB2aXJ0dWFsIE5GQy9OQ0kgb3B0aW9ucywgaWYgdGhleSBldmVuIGV4aXN0LiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBoYXZlIGEgYmV0dGVyIHBpY3R1cmUgb2YgaG93IHJlYWNoYWJsZSB0aGVzZSBpbnRlcmZhY2VzIGFyZSB2aWEgU3l6a2FsbGVyJiMzOTtzIHN0YW5kYXJkIGRldmljZSBtb2RlbHMsIHdoZXRoZXIgaXQgYmUgdmlydHVhbCBkZXZpY2VzLCBVU0IsIG9yIHBvdGVudGlhbGx5IGV2ZW4gdmlydHVhbCBORkMgaW50ZXJmYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmNpX3JlY3ZfZnJhbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvZmRwL2kyYy5jPTIyMj1zdGF0aWMgaXJxcmV0dXJuX3QgZmRwX25jaV9pMmNfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpwaHlfaWQpXG4tLVxuZHJpdmVycy9uZmMvZmRwL2kyYy5jLTIzOC1cdGlmIChza2IgIT0gTlVMTClcbmRyaXZlcnMvbmZjL2ZkcC9pMmMuYzoyMzk6XHRcdG5jaV9yZWN2X2ZyYW1lKHBoeS1cdTAwM2VuZGV2LCBza2IpO1xuZHJpdmVycy9uZmMvZmRwL2kyYy5jLTI0MC1cbi0tXG5kcml2ZXJzL25mYy9uZmNtcnZsL2kyYy5jPTY0PXN0YXRpYyBpcnFyZXR1cm5fdCBuZmNtcnZsX2kyY19pbnRfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpkcnZfZGF0YV9wdHIpXG4tLVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9pMmMuYy04Ni1cdGRlZmF1bHQ6XG5kcml2ZXJzL25mYy9uZmNtcnZsL2kyYy5jOjg3Olx0XHRpZiAobmZjbXJ2bF9uY2lfcmVjdl9mcmFtZShkcnZfZGF0YS1cdTAwM2Vwcml2LCBza2IpIFx1MDAzYyAwKVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9pMmMuYy04OC1cdFx0XHRuZmNfZXJyKFx1MDAyNmRydl9kYXRhLVx1MDAzZWkyYy1cdTAwM2VkZXYsIFwmIzM0O2NvcnJ1cHRlZCBSWCBwYWNrZXRcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmZjL25mY21ydmwvbWFpbi5jPTE5Mj1FWFBPUlRfU1lNQk9MX0dQTChuZmNtcnZsX25jaV91bnJlZ2lzdGVyX2Rldik7XG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0xOTMtXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYzoxOTQ6aW50IG5mY21ydmxfbmNpX3JlY3ZfZnJhbWUoc3RydWN0IG5mY21ydmxfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmZjL25mY21ydmwvbWFpbi5jLTE5NS17XG4tLVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmMtMjEzLVx0aWYgKHRlc3RfYml0KE5GQ01SVkxfTkNJX1JVTk5JTkcsIFx1MDAyNnByaXYtXHUwMDNlZmxhZ3MpKVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmM6MjE0Olx0XHRuY2lfcmVjdl9mcmFtZShwcml2LVx1MDAzZW5kZXYsIHNrYik7XG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0yMTUtXHRlbHNlIHtcbi0tXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0yMjItfVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmM6MjIzOkVYUE9SVF9TWU1CT0xfR1BMKG5mY21ydmxfbmNpX3JlY3ZfZnJhbWUpO1xuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmMtMjI0LVxuLS1cbmRyaXZlcnMvbmZjL25mY21ydmwvbmZjbXJ2bC5oPTExOT12b2lkIG5mY21ydmxfbmNpX3VucmVnaXN0ZXJfZGV2KHN0cnVjdCBuZmNtcnZsX3ByaXZhdGUgKnByaXYpO1xuZHJpdmVycy9uZmMvbmZjbXJ2bC9uZmNtcnZsLmg6MTIwOmludCBuZmNtcnZsX25jaV9yZWN2X2ZyYW1lKHN0cnVjdCBuZmNtcnZsX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZmMvbmZjbXJ2bC9uZmNtcnZsLmgtMTIxLXN0cnVjdCBuZmNtcnZsX3ByaXZhdGUgKm5mY21ydmxfbmNpX3JlZ2lzdGVyX2RldihlbnVtIG5mY21ydmxfcGh5IHBoeSxcbi0tXG5kcml2ZXJzL25mYy9uZmNtcnZsL3NwaS5jPTI3PXN0YXRpYyBpcnFyZXR1cm5fdCBuZmNtcnZsX3NwaV9pbnRfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpkcnZfZGF0YV9wdHIpXG4tLVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9zcGkuYy00OC1cbmRyaXZlcnMvbmZjL25mY21ydmwvc3BpLmM6NDk6XHRpZiAobmZjbXJ2bF9uY2lfcmVjdl9mcmFtZShkcnZfZGF0YS1cdTAwM2Vwcml2LCBza2IpIFx1MDAzYyAwKVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9zcGkuYy01MC1cdFx0bmZjX2VycihcdTAwMjZkcnZfZGF0YS1cdTAwM2VzcGktXHUwMDNlZGV2LCBcJiMzNDtjb3JydXB0ZWQgUlggcGFja2V0XCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25mYy9uZmNtcnZsL3VhcnQuYz0xNTI9c3RhdGljIGludCBuZmNtcnZsX25jaV91YXJ0X3JlY3Yoc3RydWN0IG5jaV91YXJ0ICpudSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmZjL25mY21ydmwvdWFydC5jLTE1My17XG5kcml2ZXJzL25mYy9uZmNtcnZsL3VhcnQuYzoxNTQ6XHRyZXR1cm4gbmZjbXJ2bF9uY2lfcmVjdl9mcmFtZSgoc3RydWN0IG5mY21ydmxfcHJpdmF0ZSAqKW51LVx1MDAzZWRydl9kYXRhLFxuZHJpdmVycy9uZmMvbmZjbXJ2bC91YXJ0LmMtMTU1LVx0XHRcdFx0ICAgICAgc2tiKTtcbi0tXG5kcml2ZXJzL25mYy9uZmNtcnZsL3VzYi5jPTU2PXN0YXRpYyB2b2lkIG5mY21ydmxfYnVsa19jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4tLVxuZHJpdmVycy9uZmMvbmZjbXJ2bC91c2IuYy03Ni1cdFx0XHRcdCAgICAgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGgpO1xuZHJpdmVycy9uZmMvbmZjbXJ2bC91c2IuYzo3NzpcdFx0XHRpZiAobmZjbXJ2bF9uY2lfcmVjdl9mcmFtZShkcnZfZGF0YS1cdTAwM2Vwcml2LCBza2IpIFx1MDAzYyAwKVxuZHJpdmVycy9uZmMvbmZjbXJ2bC91c2IuYy03OC1cdFx0XHRcdG5mY19lcnIoXHUwMDI2ZHJ2X2RhdGEtXHUwMDNldWRldi1cdTAwM2VkZXYsXG4tLVxuZHJpdmVycy9uZmMvbnhwLW5jaS9pMmMuYz0xOTA9c3RhdGljIGlycXJldHVybl90IG54cF9uY2lfaTJjX2lycV90aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqcGh5X2lkKVxuLS1cbmRyaXZlcnMvbmZjL254cC1uY2kvaTJjLmMtMjQ4LVx0Y2FzZSBOWFBfTkNJX01PREVfTkNJOlxuZHJpdmVycy9uZmMvbnhwLW5jaS9pMmMuYzoyNDk6XHRcdG5jaV9yZWN2X2ZyYW1lKHBoeS1cdTAwM2VuZGV2LCBza2IpO1xuZHJpdmVycy9uZmMvbnhwLW5jaS9pMmMuYy0yNTAtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jPTIxMD1pbnQgczNmd3JuNV9yZWN2X2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jLTIxNC1cdGNhc2UgUzNGV1JONV9NT0RFX05DSTpcbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jOjIxNTpcdFx0cmV0dXJuIG5jaV9yZWN2X2ZyYW1lKG5kZXYsIHNrYik7XG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYy0yMTYtXHRjYXNlIFMzRldSTjVfTU9ERV9GVzpcbi0tXG5kcml2ZXJzL25mYy9zdC1uY2kvbmRsYy5jPTE0Nz1zdGF0aWMgdm9pZCBsbHRfbmRsY19yY3ZfcXVldWUoc3RydWN0IGxsdF9uZGxjICpuZGxjKVxuLS1cbmRyaXZlcnMvbmZjL3N0LW5jaS9uZGxjLmMtMTg4LVx0XHR9IGVsc2UgaWYgKChwY2IgXHUwMDI2IFBDQl9UWVBFX01BU0spID09IFBDQl9UWVBFX0RBVEFGUkFNRSkge1xuZHJpdmVycy9uZmMvc3QtbmNpL25kbGMuYzoxODk6XHRcdFx0bmNpX3JlY3ZfZnJhbWUobmRsYy1cdTAwM2VuZGV2LCBza2IpO1xuZHJpdmVycy9uZmMvc3QtbmNpL25kbGMuYy0xOTAtXHRcdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYz0xMTM9c3RhdGljIHNzaXplX3QgdmlydHVhbF9uY2lkZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMjgtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjEyOTpcdG5jaV9yZWN2X2ZyYW1lKHZkZXYtXHUwMDNlbmRldiwgc2tiKTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTMwLVx0cmV0dXJuIGNvdW50O1xuLS1cbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oPTI5MT1pbnQgbmNpX2NvcmVfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldik7XG5pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaC0yOTItXG5pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaDoyOTM6aW50IG5jaV9yZWN2X2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oLTI5NC1pbnQgbmNpX3NlbmRfZnJhbWUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xMzQzPUVYUE9SVF9TWU1CT0wobmNpX3VucmVnaXN0ZXJfZGV2aWNlKTtcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTM0NS0vKipcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMzQ2OiAqIG5jaV9yZWN2X2ZyYW1lIC0gcmVjZWl2ZSBmcmFtZSBmcm9tIE5DSSBkcml2ZXJzXG5uZXQvbmZjL25jaS9jb3JlLmMtMTM0Ny0gKlxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYy0xMzUwLSAqL1xubmV0L25mYy9uY2kvY29yZS5jOjEzNTE6aW50IG5jaV9yZWN2X2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L25mYy9uY2kvY29yZS5jLTEzNTIte1xuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYy0xMzY2LX1cbm5ldC9uZmMvbmNpL2NvcmUuYzoxMzY3OkVYUE9SVF9TWU1CT0wobmNpX3JlY3ZfZnJhbWUpO1xubmV0L25mYy9uY2kvY29yZS5jLTEzNjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gTkNJIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBOQ0kgZnV6emluZy4gQmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlLCBJJiMzOTt2ZSBnb3QgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZXhhbWluZSBgZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuY2AsIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgZmlyc3Qgc3RvcC4gSXQgbG9va3MgbGlrZSB0aGlzIGRyaXZlciBsZXRzIHVzZXJzcGFjZSBpbmplY3QgTkNJIGZyYW1lcyBkaXJlY3RseS4gU3BlY2lmaWNhbGx5LCBgbmNpX3JlY3ZfZnJhbWUodmRldi0mZ3Q7bmRldiwgc2tiKTtgIHdpdGhpbiBgdmlydHVhbF9uY2lkZXZfd3JpdGVgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZGlzc2VjdC4gVGhhdCBzY3JlYW1zIHZ1bG5lcmFiaWxpdHkgc3VyZmFjZSB0byBtZS4KCkkgYWxzbyBzaG91bGQgbG9vayBhdCBgZHJpdmVycy9uZmMvbmZjbXJ2bC91c2IuY2AsIGJlY2F1c2UgdGhlIFVTQiBlbXVsYXRpb24gcm91dGUgY291bGQgYmUgYW5vdGhlciBhbmdsZSB0byBleHBsb2l0LiBJIHJlbWVtYmVyIHN5emthbGxlcuKAmXMgVVNCIGdhZGdldCBhbmQgVVNCIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMsIGFuZCB0aGF0IHN1Z2dlc3RzIGFub3RoZXIgcG90ZW50aWFsIHdheSB0byBpbmplY3QgTkNJIGRhdGEuCgpUaGUgZmFjdCB0aGF0IHN5emthbGxlciBzdXBwb3J0cyBgdmlydHVhbF9uY2lkZXZgIGRpcmVjdGx5LCBhbG9uZyB3aXRoIG5ldGxpbmsgYW5kIHJhdy1nYWRnZXQgbWV0aG9kcywgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0LiBTbywgaXQmIzM5O3MgYmFjayB0byBgdmlydHVhbF9uY2lkZXYuY2AgdG8gc2VlIHdoYXQga2luZCBvZiBkYW1hZ2UgY2FuIGJlIGRvbmUgYW5kIHVuZGVyc3RhbmQgaWYgc3l6a2FsbGVyIGlzIHRoZSBiZXN0IG9wdGlvbiBmb3IgdGhpcyB0eXBlIG9mIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiBWaXJ0dWFsIE5DSSBkZXZpY2Ugc2ltdWxhdGlvbiBkcml2ZXJcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoQykgMjAyMCBTYW1zdW5nIEVsZWN0cm9uaWNzXG4gICA2Olx0ICogQm9uZ3N1IEplb24gXHUwMDNjYm9uZ3N1Lmplb25Ac2Ftc3VuZy5jb21cdTAwM2VcbiAgIDc6XHQgKi9cbiAgIDg6XHRcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWlzY2RldmljZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXQuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZmMvbmNpX2NvcmUuaFx1MDAzZVxuICAxNTpcdFxuICAxNjpcdCNkZWZpbmUgSU9DVExfR0VUX05DSURFVl9JRFggICAgMFxuICAxNzpcdCNkZWZpbmUgVklSVFVBTF9ORkNfUFJPVE9DT0xTXHQoTkZDX1BST1RPX0pFV0VMX01BU0sgfCBcXFxuICAxODpcdFx0XHRcdFx0IE5GQ19QUk9UT19NSUZBUkVfTUFTSyB8IFxcXG4gIDE5Olx0XHRcdFx0XHQgTkZDX1BST1RPX0ZFTElDQV9NQVNLIHwgXFxcbiAgMjA6XHRcdFx0XHRcdCBORkNfUFJPVE9fSVNPMTQ0NDNfTUFTSyB8IFxcXG4gIDIxOlx0XHRcdFx0XHQgTkZDX1BST1RPX0lTTzE0NDQzX0JfTUFTSyB8IFxcXG4gIDIyOlx0XHRcdFx0XHQgTkZDX1BST1RPX0lTTzE1NjkzX01BU0spXG4gIDIzOlx0XG4gIDI0Olx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiB7XG4gIDI1Olx0XHRzdHJ1Y3QgbmNpX2RldiAqbmRldjtcbiAgMjY6XHRcdHN0cnVjdCBtdXRleCBtdHg7XG4gIDI3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2VuZF9idWZmO1xuICAyODpcdFx0c3RydWN0IHdhaXRfcXVldWVfaGVhZCB3cTtcbiAgMjk6XHRcdGJvb2wgcnVubmluZztcbiAgMzA6XHR9O1xuICAzMTpcdFxuICAzMjpcdHN0YXRpYyBpbnQgdmlydHVhbF9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiAgMzM6XHR7XG4gIDM0Olx0XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuICAzNTpcdFxuICAzNjpcdFx0dmRldi1cdTAwM2VydW5uaW5nID0gdHJ1ZTtcbiAgMzc6XHRcdHJldHVybiAwO1xuICAzODpcdH1cbiAgMzk6XHRcbiAgNDA6XHRzdGF0aWMgaW50IHZpcnR1YWxfbmNpX2Nsb3NlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuICA0MTpcdHtcbiAgNDI6XHRcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG4gIDQzOlx0XG4gIDQ0Olx0XHRtdXRleF9sb2NrKFx1MDAyNnZkZXYtXHUwMDNlbXR4KTtcbiAgNDU6XHRcdGtmcmVlX3NrYih2ZGV2LVx1MDAzZXNlbmRfYnVmZik7XG4gIDQ2Olx0XHR2ZGV2LVx1MDAzZXNlbmRfYnVmZiA9IE5VTEw7XG4gIDQ3Olx0XHR2ZGV2LVx1MDAzZXJ1bm5pbmcgPSBmYWxzZTtcbiAgNDg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2ZGV2LVx1MDAzZW10eCk7XG4gIDQ5Olx0XG4gIDUwOlx0XHRyZXR1cm4gMDtcbiAgNTE6XHR9XG4gIDUyOlx0XG4gIDUzOlx0c3RhdGljIGludCB2aXJ0dWFsX25jaV9zZW5kKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICA1NDpcdHtcbiAgNTU6XHRcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG4gIDU2Olx0XG4gIDU3Olx0XHRtdXRleF9sb2NrKFx1MDAyNnZkZXYtXHUwMDNlbXR4KTtcbiAgNTg6XHRcdGlmICh2ZGV2LVx1MDAzZXNlbmRfYnVmZiB8fCAhdmRldi1cdTAwM2VydW5uaW5nKSB7XG4gIDU5Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2ZGV2LVx1MDAzZW10eCk7XG4gIDYwOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDU2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2NvbmZpZyBEaXZlOiBgdmlydHVhbF9uY2lkZXZgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGB2aXJ0dWFsX25jaWRldmAgS2NvbmZpZy4gSSB3YW50IHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSXMgdGhpcyBhIHN0YW5kYWxvbmUgbW9kdWxlLCBvciBkb2VzIGl0IHJlbHkgb24gc29tZSBvdGhlciBjb3JlIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjb25mbGljdHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLCBwZXJoYXBzIHdpdGggb3RoZXIgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZXM/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrIC0gd2hhdCBwcm9ibGVtIGlzIHRoaXMgcGFydGljdWxhciB2aXJ0dWFsIGRldmljZSBzb2x2aW5nLCBhbmQgaG93IGRvZXMgaXQgaW50ZXJmYWNlIHdpdGggdGhlIGNvcmUgbmV0d29ya2luZyBpbmZyYXN0cnVjdHVyZT8gTGV0JiMzOTtzIGNoZWNrIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgc3ltYm9scyB0byBwaW5wb2ludCBpdHMgcm9sZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGJlZm9yZSBJIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGFueSByZWxhdGVkIGNvZGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtWSVJUVUFMX05DSURFViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NjgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTkZDIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBORkMgZHJpdmVyIGJ1aWxkIHByb2Nlc3MgYW5kIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZ2V0IG15IGJlYXJpbmdzIGFuZCBsb29rIGF0IHRoZSBrZXkgZmlsZXMgdGhhdCBkaWN0YXRlIHRoZSBidWlsZCBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgYGRyaXZlcnMvbmZjL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTkZDIGRyaXZlciBtb2R1bGVzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBkZXBlbmRlbmNpZXMsIHNvdXJjZSBmaWxlcywgYW5kIGNvbXBpbGF0aW9uIGZsYWdzIHNwZWNpZmljIHRvIE5GQy4gVGhlbiwgSSAqbXVzdCogbG9vayBhdCBgZHJpdmVycy9uZmMvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIE5GQyBkcml2ZXIgYXJlIGRlZmluZWQuIFRoaXMgd2lsbCByZXZlYWwgdGhlIHZhcmlvdXMgZmVhdHVyZXMgdGhhdCBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgY29tcG9uZW50cywgYW5kIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYWJpbGl0eSBvZiB0aGUgTkZDIHN1YnN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGUgYEtjb25maWdgIG9wdGlvbnMgaXMgY3J1Y2lhbCBmb3IgdGFpbG9yaW5nIHRoZSBORkMgZHJpdmVyIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgb3IgdXNlIGNhc2UuIFRoZXNlIHR3byBmaWxlcyBhcmUgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZpcnR1YWxfbmNpZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXHQmIzQzOz0gc3Q5NWhmL1xuZHJpdmVycy9uZmMvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX05GQ19WSVJUVUFMX05DSSlcdCYjNDM7PSB2aXJ0dWFsX25jaWRldi5vXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYz03Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgdmlydHVhbF9uY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODEtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjgyOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTgzLVx0XHRcdFx0ICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTItXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjExMzpzdGF0aWMgc3NpemVfdCB2aXJ0dWFsX25jaWRldl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE0LVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzItXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjEzMzpzdGF0aWMgaW50IHZpcnR1YWxfbmNpZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzNC17XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjMtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE2NDpzdGF0aWMgaW50IHZpcnR1YWxfbmNpZGV2X2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjUte1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTc1LVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNzY6c3RhdGljIGxvbmcgdmlydHVhbF9uY2lkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3Ny1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5MS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTkyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZpcnR1YWxfbmNpZGV2X2ZvcHMgPSB7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5My1cdC5vd25lciA9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTQ6XHQucmVhZCA9IHZpcnR1YWxfbmNpZGV2X3JlYWQsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NTpcdC53cml0ZSA9IHZpcnR1YWxfbmNpZGV2X3dyaXRlLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTY6XHQub3BlbiA9IHZpcnR1YWxfbmNpZGV2X29wZW4sXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NzpcdC5yZWxlYXNlID0gdmlydHVhbF9uY2lkZXZfY2xvc2UsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5ODpcdC51bmxvY2tlZF9pb2N0bCA9IHZpcnR1YWxfbmNpZGV2X2lvY3RsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5OS19O1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM9MjAxPXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBtaXNjZGV2ID0ge1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjAzLVx0Lm5hbWUgPSBcJiMzNDt2aXJ0dWFsX25jaVwmIzM0OyxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MjA0Olx0LmZvcHMgPSBcdTAwMjZ2aXJ0dWFsX25jaWRldl9mb3BzLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yMDUtXHQubW9kZSA9IDA2MDAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzU3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgTkZDIFZpcnR1YWwgTkNJIERyaXZlcioqCgpBbHJpZ2h0LCBzbyBgTkZDX1ZJUlRVQUxfTkNJYOKApiB0aGF0JiMzOTtzIGdvdCB0byBiZSB0aGUgdmlydHVhbCBkZXZpY2UgZHJpdmVyIGltcGxlbWVudGF0aW9uIGZvciB0aGUgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpLCByaWdodD8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCBhbmQgZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLCBzbyBsZXQmIzM5O3MganVtcCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSBgQ09ORklHX05GQ19OQ0lgIGFuZCBzZWUgd2hhdCBlbHNlIGlzIHJlbGF0ZWQgaW4gYG5ldC9uZmMvS2NvbmZpZ2AuIEkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgYW55IGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsZXZhbnQgb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3VyIG9mIHRoaXMgdmlydHVhbCBkZXZpY2UuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY29uZmlndXJhdGlvbiBkZXRhaWxzIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZHJpdmVyIGlzIGFyY2hpdGVjdGVkIGFuZCB3aGF0JiMzOTtzIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GQ19OQ0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfTkZDKSAmIzQzOz0gbmZjLm9cbm5ldC9uZmMvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfTkZDX05DSSkgJiM0Mzs9IG5jaS9cbm5ldC9uZmMvTWFrZWZpbGUtOC1vYmotJChDT05GSUdfTkZDX0hDSSkgJiM0Mzs9IGhjaS9cbi0tXG5uZXQvbmZjL25jaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbmZjL25jaS9LY29uZmlnOjI6Y29uZmlnIE5GQ19OQ0lcbm5ldC9uZmMvbmNpL0tjb25maWctMy1cdGRlcGVuZHMgb24gTkZDXG4tLVxubmV0L25mYy9uY2kvS2NvbmZpZy0xMi1cbm5ldC9uZmMvbmNpL0tjb25maWc6MTM6Y29uZmlnIE5GQ19OQ0lfU1BJXG5uZXQvbmZjL25jaS9LY29uZmlnOjE0Olx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBTUElcbm5ldC9uZmMvbmNpL0tjb25maWctMTUtXHRzZWxlY3QgQ1JDX0NDSVRUXG4tLVxubmV0L25mYy9uY2kvS2NvbmZpZy0yMy1cbm5ldC9uZmMvbmNpL0tjb25maWc6MjQ6Y29uZmlnIE5GQ19OQ0lfVUFSVFxubmV0L25mYy9uY2kvS2NvbmZpZzoyNTpcdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgVFRZXG5uZXQvbmZjL25jaS9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7TkNJIG92ZXIgVUFSVCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25mYy9uY2kvTWFrZWZpbGUtNS1cbm5ldC9uZmMvbmNpL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX05GQ19OQ0kpICYjNDM7PSBuY2kub1xubmV0L25mYy9uY2kvTWFrZWZpbGUtNy1cbi0tXG5uZXQvbmZjL25jaS9NYWtlZmlsZT0xMD1uY2lfc3BpLXkgJiM0Mzs9IHNwaS5vXG5uZXQvbmZjL25jaS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfTkZDX05DSV9TUEkpICYjNDM7PSBuY2lfc3BpLm9cbm5ldC9uZmMvbmNpL01ha2VmaWxlLTEyLVxubmV0L25mYy9uY2kvTWFrZWZpbGU9MTM9bmNpX3VhcnQteSAmIzQzOz0gdWFydC5vXG5uZXQvbmZjL25jaS9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfTkZDX05DSV9VQVJUKSAmIzQzOz0gbmNpX3VhcnQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUyOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJJiMzOTttIGhhdmluZyBpdDoKCioqRGlnZ2luZyBpbnRvIE5GQyBWaXJ0dWFsIE5DSSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdmlydHVhbCBOQ0kgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBORkMgZHJpdmVyLiBGaXJzdCwgdGhlIHNlbnNpYmxlIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBjb25maWd1cmF0aW9uLiBXaGVyZSB3b3VsZCB0aGF0IGJlPyBBaCwgeWVzLCBgZHJpdmVycy9uZmMvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBidWlsZC10aW1lIG9wdGlvbnMgdXN1YWxseSByZXNpZGUuIExldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBzZWUgd2hhdCBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAgaXMgYWxsIGFib3V0LiBXaGF0JiMzOTtzIGl0IGRvaW5nIGFuZCB3aGF0IGRvZXMgaXQgY29udHJvbCBpbiB0aGUgYnVpbGQ/IEhvcGVmdWxseSwgdGhlIEtjb25maWcgZmlsZSB3aWxsIHByb3ZpZGUgYSBjb25jaXNlIGV4cGxhbmF0aW9uIGFuZCBhbnkgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCB0byBnZXQgYSBjbGVhciBpZGVhIG9mIGhvdyB0aGlzIHZpcnR1YWwgbGF5ZXIgaXMgdXNlZCBvciBpZiBpdCYjMzk7cyBvcHRpb25hbCwgYW5kIGlmIGl0IGlzLCB0aGUgcmVhc29ucyB3aHkuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgbWVzaGVzIHdpdGggdGhlIGhhcmR3YXJlLXNwZWNpZmljIE5GQyBjb250cm9sbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZDX1ZJUlRVQUxfTkNJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvS2NvbmZpZz00Mj1jb25maWcgTkZDX1BPUlQxMDBcbi0tXG5kcml2ZXJzL25mYy9LY29uZmlnLTUxLVxuZHJpdmVycy9uZmMvS2NvbmZpZzo1Mjpjb25maWcgTkZDX1ZJUlRVQUxfTkNJXG5kcml2ZXJzL25mYy9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7TkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZmMvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXHQmIzQzOz0gc3Q5NWhmL1xuZHJpdmVycy9uZmMvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX05GQ19WSVJUVUFMX05DSSlcdCYjNDM7PSB2aXJ0dWFsX25jaWRldi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTQ4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTkZDIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIHBvcCBvdmVyIHRvIHRoZSBgZHJpdmVycy9uZmMvS2NvbmZpZ2AgZmlsZSBhbmQgemVybyBpbiBhcm91bmQgbGluZSA1Mi4gTXkgaW5pdGlhbCBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBORkMgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3Igc29tZXRoaW5nIG5ldyBvciBwb3NzaWJseSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhbnl0aGluZyB0aGF0IGlzIGJyb2tlbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY291bGQgcHJvdmlkZSBtZSB3aXRoIHVzZWZ1bCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQ1Olx0XHRkZXBlbmRzIG9uIE5GQ19ESUdJVEFMXG4gIDQ2Olx0XHRoZWxwXG4gIDQ3Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBTb255IFBvcnQtMTAwIGNoaXAgYmFzZWQgVVNCIGRldmljZXMgc3VjaCBhcyB0aGVcbiAgNDg6XHRcdCAgUkMtUzM4MCBkb25nbGUuXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDUxOlx0XG4gIDUyOlx0Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxuICA1MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIE5GQ19OQ0lcbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgTkNJIHZpcnR1YWwgZGV2aWNlIHNpbXVsYXRlcyBhIE5DSSBkZXZpY2UgdG8gdGhlIHVzZXIuXG4gIDU3Olx0XHQgIEl0IGNhbiBiZSB1c2VkIHRvIHZhbGlkYXRlIHRoZSBOQ0kgbW9kdWxlIGFuZCBhcHBsaWNhdGlvbnMuXG4gIDU4Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlIGFuZFxuICA1OTpcdFx0ICBtb2R1bGUuXG4gIDYwOlx0XG4gIDYxOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDYyOlx0XG4gIDYzOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmZjL2ZkcC9LY29uZmlnXCYjMzQ7XG4gIDY0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmZjL3BuNTQ0L0tjb25maWdcJiMzNDtcbiAgNjU6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZmMvcG41MzMvS2NvbmZpZ1wmIzM0O1xuICA2NjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9taWNyb3JlYWQvS2NvbmZpZ1wmIzM0O1xuICA2NzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWdcJiMzNDtcbiAgNjg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZmMvc3QyMW5mY2EvS2NvbmZpZ1wmIzM0O1xuICA2OTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9zdC1uY2kvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUxMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBORkMgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IE5GQyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBDT05GSUdfTkZDYCwgYENPTkZJR19ORkNfTkNJYCwgYW5kIGBDT05GSUdfTkZDX1ZJUlRVQUxfTkNJYCDigJMgdGhhdCYjMzk7cyB0aGUgY29yZSBORkMgZnJhbWV3b3JrLCB0aGUgTkNJIHRyYW5zcG9ydCBsYXllciwgYW5kIGEgdmlydHVhbCBOQ0kgaW50ZXJmYWNlLCByZXNwZWN0aXZlbHkuIE1ha2VzIHNlbnNlLiBJJiMzOTttIGFsc28gbm90aWNpbmcgYSBVU0Itc3BlY2lmaWMgZHJpdmVyLCBgQ09ORklHX05GQ19NUlZMX1VTQmAuIEFoLCByaWdodCwgdGhhdCBwb2ludHMgdG93YXJkcyBNYXJ2ZWxsJiMzOTtzIFVTQiBORkMgZGV2aWNlcy4gTmF0dXJhbGx5LCB0aGF0JiMzOTtzIGdvaW5nIHRvIGJlIGRlcGVuZGVudCBvbiB0aGUgYnJvYWRlciBgTkZDX01SVkxgIGRyaXZlciBhbmQgdGhlIGJhc2UgYFVTQmAgc3Vic3lzdGVtLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBpbiB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IHNwZWNpZmljIE1hcnZlbGwgVVNCIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgaW4gYGRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZ2AgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5GQ19NUlZMXG4gICAzOlx0XHR0cmlzdGF0ZVxuICAgNDpcdFx0aGVscFxuICAgNTpcdFx0ICBUaGUgY29yZSBkcml2ZXIgdG8gc3VwcG9ydCBNYXJ2ZWxsIE5GQyBkZXZpY2VzLlxuICAgNjpcdFxuICAgNzpcdFx0ICBUaGlzIGRyaXZlciBpcyByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byBzdXBwb3J0XG4gICA4Olx0XHQgIE1hcnZlbGwgTkZDIGRldmljZSA4ODk3LlxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBORkNfTVJWTF9VU0JcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgTkZDLW92ZXItVVNCIGRyaXZlclwmIzM0O1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBVU0JcbiAgMTM6XHRcdHNlbGVjdCBORkNfTVJWTFxuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBNYXJ2ZWxsIE5GQy1vdmVyLVVTQiBkcml2ZXIuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIE1hcnZlbGwgTkZDLW92ZXItVVNCIGRldmljZXM6XG4gIDE4Olx0XHQgIDg4OTcuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBNYXJ2ZWxsIE5GQy1vdmVyLVVTQiBkcml2ZXJcbiAgMjE6XHRcdCAgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgaXQgYXMgbW9kdWxlLlxuICAyMjpcdFxuICAyMzpcdGNvbmZpZyBORkNfTVJWTF9VQVJUXG4gIDI0Olx0XHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE5GQy1vdmVyLVVBUlQgZHJpdmVyXCYjMzQ7XG4gIDI1Olx0XHRkZXBlbmRzIG9uIE5GQ19OQ0kgXHUwMDI2XHUwMDI2IE5GQ19OQ0lfVUFSVFxuICAyNjpcdFx0c2VsZWN0IE5GQ19NUlZMXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIE1hcnZlbGwgTkZDLW92ZXItVUFSVCBkcml2ZXIuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIE1hcnZlbGwgTkZDLW92ZXItVUFSVCBkZXZpY2VzXG4gIDMxOlx0XG4gIDMyOlx0XHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBNYXJ2ZWxsIE5GQy1vdmVyLVVBUlQgZHJpdmVyXG4gIDMzOlx0XHQgIGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0byBjb21waWxlIGl0IGFzIG1vZHVsZS5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgTkZDX01SVkxfSTJDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjk5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVzcG9uc2UgUGFja2V0KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgZnVuY3Rpb24gYW5kIHdoYXQmIzM5O3MgY2hhbmdlZC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaGFuZGxpbmcgdGhlIHJlc3BvbnNlIHRvIGEgY29ubmVjdGlvbiBjcmVhdGlvbiByZXF1ZXN0LiBJIHNlZSBpdCYjMzk7cyB0YWtpbmcgdGhlIGBuY2lfZGV2YCBhbmQgdGhlIHJlY2VpdmVkIGBza19idWZmYCBhcyBpbnB1dC4gVGhlIGZpcnN0IGJ5dGUgaW4gYHNrYi0mZ3Q7ZGF0YWAgaXMgdGhlIHN0YXR1cyBjb2RlLCB3aGljaCBpcyBnb29kIHByYWN0aWNlLiBJIG5vdGUgdGhlIGRlYnVnIHByaW50OyBoZWxwZnVsIGZvciB0cmFjaW5nLgoKTm93LCB0aGUgaW1wb3J0YW50IGNoYW5nZSwgYW5kIHdoYXQgbGlrZWx5IGZpeGVzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3IgZXJyb3IgY29uZGl0aW9uLiAgVGhlIGNvZGUgY2hlY2tzIHRoZSBzdGF0dXM7IGlmIGl0JiMzOTtzICYjMzQ7T0smIzM0OywgdGhlbiB0aGVyZSBpcyB0aGUgYWRkaXRpb24gb2YgYSBgc2tiLSZndDtsZW5gIGNoZWNrLiBJdCYjMzk7cyBtYWtpbmcgc3VyZSB0aGUgcmVjZWl2ZWQgcGFja2V0IGlzIGFjdHVhbGx5ICpsYXJnZSogZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BgIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyBzbWFydC4gSXQmIzM5O3MgdmVyaWZ5aW5nIHRoZSBwYWNrZXQgbGVuZ3RoIG5vdyBiZWZvcmUgZGVyZWZlcmVuY2luZyB0aGUgY29udGVudHMgb2YgdGhlIHJlc3BvbnNlLiBJZiB0aGUgcGFja2V0IGlzIHNtYWxsZXIgdGhhbiB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiBgcnNwYCwgaXQgZmxhZ3MgYSBzeW50YXggZXJyb3IuIFRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0OyBpdCBwcmV2ZW50cyByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgY3Jhc2ggb3IsIHdvcnNlLCBhIHNlY3VyaXR5IGlzc3VlIGlmIHRoZSBzdHJ1Y3R1cmUgY29udGFpbmVkIHNlbnNpdGl2ZSBkYXRhLiBTbywgdGhlIHBhdGNoIGlzIGFkZGluZyByb2J1c3QgaW5wdXQgdmFsaWRhdGlvbiB0byBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgZGF0YSB3ZSYjMzk7cmUgcmVjZWl2aW5nLiBHb29kIGpvYi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZmMvbmNpLmg9MzYyPXN0cnVjdCBuY2lfY29yZV9zZXRfY29uZmlnX3JzcCB7XG4tLVxuaW5jbHVkZS9uZXQvbmZjL25jaS5oLTM2OC0jZGVmaW5lIE5DSV9PUF9DT1JFX0NPTk5fQ1JFQVRFX1JTUFx0bmNpX29wY29kZV9wYWNrKE5DSV9HSURfQ09SRSwgMHgwNClcbmluY2x1ZGUvbmV0L25mYy9uY2kuaDozNjk6c3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCB7XG5pbmNsdWRlL25ldC9uZmMvbmNpLmgtMzcwLVx0X191OFx0c3RhdHVzO1xuLS1cbm5ldC9uZmMvbmNpL3JzcC5jPTMwNT1zdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuLS1cbm5ldC9uZmMvbmNpL3JzcC5jLTMwOS1cdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm8gPSBOVUxMO1xubmV0L25mYy9uY2kvcnNwLmM6MzEwOlx0Y29uc3Qgc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCAqcnNwO1xubmV0L25mYy9uY2kvcnNwLmMtMzExLVxuLS1cbm5ldC9uZmMvbmNpL3JzcC5jLTMxOC1cdFx0fVxubmV0L25mYy9uY2kvcnNwLmM6MzE5Olx0XHRyc3AgPSAoc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCAqKXNrYi1cdTAwM2VkYXRhO1xubmV0L25mYy9uY2kvcnNwLmMtMzIwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE4OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IHdpdGhpbiBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgYW5kIHNlZSB3aGF0IGhhcHBlbnMgKmFmdGVyKiBsaW5lIDM1MC4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGNyZWF0aW9uIG9mIGEgY29ubmVjdGlvbiByZXNwb25zZSBwYWNrZXQgd2l0aGluIGFuIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBjb250ZXh0LiBMaW5lIDM1MCBjb3VsZCBiZSBhIGNydWNpYWwgcG9pbnQg4oCTIHBlcmhhcHMgd2hlcmUgYSBrZXkgZGF0YSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIGEgc3BlY2lmaWMgZXJyb3IgY2hlY2sgaXMgcGVyZm9ybWVkLCBvciBhIHBhcnRpY3VsYXIgc3RhdGUgdHJhbnNpdGlvbiBvY2N1cnMuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aGF0IHBvaW50IGZvcndhcmQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yLiBNeSBmb2N1cyBpcyBvbiB0aGUgbG9naWMgYW5kIGRhdGEgZmxvdyAqYmV5b25kKiB0aGF0IGxpbmUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBwYXJ0cyBvZiB0aGUgcmVzcG9uc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvcnNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0NTpcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZjb25uX2luZm8tXHUwMDNlbGlzdCk7XG4gMzQ2Olx0XHRcdGxpc3RfYWRkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0LCBcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19saXN0KTtcbiAzNDc6XHRcbiAzNDg6XHRcdFx0aWYgKG5kZXYtXHUwMDNlY3VyX3BhcmFtcy5pZCA9PSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlbmZjZWVfaWQpXG4gMzQ5Olx0XHRcdFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbyA9IGNvbm5faW5mbztcbiAzNTA6XHRcbiAzNTE6XHRcdFx0Y29ubl9pbmZvLVx1MDAzZWNvbm5faWQgPSByc3AtXHUwMDNlY29ubl9pZDtcbiAzNTI6XHRcdFx0Y29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4gPSByc3AtXHUwMDNlbWF4X2N0cmxfcGt0X3BheWxvYWRfbGVuO1xuIDM1MzpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCwgcnNwLVx1MDAzZWNyZWRpdHNfY250KTtcbiAzNTQ6XHRcdH1cbiAzNTU6XHRcbiAzNTY6XHRmcmVlX2Nvbm5faW5mbzpcbiAzNTc6XHRcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19SRUpFQ1RFRClcbiAzNTg6XHRcdFx0ZGV2bV9rZnJlZShcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LCBjb25uX2luZm8pO1xuIDM1OTpcdGV4aXQ6XG4gMzYwOlx0XG4gMzYxOlx0XHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7XG4gMzYyOlx0fVxuIDM2MzpcdFxuIDM2NDpcdHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiAzNjU6XHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzNjY6XHR7XG4gMzY3Olx0XHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIDM2ODpcdFx0X191OCBzdGF0dXMgPSBza2ItXHUwMDNlZGF0YVswXTtcbiAzNjk6XHRcbiAzNzA6XHRcdHByX2RlYnVnKFwmIzM0O3N0YXR1cyAweCV4XFxuXCYjMzQ7LCBzdGF0dXMpO1xuIDM3MTpcdFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XG4gMzcyOlx0XHRcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldixcbiAzNzM6XHRcdFx0XHRcdFx0XHRcdCBuZGV2LVx1MDAzZWN1cl9jb25uX2lkKTtcbiAzNzQ6XHRcdFx0aWYgKGNvbm5faW5mbykge1xuIDM3NTpcdFx0XHRcdGxpc3RfZGVsKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0KTtcbiAzNzY6XHRcdFx0XHRpZiAoY29ubl9pbmZvID09IG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvKVxuIDM3NzpcdFx0XHRcdFx0bmRldi1cdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xuIDM3ODpcdFx0XHRcdGRldm1fa2ZyZWUoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgY29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zKTtcbiAzNzk6XHRcdFx0XHRkZXZtX2tmcmVlKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsIGNvbm5faW5mbyk7XG4gMzgwOlx0XHRcdH1cbiAzODE6XHRcdH1cbiAzODI6XHRcdG5jaV9yZXFfY29tcGxldGUobmRldiwgc3RhdHVzKTtcbiAzODM6XHR9XG4gMzg0Olx0XG4gMzg1Olx0dm9pZCBuY2lfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzODY6XHR7XG4gMzg3Olx0XHRfX3UxNiByc3Bfb3Bjb2RlID0gbmNpX29wY29kZShza2ItXHUwMDNlZGF0YSk7XG4gMzg4Olx0XG4gMzg5Olx0XHQvKiB3ZSBnb3QgYSByc3AsIHN0b3AgdGhlIGNtZCB0aW1lciAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE5NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBORkMgUmVzcG9uc2UgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvbmZjL25jaS9yc3AuY2AsIHNwZWNpZmljYWxseSB0aGUgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBwcmV2aW91cyBjb2RlIHdhcyBhY2Nlc3NpbmcgYHJzcC0mZ3Q7Y29ubl9pZGAsIGByc3AtJmd0O21heF9jdHJsX3BrdF9wYXlsb2FkX2xlbmAsIGFuZCBgcnNwLSZndDtjcmVkaXRzX2NudGAgZGlyZWN0bHksIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlIHJlY2VpdmVkICpza2IqIChzb2NrZXQgYnVmZmVyKSB3YXMgbGFyZ2UgZW5vdWdoIHRvIGFjdHVhbGx5IGhvbGQgdGhlIGVudGlyZSBgcnNwYCBzdHJ1Y3QuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIGBza2ItJmd0O2xlbmAgd2FzIGxlc3MgdGhhbiBgc2l6ZW9mKCpyc3ApYCDigJMgc2F5LCBpdCBvbmx5IGhhZCBvbmUgYnl0ZSwgbWF5YmUgYSBgc3RhdHVzID09IE5DSV9TVEFUVVNfT0tgIOKAkyB0aGVuIHRoZXJlIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYSBjbGFzc2ljIHZ1bG5lcmFiaWxpdHkuCgpUaGlzIHBhdGNoIGFkZHMgYSBiYXNpYyBjaGVjaywgYSBzaW1wbGUgYGlmIChza2ItJmd0O2xlbiAmbHQ7IHNpemVvZigqcnNwKSlgLCB3aGljaCBzZXRzIGBOQ0lfU1RBVFVTX1NZTlRBWF9FUlJPUmAgYW5kIGp1bXBzIHRvIGV4aXQuIEEgZ29vZCBkZWZlbnNpdmUgbWVhc3VyZSwgYnV0IGlzIGl0IHJlYWNoYWJsZT8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBXZSBoYXZlIGEgc29saWQgc3RyYXRlZ3ksIHBhdGNoIGZ1enppbmcsIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLCBhbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMuIEJ1dCwgaXQmIzM5O3Mgbm90IHdvcnRoIGZ1enppbmcgdW5yZWFjaGFibGUgY29kZSwgYW5kIHJlYWNoYWJpbGl0eSBpcyB0aGUgcHJpbWFyeSBnYXRlLgoKVGhlIGNyaXRlcmlhIGZvciBmdXp6aW5nIGFwcGxpY2FiaWxpdHkgYXJlIHN0cmljdC4gV2UgbmVlZCBjb2RlIHRoYXQgY2FuICphY3R1YWxseSBleGVjdXRlKiBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgdXNpbmcgZW11bGF0ZWQgZGV2aWNlcy4gRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIG9yIHNvY2tldHMgYXJlIGdvb2QgdGFyZ2V0cy4gUmVmYWN0b3JpbmdzLCBjb2RlIGNsZWFudXBzLCBydW50aW1lIGFzc2VydGlvbnMsIGFuZCBkZWZlbnNpdmUgY2hlY2tzIGxpa2UgdGhpcyBhcmUgYWxsIHBvdGVudGlhbGx5IHJlbGV2YW50LiBCdXQgaG93IGlzIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCBldmVuIGNhbGxlZD8gV2hlbiBpcyBhIHJlc3BvbnNlIHBhY2tldCBwcm9jZXNzZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIEkgbmVlZCB0byBzZWUgaG93IGBuY2lfcnNwX3BhY2tldGAgaXMgcmVhY2hlZCB3aXRoaW4gYG5ldC9uZmMvbmNpL3JzcC5jYC4gVGhpcyBpcyBteSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvcnNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4NTpcdHZvaWQgbmNpX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gMzg2Olx0e1xuIDM4NzpcdFx0X191MTYgcnNwX29wY29kZSA9IG5jaV9vcGNvZGUoc2tiLVx1MDAzZWRhdGEpO1xuIDM4ODpcdFxuIDM4OTpcdFx0Lyogd2UgZ290IGEgcnNwLCBzdG9wIHRoZSBjbWQgdGltZXIgKi9cbiAzOTA6XHRcdHRpbWVyX2RlbGV0ZShcdTAwMjZuZGV2LVx1MDAzZWNtZF90aW1lcik7XG4gMzkxOlx0XG4gMzkyOlx0XHRwcl9kZWJ1ZyhcJiMzNDtOQ0kgUlg6IE1UPXJzcCwgUEJGPSVkLCBHSUQ9MHgleCwgT0lEPTB4JXgsIHBsZW49JWRcXG5cJiMzNDssXG4gMzkzOlx0XHRcdCBuY2lfcGJmKHNrYi1cdTAwM2VkYXRhKSxcbiAzOTQ6XHRcdFx0IG5jaV9vcGNvZGVfZ2lkKHJzcF9vcGNvZGUpLFxuIDM5NTpcdFx0XHQgbmNpX29wY29kZV9vaWQocnNwX29wY29kZSksXG4gMzk2Olx0XHRcdCBuY2lfcGxlbihza2ItXHUwMDNlZGF0YSkpO1xuIDM5NzpcdFxuIDM5ODpcdFx0Lyogc3RyaXAgdGhlIG5jaSBjb250cm9sIGhlYWRlciAqL1xuIDM5OTpcdFx0c2tiX3B1bGwoc2tiLCBOQ0lfQ1RSTF9IRFJfU0laRSk7XG4gNDAwOlx0XG4gNDAxOlx0XHRpZiAobmNpX29wY29kZV9naWQocnNwX29wY29kZSkgPT0gTkNJX0dJRF9QUk9QUklFVEFSWSkge1xuIDQwMjpcdFx0XHRpZiAobmNpX3Byb3BfcnNwX3BhY2tldChuZGV2LCByc3Bfb3Bjb2RlLCBza2IpID09IC1FTk9UU1VQUCkge1xuIDQwMzpcdFx0XHRcdHByX2VycihcJiMzNDt1bnN1cHBvcnRlZCByc3Agb3Bjb2RlIDB4JXhcXG5cJiMzNDssXG4gNDA0Olx0XHRcdFx0ICAgICAgIHJzcF9vcGNvZGUpO1xuIDQwNTpcdFx0XHR9XG4gNDA2Olx0XG4gNDA3Olx0XHRcdGdvdG8gZW5kO1xuIDQwODpcdFx0fVxuIDQwOTpcdFxuIDQxMDpcdFx0c3dpdGNoIChyc3Bfb3Bjb2RlKSB7XG4gNDExOlx0XHRjYXNlIE5DSV9PUF9DT1JFX1JFU0VUX1JTUDpcbiA0MTI6XHRcdFx0bmNpX2NvcmVfcmVzZXRfcnNwX3BhY2tldChuZGV2LCBza2IpO1xuIDQxMzpcdFx0XHRicmVhaztcbiA0MTQ6XHRcbiA0MTU6XHRcdGNhc2UgTkNJX09QX0NPUkVfSU5JVF9SU1A6XG4gNDE2Olx0XHRcdG5jaV9jb3JlX2luaXRfcnNwX3BhY2tldChuZGV2LCBza2IpO1xuIDQxNzpcdFx0XHRicmVhaztcbiA0MTg6XHRcbiA0MTk6XHRcdGNhc2UgTkNJX09QX0NPUkVfU0VUX0NPTkZJR19SU1A6XG4gNDIwOlx0XHRcdG5jaV9jb3JlX3NldF9jb25maWdfcnNwX3BhY2tldChuZGV2LCBza2IpO1xuIDQyMTpcdFx0XHRicmVhaztcbiA0MjI6XHRcbiA0MjM6XHRcdGNhc2UgTkNJX09QX0NPUkVfQ09OTl9DUkVBVEVfUlNQOlxuIDQyNDpcdFx0XHRuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KG5kZXYsIHNrYik7XG4gNDI1Olx0XHRcdGJyZWFrO1xuIDQyNjpcdFxuIDQyNzpcdFx0Y2FzZSBOQ0lfT1BfQ09SRV9DT05OX0NMT1NFX1JTUDpcbiA0Mjg6XHRcdFx0bmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0KG5kZXYsIHNrYik7XG4gNDI5Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgzOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTkNJIFBhY2tldCBIYW5kbGluZyBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgTmV0d29yayBDb250cm9sbGVyIEludGVyZmFjZSAoTkNJKSBwYWNrZXRzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYG5jaV9yeF93b3JrYCwgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcHJvY2Vzc2luZyBoYXBwZW5zIGFmdGVyIHJlY2VpdmluZyBkYXRhLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgYmUgdXNlZCB0byBmdXp6IE5DST8gQW5kIHRoZSBhbnN3ZXIsIGl0IHNlZW1zLCBpcyBhIHJlc291bmRpbmcgeWVzISBTeXprYWxsZXIgKmRvZXMqIGhhdmUgTkZDIGFuZCBOQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMuIEkgbmVlZCB0byBnZXQgdGhpcyByaWdodCBiZWNhdXNlIHRoZXJlJiMzOTtzIHBvdGVudGlhbCBoZXJlIGZvciBzb21lIGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdHkgZGlzY292ZXJ5LgoKU3l6a2FsbGVyIGxldmVyYWdlcyBhIGZldyBtZWNoYW5pc21zLCBhbmQgdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZC4gSXQgY2FuIHVzZSBgL2Rldi92aXJ0dWFsX25jaWAsIHdoaWNoIGlzIGRlZmluZWQgYnkgYENPTkZJR19ORkNfVklSVFVBTF9OQ0lgLCBVU0IgZ2FkZ2V0cyBlbmFibGVkIHdpdGggYENPTkZJR19VU0JfUkFXX0dBREdFVGAgYW5kIGBDT05GSUdfTkZDX01SVkxfVVNCYCwgb3IgZXZlbiBuZXRsaW5rIGNvbW1hbmRzIGZvciBpdHMgZnV6emluZy4gVGhhdCB2aXJ0dWFsIGRldmljZSByb3V0ZSBsb29rcyBwYXJ0aWN1bGFybHkgcHJvbWlzaW5nLiBJIGNhbiBzZWUgdGhhdCBzeXprYWxsZXIgaXMgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQgdG8gaW50ZXJhY3Qgd2l0aCBgL2Rldi92aXJ0dWFsX25jaWAsIHdoaWNoIGlzIGEga2V5IHRhcmdldC4gSXQgaGFzIGNhbGxzIGRlZmluZWQgbGlrZSBgb3BlbmF0JHZpcnR1YWxfbmNpYCBhbmQgYHdyaXRlJHZpcnR1YWxfbmNpYC4KClRoZSBgd3JpdGUkdmlydHVhbF9uY2lgIGNhbGwgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGxlYWRzIHRvIGB2aXJ0dWFsX25jaWRldl93cml0ZWAuIExvb2tpbmcgYXQgdGhlIGB2aXJ0dWFsX25jaWRldl93cml0ZWAgZnVuY3Rpb24sIGl0IGRvZXMgdGhlIHR5cGljYWwgYGFsbG9jX3NrYmAsIHRoZW4gYGNvcHlfZnJvbV91c2VyYCB0byB0cmFuc2ZlciB0aGUgZnV6emVkIGJ1ZmZlciBpbnRvIHRoZSBza2IsIGFuZCB0aGVuLCBjcnVjaWFsbHksIGl0IGNhbGxzIGBuY2lfcmVjdl9mcmFtZWAgd2l0aCB0aGlzIG5ld2x5IGNyYWZ0ZWQgc2tiLiBUaGlzIGlzIHdoZXJlIEkgd2FudCB0byBmb2N1cywgYXMgdGhpcyBmbG93IG9mIGRhdGEgcHJlc2VudHMgYSBwZXJmZWN0IHRhcmdldCBmb3IgaW5qZWN0aW9uIHdpdGggbWFsaWNpb3VzIGRhdGEuCgpgbmNpX3JlY3ZfZnJhbWVgIGlzIHRoZSBjb3JlIG9mIHBhY2tldCBoYW5kbGluZy4gQWNjb3JkaW5nIHRvIHdoYXQgSSBoYXZlIGhlcmUsIHRoaXMgd2lsbCB0aGVuIHF1ZXVlIHRoZSBgc2tiYCB0byBgbmRldi0mZ3Q7cnhfcWAgYW5kIHNjaGVkdWxlcyBgbmNpX3J4X3dvcmtgLiBUaGF0JiMzOTtzIHRoZSBsaW5rLiBUbyB0cnVseSB1bmRlcnN0YW5kIHRoaXMsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgbmNpX3JlY3ZfZnJhbWVgIGluIGBuZXQvbmZjL25jaS9jb3JlLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM0ODpcdCAqIEBuZGV2OiBUaGUgbmNpIGRldmljZVxuMTM0OTpcdCAqIEBza2I6IFRoZSBza19idWZmIHRvIHJlY2VpdmVcbjEzNTA6XHQgKi9cbjEzNTE6XHRpbnQgbmNpX3JlY3ZfZnJhbWUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4xMzUyOlx0e1xuMTM1MzpcdFx0cHJfZGVidWcoXCYjMzQ7bGVuICVkXFxuXCYjMzQ7LCBza2ItXHUwMDNlbGVuKTtcbjEzNTQ6XHRcbjEzNTU6XHRcdGlmICghbmRldiB8fCAoIXRlc3RfYml0KE5DSV9VUCwgXHUwMDI2bmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4xMzU2Olx0XHQgICAgIXRlc3RfYml0KE5DSV9JTklULCBcdTAwMjZuZGV2LVx1MDAzZWZsYWdzKSkpIHtcbjEzNTc6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4xMzU4Olx0XHRcdHJldHVybiAtRU5YSU87XG4xMzU5Olx0XHR9XG4xMzYwOlx0XG4xMzYxOlx0XHQvKiBRdWV1ZSBmcmFtZSBmb3Igcnggd29ya2VyIHRocmVhZCAqL1xuMTM2MjpcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bmRldi1cdTAwM2VyeF9xLCBza2IpO1xuMTM2MzpcdFx0cXVldWVfd29yayhuZGV2LVx1MDAzZXJ4X3dxLCBcdTAwMjZuZGV2LVx1MDAzZXJ4X3dvcmspO1xuMTM2NDpcdFxuMTM2NTpcdFx0cmV0dXJuIDA7XG4xMzY2Olx0fVxuMTM2NzpcdEVYUE9SVF9TWU1CT0wobmNpX3JlY3ZfZnJhbWUpO1xuMTM2ODpcdFxuMTM2OTpcdGludCBuY2lfc2VuZF9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEzNzA6XHR7XG4xMzcxOlx0XHRwcl9kZWJ1ZyhcJiMzNDtsZW4gJWRcXG5cJiMzNDssIHNrYi1cdTAwM2VsZW4pO1xuMTM3MjpcdFxuMTM3MzpcdFx0aWYgKCFuZGV2KSB7XG4xMzc0Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTM3NTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjEzNzY6XHRcdH1cbjEzNzc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNTkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGNvZGUgc25pcHBldCwgZGVsaXZlcmVkIGFzIGlmIGl0JiMzOTtzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgbmNpX3J4X3dvcmtgIEZ1bmN0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCBgbmNpX3J4X3dvcmtgIHdpdGhpbiBgbmV0L25mYy9uY2kvY29yZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgb2YgaGFuZGxpbmcgaW5jb21pbmcgTkNJIGZyYW1lcyBzZWVtcyB0byBoYXBwZW4sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBpbiBkZXRhaWwuIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgTkNJIGRhdGEgZmxvdy4gSSYjMzk7bSB2aXN1YWxpemluZyB0aGUgZGF0YSBjb21pbmcgaW4sIHByZXN1bWFibHkgdmlhIHNvbWUgaGFyZHdhcmUgaW50ZXJydXB0IG9yIERNQSBjb21wbGV0aW9uLCBhbmQgbm93IGl0JiMzOTtzIHVwIHRvIHRoaXMgZnVuY3Rpb24gdG8gbWFrZSBzZW5zZSBvZiBpdC4gSSYjMzk7bSB3b25kZXJpbmcgaWYgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIHRoZSBpbml0aWFsIHBhcnNpbmcsIG9yIGlmIHRoZXJlJiMzOTtzIGEgcHJlLXByb2Nlc3Npbmcgc3RhZ2UuIFRoZSAmIzM0O3dvcmsmIzM0OyBhc3BlY3QgaGludHMgYXQgdGhpcyBiZWluZyBhIGJvdHRvbSBoYWxmIGhhbmRsZXIsIHJ1bm5pbmcgaW4gYSB3b3JrcXVldWUsIHNvIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgZm9yIGFueSBsb2NraW5nIGNvbmNlcm5zIGFyb3VuZCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBBcmUgdGhlcmUgcmFjZSBjb25kaXRpb25zIHRvIHdvcnJ5IGFib3V0PyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gYG5jaV9yeF93b3JrYCwgc3BlY2lmaWNhbGx5IHdoYXQmIzM5O3MgaW4gdGhlIGBuY2lfZGV2YCBhbmQgYW55IHBvdGVudGlhbCBkYXRhIGJ1ZmZlcnMgaXQgYWNjZXNzZXMuIFRpbWUgdG8gZ2V0IGRvd24gdG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTYwOlx0e1xuMTU2MTpcdFx0c3RydWN0IG5jaV9kZXYgKm5kZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5jaV9kZXYsIHJ4X3dvcmspO1xuMTU2MjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjE1NjM6XHRcbjE1NjQ6XHRcdGZvciAoOyAoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2bmRldi1cdTAwM2VyeF9xKSk7IGtjb3ZfcmVtb3RlX3N0b3AoKSkge1xuMTU2NTpcdFx0XHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbjE1NjY6XHRcbjE1Njc6XHRcdFx0LyogU2VuZCBjb3B5IHRvIHNuaWZmZXIgKi9cbjE1Njg6XHRcdFx0bmZjX3NlbmRfdG9fcmF3X3NvY2sobmRldi1cdTAwM2VuZmNfZGV2LCBza2IsXG4xNTY5Olx0XHRcdFx0XHQgICAgIFJBV19QQVlMT0FEX05DSSwgTkZDX0RJUkVDVElPTl9SWCk7XG4xNTcwOlx0XG4xNTcxOlx0XHRcdGlmICghbmNpX3ZhbGlkX3NpemUoc2tiKSkge1xuMTU3MjpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTU3MzpcdFx0XHRcdGNvbnRpbnVlO1xuMTU3NDpcdFx0XHR9XG4xNTc1Olx0XG4xNTc2Olx0XHRcdC8qIFByb2Nlc3MgZnJhbWUgKi9cbjE1Nzc6XHRcdFx0c3dpdGNoIChuY2lfbXQoc2tiLVx1MDAzZWRhdGEpKSB7XG4xNTc4Olx0XHRcdGNhc2UgTkNJX01UX1JTUF9QS1Q6XG4xNTc5Olx0XHRcdFx0bmNpX3JzcF9wYWNrZXQobmRldiwgc2tiKTtcbjE1ODA6XHRcdFx0XHRicmVhaztcbjE1ODE6XHRcbjE1ODI6XHRcdFx0Y2FzZSBOQ0lfTVRfTlRGX1BLVDpcbjE1ODM6XHRcdFx0XHRuY2lfbnRmX3BhY2tldChuZGV2LCBza2IpO1xuMTU4NDpcdFx0XHRcdGJyZWFrO1xuMTU4NTpcdFxuMTU4NjpcdFx0XHRjYXNlIE5DSV9NVF9EQVRBX1BLVDpcbjE1ODc6XHRcdFx0XHRuY2lfcnhfZGF0YV9wYWNrZXQobmRldiwgc2tiKTtcbjE1ODg6XHRcdFx0XHRicmVhaztcbjE1ODk6XHRcbjE1OTA6XHRcdFx0ZGVmYXVsdDpcbjE1OTE6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7dW5rbm93biBNVCAweCV4XFxuXCYjMzQ7LCBuY2lfbXQoc2tiLVx1MDAzZWRhdGEpKTtcbjE1OTI6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjE1OTM6XHRcdFx0XHRicmVhaztcbjE1OTQ6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTAzMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogTkZDIE5DSSBQYWNrZXQgUHJvY2Vzc2luZyoqCgpPa2F5LCB0aGlzIGlzIGludGVyZXN0aW5nLiBMaW5lIDE1NjQtMTU2NSBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXQgbWU6IGBrY292X3JlbW90ZV9zdG9wKClgIGFuZCBga2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKClgISBUaGF0JiMzOTtzIGEgZGVhZCBnaXZlYXdheSDigJMgc3BlY2lmaWMgaW5zdHJ1bWVudGF0aW9uIGZvciBzeXprYWxsZXIgY292ZXJhZ2UsIHdoaWNoIG1lYW5zIHRoZXkmIzM5O3JlIGFjdGl2ZWx5IGZ1enppbmcgdGhpcyBhcmVhLiBCcmlsbGlhbnQhIFNvLCBOQ0kgcGFja2V0IHByb2Nlc3NpbmcgaXMgYWxyZWFkeSBnZXR0aW5nIGhhbW1lcmVkIGJ5IHN5emthbGxlciB0aHJvdWdoIHJlbW90ZSBjb3ZlcmFnZSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuCgpUaGlzIHBhcnRpY3VsYXIgY2hhbmdlIGludHJvZHVjZXMgYSBib3VuZHMgY2hlY2sgd2l0aGluIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYWx0ZXJpbmcgdGhlIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB0aGUgcGFja2V0IGxlbmd0aC4gVGhpcyBpcyBhbiBleGNlbGxlbnQgb3Bwb3J0dW5pdHkuIEEgc2hvcnQgcGFja2V0IG1pZ2h0IHRyaWdnZXIgYW4gaW50ZXJlc3RpbmcgY29uZGl0aW9uIGhlcmUsIHdoaWNoIG1ha2VzIHRoaXMgd29ydGggZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOgoKKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlLioqIEFic29sdXRlbHkuIFRoaXMgbG9va3MgbGlrZSBhIHByb21pc2luZyBhdmVudWUuCgoqICAgKipGb2N1c1N5bWJvbHM6KiogSSYjMzk7bSBnb2luZyB0byBjZW50ZXIgbXkgYXR0ZW50aW9uIG9uOgogICAgKiAgIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCAtIFRoZSBsb2NhdGlvbiBvZiB0aGUgbmV3IGJvdW5kcyBjaGVjay4KICAgICogICBgbmNpX3JzcF9wYWNrZXRgIC0gVGhlIHN0cnVjdHVyZSBvZiB0aGUgcmVzcG9uc2UgcGFja2V0cyBpbiBnZW5lcmFsLgogICAgKiAgIGBuY2lfcnhfd29ya2AgLSBUaGUgYXNzb2NpYXRlZCByZWNlaXZlIHdvcmtlci4gSG93IGlzIHRoaXMgcGFja2V0IGFjdHVhbGx5IGJlaW5nIGhhbmRsZWQuCgoqICAgKipFbmFibGVDb25maWdzOioqIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGhlcmUuIExldCYjMzk7cyBkaWcgaW50bzoKICAgICogICBgbmV0L25mYy9uY2kvcnNwLmNgIC0gVG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGNvdWxkIGltcGFjdCB0aGUgTkNJIHJlc3BvbnNlIHBhY2tldC4KICAgICogICBWaXJ0dWFsIE5DSSAvIE5GQyBjb25maWd1cmF0aW9uIC0gV2hpY2ggaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IHRvIGV2YWx1YXRlIGFuZCBzZXQuCiAgICAqICAgYG5ldC9uZmMvTWFrZWZpbGVgIGFuZCBgbmV0L25mYy9uY2kvTWFrZWZpbGVgIC0gVG8gZGV0ZXJtaW5lIGV4YWN0bHkgaG93IHRoaXMgbW9kdWxlIGlzIGJ1aWx0IGFuZCB3aGF0IG90aGVyIGRlcGVuZGVuY2llcyBhcmUgYXQgcGxheS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aG9zZSBNYWtlZmlsZXMgYW5kIHN0YXJ0IGNoZWNraW5nIHRoZSBjb25maWdzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IE5GQyBzdWJzeXN0ZW0uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19ORkMpICYjNDM7PSBuZmMub1xuICAgNzpcdG9iai0kKENPTkZJR19ORkNfTkNJKSAmIzQzOz0gbmNpL1xuICAgODpcdG9iai0kKENPTkZJR19ORkNfSENJKSAmIzQzOz0gaGNpL1xuICAgOTpcdG9iai0kKENPTkZJR19ORkNfRElHSVRBTCkgJiM0Mzs9IG5mY19kaWdpdGFsLm9cbiAgMTA6XHRcbiAgMTE6XHRuZmMtb2JqcyA6PSBjb3JlLm8gbmV0bGluay5vIGFmX25mYy5vIHJhd3NvY2subyBsbGNwX2NvcmUubyBsbGNwX2NvbW1hbmRzLm8gXFxcbiAgMTI6XHRcdFx0bGxjcF9zb2NrLm9cbiAgMTM6XHRcbiAgMTQ6XHRuZmNfZGlnaXRhbC1vYmpzIDo9IGRpZ2l0YWxfY29yZS5vIGRpZ2l0YWxfdGVjaG5vbG9neS5vIGRpZ2l0YWxfZGVwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5MzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIE5DSSBNYWtlZmlsZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgbmV0L25mYy9uY2kvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGJ1aWxkIGluc3RydWN0aW9ucyBmb3IgdGhlIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBhcmUgZ29pbmcgdG8gcmVzaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE5GQyBkcml2ZXIgaXMgYnVpbHQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBvciB3aGF0ZXZlciBidWlsZCBzeXN0ZW0gaXMgaW4gdXNlLiBJIGV4cGVjdCB0byBmaW5kIHJ1bGVzIGZvciBjb21waWxpbmcgdGhlIE5DSSBkcml2ZXIgbW9kdWxlcywgbGlua2luZyB0aGVtLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBpbnN0cnVjdGlvbnMgZm9yIGhhbmRsaW5nIGZpcm13YXJlIGxvYWRpbmcgaWYgdGhlIE5GQyBjb250cm9sbGVyIG5lZWRzIGl0LiBMb29raW5nIGF0IHRoZSBtYWtlZmlsZSBpcyB0aGUgbW9zdCBkaXJlY3Qgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MuIEZyb20gdGhlcmUsIEkgY2FuIHJldmVyc2UgZW5naW5lZXIgaG93IGl0IGlzIGJyb3VnaHQgaW50byB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggTkZDIE5DSSBsYXllci5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX05GQ19OQ0kpICYjNDM7PSBuY2kub1xuICAgNzpcdFxuICAgODpcdG5jaS1vYmpzIDo9IGNvcmUubyBkYXRhLm8gbGliLm8gbnRmLm8gcnNwLm8gaGNpLm9cbiAgIDk6XHRcbiAgMTA6XHRuY2lfc3BpLXkgJiM0Mzs9IHNwaS5vXG4gIDExOlx0b2JqLSQoQ09ORklHX05GQ19OQ0lfU1BJKSAmIzQzOz0gbmNpX3NwaS5vXG4gIDEyOlx0XG4gIDEzOlx0bmNpX3VhcnQteSAmIzQzOz0gdWFydC5vXG4gIDE0Olx0b2JqLSQoQ09ORklHX05GQ19OQ0lfVUFSVCkgJiM0Mzs9IG5jaV91YXJ0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNjQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTkZDIE5DSSBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYG5ldC9uZmMvbmNpL3JzcC5jYCBpcyBnb2luZyB0byBiZSBjb21waWxlZCBpbnRvIGBuY2kub2Agd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcywgYnV0IG9ubHkgaWYgYENPTkZJR19ORkNfTkNJYCBpcyBkZWZpbmVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGl0JiMzOTtzIGEgc3RhbmRhcmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2NlbmFyaW8uIEFuZCwgcHJlZGljdGFibHksIGBDT05GSUdfTkZDX05DSWAgaXRzZWxmIGlzIGRlcGVuZGVudCBvbiBgQ09ORklHX05GQ2AsIHNvIHdlIGhhdmUgYSBkZXBlbmRlbmN5IGNoYWluIHRoZXJlLiBOb3csIHRoZSBtb3JlIGludGVyZXN0aW5nIGJpdCBpcyBob3cgd2UgY2FuIGludGVyYWN0IHdpdGggdGhpcyBmcm9tIGEgdXNlci1zcGFjZSBwZXJzcGVjdGl2ZSwgcGFydGljdWxhcmx5IGZvciBmdXp6aW5nLgoKTXkgdGhpbmtpbmcgaXMgdGhhdCB0byBnZXQgdG8gYC9kZXYvdmlydHVhbF9uY2lgLCB3ZSBuZWVkIGBDT05GSUdfTkZDX1ZJUlRVQUxfTkNJYCwgd2hpY2ggaGFzIHRvLCBpbiB0dXJuLCBiZSBlbmFibGVkIGFuZCBpdCBkZXBlbmRzIG9uIHRoZSBjb3JlIGBORkNfTkNJYCBjb25maWd1cmF0aW9uLCBzbyB0aGF0IGlzIHRoZSBwYXRoIHRvIHRlc3RpbmcgdGhhdCBtb2R1bGUuIFRoaXMgbWFrZXMgc2Vuc2UgYXMgYSB2aXJ0dWFsIGRldmljZSBmb3IgdGVzdCBhbmQgZW11bGF0aW9uIHB1cnBvc2VzLiBBbHNvLCB0aGVyZSBpcyBgQ09ORklHX05GQ19NUlZMX1VTQmAgdG8gdGVzdCB0aGUgTkZDIE5DSSBpbnRlcmZhY2UgdGhyb3VnaCBVU0IsIHNvIHRoYXQgd2lsbCBiZSBhbm90aGVyIHdheSB0byB0ZXN0IGl0LgoKQWxyaWdodCwgdGltZSB0byBnbyBhbmQgY2hlY2sgYG5ldC9uZmMvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGVzZSBkZXBlbmRlbmNpZXMgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBhY3R1YWwgS2NvbmZpZyBmaWxlIGFuZCBzZWUgd2hhdCBvdGhlciBvcHRpb25zIGFyZSBhdmFpbGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTkZDIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkZDXG4gICA3Olx0XHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXG4gICA4Olx0XHR0cmlzdGF0ZSBcJiMzNDtORkMgc3Vic3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDk6XHRcdGRlZmF1bHQgblxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIE5GQyAoTmVhciBmaWVsZFxuICAxMjpcdFx0ICBjb21tdW5pY2F0aW9uKSBkZXZpY2VzLlxuICAxMzpcdFxuICAxNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gIDE1Olx0XHQgIGJlIGNhbGxlZCBuZmMuXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIE5GQ19ESUdJVEFMXG4gIDE4Olx0XHRkZXBlbmRzIG9uIE5GQ1xuICAxOTpcdFx0c2VsZWN0IENSQ19DQ0lUVFxuICAyMDpcdFx0c2VsZWN0IENSQ19JVFVfVFxuICAyMTpcdFx0dHJpc3RhdGUgXCYjMzQ7TkZDIERpZ2l0YWwgUHJvdG9jb2wgc3RhY2sgc3VwcG9ydFwmIzM0O1xuICAyMjpcdFx0ZGVmYXVsdCBuXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIGJ1aWxkIE5GQyBkaWdpdGFsIHByb3RvY29sIHN0YWNrIHN1cHBvcnQuXG4gIDI1Olx0XHQgIFRoaXMgaXMgbmVlZGVkIGJ5IE5GQyBjaGlwc2V0cyB3aG9zZSBmaXJtd2FyZSBvbmx5IGltcGxlbWVudFxuICAyNjpcdFx0ICB0aGUgTkZDIGFuYWxvZyBsYXllci5cbiAgMjc6XHRcbiAgMjg6XHRcdCAgVG8gY29tcGlsZSB0aGlzIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICAyOTpcdFx0ICBiZSBjYWxsZWQgbmZjX2RpZ2l0YWwuXG4gIDMwOlx0XG4gIDMxOlx0c291cmNlIFwmIzM0O25ldC9uZmMvbmNpL0tjb25maWdcJiMzNDtcbiAgMzI6XHRzb3VyY2UgXCYjMzQ7bmV0L25mYy9oY2kvS2NvbmZpZ1wmIzM0O1xuICAzMzpcdFxuICAzNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjUzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG5ldC9uZmMvbmNpL0tjb25maWdgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgTkZDIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGp1bXAgaW50byBgbmV0L25mYy9uY2kvS2NvbmZpZ2AuIEkga25vdyB0aGlzIGlzIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiwgaXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9wdGlvbnMgZm9yIHRoZSBOQ0kgKE5GQyBDb250cm9sbGVyIEludGVyZmFjZSkgZHJpdmVycyBzaG91bGQgYmUgZGVmaW5lZC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBmaW5kIGFsbCB0aGUgdXN1YWwgc3VzcGVjdHM6IGVuYWJsZW1lbnQgZmxhZ3MsIG1heWJlIHNvbWUgYm9hcmQtc3BlY2lmaWMgb3ZlcnJpZGVzLCBhbmQgaG9wZWZ1bGx5IGNsZWFyIGRlcGVuZGVuY2llcyBvbiB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBuZXR3b3JraW5nIHN1YnN5c3RlbXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaGllcmFyY2h5IGFuZCBob3cgdGhlc2Ugb3B0aW9ucyByZWxhdGUgdG8gb3RoZXIgTkZDIGNvbXBvbmVudHMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgYnJva2VuIGRvd24gaW50byBsb2dpY2FsIHNlY3Rpb25zLCBwb3NzaWJseSBiYXNlZCBvbiB0aGUgcGh5c2ljYWwgdHJhbnNwb3J0IG9yIHRoZSBzcGVjaWZpYyBOQ0kgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyAob3IgaGVhZGFjaGVzISkgYXdhaXQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gbWFnaWMgaGFwcGVucywgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0mIzM5O3MgTkZDIGNhcGFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5GQ19OQ0lcbiAgIDM6XHRcdGRlcGVuZHMgb24gTkZDXG4gICA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtOQ0kgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuICAgNTpcdFx0ZGVmYXVsdCBuXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBpcyBhIGNvbW11bmljYXRpb24gcHJvdG9jb2wgYmV0d2VlblxuICAgODpcdFx0ICBhbiBORkMgQ29udHJvbGxlciAoTkZDQykgYW5kIGEgRGV2aWNlIEhvc3QgKERIKS5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIE5DSSBzdXBwb3J0IGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0b1xuICAxMTpcdFx0ICBjb21waWxlIGl0IGFzIG1vZHVsZSAobmNpKS5cbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgTkZDX05DSV9TUElcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgU1BJXG4gIDE1Olx0XHRzZWxlY3QgQ1JDX0NDSVRUXG4gIDE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOQ0kgb3ZlciBTUEkgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuICAxNzpcdFx0ZGVmYXVsdCBuXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBpcyBhIGNvbW11bmljYXRpb24gcHJvdG9jb2wgYmV0d2VlblxuICAyMDpcdFx0ICBhbiBORkMgQ29udHJvbGxlciAoTkZDQykgYW5kIGEgRGV2aWNlIEhvc3QgKERIKS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MDkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTkZDIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIFN5bWJvbCBBY2Nlc3NpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBORkMgY29uZmlndXJhdGlvbnMgYW5kIGl0IHNlZW1zIEkgbmVlZCB0byBjb25zaWRlciB0aGVzZSB0aHJlZTogYE5GQ2AsIGBORkNfTkNJYCwgYW5kIGBORkNfVklSVFVBTF9OQ0lgLiBSaWdodCwgc3RhbmRhcmQgTkZDIHNldHVwLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMuCgpOb3csIG15IGZvY3VzIGlzIG9uIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCBhcyBhIHBvdGVudGlhbCBwb2ludCBvZiBpbnRlcmVzdC4gSSBzZWUgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L25mYy9uY2kvcnNwLmNgLiBXYWl0LCBpcyBpdCBzdGF0aWM/IEFoLCB5ZXMsIGxpbmUgMzA1IGNvbmZpcm1zIGl0OiBgc3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCguLi4pYC4gSG1tLCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIGxpbWl0ZWQgdG8gdGhlIGZpbGUgc2NvcGUuIEJ1dCBob2xkIG9uLCBjYW4gc3RhdGljIGZ1bmN0aW9ucyAqYWN0dWFsbHkqIGJlIGxldmVyYWdlZCBhcyBhIGZvY3VzIHN5bWJvbD8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0LCBpZiBpdCBpc24mIzM5O3QgaW5saW5lZCwgdGhlIHN5bWJvbCBpcyBwcmVzZW50IGluIHZtbGludXgva2FsbHN5bXMsIGFuZCBzeXprYWxsZXIgY2FuIGluZGVlZCB0YXJnZXQgdGhlbS4gR29vZCB0byByZW1lbWJlci4KCk9rYXksIGxldCYjMzk7cyBiYWNrIHVwIGEgc3RlcC4gSSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hhdCBjYWxscyBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAuIExvb2tpbmcgYXQgaXQsIEkgc2VlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBuY2lfcnNwX3BhY2tldGAuIEFuZCB3aGVyZSBpcyB0aGF0PyBJdCYjMzk7cyBpbiBgbmV0L25mYy9uY2kvY29yZS5jYCBhbmQgaXMgcGFydCBvZiBgbmNpX3J4X3dvcmtgLiBUaGF0JiMzOTtzIG5vbi1zdGF0aWMsIHNvIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCBjYW4gYmUgY2FsbGVkLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBpdCBpcyBleHBvcnRlZCBvciBkZWNsYXJlZCBpbiBhIGhlYWRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmNpX3JzcF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oPTM1Mj1zdGF0aWMgaW5saW5lIGludCBuY2lfc2V0X3ZlbmRvcl9jbWRzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuLS1cbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oLTM1OC1cbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oOjM1OTp2b2lkIG5jaV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oLTM2MC12b2lkIG5jaV9udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2MjkKCQkJCQkJCW91dHB1dDogMTY3CgkJCQkJCQl0aG91Z2h0czogMTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXM6IEEgQ29uY2lzZSBQbGFuKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoaXMuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRob3NlIHZlcnkgc3BlY2lmaWMgc3ltYm9sczogYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGFuZCBgbmNpX3JzcF9wYWNrZXRgLiBUaGV5IGp1bXAgb3V0IGFzIHBlcmZlY3QgdGFyZ2V0cy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nOyBJJiMzOTtsbCBxdWlja2x5IGdsYW5jZSBhdCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMsIGxpa2UgYG5jaV9yeF93b3JrYCB3aXRoaW4gYG5ldC9uZmMvbmNpL2NvcmUuY2AgYW5kIGBuY2lfcmVjdl9mcmFtZWAuIEhvd2V2ZXIsIHRob3NlIGZpcnN0IHR3byBzZWVtIHRoZSBtb3N0IGRpcmVjdCBhbmQgcmVsZXZhbnQgZ2l2ZW4gdGhlIGNvbnRleHQsIGxpa2UgcGlucG9pbnRpbmcgYSB2ZXJ5IHNwZWNpZmljIHZ1bG5lcmFiaWxpdHkuCgpJJiMzOTtsbCBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBpbnN0cnVjdGlvbnMgYWdhaW4sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgZGV0YWlsOiAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGlzIGNsZWFyOyAmIzM0O0ZvY3VzU3ltYm9scywmIzM0OyB3aGljaCBpcyB3aGF0IEkmIzM5O20gZG9pbmcgbm93LCBkaXJlY3RseSBndWlkZXMgdGhpcyB3b3JrOyB0aGUgJiMzNDtFbmFibGVDb25maWdzJiMzNDsgcGFydCBtZWFucyBJJiMzOTt2ZSBjaGVja2VkIHRoZSBmbGFncyBhbmQgJiMzNDtSZWFzb25pbmcmIzM0OyBrZWVwcyBteSB3b3JrIGNvbmNpc2UuCgpSaWdodCwgYWxsIGNsZWFyLiBUaW1lIHRvIGV4ZWN1dGUuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX05DSSYjMzQ7LAogICAgJiMzNDtORkNfVklSVFVBTF9OQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9yc3BfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgb24gaW5jb21pbmcgTkNJIHJlc3BvbnNlIHBhY2tldHMgaW4gbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCB2aXJ0dWFsIE5DSSBkZXZpY2VzIChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJIC9kZXYvdmlydHVhbF9uY2kpIG9yIGVtdWxhdGVkIFVTQiBORkMgZGV2aWNlcywgYm90aCBvZiB3aGljaCBhcmUgc3VwcG9ydGVkIGFuZCBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX05DSSYjMzQ7LAogICAgJiMzNDtORkNfVklSVFVBTF9OQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9yc3BfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgb24gaW5jb21pbmcgTkNJIHJlc3BvbnNlIHBhY2tldHMgaW4gbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCB2aXJ0dWFsIE5DSSBkZXZpY2VzIChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJIC9kZXYvdmlydHVhbF9uY2kpIG9yIGVtdWxhdGVkIFVTQiBORkMgZGV2aWNlcywgYm90aCBvZiB3aGljaCBhcmUgc3VwcG9ydGVkIGFuZCBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGxlbmd0aCB2YWxpZGF0aW9uIGNoZWNrIChgc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKCpyc3ApYCkgaW4gYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoKWAgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIGZyb20gYHNrYi1cdTAwM2VkYXRhYCB3aGVuIHBhcnNpbmcgdHJ1bmNhdGVkIE5DSSByZXNwb25zZSBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBidWdzIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzAyOGRkYWU0ZjlmYjY2OThiZDUxNTdmNDBlOTQ3NmFjMjcxNDliNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDE3OjEyOjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvcnNwLmMgYi9uZXQvbmZjL25jaS9yc3AuYwppbmRleCBiMGFiNGY1YWNiY2U4Li43MmI3NDhmMGJlOWYyIDEwMDY0NAotLS0gYS9uZXQvbmZjL25jaS9yc3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL25jaS9yc3AuYwpAQCAtMzEyLDYgJiM0MzszMTIsMTAgQEAgc3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAlwcl9kZWJ1ZygmIzM0O3N0YXR1cyAweCV4XG4mIzM0Oywgc3RhdHVzKTsKIAogCWlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykgewomIzQzOwkJaWYgKHNrYi0mZ3Q7bGVuICZsdDsgc2l6ZW9mKCpyc3ApKSB7CiYjNDM7CQkJc3RhdHVzID0gTkNJX1NUQVRVU19TWU5UQVhfRVJST1I7CiYjNDM7CQkJZ290byBleGl0OwomIzQzOwkJfQogCQlyc3AgPSAoc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCAqKXNrYi0mZ3Q7ZGF0YTsKIAogCQljb25uX2luZm8gPSBkZXZtX2t6YWxsb2MoJmFtcDtuZGV2LSZndDtuZmNfZGV2LSZndDtkZXYsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBFdmFsdWF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggdG8gYG5ldC9uZmMvbmNpL3JzcC5jYCB3YXJyYW50cyBpdHMgb3duIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSByZXF1ZXN0IGlzIHN0cmFpZ2h0Zm9yd2FyZDogZGV0ZXJtaW5lIGlmIEtNU0FOIG9yIEtBU0FOIGlzIHRoZSBiZXR0ZXIgY2hvaWNlIGZvciB0aGlzIHBhdGNoLCBwcm9iYWJseSBhcyBwYXJ0IG9mIGEgc3l6a2FsbGVyIHNldHVwLiBUaGUgY29udGV4dCBoZXJlIGlzIHByZXR0eSBzdGFuZGFyZDogaXQmIzM5O3MgYSBjb2RlIHJldmlldyBhbmQgd2UmIzM5O3JlIHNlbGVjdGluZyB0aGUgcmlnaHQgc2FuaXRpemVyLiBTZXZlcml0eS13aXNlLCBpdCYjMzk7cyBtb3JlIG9mIGEgYmVuaWduLCBkZWZlbnNpdmUgUUEgZWZmb3J0OyB3ZSYjMzk7cmUgdHJpYWdpbmcgc2FuaXRpemVycy4KCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGNvZGUuIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSBgbmV0L25mYy9uY2kvcnNwLmNgIGFyb3VuZCBsaW5lIDMxMi4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVsZXZhbnQgbG9naWMgbXVzdCBsaWUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhlcmUuIEkmIzM5O2xsIGxvb2sgZm9yIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IG1pZ2h0IHNsaXAgcGFzdCBLQVNBTi4gV2UgbmVlZCB0byBhc3Nlc3MgdGhlIHNwZWNpZmljIGRhdGEgZmxvd3MgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHJhY2UgY29uZGl0aW9ucywgb3Igc2ltaWxhciBpc3N1ZXMgdGhhdCBjb3VsZCBiZSBleHBvc2VkIGJ5IEtNU0FOLiBUaW1lIHRvIGRpZyBpbiBhbmQgZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL3JzcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcbiAzMDE6XHRcdHByX2RlYnVnKFwmIzM0O3N0YXR1cyAweCV4XFxuXCYjMzQ7LCBzdGF0dXMpO1xuIDMwMjpcdFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBzdGF0dXMpO1xuIDMwMzpcdH1cbiAzMDQ6XHRcbiAzMDU6XHRzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIDMwNjpcdFx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzMDc6XHR7XG4gMzA4Olx0XHRfX3U4IHN0YXR1cyA9IHNrYi1cdTAwM2VkYXRhWzBdO1xuIDMwOTpcdFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbyA9IE5VTEw7XG4gMzEwOlx0XHRjb25zdCBzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwICpyc3A7XG4gMzExOlx0XG4gMzEyOlx0XHRwcl9kZWJ1ZyhcJiMzNDtzdGF0dXMgMHgleFxcblwmIzM0Oywgc3RhdHVzKTtcbiAzMTM6XHRcbiAzMTQ6XHRcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykge1xuIDMxNTpcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKCpyc3ApKSB7XG4gMzE2Olx0XHRcdFx0c3RhdHVzID0gTkNJX1NUQVRVU19TWU5UQVhfRVJST1I7XG4gMzE3Olx0XHRcdFx0Z290byBleGl0O1xuIDMxODpcdFx0XHR9XG4gMzE5Olx0XHRcdHJzcCA9IChzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwICopc2tiLVx1MDAzZWRhdGE7XG4gMzIwOlx0XG4gMzIxOlx0XHRcdGNvbm5faW5mbyA9IGRldm1fa3phbGxvYyhcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LFxuIDMyMjpcdFx0XHRcdFx0XHQgc2l6ZW9mKCpjb25uX2luZm8pLCBHRlBfS0VSTkVMKTtcbiAzMjM6XHRcdFx0aWYgKCFjb25uX2luZm8pIHtcbiAzMjQ6XHRcdFx0XHRzdGF0dXMgPSBOQ0lfU1RBVFVTX1JFSkVDVEVEO1xuIDMyNTpcdFx0XHRcdGdvdG8gZXhpdDtcbiAzMjY6XHRcdFx0fVxuIDMyNzpcdFxuIDMyODpcdFx0XHRjb25uX2luZm8tXHUwMDNlZGVzdF9wYXJhbXMgPSBkZXZtX2t6YWxsb2MoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldixcbiAzMjk6XHRcdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMpLFxuIDMzMDpcdFx0XHRcdFx0XHRcdEdGUF9LRVJORUwpO1xuIDMzMTpcdFx0XHRpZiAoIWNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcykge1xuIDMzMjpcdFx0XHRcdHN0YXR1cyA9IE5DSV9TVEFUVVNfUkVKRUNURUQ7XG4gMzMzOlx0XHRcdFx0Z290byBmcmVlX2Nvbm5faW5mbztcbiAzMzQ6XHRcdFx0fVxuIDMzNTpcdFxuIDMzNjpcdFx0XHRjb25uX2luZm8tXHUwMDNlZGVzdF90eXBlID0gbmRldi1cdTAwM2VjdXJfZGVzdF90eXBlO1xuIDMzNzpcdFx0XHRjb25uX2luZm8tXHUwMDNlZGVzdF9wYXJhbXMtXHUwMDNlaWQgPSBuZGV2LVx1MDAzZWN1cl9wYXJhbXMuaWQ7XG4gMzM4Olx0XHRcdGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcy1cdTAwM2Vwcm90b2NvbCA9IG5kZXYtXHUwMDNlY3VyX3BhcmFtcy5wcm90b2NvbDtcbiAzMzk6XHRcdFx0Y29ubl9pbmZvLVx1MDAzZWNvbm5faWQgPSByc3AtXHUwMDNlY29ubl9pZDtcbiAzNDA6XHRcbiAzNDE6XHRcdFx0LyogTm90ZTogZGF0YV9leGNoYW5nZV9jYiBhbmQgZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0IG5lZWQgdG9cbiAzNDI6XHRcdFx0ICogYmUgc3BlY2lmeSBvdXQgb2YgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldFxuIDM0MzpcdFx0XHQgKi9cbiAzNDQ6XHRcbiAzNDU6XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWxpc3QpO1xuIDM0NjpcdFx0XHRsaXN0X2FkZChcdTAwMjZjb25uX2luZm8tXHUwMDNlbGlzdCwgXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbGlzdCk7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRcdGlmIChuZGV2LVx1MDAzZWN1cl9wYXJhbXMuaWQgPT0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZW5mY2VlX2lkKVxuIDM0OTpcdFx0XHRcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8gPSBjb25uX2luZm87XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MTMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCBzaXR1YXRpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlLCB0aGUgZGF0YSBpdCBoYW5kbGVzLCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJyb2FkZXIgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGZyYW1ld29yay4gTXkgZXhwZXJ0aXNlIGRlbWFuZHMgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBwYWNrZXQmIzM5O3Mgc3RydWN0dXJlIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBjb250ZW50LiBMZXQgbWUgZGlzc2VjdCB0aGlzIHRob3JvdWdobHksIHN0YXJ0aW5nIHdpdGggaXRzIHNwZWNpZmljIGZ1bmN0aW9uLCBhbmQgZm9sbG93IHRoYXQgd2l0aCBob3cgaXQgZ2V0cyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL3JzcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTA6XHRcbiAzNTE6XHRcdFx0Y29ubl9pbmZvLVx1MDAzZWNvbm5faWQgPSByc3AtXHUwMDNlY29ubl9pZDtcbiAzNTI6XHRcdFx0Y29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4gPSByc3AtXHUwMDNlbWF4X2N0cmxfcGt0X3BheWxvYWRfbGVuO1xuIDM1MzpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCwgcnNwLVx1MDAzZWNyZWRpdHNfY250KTtcbiAzNTQ6XHRcdH1cbiAzNTU6XHRcbiAzNTY6XHRmcmVlX2Nvbm5faW5mbzpcbiAzNTc6XHRcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19SRUpFQ1RFRClcbiAzNTg6XHRcdFx0ZGV2bV9rZnJlZShcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LCBjb25uX2luZm8pO1xuIDM1OTpcdGV4aXQ6XG4gMzYwOlx0XG4gMzYxOlx0XHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7XG4gMzYyOlx0fVxuIDM2MzpcdFxuIDM2NDpcdHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiAzNjU6XHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzNjY6XHR7XG4gMzY3Olx0XHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIDM2ODpcdFx0X191OCBzdGF0dXMgPSBza2ItXHUwMDNlZGF0YVswXTtcbiAzNjk6XHRcbiAzNzA6XHRcdHByX2RlYnVnKFwmIzM0O3N0YXR1cyAweCV4XFxuXCYjMzQ7LCBzdGF0dXMpO1xuIDM3MTpcdFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XG4gMzcyOlx0XHRcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldixcbiAzNzM6XHRcdFx0XHRcdFx0XHRcdCBuZGV2LVx1MDAzZWN1cl9jb25uX2lkKTtcbiAzNzQ6XHRcdFx0aWYgKGNvbm5faW5mbykge1xuIDM3NTpcdFx0XHRcdGxpc3RfZGVsKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0KTtcbiAzNzY6XHRcdFx0XHRpZiAoY29ubl9pbmZvID09IG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvKVxuIDM3NzpcdFx0XHRcdFx0bmRldi1cdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xuIDM3ODpcdFx0XHRcdGRldm1fa2ZyZWUoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgY29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zKTtcbiAzNzk6XHRcdFx0XHRkZXZtX2tmcmVlKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsIGNvbm5faW5mbyk7XG4gMzgwOlx0XHRcdH1cbiAzODE6XHRcdH1cbiAzODI6XHRcdG5jaV9yZXFfY29tcGxldGUobmRldiwgc3RhdHVzKTtcbiAzODM6XHR9XG4gMzg0Olx0XG4gMzg1Olx0dm9pZCBuY2lfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzODY6XHR7XG4gMzg3Olx0XHRfX3UxNiByc3Bfb3Bjb2RlID0gbmNpX29wY29kZShza2ItXHUwMDNlZGF0YSk7XG4gMzg4Olx0XG4gMzg5Olx0XHQvKiB3ZSBnb3QgYSByc3AsIHN0b3AgdGhlIGNtZCB0aW1lciAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjQ4CgkJCQkJCQlvdXRwdXQ6IDE0NwoJCQkJCQkJdGhvdWdodHM6IDg4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBLTVNBTiBOZWVkZWQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBjcnVjaWFsIGNoZWNrLiBCZWZvcmUsIHdlIGhhZCBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgY2FzdGluZyBgc2tiLSZndDtkYXRhYCB0byBhIHJlc3BvbnNlIHN0cnVjdCAoYHJzcGApIGFuZCB0aGVuIHJlYWRpbmcgZmllbGRzIGxpa2UgYGNvbm5faWRgLCBgbWF4X2N0cmxfcGt0X3BheWxvYWRfbGVuYCwgYW5kIGBjcmVkaXRzX2NudGAuIFRoZSBwcm9ibGVtIHdhcywgaWYgdGhlIGBza2ItJmd0O2xlbmAgKHRoZSBhY3R1YWwgcGFja2V0IGxlbmd0aCkgd2FzIHNtYWxsZXIgdGhhbiB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGF0IHJlc3BvbnNlIHN0cnVjdCwgd2Ugd2VyZSBwb3RlbnRpYWxseSByZWFkaW5nICpwYXN0KiB0aGUgZW5kIG9mIHRoZSBgc2tiLSZndDtkYXRhYCBidWZmZXIgLSBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIGEgY2xhc3NpYyBidWZmZXIgb3ZlcnJlYWQuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhhdCwgb3IgZXZlbiBLQVNBTiBzbGFiIE9PQiBpbiBtb3JlIHN1YnRsZSBjYXNlcy4KClRoZSBwYXRjaCYjMzk7cyBmaXggaXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBhZGRzIGEgc2l6ZSBjaGVjayAoYHNrYi0mZ3Q7bGVuICZsdDsgc2l6ZW9mKCpyc3ApYCkgdG8gZW5zdXJlIHRoZSByZXNwb25zZSBwYWNrZXQgaXMgbGFyZ2UgZW5vdWdoIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJlYWQgYW55IG9mIGl0cyBmaWVsZHMuIFNvLCBpbiBlZmZlY3QsIHdlJiMzOTtyZSBoYXJkZW5pbmcgdGhlIGNvZGUgYWdhaW5zdCBhIHNpbXBsZSBPT0IgcmVhZC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBmb3IgS01TQU46IGRvZXMgdGhpcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBBYnNvbHV0ZWx5IG5vdC4gVGhlIGBza2JgIGRhdGEgaXMgY29taW5nIGZyb20gdGhlIGRyaXZlciBvciBkZXZpY2UgLSBpdCYjMzk7cyBhbHJlYWR5IGZpbGxlZCB3aXRoIGRhdGEuIFJlYWRpbmcgcGFzdCB0aGUgbGVuZ3RoIGlzIHRoZSB2dWxuZXJhYmlsaXR5LCBub3QgYW4gdW5pbml0aWFsaXplZCB2YWx1ZS4KCkxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2U6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuCjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIGxhdGVyIHVuaW5pdGlhbGl6ZWQgcmVhZHM/IE5vcGUsIGp1c3QgdGhlIGJvdW5kcyBjaGVjay4KNC4gIEJvdW5kcyBjaGVja3MgdGhhdCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcz8gTm9wZSwgaXQgdGlnaHRlbnMgdGhlIGJvdW5kcy4KCkFjY29yZGluZyB0byB0aGUgcnVsZXMsIHdlIHNob3VsZG4mIzM5O3QgZXZlbiBjb25zaWRlciBLTVNBTiBpZiBhIGJ1ZyBjYW4gYmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIHdoaWNoIGlzIGRlZmluaXRlbHkgdGhlIGNhc2UgaGVyZS4gVGhpcyBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5LiBJdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbGwgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQsIG9yIGJvdW5kcy1jaGVja2VkIGZvciByZWFkcy4gSXQmIzM5O3MgYSBwcmV2ZW50YXRpdmUgbWVhc3VyZSBhZ2FpbnN0IGEgYnVmZmVyIG92ZXJyZWFkLCB3aGljaCBLQVNBTiB3b3VsZCByZWxpYWJseSBjYXRjaC4gTm8gS01TQU4gbmVlZGVkLgoKU28sIGxldCYjMzk7cyBmb3JtYWxpemUgdGhlIHJlc3BvbnNlOgoKKiAgICoqTmVlZHNLTVNBTjogZmFsc2UqKgoqICAgKipLTVNBTlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxlbmd0aCB2YWxpZGF0aW9uIGNoZWNrIChgc2tiLSZndDtsZW4gJmx0OyBzaXplb2YoKnJzcClgKSBpbiBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgYmVmb3JlIHJlYWRpbmcgcmVzcG9uc2UgZmllbGRzIGZyb20gYHNrYi0mZ3Q7ZGF0YWAuIFRoaXMgcHJldmVudHMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIChPT0Igb3ZlcnJlYWQpIG9uIHRoZSBzb2NrZXQgYnVmZmVyIChgc2tiYCkuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIHRyYWNrZWQgYW5kIGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdGFjayB2YXJpYWJsZXMsIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgc2ltcGx5IHByZXZlbnRzIHJlYWRpbmcgYmV5b25kIHRoZSBwYWNrZXQmIzM5O3MgYm91bmRhcmllcyBhbmQgZG9lcyBub3QgZXhwb3NlIG9yIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIEtNU0FOLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIHZhbGlkYXRpb24gY2hlY2sgKGBza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKnJzcClgKSBpbiBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCgpYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgc2tiLVx1MDAzZWRhdGFgIHdoZW4gcGFyc2luZyB0cnVuY2F0ZWQgTkNJIHJlc3BvbnNlIHBhY2tldHMuIE91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFyZSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGJ1Z3MgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIHZhbGlkYXRpb24gY2hlY2sgKGBza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKnJzcClgKSBpbiBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCgpYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgc2tiLVx1MDAzZWRhdGFgIHdoZW4gcGFyc2luZyB0cnVuY2F0ZWQgTkNJIHJlc3BvbnNlIHBhY2tldHMuIE91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFyZSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGJ1Z3MgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEyOjU1LjgxMDI5NTAzMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MzExMDQ5MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX05DSVwiLFxuICAgIFwiTkZDX1ZJUlRVQUxfTkNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldFwiLFxuICAgIFwibmNpX3JzcF9wYWNrZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggdmFsaWRhdGlvbiBjaGVjayAoYHNrYi1cXHUwMDNlbGVuIFxcdTAwM2Mgc2l6ZW9mKCpyc3ApYCkgaW4gYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoKWAgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIGZyb20gYHNrYi1cXHUwMDNlZGF0YWAgd2hlbiBwYXJzaW5nIHRydW5jYXRlZCBOQ0kgcmVzcG9uc2UgcGFja2V0cy4gT3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgYXJlIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgYnVncyBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIG9uIGluY29taW5nIE5DSSByZXNwb25zZSBwYWNrZXRzIGluIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHRocm91Z2ggdmlydHVhbCBOQ0kgZGV2aWNlcyAoQ09ORklHX05GQ19WSVJUVUFMX05DSSAvZGV2L3ZpcnR1YWxfbmNpKSBvciBlbXVsYXRlZCBVU0IgTkZDIGRldmljZXMsIGJvdGggb2Ygd2hpY2ggYXJlIHN1cHBvcnRlZCBhbmQgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTI6NTUuODEwMzAwMTYyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc1MzczOTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzAyOGRkYWU0ZjlmYjY2OThiZDUxNTdmNDBlOTQ3NmFjMjcxNDliNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCAxMiAxNzoxMjo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9yc3AuYyBiL25ldC9uZmMvbmNpL3JzcC5jXFxuaW5kZXggYjBhYjRmNWFjYmNlOC4uNzJiNzQ4ZjBiZTlmMiAxMDA2NDRcXG4tLS0gYS9uZXQvbmZjL25jaS9yc3AuY1xcbisrKyBiL25ldC9uZmMvbmNpL3JzcC5jXFxuQEAgLTMxMiw2ICszMTIsMTAgQEAgc3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4gXFx0cHJfZGVidWcoXFxcInN0YXR1cyAweCV4XFxcXG5cXFwiLCBzdGF0dXMpO1xcbiBcXG4gXFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XFxuK1xcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVvZigqcnNwKSkge1xcbitcXHRcXHRcXHRzdGF0dXMgPSBOQ0lfU1RBVFVTX1NZTlRBWF9FUlJPUjtcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXHRcXHR9XFxuIFxcdFxcdHJzcCA9IChzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwICopc2tiLVxcdTAwM2VkYXRhO1xcbiBcXG4gXFx0XFx0Y29ubl9pbmZvID0gZGV2bV9remFsbG9jKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEyOjU3LjI4NjM0NTI2OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzgyMDE0NTg5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0XCIsXG4gICAgXCJuY2lfcnNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgb24gaW5jb21pbmcgTkNJIHJlc3BvbnNlIHBhY2tldHMgaW4gbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCB2aXJ0dWFsIE5DSSBkZXZpY2VzIChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJIC9kZXYvdmlydHVhbF9uY2kpIG9yIGVtdWxhdGVkIFVTQiBORkMgZGV2aWNlcywgYm90aCBvZiB3aGljaCBhcmUgc3VwcG9ydGVkIGFuZCBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcwMjhkZGFlNGY5ZmI2Njk4YmQ1MTU3ZjQwZTk0NzZhYzI3MTQ5YjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxNzoxMjo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL3JzcC5jIGIvbmV0L25mYy9uY2kvcnNwLmNcbmluZGV4IGIwYWI0ZjVhY2JjZTguLjcyYjc0OGYwYmU5ZjIgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9yc3AuY1xuKysrIGIvbmV0L25mYy9uY2kvcnNwLmNcbkBAIC0zMTIsNiArMzEyLDEwIEBAIHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRwcl9kZWJ1ZyhcInN0YXR1cyAweCV4XFxuXCIsIHN0YXR1cyk7XG4gXG4gXHRpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfT0spIHtcbitcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZigqcnNwKSkge1xuK1x0XHRcdHN0YXR1cyA9IE5DSV9TVEFUVVNfU1lOVEFYX0VSUk9SO1xuK1x0XHRcdGdvdG8gZXhpdDtcbitcdFx0fVxuIFx0XHRyc3AgPSAoc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCAqKXNrYi1cdTAwM2VkYXRhO1xuIFxuIFx0XHRjb25uX2luZm8gPSBkZXZtX2t6YWxsb2MoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEyOjU3LjI4NjM0NjkwOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ4OTQ3ODk4NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgUGF0Y2gncyBTdWl0YWJpbGl0eSBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUuLi4gdGhlIHBhdGNoIGl0c2VsZiBpcyBhZGRpbmcgYSBzaXplIGNoZWNrIHRvIGBuZXQvbmZjL25jaS9yc3AuY2AuIFNwZWNpZmljYWxseSwgaXQgY2hlY2tzIGlmIGBza2ItXHUwMDNlbGVuYCBpcyBsZXNzIHRoYW4gYHNpemVvZigqcnNwKWAgYmVmb3JlIGFjY2Vzc2luZyB0aGUgYHJzcGAgc3RydWN0LiBUaGlzIGlzIGEgY2xhc3NpYyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBzcG90LCBhIG1pc3NpbmcgYm91bmRzIGNoZWNrLiBJZiB0aGUgcGFja2V0IHJlY2VpdmVkIGhhcyBpbnN1ZmZpY2llbnQgc2l6ZSwgYWNjZXNzaW5nIGBza2ItXHUwMDNlZGF0YWAgbWlnaHQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3IsIGluIGV4dHJlbWUgY2FzZXMsIGEgY3Jhc2guXG5cbk15IGluaXRpYWwgaHVuY2gsIGJhc2VkIHB1cmVseSBvbiB0aGlzIGRpZmYsIGlzIHRoYXQgaXQncyAqbGlrZWx5KiBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBNaXNzaW5nIGJvdW5kcyBjaGVja3MgYXJlIGEgZmF2b3JpdGUgcGxheWdyb3VuZCBmb3IgZnV6emVycyBsaWtlIHN5emthbGxlci5cblxuVG8gZ2V0IGEgYmV0dGVyIGdyaXAsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIGBuZXQvbmZjL25jaS9yc3AuY2Agd2l0aCBzb21ldGhpbmcgbGlrZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE5GQyAoTmVhciBGaWVsZCBDb21tdW5pY2F0aW9uKSBzdWJzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhpcyBwYXJ0aWN1bGFyIGZpbGUuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBhIGNyaXRpY2FsIGRhdGEgcGF0aCBvciBqdXN0IHNvbWUgcmFyZWx5LXVzZWQgZGVidWcgZnVuY3Rpb24uIElmIEkgY2FuIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgdXNlZCwgSSBjYW4gZXZhbHVhdGUgaG93IGdvb2Qgb2YgYSB0YXJnZXQgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzowMi4xODExMzkyNThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL25jaS9yc3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFxuIDMwMTpcXHRcXHRwcl9kZWJ1ZyhcXFwic3RhdHVzIDB4JXhcXFxcblxcXCIsIHN0YXR1cyk7XFxuIDMwMjpcXHRcXHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7XFxuIDMwMzpcXHR9XFxuIDMwNDpcXHRcXG4gMzA1OlxcdHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuIDMwNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzA3OlxcdHtcXG4gMzA4OlxcdFxcdF9fdTggc3RhdHVzID0gc2tiLVxcdTAwM2VkYXRhWzBdO1xcbiAzMDk6XFx0XFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbyA9IE5VTEw7XFxuIDMxMDpcXHRcXHRjb25zdCBzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwICpyc3A7XFxuIDMxMTpcXHRcXG4gMzEyOlxcdFxcdHByX2RlYnVnKFxcXCJzdGF0dXMgMHgleFxcXFxuXFxcIiwgc3RhdHVzKTtcXG4gMzEzOlxcdFxcbiAzMTQ6XFx0XFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XFxuIDMxNTpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBzaXplb2YoKnJzcCkpIHtcXG4gMzE2OlxcdFxcdFxcdFxcdHN0YXR1cyA9IE5DSV9TVEFUVVNfU1lOVEFYX0VSUk9SO1xcbiAzMTc6XFx0XFx0XFx0XFx0Z290byBleGl0O1xcbiAzMTg6XFx0XFx0XFx0fVxcbiAzMTk6XFx0XFx0XFx0cnNwID0gKHN0cnVjdCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3AgKilza2ItXFx1MDAzZWRhdGE7XFxuIDMyMDpcXHRcXG4gMzIxOlxcdFxcdFxcdGNvbm5faW5mbyA9IGRldm1fa3phbGxvYyhcXHUwMDI2bmRldi1cXHUwMDNlbmZjX2Rldi1cXHUwMDNlZGV2LFxcbiAzMjI6XFx0XFx0XFx0XFx0XFx0XFx0IHNpemVvZigqY29ubl9pbmZvKSwgR0ZQX0tFUk5FTCk7XFxuIDMyMzpcXHRcXHRcXHRpZiAoIWNvbm5faW5mbykge1xcbiAzMjQ6XFx0XFx0XFx0XFx0c3RhdHVzID0gTkNJX1NUQVRVU19SRUpFQ1RFRDtcXG4gMzI1OlxcdFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4gMzI2OlxcdFxcdFxcdH1cXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0XFx0Y29ubl9pbmZvLVxcdTAwM2VkZXN0X3BhcmFtcyA9IGRldm1fa3phbGxvYyhcXHUwMDI2bmRldi1cXHUwMDNlbmZjX2Rldi1cXHUwMDNlZGV2LFxcbiAzMjk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zKSxcXG4gMzMwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbiAzMzE6XFx0XFx0XFx0aWYgKCFjb25uX2luZm8tXFx1MDAzZWRlc3RfcGFyYW1zKSB7XFxuIDMzMjpcXHRcXHRcXHRcXHRzdGF0dXMgPSBOQ0lfU1RBVFVTX1JFSkVDVEVEO1xcbiAzMzM6XFx0XFx0XFx0XFx0Z290byBmcmVlX2Nvbm5faW5mbztcXG4gMzM0OlxcdFxcdFxcdH1cXG4gMzM1OlxcdFxcbiAzMzY6XFx0XFx0XFx0Y29ubl9pbmZvLVxcdTAwM2VkZXN0X3R5cGUgPSBuZGV2LVxcdTAwM2VjdXJfZGVzdF90eXBlO1xcbiAzMzc6XFx0XFx0XFx0Y29ubl9pbmZvLVxcdTAwM2VkZXN0X3BhcmFtcy1cXHUwMDNlaWQgPSBuZGV2LVxcdTAwM2VjdXJfcGFyYW1zLmlkO1xcbiAzMzg6XFx0XFx0XFx0Y29ubl9pbmZvLVxcdTAwM2VkZXN0X3BhcmFtcy1cXHUwMDNlcHJvdG9jb2wgPSBuZGV2LVxcdTAwM2VjdXJfcGFyYW1zLnByb3RvY29sO1xcbiAzMzk6XFx0XFx0XFx0Y29ubl9pbmZvLVxcdTAwM2Vjb25uX2lkID0gcnNwLVxcdTAwM2Vjb25uX2lkO1xcbiAzNDA6XFx0XFxuIDM0MTpcXHRcXHRcXHQvKiBOb3RlOiBkYXRhX2V4Y2hhbmdlX2NiIGFuZCBkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgbmVlZCB0b1xcbiAzNDI6XFx0XFx0XFx0ICogYmUgc3BlY2lmeSBvdXQgb2YgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldFxcbiAzNDM6XFx0XFx0XFx0ICovXFxuIDM0NDpcXHRcXG4gMzQ1OlxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWxpc3QpO1xcbiAzNDY6XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlbGlzdCwgXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19saXN0KTtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0XFx0aWYgKG5kZXYtXFx1MDAzZWN1cl9wYXJhbXMuaWQgPT0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlbmZjZWVfaWQpXFxuIDM0OTpcXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm8gPSBjb25uX2luZm87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjAyLjE4MTIwNzkxOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxNDI5MzYwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBOQ0kgUGFja2V0IEhhbmRsaW5nKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgaXMgdXNlZC4gSSdtIHRoaW5raW5nIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uIHNwZWNpZmljYWxseSwgYW5kIHRoZW4sIG1vcmUgYnJvYWRseSwgbWFwIG91dCB0aGUgZW50aXJlIHJlY2VpdmUgYW5kIGRpc3BhdGNoIHByb2Nlc3MgZm9yIE5DSSBwYWNrZXRzIHdpdGhpbiB0aGlzIHN5c3RlbS4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGF0YSBmbG93IGZyb20gdGhlIHBoeXNpY2FsIGxheWVyIHVwIHRvIHRoZSBwb2ludCB3aGVyZSB0aGlzIHJlc3BvbnNlIHBhY2tldCBpcyB1bHRpbWF0ZWx5IGhhbmRsZWQuIEknbSBhc3N1bWluZyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FsbCBpcyBhIGtleSBwaWVjZSBpbiB0aGUgY29ubmVjdGlvbiBzZXR1cCwgd2hpY2ggSSdsbCBuZWVkIHRvIGNvbmZpcm0sIGJ1dCBJJ2xsIGZvY3VzIG9uIGhvdyB0aGUgcGFja2V0IGlzIHJlY2VpdmVkLCB0aGUgc3Vic2VxdWVudCBwcm9jZXNzaW5nIGl0IHVuZGVyZ29lcywgYW5kIGhvdyBpdCBpcyByb3V0ZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXIuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBmb3IgcGFja2V0IGlkZW50aWZpY2F0aW9uLCB0aGUgcm9sZSBvZiBhbnkgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgcXVldWluZyBvciBidWZmZXJpbmcgdXNlZC4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHBvaW50cyBvZiBlcnJvciwgYW5kIGFueSBhcmVhcyB0aGF0IG1pZ2h0IGJlbmVmaXQgZnJvbSBvcHRpbWl6YXRpb24sIGdpdmVuIG15IHBhc3QgZXhwZXJpZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MTMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjA1LjMyNDE0NTkzM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU5MTIyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvbmNpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbmNpL3JzcC5jPTI5Nj1zdGF0aWMgdm9pZCBuY2lfbmZjZWVfbW9kZV9zZXRfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jLTMwNC1cXG5uZXQvbmZjL25jaS9yc3AuYzozMDU6c3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG5uZXQvbmZjL25jaS9yc3AuYy0zMDYtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL25jaS9yc3AuYy0zNDEtXFx0XFx0LyogTm90ZTogZGF0YV9leGNoYW5nZV9jYiBhbmQgZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0IG5lZWQgdG9cXG5uZXQvbmZjL25jaS9yc3AuYzozNDI6XFx0XFx0ICogYmUgc3BlY2lmeSBvdXQgb2YgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldFxcbm5ldC9uZmMvbmNpL3JzcC5jLTM0My1cXHRcXHQgKi9cXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jPTM4NT12b2lkIG5jaV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9uY2kvcnNwLmMtNDIzLVxcdGNhc2UgTkNJX09QX0NPUkVfQ09OTl9DUkVBVEVfUlNQOlxcbm5ldC9uZmMvbmNpL3JzcC5jOjQyNDpcXHRcXHRuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KG5kZXYsIHNrYik7XFxubmV0L25mYy9uY2kvcnNwLmMtNDI1LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzowNS4zNzI3NDE5NzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODI4MjYxMjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbmNpX3JzcF9wYWNrZXRgIENhbGwgU2l0ZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIGBuY2lfcnNwX3BhY2tldGAuIFRpbWUgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBpZGVudGlmeSB0aGUgZGlmZmVyZW50IGNvbnRleHRzIGluIHdoaWNoIGl0J3MgYmVpbmcgaW52b2tlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHJlc3BvbnNlIHBhY2tldHMgYXJlIGJlaW5nIGhhbmRsZWQsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIHN0YXJ0IHRvIHJlYXNvbiBhYm91dCBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6YXRpb25zLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhlcmUncyBhbnkgdW51c3VhbCBvciB1bmV4cGVjdGVkIGNvbnRyb2wgZmxvdyB3aGVuIHRoYXQgcm91dGluZSBpcyBlbnRlcmVkLiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGRhdGEgZGVwZW5kZW5jaWVzPyBMZXQncyB0cmFjZSBpdCBhbmQgc2VlIHdoZXJlIHRoZSBkYXRhIGNvbWVzIGZyb20gYW5kIHdoZXJlIGl0IGdvZXMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzowNy4yMDEwMDUzNjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1MDE5ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNpX3JzcF9wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9uY2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvY29yZS5jPTE1NTk9c3RhdGljIHZvaWQgbmNpX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTE1NzgtXFx0XFx0Y2FzZSBOQ0lfTVRfUlNQX1BLVDpcXG5uZXQvbmZjL25jaS9jb3JlLmM6MTU3OTpcXHRcXHRcXHRuY2lfcnNwX3BhY2tldChuZGV2LCBza2IpO1xcbm5ldC9uZmMvbmNpL2NvcmUuYy0xNTgwLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25mYy9uY2kvcnNwLmM9MzY0PXN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jLTM4NC1cXG5uZXQvbmZjL25jaS9yc3AuYzozODU6dm9pZCBuY2lfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbmZjL25jaS9yc3AuYy0zODYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzowNy4yNDk1MTI5MDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTg3MjA2NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gUmVhY2hpbmcgTkNJIGluIGEgRnV6emluZyBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGV0aGVyIHdlIGNhbiBhY3R1YWxseSBnZXQgYXQgdGhlIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBmcm9tIHdpdGhpbiBzdGFuZGFyZCBmdXp6aW5nIHNldHVwcywgbGlrZSBTeXprYWxsZXIuIE15IGd1dCB0ZWxscyBtZSBpdCAqc2hvdWxkKiBiZSBwb3NzaWJsZSwgYnV0IHRoZSBzcGVjaWZpY3MgYXJlIGdvaW5nIHRvIG1hdHRlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIE5GQy9OQ0kgZGV2aWNlcyBhcmUgZW11bGF0ZWQgb3IgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZS5cblxuRmlyc3QsIGxldCdzIGV4cGxvcmUgaWYgdGhlcmUgYXJlIGFscmVhZHkgdmlydHVhbCByZXByZXNlbnRhdGlvbnMgb2YgTkZDL05DSS4gSSdtIHRoaW5raW5nIGFsb25nIHRoZSBsaW5lcyBvZiBzb21ldGhpbmcgbGlrZSBcInZpcnR1YWxfbmZjLFwiIFwicmF3IG5jaSxcIiBvciBtYXliZSBldmVuIGEgbW9yZSBkZXRhaWxlZCBcInNpbXVsYXRlZCBuZmMuXCIgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBkb2N1bWVudGF0aW9uIGFuZCBzb3VyY2UgY29kZSB0byBzZWUgd2hhdCdzIG91dCB0aGVyZS5cblxuVG8gc3RhcnQsIEknbGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0J3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9uZmNgIGFuZCBhbHNvIGNoZWNrIGBuZXQvbmZjYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgd2hlcmUgYW55IHJlbGV2YW50IGVtdWxhdGlvbiBvciBkcml2ZXIgc3VwcG9ydCB3b3VsZCByZXNpZGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGdyb3VuZCB0cnV0aCBvbiB0aGUgdmlydHVhbCBORkMvTkNJIG9wdGlvbnMsIGlmIHRoZXkgZXZlbiBleGlzdC4gRnJvbSB0aGVyZSwgSSdsbCBoYXZlIGEgYmV0dGVyIHBpY3R1cmUgb2YgaG93IHJlYWNoYWJsZSB0aGVzZSBpbnRlcmZhY2VzIGFyZSB2aWEgU3l6a2FsbGVyJ3Mgc3RhbmRhcmQgZGV2aWNlIG1vZGVscywgd2hldGhlciBpdCBiZSB2aXJ0dWFsIGRldmljZXMsIFVTQiwgb3IgcG90ZW50aWFsbHkgZXZlbiB2aXJ0dWFsIE5GQyBpbnRlcmZhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTUyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6MDkuODM2NzIzNDEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM0NjkwMzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5jaV9yZWN2X2ZyYW1lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmZjL2ZkcC9pMmMuYz0yMjI9c3RhdGljIGlycXJldHVybl90IGZkcF9uY2lfaTJjX2lycV90aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqcGh5X2lkKVxcbi0tXFxuZHJpdmVycy9uZmMvZmRwL2kyYy5jLTIzOC1cXHRpZiAoc2tiICE9IE5VTEwpXFxuZHJpdmVycy9uZmMvZmRwL2kyYy5jOjIzOTpcXHRcXHRuY2lfcmVjdl9mcmFtZShwaHktXFx1MDAzZW5kZXYsIHNrYik7XFxuZHJpdmVycy9uZmMvZmRwL2kyYy5jLTI0MC1cXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvaTJjLmM9NjQ9c3RhdGljIGlycXJldHVybl90IG5mY21ydmxfaTJjX2ludF9pcnFfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKmRydl9kYXRhX3B0cilcXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvaTJjLmMtODYtXFx0ZGVmYXVsdDpcXG5kcml2ZXJzL25mYy9uZmNtcnZsL2kyYy5jOjg3OlxcdFxcdGlmIChuZmNtcnZsX25jaV9yZWN2X2ZyYW1lKGRydl9kYXRhLVxcdTAwM2Vwcml2LCBza2IpIFxcdTAwM2MgMClcXG5kcml2ZXJzL25mYy9uZmNtcnZsL2kyYy5jLTg4LVxcdFxcdFxcdG5mY19lcnIoXFx1MDAyNmRydl9kYXRhLVxcdTAwM2VpMmMtXFx1MDAzZWRldiwgXFxcImNvcnJ1cHRlZCBSWCBwYWNrZXRcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmM9MTkyPUVYUE9SVF9TWU1CT0xfR1BMKG5mY21ydmxfbmNpX3VucmVnaXN0ZXJfZGV2KTtcXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0xOTMtXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmM6MTk0OmludCBuZmNtcnZsX25jaV9yZWN2X2ZyYW1lKHN0cnVjdCBuZmNtcnZsX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmMtMTk1LXtcXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvbWFpbi5jLTIxMy1cXHRpZiAodGVzdF9iaXQoTkZDTVJWTF9OQ0lfUlVOTklORywgXFx1MDAyNnByaXYtXFx1MDAzZWZsYWdzKSlcXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYzoyMTQ6XFx0XFx0bmNpX3JlY3ZfZnJhbWUocHJpdi1cXHUwMDNlbmRldiwgc2tiKTtcXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0yMTUtXFx0ZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0yMjItfVxcbmRyaXZlcnMvbmZjL25mY21ydmwvbWFpbi5jOjIyMzpFWFBPUlRfU1lNQk9MX0dQTChuZmNtcnZsX25jaV9yZWN2X2ZyYW1lKTtcXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0yMjQtXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNtcnZsL25mY21ydmwuaD0xMTk9dm9pZCBuZmNtcnZsX25jaV91bnJlZ2lzdGVyX2RldihzdHJ1Y3QgbmZjbXJ2bF9wcml2YXRlICpwcml2KTtcXG5kcml2ZXJzL25mYy9uZmNtcnZsL25mY21ydmwuaDoxMjA6aW50IG5mY21ydmxfbmNpX3JlY3ZfZnJhbWUoc3RydWN0IG5mY21ydmxfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9uZmNtcnZsLmgtMTIxLXN0cnVjdCBuZmNtcnZsX3ByaXZhdGUgKm5mY21ydmxfbmNpX3JlZ2lzdGVyX2RldihlbnVtIG5mY21ydmxfcGh5IHBoeSxcXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvc3BpLmM9Mjc9c3RhdGljIGlycXJldHVybl90IG5mY21ydmxfc3BpX2ludF9pcnFfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKmRydl9kYXRhX3B0cilcXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvc3BpLmMtNDgtXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9zcGkuYzo0OTpcXHRpZiAobmZjbXJ2bF9uY2lfcmVjdl9mcmFtZShkcnZfZGF0YS1cXHUwMDNlcHJpdiwgc2tiKSBcXHUwMDNjIDApXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9zcGkuYy01MC1cXHRcXHRuZmNfZXJyKFxcdTAwMjZkcnZfZGF0YS1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsIFxcXCJjb3JydXB0ZWQgUlggcGFja2V0XFxcIik7XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNtcnZsL3VhcnQuYz0xNTI9c3RhdGljIGludCBuZmNtcnZsX25jaV91YXJ0X3JlY3Yoc3RydWN0IG5jaV91YXJ0ICpudSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25mYy9uZmNtcnZsL3VhcnQuYy0xNTMte1xcbmRyaXZlcnMvbmZjL25mY21ydmwvdWFydC5jOjE1NDpcXHRyZXR1cm4gbmZjbXJ2bF9uY2lfcmVjdl9mcmFtZSgoc3RydWN0IG5mY21ydmxfcHJpdmF0ZSAqKW51LVxcdTAwM2VkcnZfZGF0YSxcXG5kcml2ZXJzL25mYy9uZmNtcnZsL3VhcnQuYy0xNTUtXFx0XFx0XFx0XFx0ICAgICAgc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvdXNiLmM9NTY9c3RhdGljIHZvaWQgbmZjbXJ2bF9idWxrX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvdXNiLmMtNzYtXFx0XFx0XFx0XFx0ICAgICB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGgpO1xcbmRyaXZlcnMvbmZjL25mY21ydmwvdXNiLmM6Nzc6XFx0XFx0XFx0aWYgKG5mY21ydmxfbmNpX3JlY3ZfZnJhbWUoZHJ2X2RhdGEtXFx1MDAzZXByaXYsIHNrYikgXFx1MDAzYyAwKVxcbmRyaXZlcnMvbmZjL25mY21ydmwvdXNiLmMtNzgtXFx0XFx0XFx0XFx0bmZjX2VycihcXHUwMDI2ZHJ2X2RhdGEtXFx1MDAzZXVkZXYtXFx1MDAzZWRldixcXG4tLVxcbmRyaXZlcnMvbmZjL254cC1uY2kvaTJjLmM9MTkwPXN0YXRpYyBpcnFyZXR1cm5fdCBueHBfbmNpX2kyY19pcnFfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKnBoeV9pZClcXG4tLVxcbmRyaXZlcnMvbmZjL254cC1uY2kvaTJjLmMtMjQ4LVxcdGNhc2UgTlhQX05DSV9NT0RFX05DSTpcXG5kcml2ZXJzL25mYy9ueHAtbmNpL2kyYy5jOjI0OTpcXHRcXHRuY2lfcmVjdl9mcmFtZShwaHktXFx1MDAzZW5kZXYsIHNrYik7XFxuZHJpdmVycy9uZmMvbnhwLW5jaS9pMmMuYy0yNTAtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYz0yMTA9aW50IHMzZndybjVfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jLTIxNC1cXHRjYXNlIFMzRldSTjVfTU9ERV9OQ0k6XFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM6MjE1OlxcdFxcdHJldHVybiBuY2lfcmVjdl9mcmFtZShuZGV2LCBza2IpO1xcbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jLTIxNi1cXHRjYXNlIFMzRldSTjVfTU9ERV9GVzpcXG4tLVxcbmRyaXZlcnMvbmZjL3N0LW5jaS9uZGxjLmM9MTQ3PXN0YXRpYyB2b2lkIGxsdF9uZGxjX3Jjdl9xdWV1ZShzdHJ1Y3QgbGx0X25kbGMgKm5kbGMpXFxuLS1cXG5kcml2ZXJzL25mYy9zdC1uY2kvbmRsYy5jLTE4OC1cXHRcXHR9IGVsc2UgaWYgKChwY2IgXFx1MDAyNiBQQ0JfVFlQRV9NQVNLKSA9PSBQQ0JfVFlQRV9EQVRBRlJBTUUpIHtcXG5kcml2ZXJzL25mYy9zdC1uY2kvbmRsYy5jOjE4OTpcXHRcXHRcXHRuY2lfcmVjdl9mcmFtZShuZGxjLVxcdTAwM2VuZGV2LCBza2IpO1xcbmRyaXZlcnMvbmZjL3N0LW5jaS9uZGxjLmMtMTkwLVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jPTExMz1zdGF0aWMgc3NpemVfdCB2aXJ0dWFsX25jaWRldl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTI4LVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTI5OlxcdG5jaV9yZWN2X2ZyYW1lKHZkZXYtXFx1MDAzZW5kZXYsIHNrYik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzAtXFx0cmV0dXJuIGNvdW50O1xcbi0tXFxuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmg9MjkxPWludCBuY2lfY29yZV9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KTtcXG5pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaC0yOTItXFxuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmg6MjkzOmludCBuY2lfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmgtMjk0LWludCBuY2lfc2VuZF9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9MTM0Mz1FWFBPUlRfU1lNQk9MKG5jaV91bnJlZ2lzdGVyX2RldmljZSk7XFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTM0NS0vKipcXG5uZXQvbmZjL25jaS9jb3JlLmM6MTM0NjogKiBuY2lfcmVjdl9mcmFtZSAtIHJlY2VpdmUgZnJhbWUgZnJvbSBOQ0kgZHJpdmVyc1xcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMzQ3LSAqXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTM1MC0gKi9cXG5uZXQvbmZjL25jaS9jb3JlLmM6MTM1MTppbnQgbmNpX3JlY3ZfZnJhbWUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L25mYy9uY2kvY29yZS5jLTEzNTIte1xcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTEzNjYtfVxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMzY3OkVYUE9SVF9TWU1CT0wobmNpX3JlY3ZfZnJhbWUpO1xcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMzY4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzoxMS41NzE0MjA2NzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzcxNjE0MTAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBOQ0kgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBOQ0kgZnV6emluZy4gQmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlLCBJJ3ZlIGdvdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBleGFtaW5lIGBkcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jYCwgdGhhdCdzIHRoZSBvYnZpb3VzIGZpcnN0IHN0b3AuIEl0IGxvb2tzIGxpa2UgdGhpcyBkcml2ZXIgbGV0cyB1c2Vyc3BhY2UgaW5qZWN0IE5DSSBmcmFtZXMgZGlyZWN0bHkuIFNwZWNpZmljYWxseSwgYG5jaV9yZWN2X2ZyYW1lKHZkZXYtXHUwMDNlbmRldiwgc2tiKTtgIHdpdGhpbiBgdmlydHVhbF9uY2lkZXZfd3JpdGVgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZGlzc2VjdC4gVGhhdCBzY3JlYW1zIHZ1bG5lcmFiaWxpdHkgc3VyZmFjZSB0byBtZS5cblxuSSBhbHNvIHNob3VsZCBsb29rIGF0IGBkcml2ZXJzL25mYy9uZmNtcnZsL3VzYi5jYCwgYmVjYXVzZSB0aGUgVVNCIGVtdWxhdGlvbiByb3V0ZSBjb3VsZCBiZSBhbm90aGVyIGFuZ2xlIHRvIGV4cGxvaXQuIEkgcmVtZW1iZXIgc3l6a2FsbGVy4oCZcyBVU0IgZ2FkZ2V0IGFuZCBVU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcywgYW5kIHRoYXQgc3VnZ2VzdHMgYW5vdGhlciBwb3RlbnRpYWwgd2F5IHRvIGluamVjdCBOQ0kgZGF0YS5cblxuVGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgc3VwcG9ydHMgYHZpcnR1YWxfbmNpZGV2YCBkaXJlY3RseSwgYWxvbmcgd2l0aCBuZXRsaW5rIGFuZCByYXctZ2FkZ2V0IG1ldGhvZHMsIGNvbmZpcm1zIG15IGluaXRpYWwgdGhvdWdodC4gU28sIGl0J3MgYmFjayB0byBgdmlydHVhbF9uY2lkZXYuY2AgdG8gc2VlIHdoYXQga2luZCBvZiBkYW1hZ2UgY2FuIGJlIGRvbmUgYW5kIHVuZGVyc3RhbmQgaWYgc3l6a2FsbGVyIGlzIHRoZSBiZXN0IG9wdGlvbiBmb3IgdGhpcyB0eXBlIG9mIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6MTUuMjg3NTY0NDAyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBWaXJ0dWFsIE5DSSBkZXZpY2Ugc2ltdWxhdGlvbiBkcml2ZXJcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU2Ftc3VuZyBFbGVjdHJvbmljc1xcbiAgIDY6XFx0ICogQm9uZ3N1IEplb24gXFx1MDAzY2JvbmdzdS5qZW9uQHNhbXN1bmcuY29tXFx1MDAzZVxcbiAgIDc6XFx0ICovXFxuICAgODpcXHRcXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9taXNjZGV2aWNlLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC93YWl0LmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25mYy9uY2lfY29yZS5oXFx1MDAzZVxcbiAgMTU6XFx0XFxuICAxNjpcXHQjZGVmaW5lIElPQ1RMX0dFVF9OQ0lERVZfSURYICAgIDBcXG4gIDE3OlxcdCNkZWZpbmUgVklSVFVBTF9ORkNfUFJPVE9DT0xTXFx0KE5GQ19QUk9UT19KRVdFTF9NQVNLIHwgXFxcXFxcbiAgMTg6XFx0XFx0XFx0XFx0XFx0IE5GQ19QUk9UT19NSUZBUkVfTUFTSyB8IFxcXFxcXG4gIDE5OlxcdFxcdFxcdFxcdFxcdCBORkNfUFJPVE9fRkVMSUNBX01BU0sgfCBcXFxcXFxuICAyMDpcXHRcXHRcXHRcXHRcXHQgTkZDX1BST1RPX0lTTzE0NDQzX01BU0sgfCBcXFxcXFxuICAyMTpcXHRcXHRcXHRcXHRcXHQgTkZDX1BST1RPX0lTTzE0NDQzX0JfTUFTSyB8IFxcXFxcXG4gIDIyOlxcdFxcdFxcdFxcdFxcdCBORkNfUFJPVE9fSVNPMTU2OTNfTUFTSylcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiB7XFxuICAyNTpcXHRcXHRzdHJ1Y3QgbmNpX2RldiAqbmRldjtcXG4gIDI2OlxcdFxcdHN0cnVjdCBtdXRleCBtdHg7XFxuICAyNzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2VuZF9idWZmO1xcbiAgMjg6XFx0XFx0c3RydWN0IHdhaXRfcXVldWVfaGVhZCB3cTtcXG4gIDI5OlxcdFxcdGJvb2wgcnVubmluZztcXG4gIDMwOlxcdH07XFxuICAzMTpcXHRcXG4gIDMyOlxcdHN0YXRpYyBpbnQgdmlydHVhbF9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4gIDMzOlxcdHtcXG4gIDM0OlxcdFxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdHZkZXYtXFx1MDAzZXJ1bm5pbmcgPSB0cnVlO1xcbiAgMzc6XFx0XFx0cmV0dXJuIDA7XFxuICAzODpcXHR9XFxuICAzOTpcXHRcXG4gIDQwOlxcdHN0YXRpYyBpbnQgdmlydHVhbF9uY2lfY2xvc2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuICA0MTpcXHR7XFxuICA0MjpcXHRcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtdHgpO1xcbiAgNDU6XFx0XFx0a2ZyZWVfc2tiKHZkZXYtXFx1MDAzZXNlbmRfYnVmZik7XFxuICA0NjpcXHRcXHR2ZGV2LVxcdTAwM2VzZW5kX2J1ZmYgPSBOVUxMO1xcbiAgNDc6XFx0XFx0dmRldi1cXHUwMDNlcnVubmluZyA9IGZhbHNlO1xcbiAgNDg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtdHgpO1xcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHRyZXR1cm4gMDtcXG4gIDUxOlxcdH1cXG4gIDUyOlxcdFxcbiAgNTM6XFx0c3RhdGljIGludCB2aXJ0dWFsX25jaV9zZW5kKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgNTQ6XFx0e1xcbiAgNTU6XFx0XFx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldiA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dmRldi1cXHUwMDNlbXR4KTtcXG4gIDU4OlxcdFxcdGlmICh2ZGV2LVxcdTAwM2VzZW5kX2J1ZmYgfHwgIXZkZXYtXFx1MDAzZXJ1bm5pbmcpIHtcXG4gIDU5OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dmRldi1cXHUwMDNlbXR4KTtcXG4gIDYwOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzoxNS4yODc3NzIzNDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTc4MjQ1MjIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2NvbmZpZyBEaXZlOiBgdmlydHVhbF9uY2lkZXZgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYHZpcnR1YWxfbmNpZGV2YCBLY29uZmlnLiBJIHdhbnQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJcyB0aGlzIGEgc3RhbmRhbG9uZSBtb2R1bGUsIG9yIGRvZXMgaXQgcmVseSBvbiBzb21lIG90aGVyIGNvcmUgbmV0d29yayBkZXZpY2UgZHJpdmVycz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmZsaWN0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YsIHBlcmhhcHMgd2l0aCBvdGhlciB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlcz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2sgLSB3aGF0IHByb2JsZW0gaXMgdGhpcyBwYXJ0aWN1bGFyIHZpcnR1YWwgZGV2aWNlIHNvbHZpbmcsIGFuZCBob3cgZG9lcyBpdCBpbnRlcmZhY2Ugd2l0aCB0aGUgY29yZSBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlPyBMZXQncyBjaGVjayB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIHN5bWJvbHMgdG8gcGlucG9pbnQgaXRzIHJvbGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBiZWZvcmUgSSBnZXQgaW50byB0aGUgZGV0YWlscyBvZiBhbnkgcmVsYXRlZCBjb2RlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NTYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjE3LjA3MDIyNzU5MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2ODgwNzIwNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVklSVFVBTF9OQ0lERVZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjE4LjYzOTA0NDM2NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzE3NDA4NTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTkZDIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIE5GQyBkcml2ZXIgYnVpbGQgcHJvY2VzcyBhbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBnZXQgbXkgYmVhcmluZ3MgYW5kIGxvb2sgYXQgdGhlIGtleSBmaWxlcyB0aGF0IGRpY3RhdGUgdGhlIGJ1aWxkIHByb2Nlc3MuIEknbGwgbmVlZCB0byBleGFtaW5lIGBkcml2ZXJzL25mYy9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE5GQyBkcml2ZXIgbW9kdWxlcyBhcmUgY29tcGlsZWQgYW5kIGxpbmtlZC4gVGhpcyB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgZGVwZW5kZW5jaWVzLCBzb3VyY2UgZmlsZXMsIGFuZCBjb21waWxhdGlvbiBmbGFncyBzcGVjaWZpYyB0byBORkMuIFRoZW4sIEkgKm11c3QqIGxvb2sgYXQgYGRyaXZlcnMvbmZjL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBORkMgZHJpdmVyIGFyZSBkZWZpbmVkLiBUaGlzIHdpbGwgcmV2ZWFsIHRoZSB2YXJpb3VzIGZlYXR1cmVzIHRoYXQgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIGFuZCB0aGUgb3ZlcmFsbCBjb25maWd1cmFiaWxpdHkgb2YgdGhlIE5GQyBzdWJzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgdGhlIGBLY29uZmlnYCBvcHRpb25zIGlzIGNydWNpYWwgZm9yIHRhaWxvcmluZyB0aGUgTkZDIGRyaXZlciB0byBhIHNwZWNpZmljIGhhcmR3YXJlIG9yIHVzZSBjYXNlLiBUaGVzZSB0d28gZmlsZXMgYXJlIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjY4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6MjAuOTU2NDU1MzExWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcxODcyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0dWFsX25jaWRldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfTkZDX1NUOTVIRilcXHQrPSBzdDk1aGYvXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX05GQ19WSVJUVUFMX05DSSlcXHQrPSB2aXJ0dWFsX25jaWRldi5vXFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jPTc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmNpX29wcyB2aXJ0dWFsX25jaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTgxLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6ODI6c3RhdGljIHNzaXplX3QgdmlydHVhbF9uY2lkZXZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTgzLVxcdFxcdFxcdFxcdCAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTItXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxMTM6c3RhdGljIHNzaXplX3QgdmlydHVhbF9uY2lkZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTQtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzMi1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjEzMzpzdGF0aWMgaW50IHZpcnR1YWxfbmNpZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzQte1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjMtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNjQ6c3RhdGljIGludCB2aXJ0dWFsX25jaWRldl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE2NS17XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3NS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE3NjpzdGF0aWMgbG9uZyB2aXJ0dWFsX25jaWRldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3Ny1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5MS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5MjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aXJ0dWFsX25jaWRldl9mb3BzID0ge1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTkzLVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk0OlxcdC5yZWFkID0gdmlydHVhbF9uY2lkZXZfcmVhZCxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NTpcXHQud3JpdGUgPSB2aXJ0dWFsX25jaWRldl93cml0ZSxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NjpcXHQub3BlbiA9IHZpcnR1YWxfbmNpZGV2X29wZW4sXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTc6XFx0LnJlbGVhc2UgPSB2aXJ0dWFsX25jaWRldl9jbG9zZSxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5ODpcXHQudW5sb2NrZWRfaW9jdGwgPSB2aXJ0dWFsX25jaWRldl9pb2N0bFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTk5LX07XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jPTIwMT1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbWlzY2RldiA9IHtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjAzLVxcdC5uYW1lID0gXFxcInZpcnR1YWxfbmNpXFxcIixcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjIwNDpcXHQuZm9wcyA9IFxcdTAwMjZ2aXJ0dWFsX25jaWRldl9mb3BzLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjA1LVxcdC5tb2RlID0gMDYwMCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6MjEuMDAzMTc4Nzk0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NjI0OTM1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIE5GQyBWaXJ0dWFsIE5DSSBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBzbyBgTkZDX1ZJUlRVQUxfTkNJYOKApiB0aGF0J3MgZ290IHRvIGJlIHRoZSB2aXJ0dWFsIGRldmljZSBkcml2ZXIgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBOQ0kgKE5GQyBDb250cm9sbGVyIEludGVyZmFjZSksIHJpZ2h0PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGF0IGFuZCBnZXQgYSBsYXkgb2YgdGhlIGxhbmQsIHNvIGxldCdzIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgYENPTkZJR19ORkNfTkNJYCBhbmQgc2VlIHdoYXQgZWxzZSBpcyByZWxhdGVkIGluIGBuZXQvbmZjL0tjb25maWdgLiBJJ2xsIHdhbnQgdG8gY2hlY2sgYW55IGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsZXZhbnQgb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3VyIG9mIHRoaXMgdmlydHVhbCBkZXZpY2UuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY29uZmlndXJhdGlvbiBkZXRhaWxzIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZHJpdmVyIGlzIGFyY2hpdGVjdGVkIGFuZCB3aGF0J3MgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzoyMi45NjU2NzQ5MjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTM1NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GQ19OQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX05GQykgKz0gbmZjLm9cXG5uZXQvbmZjL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX05GQ19OQ0kpICs9IG5jaS9cXG5uZXQvbmZjL01ha2VmaWxlLTgtb2JqLSQoQ09ORklHX05GQ19IQ0kpICs9IGhjaS9cXG4tLVxcbm5ldC9uZmMvbmNpL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbmZjL25jaS9LY29uZmlnOjI6Y29uZmlnIE5GQ19OQ0lcXG5uZXQvbmZjL25jaS9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBORkNcXG4tLVxcbm5ldC9uZmMvbmNpL0tjb25maWctMTItXFxubmV0L25mYy9uY2kvS2NvbmZpZzoxMzpjb25maWcgTkZDX05DSV9TUElcXG5uZXQvbmZjL25jaS9LY29uZmlnOjE0OlxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBTUElcXG5uZXQvbmZjL25jaS9LY29uZmlnLTE1LVxcdHNlbGVjdCBDUkNfQ0NJVFRcXG4tLVxcbm5ldC9uZmMvbmNpL0tjb25maWctMjMtXFxubmV0L25mYy9uY2kvS2NvbmZpZzoyNDpjb25maWcgTkZDX05DSV9VQVJUXFxubmV0L25mYy9uY2kvS2NvbmZpZzoyNTpcXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgVFRZXFxubmV0L25mYy9uY2kvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiTkNJIG92ZXIgVUFSVCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25mYy9uY2kvTWFrZWZpbGUtNS1cXG5uZXQvbmZjL25jaS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19ORkNfTkNJKSArPSBuY2kub1xcbm5ldC9uZmMvbmNpL01ha2VmaWxlLTctXFxuLS1cXG5uZXQvbmZjL25jaS9NYWtlZmlsZT0xMD1uY2lfc3BpLXkgKz0gc3BpLm9cXG5uZXQvbmZjL25jaS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfTkZDX05DSV9TUEkpICs9IG5jaV9zcGkub1xcbm5ldC9uZmMvbmNpL01ha2VmaWxlLTEyLVxcbm5ldC9uZmMvbmNpL01ha2VmaWxlPTEzPW5jaV91YXJ0LXkgKz0gdWFydC5vXFxubmV0L25mYy9uY2kvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX05GQ19OQ0lfVUFSVCkgKz0gbmNpX3VhcnQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzoyMy4wMTI4MjI3MzdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI1ODcwOTU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJJ20gaGF2aW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBORkMgVmlydHVhbCBOQ0kgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB2aXJ0dWFsIE5DSSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIE5GQyBkcml2ZXIuIEZpcnN0LCB0aGUgc2Vuc2libGUgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGNvbmZpZ3VyYXRpb24uIFdoZXJlIHdvdWxkIHRoYXQgYmU/IEFoLCB5ZXMsIGBkcml2ZXJzL25mYy9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgYnVpbGQtdGltZSBvcHRpb25zIHVzdWFsbHkgcmVzaWRlLiBMZXQncyBkcmlsbCBkb3duIGFuZCBzZWUgd2hhdCBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAgaXMgYWxsIGFib3V0LiBXaGF0J3MgaXQgZG9pbmcgYW5kIHdoYXQgZG9lcyBpdCBjb250cm9sIGluIHRoZSBidWlsZD8gSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgcHJvdmlkZSBhIGNvbmNpc2UgZXhwbGFuYXRpb24gYW5kIGFueSBkZXBlbmRlbmNpZXMuIEkgZXhwZWN0IHRvIGdldCBhIGNsZWFyIGlkZWEgb2YgaG93IHRoaXMgdmlydHVhbCBsYXllciBpcyB1c2VkIG9yIGlmIGl0J3Mgb3B0aW9uYWwsIGFuZCBpZiBpdCBpcywgdGhlIHJlYXNvbnMgd2h5LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgbWVzaGVzIHdpdGggdGhlIGhhcmR3YXJlLXNwZWNpZmljIE5GQyBjb250cm9sbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzoyNS4yNzE1MzQ2MDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDczMzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GQ19WSVJUVUFMX05DSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnPTQyPWNvbmZpZyBORkNfUE9SVDEwMFxcbi0tXFxuZHJpdmVycy9uZmMvS2NvbmZpZy01MS1cXG5kcml2ZXJzL25mYy9LY29uZmlnOjUyOmNvbmZpZyBORkNfVklSVFVBTF9OQ0lcXG5kcml2ZXJzL25mYy9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25mYy9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfTkZDX1NUOTVIRilcXHQrPSBzdDk1aGYvXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX05GQ19WSVJUVUFMX05DSSlcXHQrPSB2aXJ0dWFsX25jaWRldi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjI1LjMxNjYxODYwNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDEyOTQ2NzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBORkMgS2NvbmZpZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gcG9wIG92ZXIgdG8gdGhlIGBkcml2ZXJzL25mYy9LY29uZmlnYCBmaWxlIGFuZCB6ZXJvIGluIGFyb3VuZCBsaW5lIDUyLiBNeSBpbml0aWFsIGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggdGhlIE5GQyBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHNvbWV0aGluZyBuZXcgb3IgcG9zc2libHkgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYW55dGhpbmcgdGhhdCBpcyBicm9rZW4uIEknbGwgYmUgbG9va2luZyBmb3IgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY291bGQgcHJvdmlkZSBtZSB3aXRoIHVzZWZ1bCBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk0OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjI3LjMyOTU2ODE3OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ1OlxcdFxcdGRlcGVuZHMgb24gTkZDX0RJR0lUQUxcXG4gIDQ2OlxcdFxcdGhlbHBcXG4gIDQ3OlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIFNvbnkgUG9ydC0xMDAgY2hpcCBiYXNlZCBVU0IgZGV2aWNlcyBzdWNoIGFzIHRoZVxcbiAgNDg6XFx0XFx0ICBSQy1TMzgwIGRvbmdsZS5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgTkZDX1ZJUlRVQUxfTkNJXFxuICA1MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXFxcIlxcbiAgNTQ6XFx0XFx0ZGVwZW5kcyBvbiBORkNfTkNJXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIE5DSSB2aXJ0dWFsIGRldmljZSBzaW11bGF0ZXMgYSBOQ0kgZGV2aWNlIHRvIHRoZSB1c2VyLlxcbiAgNTc6XFx0XFx0ICBJdCBjYW4gYmUgdXNlZCB0byB2YWxpZGF0ZSB0aGUgTkNJIG1vZHVsZSBhbmQgYXBwbGljYXRpb25zLlxcbiAgNTg6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHZpcnR1YWwgTkNJIGRldmljZSBhbmRcXG4gIDU5OlxcdFxcdCAgbW9kdWxlLlxcbiAgNjA6XFx0XFxuICA2MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2MjpcXHRcXG4gIDYzOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZmMvZmRwL0tjb25maWdcXFwiXFxuICA2NDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3BuNTQ0L0tjb25maWdcXFwiXFxuICA2NTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3BuNTMzL0tjb25maWdcXFwiXFxuICA2NjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL21pY3JvcmVhZC9LY29uZmlnXFxcIlxcbiAgNjc6XFx0c291cmNlIFxcXCJkcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWdcXFwiXFxuICA2ODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3N0MjFuZmNhL0tjb25maWdcXFwiXFxuICA2OTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3N0LW5jaS9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzoyNy4zMjk2MzYwNjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDA1NTQxMzgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE5GQyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IE5GQyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBDT05GSUdfTkZDYCwgYENPTkZJR19ORkNfTkNJYCwgYW5kIGBDT05GSUdfTkZDX1ZJUlRVQUxfTkNJYCDigJMgdGhhdCdzIHRoZSBjb3JlIE5GQyBmcmFtZXdvcmssIHRoZSBOQ0kgdHJhbnNwb3J0IGxheWVyLCBhbmQgYSB2aXJ0dWFsIE5DSSBpbnRlcmZhY2UsIHJlc3BlY3RpdmVseS4gTWFrZXMgc2Vuc2UuIEknbSBhbHNvIG5vdGljaW5nIGEgVVNCLXNwZWNpZmljIGRyaXZlciwgYENPTkZJR19ORkNfTVJWTF9VU0JgLiBBaCwgcmlnaHQsIHRoYXQgcG9pbnRzIHRvd2FyZHMgTWFydmVsbCdzIFVTQiBORkMgZGV2aWNlcy4gTmF0dXJhbGx5LCB0aGF0J3MgZ29pbmcgdG8gYmUgZGVwZW5kZW50IG9uIHRoZSBicm9hZGVyIGBORkNfTVJWTGAgZHJpdmVyIGFuZCB0aGUgYmFzZSBgVVNCYCBzdWJzeXN0ZW0uIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIGluIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgc3BlY2lmaWMgTWFydmVsbCBVU0IgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSBpbiBgZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUxMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6MzEuMzg1MDUyODI4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5GQ19NUlZMXFxuICAgMzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBUaGUgY29yZSBkcml2ZXIgdG8gc3VwcG9ydCBNYXJ2ZWxsIE5GQyBkZXZpY2VzLlxcbiAgIDY6XFx0XFxuICAgNzpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIHJlcXVpcmVkIGlmIHlvdSB3YW50IHRvIHN1cHBvcnRcXG4gICA4OlxcdFxcdCAgTWFydmVsbCBORkMgZGV2aWNlIDg4OTcuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBORkNfTVJWTF9VU0JcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE5GQy1vdmVyLVVTQiBkcml2ZXJcXFwiXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgVVNCXFxuICAxMzpcXHRcXHRzZWxlY3QgTkZDX01SVkxcXG4gIDE0OlxcdFxcdGhlbHBcXG4gIDE1OlxcdFxcdCAgTWFydmVsbCBORkMtb3Zlci1VU0IgZHJpdmVyLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIE1hcnZlbGwgTkZDLW92ZXItVVNCIGRldmljZXM6XFxuICAxODpcXHRcXHQgIDg4OTcuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIE1hcnZlbGwgTkZDLW92ZXItVVNCIGRyaXZlclxcbiAgMjE6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG8gY29tcGlsZSBpdCBhcyBtb2R1bGUuXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBORkNfTVJWTF9VQVJUXFxuICAyNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBORkMtb3Zlci1VQVJUIGRyaXZlclxcXCJcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBORkNfTkNJX1VBUlRcXG4gIDI2OlxcdFxcdHNlbGVjdCBORkNfTVJWTFxcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBNYXJ2ZWxsIE5GQy1vdmVyLVVBUlQgZHJpdmVyLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIE1hcnZlbGwgTkZDLW92ZXItVUFSVCBkZXZpY2VzXFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIE1hcnZlbGwgTkZDLW92ZXItVUFSVCBkcml2ZXJcXG4gIDMzOlxcdFxcdCAgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgaXQgYXMgbW9kdWxlLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgTkZDX01SVkxfSTJDXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjMxLjM4NTEyODc3OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODE4OTU0ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVzcG9uc2UgUGFja2V0KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGZ1bmN0aW9uIGFuZCB3aGF0J3MgY2hhbmdlZC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaGFuZGxpbmcgdGhlIHJlc3BvbnNlIHRvIGEgY29ubmVjdGlvbiBjcmVhdGlvbiByZXF1ZXN0LiBJIHNlZSBpdCdzIHRha2luZyB0aGUgYG5jaV9kZXZgIGFuZCB0aGUgcmVjZWl2ZWQgYHNrX2J1ZmZgIGFzIGlucHV0LiBUaGUgZmlyc3QgYnl0ZSBpbiBgc2tiLVx1MDAzZWRhdGFgIGlzIHRoZSBzdGF0dXMgY29kZSwgd2hpY2ggaXMgZ29vZCBwcmFjdGljZS4gSSBub3RlIHRoZSBkZWJ1ZyBwcmludDsgaGVscGZ1bCBmb3IgdHJhY2luZy5cblxuTm93LCB0aGUgaW1wb3J0YW50IGNoYW5nZSwgYW5kIHdoYXQgbGlrZWx5IGZpeGVzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3IgZXJyb3IgY29uZGl0aW9uLiAgVGhlIGNvZGUgY2hlY2tzIHRoZSBzdGF0dXM7IGlmIGl0J3MgXCJPS1wiLCB0aGVuIHRoZXJlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGBza2ItXHUwMDNlbGVuYCBjaGVjay4gSXQncyBtYWtpbmcgc3VyZSB0aGUgcmVjZWl2ZWQgcGFja2V0IGlzIGFjdHVhbGx5ICpsYXJnZSogZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BgIHN0cnVjdHVyZS4gVGhhdCdzIHNtYXJ0LiBJdCdzIHZlcmlmeWluZyB0aGUgcGFja2V0IGxlbmd0aCBub3cgYmVmb3JlIGRlcmVmZXJlbmNpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNwb25zZS4gSWYgdGhlIHBhY2tldCBpcyBzbWFsbGVyIHRoYW4gdGhlIGV4cGVjdGVkIHNpemUgb2YgYHJzcGAsIGl0IGZsYWdzIGEgc3ludGF4IGVycm9yLiBUaGF0J3MgZXhhY3RseSB3aGF0IEknZCBleHBlY3Q7IGl0IHByZXZlbnRzIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBjcmFzaCBvciwgd29yc2UsIGEgc2VjdXJpdHkgaXNzdWUgaWYgdGhlIHN0cnVjdHVyZSBjb250YWluZWQgc2Vuc2l0aXZlIGRhdGEuIFNvLCB0aGUgcGF0Y2ggaXMgYWRkaW5nIHJvYnVzdCBpbnB1dCB2YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBkYXRhIHdlJ3JlIHJlY2VpdmluZy4gR29vZCBqb2IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjk5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6MzUuMjA0MDg2ODI2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA5ODM0NzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmZjL25jaS5oPTM2Mj1zdHJ1Y3QgbmNpX2NvcmVfc2V0X2NvbmZpZ19yc3Age1xcbi0tXFxuaW5jbHVkZS9uZXQvbmZjL25jaS5oLTM2OC0jZGVmaW5lIE5DSV9PUF9DT1JFX0NPTk5fQ1JFQVRFX1JTUFxcdG5jaV9vcGNvZGVfcGFjayhOQ0lfR0lEX0NPUkUsIDB4MDQpXFxuaW5jbHVkZS9uZXQvbmZjL25jaS5oOjM2OTpzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwIHtcXG5pbmNsdWRlL25ldC9uZmMvbmNpLmgtMzcwLVxcdF9fdThcXHRzdGF0dXM7XFxuLS1cXG5uZXQvbmZjL25jaS9yc3AuYz0zMDU9c3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jLTMwOS1cXHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvID0gTlVMTDtcXG5uZXQvbmZjL25jaS9yc3AuYzozMTA6XFx0Y29uc3Qgc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCAqcnNwO1xcbm5ldC9uZmMvbmNpL3JzcC5jLTMxMS1cXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jLTMxOC1cXHRcXHR9XFxubmV0L25mYy9uY2kvcnNwLmM6MzE5OlxcdFxcdHJzcCA9IChzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwICopc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9uZmMvbmNpL3JzcC5jLTMyMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6MzYuNzEzOTI3MTk4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMzMzMzkzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyB3aXRoaW4gYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGFuZCBzZWUgd2hhdCBoYXBwZW5zICphZnRlciogbGluZSAzNTAuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBoYW5kbGVzIHRoZSBjcmVhdGlvbiBvZiBhIGNvbm5lY3Rpb24gcmVzcG9uc2UgcGFja2V0IHdpdGhpbiBhbiBOQ0kgKE5GQyBDb250cm9sbGVyIEludGVyZmFjZSkgY29udGV4dC4gTGluZSAzNTAgY291bGQgYmUgYSBjcnVjaWFsIHBvaW50IOKAkyBwZXJoYXBzIHdoZXJlIGEga2V5IGRhdGEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLCBhIHNwZWNpZmljIGVycm9yIGNoZWNrIGlzIHBlcmZvcm1lZCwgb3IgYSBwYXJ0aWN1bGFyIHN0YXRlIHRyYW5zaXRpb24gb2NjdXJzLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhhdCBwb2ludCBmb3J3YXJkIHRvIGZ1bGx5IGdyYXNwIHRoZSBmdW5jdGlvbidzIGJlaGF2aW9yLiBNeSBmb2N1cyBpcyBvbiB0aGUgbG9naWMgYW5kIGRhdGEgZmxvdyAqYmV5b25kKiB0aGF0IGxpbmUuIEknbSBsb29raW5nIGZvciB0aGUgZXNzZW50aWFsIHBhcnRzIG9mIHRoZSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxODgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzozOC45NDcyNjk1ODhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvcnNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQ1OlxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWxpc3QpO1xcbiAzNDY6XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlbGlzdCwgXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19saXN0KTtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0XFx0aWYgKG5kZXYtXFx1MDAzZWN1cl9wYXJhbXMuaWQgPT0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlbmZjZWVfaWQpXFxuIDM0OTpcXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm8gPSBjb25uX2luZm87XFxuIDM1MDpcXHRcXG4gMzUxOlxcdFxcdFxcdGNvbm5faW5mby1cXHUwMDNlY29ubl9pZCA9IHJzcC1cXHUwMDNlY29ubl9pZDtcXG4gMzUyOlxcdFxcdFxcdGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiA9IHJzcC1cXHUwMDNlbWF4X2N0cmxfcGt0X3BheWxvYWRfbGVuO1xcbiAzNTM6XFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2Y29ubl9pbmZvLVxcdTAwM2VjcmVkaXRzX2NudCwgcnNwLVxcdTAwM2VjcmVkaXRzX2NudCk7XFxuIDM1NDpcXHRcXHR9XFxuIDM1NTpcXHRcXG4gMzU2OlxcdGZyZWVfY29ubl9pbmZvOlxcbiAzNTc6XFx0XFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX1JFSkVDVEVEKVxcbiAzNTg6XFx0XFx0XFx0ZGV2bV9rZnJlZShcXHUwMDI2bmRldi1cXHUwMDNlbmZjX2Rldi1cXHUwMDNlZGV2LCBjb25uX2luZm8pO1xcbiAzNTk6XFx0ZXhpdDpcXG4gMzYwOlxcdFxcbiAzNjE6XFx0XFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBzdGF0dXMpO1xcbiAzNjI6XFx0fVxcbiAzNjM6XFx0XFxuIDM2NDpcXHRzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuIDM2NTpcXHRcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzNjY6XFx0e1xcbiAzNjc6XFx0XFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcXG4gMzY4OlxcdFxcdF9fdTggc3RhdHVzID0gc2tiLVxcdTAwM2VkYXRhWzBdO1xcbiAzNjk6XFx0XFxuIDM3MDpcXHRcXHRwcl9kZWJ1ZyhcXFwic3RhdHVzIDB4JXhcXFxcblxcXCIsIHN0YXR1cyk7XFxuIDM3MTpcXHRcXHRpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfT0spIHtcXG4gMzcyOlxcdFxcdFxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldixcXG4gMzczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBuZGV2LVxcdTAwM2VjdXJfY29ubl9pZCk7XFxuIDM3NDpcXHRcXHRcXHRpZiAoY29ubl9pbmZvKSB7XFxuIDM3NTpcXHRcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2Y29ubl9pbmZvLVxcdTAwM2VsaXN0KTtcXG4gMzc2OlxcdFxcdFxcdFxcdGlmIChjb25uX2luZm8gPT0gbmRldi1cXHUwMDNlcmZfY29ubl9pbmZvKVxcbiAzNzc6XFx0XFx0XFx0XFx0XFx0bmRldi1cXHUwMDNlcmZfY29ubl9pbmZvID0gTlVMTDtcXG4gMzc4OlxcdFxcdFxcdFxcdGRldm1fa2ZyZWUoXFx1MDAyNm5kZXYtXFx1MDAzZW5mY19kZXYtXFx1MDAzZWRldiwgY29ubl9pbmZvLVxcdTAwM2VkZXN0X3BhcmFtcyk7XFxuIDM3OTpcXHRcXHRcXHRcXHRkZXZtX2tmcmVlKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIGNvbm5faW5mbyk7XFxuIDM4MDpcXHRcXHRcXHR9XFxuIDM4MTpcXHRcXHR9XFxuIDM4MjpcXHRcXHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7XFxuIDM4MzpcXHR9XFxuIDM4NDpcXHRcXG4gMzg1OlxcdHZvaWQgbmNpX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDM4NjpcXHR7XFxuIDM4NzpcXHRcXHRfX3UxNiByc3Bfb3Bjb2RlID0gbmNpX29wY29kZShza2ItXFx1MDAzZWRhdGEpO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHQvKiB3ZSBnb3QgYSByc3AsIHN0b3AgdGhlIGNtZCB0aW1lciAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzozOC45NDczNDY4OThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDQxMzI5OTUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBORkMgUmVzcG9uc2UgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0L25mYy9uY2kvcnNwLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgcHJldmlvdXMgY29kZSB3YXMgYWNjZXNzaW5nIGByc3AtXHUwMDNlY29ubl9pZGAsIGByc3AtXHUwMDNlbWF4X2N0cmxfcGt0X3BheWxvYWRfbGVuYCwgYW5kIGByc3AtXHUwMDNlY3JlZGl0c19jbnRgIGRpcmVjdGx5LCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZSByZWNlaXZlZCAqc2tiKiAoc29ja2V0IGJ1ZmZlcikgd2FzIGxhcmdlIGVub3VnaCB0byBhY3R1YWxseSBob2xkIHRoZSBlbnRpcmUgYHJzcGAgc3RydWN0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpZiBgc2tiLVx1MDAzZWxlbmAgd2FzIGxlc3MgdGhhbiBgc2l6ZW9mKCpyc3ApYCDigJMgc2F5LCBpdCBvbmx5IGhhZCBvbmUgYnl0ZSwgbWF5YmUgYSBgc3RhdHVzID09IE5DSV9TVEFUVVNfT0tgIOKAkyB0aGVuIHRoZXJlIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYSBjbGFzc2ljIHZ1bG5lcmFiaWxpdHkuXG5cblRoaXMgcGF0Y2ggYWRkcyBhIGJhc2ljIGNoZWNrLCBhIHNpbXBsZSBgaWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZigqcnNwKSlgLCB3aGljaCBzZXRzIGBOQ0lfU1RBVFVTX1NZTlRBWF9FUlJPUmAgYW5kIGp1bXBzIHRvIGV4aXQuIEEgZ29vZCBkZWZlbnNpdmUgbWVhc3VyZSwgYnV0IGlzIGl0IHJlYWNoYWJsZT8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uIFdlIGhhdmUgYSBzb2xpZCBzdHJhdGVneSwgcGF0Y2ggZnV6emluZywgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsIGFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucy4gQnV0LCBpdCdzIG5vdCB3b3J0aCBmdXp6aW5nIHVucmVhY2hhYmxlIGNvZGUsIGFuZCByZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZS5cblxuVGhlIGNyaXRlcmlhIGZvciBmdXp6aW5nIGFwcGxpY2FiaWxpdHkgYXJlIHN0cmljdC4gV2UgbmVlZCBjb2RlIHRoYXQgY2FuICphY3R1YWxseSBleGVjdXRlKiBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgdXNpbmcgZW11bGF0ZWQgZGV2aWNlcy4gRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIG9yIHNvY2tldHMgYXJlIGdvb2QgdGFyZ2V0cy4gUmVmYWN0b3JpbmdzLCBjb2RlIGNsZWFudXBzLCBydW50aW1lIGFzc2VydGlvbnMsIGFuZCBkZWZlbnNpdmUgY2hlY2tzIGxpa2UgdGhpcyBhcmUgYWxsIHBvdGVudGlhbGx5IHJlbGV2YW50LiBCdXQgaG93IGlzIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCBldmVuIGNhbGxlZD8gV2hlbiBpcyBhIHJlc3BvbnNlIHBhY2tldCBwcm9jZXNzZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIEkgbmVlZCB0byBzZWUgaG93IGBuY2lfcnNwX3BhY2tldGAgaXMgcmVhY2hlZCB3aXRoaW4gYG5ldC9uZmMvbmNpL3JzcC5jYC4gVGhpcyBpcyBteSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTk0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6NDMuMzYwNjQ4NzUyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvbmNpL3JzcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4NTpcXHR2b2lkIG5jaV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzODY6XFx0e1xcbiAzODc6XFx0XFx0X191MTYgcnNwX29wY29kZSA9IG5jaV9vcGNvZGUoc2tiLVxcdTAwM2VkYXRhKTtcXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0Lyogd2UgZ290IGEgcnNwLCBzdG9wIHRoZSBjbWQgdGltZXIgKi9cXG4gMzkwOlxcdFxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2bmRldi1cXHUwMDNlY21kX3RpbWVyKTtcXG4gMzkxOlxcdFxcbiAzOTI6XFx0XFx0cHJfZGVidWcoXFxcIk5DSSBSWDogTVQ9cnNwLCBQQkY9JWQsIEdJRD0weCV4LCBPSUQ9MHgleCwgcGxlbj0lZFxcXFxuXFxcIixcXG4gMzkzOlxcdFxcdFxcdCBuY2lfcGJmKHNrYi1cXHUwMDNlZGF0YSksXFxuIDM5NDpcXHRcXHRcXHQgbmNpX29wY29kZV9naWQocnNwX29wY29kZSksXFxuIDM5NTpcXHRcXHRcXHQgbmNpX29wY29kZV9vaWQocnNwX29wY29kZSksXFxuIDM5NjpcXHRcXHRcXHQgbmNpX3BsZW4oc2tiLVxcdTAwM2VkYXRhKSk7XFxuIDM5NzpcXHRcXG4gMzk4OlxcdFxcdC8qIHN0cmlwIHRoZSBuY2kgY29udHJvbCBoZWFkZXIgKi9cXG4gMzk5OlxcdFxcdHNrYl9wdWxsKHNrYiwgTkNJX0NUUkxfSERSX1NJWkUpO1xcbiA0MDA6XFx0XFxuIDQwMTpcXHRcXHRpZiAobmNpX29wY29kZV9naWQocnNwX29wY29kZSkgPT0gTkNJX0dJRF9QUk9QUklFVEFSWSkge1xcbiA0MDI6XFx0XFx0XFx0aWYgKG5jaV9wcm9wX3JzcF9wYWNrZXQobmRldiwgcnNwX29wY29kZSwgc2tiKSA9PSAtRU5PVFNVUFApIHtcXG4gNDAzOlxcdFxcdFxcdFxcdHByX2VycihcXFwidW5zdXBwb3J0ZWQgcnNwIG9wY29kZSAweCV4XFxcXG5cXFwiLFxcbiA0MDQ6XFx0XFx0XFx0XFx0ICAgICAgIHJzcF9vcGNvZGUpO1xcbiA0MDU6XFx0XFx0XFx0fVxcbiA0MDY6XFx0XFxuIDQwNzpcXHRcXHRcXHRnb3RvIGVuZDtcXG4gNDA4OlxcdFxcdH1cXG4gNDA5OlxcdFxcbiA0MTA6XFx0XFx0c3dpdGNoIChyc3Bfb3Bjb2RlKSB7XFxuIDQxMTpcXHRcXHRjYXNlIE5DSV9PUF9DT1JFX1JFU0VUX1JTUDpcXG4gNDEyOlxcdFxcdFxcdG5jaV9jb3JlX3Jlc2V0X3JzcF9wYWNrZXQobmRldiwgc2tiKTtcXG4gNDEzOlxcdFxcdFxcdGJyZWFrO1xcbiA0MTQ6XFx0XFxuIDQxNTpcXHRcXHRjYXNlIE5DSV9PUF9DT1JFX0lOSVRfUlNQOlxcbiA0MTY6XFx0XFx0XFx0bmNpX2NvcmVfaW5pdF9yc3BfcGFja2V0KG5kZXYsIHNrYik7XFxuIDQxNzpcXHRcXHRcXHRicmVhaztcXG4gNDE4OlxcdFxcbiA0MTk6XFx0XFx0Y2FzZSBOQ0lfT1BfQ09SRV9TRVRfQ09ORklHX1JTUDpcXG4gNDIwOlxcdFxcdFxcdG5jaV9jb3JlX3NldF9jb25maWdfcnNwX3BhY2tldChuZGV2LCBza2IpO1xcbiA0MjE6XFx0XFx0XFx0YnJlYWs7XFxuIDQyMjpcXHRcXG4gNDIzOlxcdFxcdGNhc2UgTkNJX09QX0NPUkVfQ09OTl9DUkVBVEVfUlNQOlxcbiA0MjQ6XFx0XFx0XFx0bmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChuZGV2LCBza2IpO1xcbiA0MjU6XFx0XFx0XFx0YnJlYWs7XFxuIDQyNjpcXHRcXG4gNDI3OlxcdFxcdGNhc2UgTkNJX09QX0NPUkVfQ09OTl9DTE9TRV9SU1A6XFxuIDQyODpcXHRcXHRcXHRuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQobmRldiwgc2tiKTtcXG4gNDI5OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzo0My4zNjA3MjEwMjJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTIwMTUxMjUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTkNJIFBhY2tldCBIYW5kbGluZyBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IE5ldHdvcmsgQ29udHJvbGxlciBJbnRlcmZhY2UgKE5DSSkgcGFja2V0cyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBuY2lfcnhfd29ya2AsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgcHJvY2Vzc2luZyBoYXBwZW5zIGFmdGVyIHJlY2VpdmluZyBkYXRhLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgYmUgdXNlZCB0byBmdXp6IE5DST8gQW5kIHRoZSBhbnN3ZXIsIGl0IHNlZW1zLCBpcyBhIHJlc291bmRpbmcgeWVzISBTeXprYWxsZXIgKmRvZXMqIGhhdmUgTkZDIGFuZCBOQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMuIEkgbmVlZCB0byBnZXQgdGhpcyByaWdodCBiZWNhdXNlIHRoZXJlJ3MgcG90ZW50aWFsIGhlcmUgZm9yIHNvbWUgaW50ZXJlc3RpbmcgdnVsbmVyYWJpbGl0eSBkaXNjb3ZlcnkuXG5cblN5emthbGxlciBsZXZlcmFnZXMgYSBmZXcgbWVjaGFuaXNtcywgYW5kIHRoYXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZC4gSXQgY2FuIHVzZSBgL2Rldi92aXJ0dWFsX25jaWAsIHdoaWNoIGlzIGRlZmluZWQgYnkgYENPTkZJR19ORkNfVklSVFVBTF9OQ0lgLCBVU0IgZ2FkZ2V0cyBlbmFibGVkIHdpdGggYENPTkZJR19VU0JfUkFXX0dBREdFVGAgYW5kIGBDT05GSUdfTkZDX01SVkxfVVNCYCwgb3IgZXZlbiBuZXRsaW5rIGNvbW1hbmRzIGZvciBpdHMgZnV6emluZy4gVGhhdCB2aXJ0dWFsIGRldmljZSByb3V0ZSBsb29rcyBwYXJ0aWN1bGFybHkgcHJvbWlzaW5nLiBJIGNhbiBzZWUgdGhhdCBzeXprYWxsZXIgaXMgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQgdG8gaW50ZXJhY3Qgd2l0aCBgL2Rldi92aXJ0dWFsX25jaWAsIHdoaWNoIGlzIGEga2V5IHRhcmdldC4gSXQgaGFzIGNhbGxzIGRlZmluZWQgbGlrZSBgb3BlbmF0JHZpcnR1YWxfbmNpYCBhbmQgYHdyaXRlJHZpcnR1YWxfbmNpYC5cblxuVGhlIGB3cml0ZSR2aXJ0dWFsX25jaWAgY2FsbCBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgbGVhZHMgdG8gYHZpcnR1YWxfbmNpZGV2X3dyaXRlYC4gTG9va2luZyBhdCB0aGUgYHZpcnR1YWxfbmNpZGV2X3dyaXRlYCBmdW5jdGlvbiwgaXQgZG9lcyB0aGUgdHlwaWNhbCBgYWxsb2Nfc2tiYCwgdGhlbiBgY29weV9mcm9tX3VzZXJgIHRvIHRyYW5zZmVyIHRoZSBmdXp6ZWQgYnVmZmVyIGludG8gdGhlIHNrYiwgYW5kIHRoZW4sIGNydWNpYWxseSwgaXQgY2FsbHMgYG5jaV9yZWN2X2ZyYW1lYCB3aXRoIHRoaXMgbmV3bHkgY3JhZnRlZCBza2IuIFRoaXMgaXMgd2hlcmUgSSB3YW50IHRvIGZvY3VzLCBhcyB0aGlzIGZsb3cgb2YgZGF0YSBwcmVzZW50cyBhIHBlcmZlY3QgdGFyZ2V0IGZvciBpbmplY3Rpb24gd2l0aCBtYWxpY2lvdXMgZGF0YS5cblxuYG5jaV9yZWN2X2ZyYW1lYCBpcyB0aGUgY29yZSBvZiBwYWNrZXQgaGFuZGxpbmcuIEFjY29yZGluZyB0byB3aGF0IEkgaGF2ZSBoZXJlLCB0aGlzIHdpbGwgdGhlbiBxdWV1ZSB0aGUgYHNrYmAgdG8gYG5kZXYtXHUwMDNlcnhfcWAgYW5kIHNjaGVkdWxlcyBgbmNpX3J4X3dvcmtgLiBUaGF0J3MgdGhlIGxpbmsuIFRvIHRydWx5IHVuZGVyc3RhbmQgdGhpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBuY2lfcmVjdl9mcmFtZWAgaW4gYG5ldC9uZmMvbmNpL2NvcmUuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODM5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6NDguNTYyMjM1OTEzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL25jaS9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM0OCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM0ODpcXHQgKiBAbmRldjogVGhlIG5jaSBkZXZpY2VcXG4xMzQ5OlxcdCAqIEBza2I6IFRoZSBza19idWZmIHRvIHJlY2VpdmVcXG4xMzUwOlxcdCAqL1xcbjEzNTE6XFx0aW50IG5jaV9yZWN2X2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEzNTI6XFx0e1xcbjEzNTM6XFx0XFx0cHJfZGVidWcoXFxcImxlbiAlZFxcXFxuXFxcIiwgc2tiLVxcdTAwM2VsZW4pO1xcbjEzNTQ6XFx0XFxuMTM1NTpcXHRcXHRpZiAoIW5kZXYgfHwgKCF0ZXN0X2JpdChOQ0lfVVAsIFxcdTAwMjZuZGV2LVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4xMzU2OlxcdFxcdCAgICAhdGVzdF9iaXQoTkNJX0lOSVQsIFxcdTAwMjZuZGV2LVxcdTAwM2VmbGFncykpKSB7XFxuMTM1NzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xMzU4OlxcdFxcdFxcdHJldHVybiAtRU5YSU87XFxuMTM1OTpcXHRcXHR9XFxuMTM2MDpcXHRcXG4xMzYxOlxcdFxcdC8qIFF1ZXVlIGZyYW1lIGZvciByeCB3b3JrZXIgdGhyZWFkICovXFxuMTM2MjpcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2bmRldi1cXHUwMDNlcnhfcSwgc2tiKTtcXG4xMzYzOlxcdFxcdHF1ZXVlX3dvcmsobmRldi1cXHUwMDNlcnhfd3EsIFxcdTAwMjZuZGV2LVxcdTAwM2VyeF93b3JrKTtcXG4xMzY0OlxcdFxcbjEzNjU6XFx0XFx0cmV0dXJuIDA7XFxuMTM2NjpcXHR9XFxuMTM2NzpcXHRFWFBPUlRfU1lNQk9MKG5jaV9yZWN2X2ZyYW1lKTtcXG4xMzY4OlxcdFxcbjEzNjk6XFx0aW50IG5jaV9zZW5kX2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEzNzA6XFx0e1xcbjEzNzE6XFx0XFx0cHJfZGVidWcoXFxcImxlbiAlZFxcXFxuXFxcIiwgc2tiLVxcdTAwM2VsZW4pO1xcbjEzNzI6XFx0XFxuMTM3MzpcXHRcXHRpZiAoIW5kZXYpIHtcXG4xMzc0OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjEzNzU6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTM3NjpcXHRcXHR9XFxuMTM3NzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6NDguNTYyMzM4NzUzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MjA0NjQ5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGNvZGUgc25pcHBldCwgZGVsaXZlcmVkIGFzIGlmIGl0J3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYG5jaV9yeF93b3JrYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IGBuY2lfcnhfd29ya2Agd2l0aGluIGBuZXQvbmZjL25jaS9jb3JlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBvZiBoYW5kbGluZyBpbmNvbWluZyBOQ0kgZnJhbWVzIHNlZW1zIHRvIGhhcHBlbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGluIGRldGFpbC4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBOQ0kgZGF0YSBmbG93LiBJJ20gdmlzdWFsaXppbmcgdGhlIGRhdGEgY29taW5nIGluLCBwcmVzdW1hYmx5IHZpYSBzb21lIGhhcmR3YXJlIGludGVycnVwdCBvciBETUEgY29tcGxldGlvbiwgYW5kIG5vdyBpdCdzIHVwIHRvIHRoaXMgZnVuY3Rpb24gdG8gbWFrZSBzZW5zZSBvZiBpdC4gSSdtIHdvbmRlcmluZyBpZiBpdCdzIHJlc3BvbnNpYmxlIGZvciB0aGUgaW5pdGlhbCBwYXJzaW5nLCBvciBpZiB0aGVyZSdzIGEgcHJlLXByb2Nlc3Npbmcgc3RhZ2UuIFRoZSBcIndvcmtcIiBhc3BlY3QgaGludHMgYXQgdGhpcyBiZWluZyBhIGJvdHRvbSBoYWxmIGhhbmRsZXIsIHJ1bm5pbmcgaW4gYSB3b3JrcXVldWUsIHNvIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgYW55IGxvY2tpbmcgY29uY2VybnMgYXJvdW5kIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMuIEFyZSB0aGVyZSByYWNlIGNvbmRpdGlvbnMgdG8gd29ycnkgYWJvdXQ/IEknbGwgcHJvYmFibHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIGBuY2lfcnhfd29ya2AsIHNwZWNpZmljYWxseSB3aGF0J3MgaW4gdGhlIGBuY2lfZGV2YCBhbmQgYW55IHBvdGVudGlhbCBkYXRhIGJ1ZmZlcnMgaXQgYWNjZXNzZXMuIFRpbWUgdG8gZ2V0IGRvd24gdG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTU5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzo1MS4xODI4MDY3M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAxODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1NjA6XFx0e1xcbjE1NjE6XFx0XFx0c3RydWN0IG5jaV9kZXYgKm5kZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5jaV9kZXYsIHJ4X3dvcmspO1xcbjE1NjI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4xNTYzOlxcdFxcbjE1NjQ6XFx0XFx0Zm9yICg7IChza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2bmRldi1cXHUwMDNlcnhfcSkpOyBrY292X3JlbW90ZV9zdG9wKCkpIHtcXG4xNTY1OlxcdFxcdFxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xcbjE1NjY6XFx0XFxuMTU2NzpcXHRcXHRcXHQvKiBTZW5kIGNvcHkgdG8gc25pZmZlciAqL1xcbjE1Njg6XFx0XFx0XFx0bmZjX3NlbmRfdG9fcmF3X3NvY2sobmRldi1cXHUwMDNlbmZjX2Rldiwgc2tiLFxcbjE1Njk6XFx0XFx0XFx0XFx0XFx0ICAgICBSQVdfUEFZTE9BRF9OQ0ksIE5GQ19ESVJFQ1RJT05fUlgpO1xcbjE1NzA6XFx0XFxuMTU3MTpcXHRcXHRcXHRpZiAoIW5jaV92YWxpZF9zaXplKHNrYikpIHtcXG4xNTcyOlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjE1NzM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTU3NDpcXHRcXHRcXHR9XFxuMTU3NTpcXHRcXG4xNTc2OlxcdFxcdFxcdC8qIFByb2Nlc3MgZnJhbWUgKi9cXG4xNTc3OlxcdFxcdFxcdHN3aXRjaCAobmNpX210KHNrYi1cXHUwMDNlZGF0YSkpIHtcXG4xNTc4OlxcdFxcdFxcdGNhc2UgTkNJX01UX1JTUF9QS1Q6XFxuMTU3OTpcXHRcXHRcXHRcXHRuY2lfcnNwX3BhY2tldChuZGV2LCBza2IpO1xcbjE1ODA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTU4MTpcXHRcXG4xNTgyOlxcdFxcdFxcdGNhc2UgTkNJX01UX05URl9QS1Q6XFxuMTU4MzpcXHRcXHRcXHRcXHRuY2lfbnRmX3BhY2tldChuZGV2LCBza2IpO1xcbjE1ODQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTU4NTpcXHRcXG4xNTg2OlxcdFxcdFxcdGNhc2UgTkNJX01UX0RBVEFfUEtUOlxcbjE1ODc6XFx0XFx0XFx0XFx0bmNpX3J4X2RhdGFfcGFja2V0KG5kZXYsIHNrYik7XFxuMTU4ODpcXHRcXHRcXHRcXHRicmVhaztcXG4xNTg5OlxcdFxcbjE1OTA6XFx0XFx0XFx0ZGVmYXVsdDpcXG4xNTkxOlxcdFxcdFxcdFxcdHByX2VycihcXFwidW5rbm93biBNVCAweCV4XFxcXG5cXFwiLCBuY2lfbXQoc2tiLVxcdTAwM2VkYXRhKSk7XFxuMTU5MjpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xNTkzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE1OTQ6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzo1MS4xODI5MTk5ODFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzc5NTkyMjc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogTkZDIE5DSSBQYWNrZXQgUHJvY2Vzc2luZyoqXG5cbk9rYXksIHRoaXMgaXMgaW50ZXJlc3RpbmcuIExpbmUgMTU2NC0xNTY1IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhdCBtZTogYGtjb3ZfcmVtb3RlX3N0b3AoKWAgYW5kIGBrY292X3JlbW90ZV9zdGFydF9jb21tb24oKWAhIFRoYXQncyBhIGRlYWQgZ2l2ZWF3YXkg4oCTIHNwZWNpZmljIGluc3RydW1lbnRhdGlvbiBmb3Igc3l6a2FsbGVyIGNvdmVyYWdlLCB3aGljaCBtZWFucyB0aGV5J3JlIGFjdGl2ZWx5IGZ1enppbmcgdGhpcyBhcmVhLiBCcmlsbGlhbnQhIFNvLCBOQ0kgcGFja2V0IHByb2Nlc3NpbmcgaXMgYWxyZWFkeSBnZXR0aW5nIGhhbW1lcmVkIGJ5IHN5emthbGxlciB0aHJvdWdoIHJlbW90ZSBjb3ZlcmFnZSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEknbSBsb29raW5nIGZvci5cblxuVGhpcyBwYXJ0aWN1bGFyIGNoYW5nZSBpbnRyb2R1Y2VzIGEgYm91bmRzIGNoZWNrIHdpdGhpbiBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAuIEl0IGxvb2tzIGxpa2Ugd2UncmUgYWx0ZXJpbmcgdGhlIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB0aGUgcGFja2V0IGxlbmd0aC4gVGhpcyBpcyBhbiBleGNlbGxlbnQgb3Bwb3J0dW5pdHkuIEEgc2hvcnQgcGFja2V0IG1pZ2h0IHRyaWdnZXIgYW4gaW50ZXJlc3RpbmcgY29uZGl0aW9uIGhlcmUsIHdoaWNoIG1ha2VzIHRoaXMgd29ydGggZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5UaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXM6XG5cbiogICAqKldvcnRoRnV6emluZzogVHJ1ZS4qKiBBYnNvbHV0ZWx5LiBUaGlzIGxvb2tzIGxpa2UgYSBwcm9taXNpbmcgYXZlbnVlLlxuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogSSdtIGdvaW5nIHRvIGNlbnRlciBteSBhdHRlbnRpb24gb246XG4gICAgKiAgIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCAtIFRoZSBsb2NhdGlvbiBvZiB0aGUgbmV3IGJvdW5kcyBjaGVjay5cbiAgICAqICAgYG5jaV9yc3BfcGFja2V0YCAtIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHJlc3BvbnNlIHBhY2tldHMgaW4gZ2VuZXJhbC5cbiAgICAqICAgYG5jaV9yeF93b3JrYCAtIFRoZSBhc3NvY2lhdGVkIHJlY2VpdmUgd29ya2VyLiBIb3cgaXMgdGhpcyBwYWNrZXQgYWN0dWFsbHkgYmVpbmcgaGFuZGxlZC5cblxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBoZXJlLiBMZXQncyBkaWcgaW50bzpcbiAgICAqICAgYG5ldC9uZmMvbmNpL3JzcC5jYCAtIFRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBjb3VsZCBpbXBhY3QgdGhlIE5DSSByZXNwb25zZSBwYWNrZXQuXG4gICAgKiAgIFZpcnR1YWwgTkNJIC8gTkZDIGNvbmZpZ3VyYXRpb24gLSBXaGljaCBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gZXZhbHVhdGUgYW5kIHNldC5cbiAgICAqICAgYG5ldC9uZmMvTWFrZWZpbGVgIGFuZCBgbmV0L25mYy9uY2kvTWFrZWZpbGVgIC0gVG8gZGV0ZXJtaW5lIGV4YWN0bHkgaG93IHRoaXMgbW9kdWxlIGlzIGJ1aWx0IGFuZCB3aGF0IG90aGVyIGRlcGVuZGVuY2llcyBhcmUgYXQgcGxheS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhvc2UgTWFrZWZpbGVzIGFuZCBzdGFydCBjaGVja2luZyB0aGUgY29uZmlncy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAzMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjU0Ljk3ODg0NTUzMloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IE5GQyBzdWJzeXN0ZW0uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19ORkMpICs9IG5mYy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfTkZDX05DSSkgKz0gbmNpL1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX05GQ19IQ0kpICs9IGhjaS9cXG4gICA5OlxcdG9iai0kKENPTkZJR19ORkNfRElHSVRBTCkgKz0gbmZjX2RpZ2l0YWwub1xcbiAgMTA6XFx0XFxuICAxMTpcXHRuZmMtb2JqcyA6PSBjb3JlLm8gbmV0bGluay5vIGFmX25mYy5vIHJhd3NvY2subyBsbGNwX2NvcmUubyBsbGNwX2NvbW1hbmRzLm8gXFxcXFxcbiAgMTI6XFx0XFx0XFx0bGxjcF9zb2NrLm9cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0bmZjX2RpZ2l0YWwtb2JqcyA6PSBkaWdpdGFsX2NvcmUubyBkaWdpdGFsX3RlY2hub2xvZ3kubyBkaWdpdGFsX2RlcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjU0Ljk3ODkwOTAzMloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTQ0OTY0NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIE5DSSBNYWtlZmlsZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBuZXQvbmZjL25jaS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBidWlsZCBpbnN0cnVjdGlvbnMgZm9yIHRoZSBOQ0kgKE5GQyBDb250cm9sbGVyIEludGVyZmFjZSkgYXJlIGdvaW5nIHRvIHJlc2lkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBORkMgZHJpdmVyIGlzIGJ1aWx0LCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBvciB3aGF0ZXZlciBidWlsZCBzeXN0ZW0gaXMgaW4gdXNlLiBJIGV4cGVjdCB0byBmaW5kIHJ1bGVzIGZvciBjb21waWxpbmcgdGhlIE5DSSBkcml2ZXIgbW9kdWxlcywgbGlua2luZyB0aGVtLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBpbnN0cnVjdGlvbnMgZm9yIGhhbmRsaW5nIGZpcm13YXJlIGxvYWRpbmcgaWYgdGhlIE5GQyBjb250cm9sbGVyIG5lZWRzIGl0LiBMb29raW5nIGF0IHRoZSBtYWtlZmlsZSBpcyB0aGUgbW9zdCBkaXJlY3Qgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MuIEZyb20gdGhlcmUsIEkgY2FuIHJldmVyc2UgZW5naW5lZXIgaG93IGl0IGlzIGJyb3VnaHQgaW50byB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTkzOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6NTYuOTIzODc2MTQ1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvbmNpL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IE5GQyBOQ0kgbGF5ZXIuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19ORkNfTkNJKSArPSBuY2kub1xcbiAgIDc6XFx0XFxuICAgODpcXHRuY2ktb2JqcyA6PSBjb3JlLm8gZGF0YS5vIGxpYi5vIG50Zi5vIHJzcC5vIGhjaS5vXFxuICAgOTpcXHRcXG4gIDEwOlxcdG5jaV9zcGkteSArPSBzcGkub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX05GQ19OQ0lfU1BJKSArPSBuY2lfc3BpLm9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0bmNpX3VhcnQteSArPSB1YXJ0Lm9cXG4gIDE0OlxcdG9iai0kKENPTkZJR19ORkNfTkNJX1VBUlQpICs9IG5jaV91YXJ0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6NTYuOTIzOTM5NDM1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1ODk4ODU3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTkZDIE5DSSBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYG5ldC9uZmMvbmNpL3JzcC5jYCBpcyBnb2luZyB0byBiZSBjb21waWxlZCBpbnRvIGBuY2kub2Agd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcywgYnV0IG9ubHkgaWYgYENPTkZJR19ORkNfTkNJYCBpcyBkZWZpbmVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGl0J3MgYSBzdGFuZGFyZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzY2VuYXJpby4gQW5kLCBwcmVkaWN0YWJseSwgYENPTkZJR19ORkNfTkNJYCBpdHNlbGYgaXMgZGVwZW5kZW50IG9uIGBDT05GSUdfTkZDYCwgc28gd2UgaGF2ZSBhIGRlcGVuZGVuY3kgY2hhaW4gdGhlcmUuIE5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgYml0IGlzIGhvdyB3ZSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGlzIGZyb20gYSB1c2VyLXNwYWNlIHBlcnNwZWN0aXZlLCBwYXJ0aWN1bGFybHkgZm9yIGZ1enppbmcuXG5cbk15IHRoaW5raW5nIGlzIHRoYXQgdG8gZ2V0IHRvIGAvZGV2L3ZpcnR1YWxfbmNpYCwgd2UgbmVlZCBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAsIHdoaWNoIGhhcyB0bywgaW4gdHVybiwgYmUgZW5hYmxlZCBhbmQgaXQgZGVwZW5kcyBvbiB0aGUgY29yZSBgTkZDX05DSWAgY29uZmlndXJhdGlvbiwgc28gdGhhdCBpcyB0aGUgcGF0aCB0byB0ZXN0aW5nIHRoYXQgbW9kdWxlLiBUaGlzIG1ha2VzIHNlbnNlIGFzIGEgdmlydHVhbCBkZXZpY2UgZm9yIHRlc3QgYW5kIGVtdWxhdGlvbiBwdXJwb3Nlcy4gQWxzbywgdGhlcmUgaXMgYENPTkZJR19ORkNfTVJWTF9VU0JgIHRvIHRlc3QgdGhlIE5GQyBOQ0kgaW50ZXJmYWNlIHRocm91Z2ggVVNCLCBzbyB0aGF0IHdpbGwgYmUgYW5vdGhlciB3YXkgdG8gdGVzdCBpdC5cblxuQWxyaWdodCwgdGltZSB0byBnbyBhbmQgY2hlY2sgYG5ldC9uZmMvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGVzZSBkZXBlbmRlbmNpZXMgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGFjdHVhbCBLY29uZmlnIGZpbGUgYW5kIHNlZSB3aGF0IG90aGVyIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNjQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzo1OS41MTM4MjcyNjhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE5GQyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIE5GQ1xcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgIDg6XFx0XFx0dHJpc3RhdGUgXFxcIk5GQyBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA5OlxcdFxcdGRlZmF1bHQgblxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIE5GQyAoTmVhciBmaWVsZFxcbiAgMTI6XFx0XFx0ICBjb21tdW5pY2F0aW9uKSBkZXZpY2VzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDE1OlxcdFxcdCAgYmUgY2FsbGVkIG5mYy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIE5GQ19ESUdJVEFMXFxuICAxODpcXHRcXHRkZXBlbmRzIG9uIE5GQ1xcbiAgMTk6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgMjA6XFx0XFx0c2VsZWN0IENSQ19JVFVfVFxcbiAgMjE6XFx0XFx0dHJpc3RhdGUgXFxcIk5GQyBEaWdpdGFsIFByb3RvY29sIHN0YWNrIHN1cHBvcnRcXFwiXFxuICAyMjpcXHRcXHRkZWZhdWx0IG5cXG4gIDIzOlxcdFxcdGhlbHBcXG4gIDI0OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYnVpbGQgTkZDIGRpZ2l0YWwgcHJvdG9jb2wgc3RhY2sgc3VwcG9ydC5cXG4gIDI1OlxcdFxcdCAgVGhpcyBpcyBuZWVkZWQgYnkgTkZDIGNoaXBzZXRzIHdob3NlIGZpcm13YXJlIG9ubHkgaW1wbGVtZW50XFxuICAyNjpcXHRcXHQgIHRoZSBORkMgYW5hbG9nIGxheWVyLlxcbiAgMjc6XFx0XFxuICAyODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDI5OlxcdFxcdCAgYmUgY2FsbGVkIG5mY19kaWdpdGFsLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRzb3VyY2UgXFxcIm5ldC9uZmMvbmNpL0tjb25maWdcXFwiXFxuICAzMjpcXHRzb3VyY2UgXFxcIm5ldC9uZmMvaGNpL0tjb25maWdcXFwiXFxuICAzMzpcXHRcXG4gIDM0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZmMvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6NTkuNTEzODg2NzI4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQwMjg0NTg3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBuZXQvbmZjL25jaS9LY29uZmlnYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgTkZDIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGp1bXAgaW50byBgbmV0L25mYy9uY2kvS2NvbmZpZ2AuIEkga25vdyB0aGlzIGlzIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiwgaXQncyB3aGVyZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3B0aW9ucyBmb3IgdGhlIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBkcml2ZXJzIHNob3VsZCBiZSBkZWZpbmVkLiBJJ20gdGhpbmtpbmcgSSdsbCBmaW5kIGFsbCB0aGUgdXN1YWwgc3VzcGVjdHM6IGVuYWJsZW1lbnQgZmxhZ3MsIG1heWJlIHNvbWUgYm9hcmQtc3BlY2lmaWMgb3ZlcnJpZGVzLCBhbmQgaG9wZWZ1bGx5IGNsZWFyIGRlcGVuZGVuY2llcyBvbiB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBuZXR3b3JraW5nIHN1YnN5c3RlbXMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBoaWVyYXJjaHkgYW5kIGhvdyB0aGVzZSBvcHRpb25zIHJlbGF0ZSB0byBvdGhlciBORkMgY29tcG9uZW50cy4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGJyb2tlbiBkb3duIGludG8gbG9naWNhbCBzZWN0aW9ucywgcG9zc2libHkgYmFzZWQgb24gdGhlIHBoeXNpY2FsIHRyYW5zcG9ydCBvciB0aGUgc3BlY2lmaWMgTkNJIGltcGxlbWVudGF0aW9uLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyAob3IgaGVhZGFjaGVzISkgYXdhaXQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gbWFnaWMgaGFwcGVucywgYW5kIGl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSdzIE5GQyBjYXBhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjUzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxNDowMy41NDIzNDkwOTNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5GQ19OQ0lcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gTkZDXFxuICAgNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTkNJIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuICAgNTpcXHRcXHRkZWZhdWx0IG5cXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGlzIGEgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBiZXR3ZWVuXFxuICAgODpcXHRcXHQgIGFuIE5GQyBDb250cm9sbGVyIChORkNDKSBhbmQgYSBEZXZpY2UgSG9zdCAoREgpLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBOQ0kgc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG9cXG4gIDExOlxcdFxcdCAgY29tcGlsZSBpdCBhcyBtb2R1bGUgKG5jaSkuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBORkNfTkNJX1NQSVxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFNQSVxcbiAgMTU6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIk5DSSBvdmVyIFNQSSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbiAgMTc6XFx0XFx0ZGVmYXVsdCBuXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBpcyBhIGNvbW11bmljYXRpb24gcHJvdG9jb2wgYmV0d2VlblxcbiAgMjA6XFx0XFx0ICBhbiBORkMgQ29udHJvbGxlciAoTkZDQykgYW5kIGEgRGV2aWNlIEhvc3QgKERIKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTQ6MDMuNTQyNDExNDczWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUyOTgwNjA1MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTkZDIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIFN5bWJvbCBBY2Nlc3NpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgTkZDIGNvbmZpZ3VyYXRpb25zIGFuZCBpdCBzZWVtcyBJIG5lZWQgdG8gY29uc2lkZXIgdGhlc2UgdGhyZWU6IGBORkNgLCBgTkZDX05DSWAsIGFuZCBgTkZDX1ZJUlRVQUxfTkNJYC4gUmlnaHQsIHN0YW5kYXJkIE5GQyBzZXR1cC4gTGV0J3MgZGlnIGludG8gdGhlIGRldGFpbHMuXG5cbk5vdywgbXkgZm9jdXMgaXMgb24gYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGFzIGEgcG90ZW50aWFsIHBvaW50IG9mIGludGVyZXN0LiBJIHNlZSBpdCdzIGRlZmluZWQgaW4gYG5ldC9uZmMvbmNpL3JzcC5jYC4gV2FpdCwgaXMgaXQgc3RhdGljPyBBaCwgeWVzLCBsaW5lIDMwNSBjb25maXJtcyBpdDogYHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoLi4uKWAuIEhtbSwgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgdXN1YWxseSBtZWFucyBpdCdzIGxpbWl0ZWQgdG8gdGhlIGZpbGUgc2NvcGUuIEJ1dCBob2xkIG9uLCBjYW4gc3RhdGljIGZ1bmN0aW9ucyAqYWN0dWFsbHkqIGJlIGxldmVyYWdlZCBhcyBhIGZvY3VzIHN5bWJvbD8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0LCBpZiBpdCBpc24ndCBpbmxpbmVkLCB0aGUgc3ltYm9sIGlzIHByZXNlbnQgaW4gdm1saW51eC9rYWxsc3ltcywgYW5kIHN5emthbGxlciBjYW4gaW5kZWVkIHRhcmdldCB0aGVtLiBHb29kIHRvIHJlbWVtYmVyLlxuXG5Pa2F5LCBsZXQncyBiYWNrIHVwIGEgc3RlcC4gSSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hhdCBjYWxscyBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAuIExvb2tpbmcgYXQgaXQsIEkgc2VlIHRoYXQgaXQncyBjYWxsZWQgYnkgYG5jaV9yc3BfcGFja2V0YC4gQW5kIHdoZXJlIGlzIHRoYXQ/IEl0J3MgaW4gYG5ldC9uZmMvbmNpL2NvcmUuY2AgYW5kIGlzIHBhcnQgb2YgYG5jaV9yeF93b3JrYC4gVGhhdCdzIG5vbi1zdGF0aWMsIHNvIGl0J3MgZXhwb3J0ZWQgYW5kIGNhbiBiZSBjYWxsZWQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGl0IGlzIGV4cG9ydGVkIG9yIGRlY2xhcmVkIGluIGEgaGVhZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgwOSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjE0OjA4Ljg0MDQ3NDk0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE3NzU3NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5jaV9yc3BfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmg9MzUyPXN0YXRpYyBpbmxpbmUgaW50IG5jaV9zZXRfdmVuZG9yX2NtZHMoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuLS1cXG5pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaC0zNTgtXFxuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmg6MzU5OnZvaWQgbmNpX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oLTM2MC12b2lkIG5jaV9udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTQ6MTAuMjU4MjM4MDQ3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUxNTgzMjUwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGb2N1czogQSBDb25jaXNlIFBsYW4qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoaXMuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRob3NlIHZlcnkgc3BlY2lmaWMgc3ltYm9sczogYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGFuZCBgbmNpX3JzcF9wYWNrZXRgLiBUaGV5IGp1bXAgb3V0IGFzIHBlcmZlY3QgdGFyZ2V0cy4gTGV0J3MgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZzsgSSdsbCBxdWlja2x5IGdsYW5jZSBhdCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMsIGxpa2UgYG5jaV9yeF93b3JrYCB3aXRoaW4gYG5ldC9uZmMvbmNpL2NvcmUuY2AgYW5kIGBuY2lfcmVjdl9mcmFtZWAuIEhvd2V2ZXIsIHRob3NlIGZpcnN0IHR3byBzZWVtIHRoZSBtb3N0IGRpcmVjdCBhbmQgcmVsZXZhbnQgZ2l2ZW4gdGhlIGNvbnRleHQsIGxpa2UgcGlucG9pbnRpbmcgYSB2ZXJ5IHNwZWNpZmljIHZ1bG5lcmFiaWxpdHkuXG5cbkknbGwgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgaW5zdHJ1Y3Rpb25zIGFnYWluLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJ3QgbWlzc2VkIGEgZGV0YWlsOiBcIldvcnRoRnV6emluZ1wiIGlzIGNsZWFyOyBcIkZvY3VzU3ltYm9scyxcIiB3aGljaCBpcyB3aGF0IEknbSBkb2luZyBub3csIGRpcmVjdGx5IGd1aWRlcyB0aGlzIHdvcms7IHRoZSBcIkVuYWJsZUNvbmZpZ3NcIiBwYXJ0IG1lYW5zIEkndmUgY2hlY2tlZCB0aGUgZmxhZ3MgYW5kIFwiUmVhc29uaW5nXCIga2VlcHMgbXkgd29yayBjb25jaXNlLlxuXG5SaWdodCwgYWxsIGNsZWFyLiBUaW1lIHRvIGV4ZWN1dGUuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2MjksIk91dHB1dFRva2VucyI6MTY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjE0OjE1LjQxNjU2NTc2MVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMjM0OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIixcbiAgICBcIk5GQ19OQ0lcIixcbiAgICBcIk5GQ19WSVJUVUFMX05DSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcIixcbiAgICBcIm5jaV9yc3BfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGxlbmd0aCBjaGVjayBvbiBpbmNvbWluZyBOQ0kgcmVzcG9uc2UgcGFja2V0cyBpbiBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIHZpcnR1YWwgTkNJIGRldmljZXMgKENPTkZJR19ORkNfVklSVFVBTF9OQ0kgL2Rldi92aXJ0dWFsX25jaSkgb3IgZW11bGF0ZWQgVVNCIE5GQyBkZXZpY2VzLCBib3RoIG9mIHdoaWNoIGFyZSBzdXBwb3J0ZWQgYW5kIGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0XCIsXG4gICAgXCJuY2lfcnNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgb24gaW5jb21pbmcgTkNJIHJlc3BvbnNlIHBhY2tldHMgaW4gbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCB2aXJ0dWFsIE5DSSBkZXZpY2VzIChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJIC9kZXYvdmlydHVhbF9uY2kpIG9yIGVtdWxhdGVkIFVTQiBORkMgZGV2aWNlcywgYm90aCBvZiB3aGljaCBhcmUgc3VwcG9ydGVkIGFuZCBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxNDoxNS40ODc4MDgxNVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MzM1MjUxOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxNDoxNS40ODgyNDcxMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3NjMzMDgxMDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIHZhbGlkYXRpb24gY2hlY2sgKGBza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVvZigqcnNwKWApIGluIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KClgIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBmcm9tIGBza2ItXFx1MDAzZWRhdGFgIHdoZW4gcGFyc2luZyB0cnVuY2F0ZWQgTkNJIHJlc3BvbnNlIHBhY2tldHMuIE91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFyZSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGJ1Z3MgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzAyOGRkYWU0ZjlmYjY2OThiZDUxNTdmNDBlOTQ3NmFjMjcxNDliNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDE3OjEyOjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvcnNwLmMgYi9uZXQvbmZjL25jaS9yc3AuY1xuaW5kZXggYjBhYjRmNWFjYmNlOC4uNzJiNzQ4ZjBiZTlmMiAxMDA2NDRcbi0tLSBhL25ldC9uZmMvbmNpL3JzcC5jXG4rKysgYi9uZXQvbmZjL25jaS9yc3AuY1xuQEAgLTMxMiw2ICszMTIsMTAgQEAgc3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcdHByX2RlYnVnKFwic3RhdHVzIDB4JXhcXG5cIiwgc3RhdHVzKTtcbiBcbiBcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykge1xuK1x0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKCpyc3ApKSB7XG4rXHRcdFx0c3RhdHVzID0gTkNJX1NUQVRVU19TWU5UQVhfRVJST1I7XG4rXHRcdFx0Z290byBleGl0O1xuK1x0XHR9XG4gXHRcdHJzcCA9IChzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwICopc2tiLVx1MDAzZWRhdGE7XG4gXG4gXHRcdGNvbm5faW5mbyA9IGRldm1fa3phbGxvYyhcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTQ6MTUuNDg4MjQ4MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MjUyNDc5MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBFdmFsdWF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCB0byBgbmV0L25mYy9uY2kvcnNwLmNgIHdhcnJhbnRzIGl0cyBvd24gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcmVxdWVzdCBpcyBzdHJhaWdodGZvcndhcmQ6IGRldGVybWluZSBpZiBLTVNBTiBvciBLQVNBTiBpcyB0aGUgYmV0dGVyIGNob2ljZSBmb3IgdGhpcyBwYXRjaCwgcHJvYmFibHkgYXMgcGFydCBvZiBhIHN5emthbGxlciBzZXR1cC4gVGhlIGNvbnRleHQgaGVyZSBpcyBwcmV0dHkgc3RhbmRhcmQ6IGl0J3MgYSBjb2RlIHJldmlldyBhbmQgd2UncmUgc2VsZWN0aW5nIHRoZSByaWdodCBzYW5pdGl6ZXIuIFNldmVyaXR5LXdpc2UsIGl0J3MgbW9yZSBvZiBhIGJlbmlnbiwgZGVmZW5zaXZlIFFBIGVmZm9ydDsgd2UncmUgdHJpYWdpbmcgc2FuaXRpemVycy5cblxuQWxyaWdodCwgdGltZSB0byBnZXQgaW50byB0aGUgY29kZS4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgYG5ldC9uZmMvbmNpL3JzcC5jYCBhcm91bmQgbGluZSAzMTIuIFRoYXQncyB3aGVyZSB0aGUgcmVsZXZhbnQgbG9naWMgbXVzdCBsaWUuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIHRoZXJlLiBJJ2xsIGxvb2sgZm9yIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IG1pZ2h0IHNsaXAgcGFzdCBLQVNBTi4gV2UgbmVlZCB0byBhc3Nlc3MgdGhlIHNwZWNpZmljIGRhdGEgZmxvd3MgYW5kIGlmIHRoZXJlJ3MgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmFjZSBjb25kaXRpb25zLCBvciBzaW1pbGFyIGlzc3VlcyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgYnkgS01TQU4uIFRpbWUgdG8gZGlnIGluIGFuZCBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxNDoyMy43NDA3MzExOTFaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvcnNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzAwOlxcdFxcbiAzMDE6XFx0XFx0cHJfZGVidWcoXFxcInN0YXR1cyAweCV4XFxcXG5cXFwiLCBzdGF0dXMpO1xcbiAzMDI6XFx0XFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBzdGF0dXMpO1xcbiAzMDM6XFx0fVxcbiAzMDQ6XFx0XFxuIDMwNTpcXHRzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbiAzMDY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIDMwNzpcXHR7XFxuIDMwODpcXHRcXHRfX3U4IHN0YXR1cyA9IHNrYi1cXHUwMDNlZGF0YVswXTtcXG4gMzA5OlxcdFxcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm8gPSBOVUxMO1xcbiAzMTA6XFx0XFx0Y29uc3Qgc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCAqcnNwO1xcbiAzMTE6XFx0XFxuIDMxMjpcXHRcXHRwcl9kZWJ1ZyhcXFwic3RhdHVzIDB4JXhcXFxcblxcXCIsIHN0YXR1cyk7XFxuIDMxMzpcXHRcXG4gMzE0OlxcdFxcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykge1xcbiAzMTU6XFx0XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2Mgc2l6ZW9mKCpyc3ApKSB7XFxuIDMxNjpcXHRcXHRcXHRcXHRzdGF0dXMgPSBOQ0lfU1RBVFVTX1NZTlRBWF9FUlJPUjtcXG4gMzE3OlxcdFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4gMzE4OlxcdFxcdFxcdH1cXG4gMzE5OlxcdFxcdFxcdHJzcCA9IChzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwICopc2tiLVxcdTAwM2VkYXRhO1xcbiAzMjA6XFx0XFxuIDMyMTpcXHRcXHRcXHRjb25uX2luZm8gPSBkZXZtX2t6YWxsb2MoXFx1MDAyNm5kZXYtXFx1MDAzZW5mY19kZXYtXFx1MDAzZWRldixcXG4gMzIyOlxcdFxcdFxcdFxcdFxcdFxcdCBzaXplb2YoKmNvbm5faW5mbyksIEdGUF9LRVJORUwpO1xcbiAzMjM6XFx0XFx0XFx0aWYgKCFjb25uX2luZm8pIHtcXG4gMzI0OlxcdFxcdFxcdFxcdHN0YXR1cyA9IE5DSV9TVEFUVVNfUkVKRUNURUQ7XFxuIDMyNTpcXHRcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuIDMyNjpcXHRcXHRcXHR9XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdFxcdGNvbm5faW5mby1cXHUwMDNlZGVzdF9wYXJhbXMgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNm5kZXYtXFx1MDAzZW5mY19kZXYtXFx1MDAzZWRldixcXG4gMzI5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyksXFxuIDMzMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMKTtcXG4gMzMxOlxcdFxcdFxcdGlmICghY29ubl9pbmZvLVxcdTAwM2VkZXN0X3BhcmFtcykge1xcbiAzMzI6XFx0XFx0XFx0XFx0c3RhdHVzID0gTkNJX1NUQVRVU19SRUpFQ1RFRDtcXG4gMzMzOlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9jb25uX2luZm87XFxuIDMzNDpcXHRcXHRcXHR9XFxuIDMzNTpcXHRcXG4gMzM2OlxcdFxcdFxcdGNvbm5faW5mby1cXHUwMDNlZGVzdF90eXBlID0gbmRldi1cXHUwMDNlY3VyX2Rlc3RfdHlwZTtcXG4gMzM3OlxcdFxcdFxcdGNvbm5faW5mby1cXHUwMDNlZGVzdF9wYXJhbXMtXFx1MDAzZWlkID0gbmRldi1cXHUwMDNlY3VyX3BhcmFtcy5pZDtcXG4gMzM4OlxcdFxcdFxcdGNvbm5faW5mby1cXHUwMDNlZGVzdF9wYXJhbXMtXFx1MDAzZXByb3RvY29sID0gbmRldi1cXHUwMDNlY3VyX3BhcmFtcy5wcm90b2NvbDtcXG4gMzM5OlxcdFxcdFxcdGNvbm5faW5mby1cXHUwMDNlY29ubl9pZCA9IHJzcC1cXHUwMDNlY29ubl9pZDtcXG4gMzQwOlxcdFxcbiAzNDE6XFx0XFx0XFx0LyogTm90ZTogZGF0YV9leGNoYW5nZV9jYiBhbmQgZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0IG5lZWQgdG9cXG4gMzQyOlxcdFxcdFxcdCAqIGJlIHNwZWNpZnkgb3V0IG9mIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcXG4gMzQzOlxcdFxcdFxcdCAqL1xcbiAzNDQ6XFx0XFxuIDM0NTpcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y29ubl9pbmZvLVxcdTAwM2VsaXN0KTtcXG4gMzQ2OlxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWxpc3QsIFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbGlzdCk7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdFxcdGlmIChuZGV2LVxcdTAwM2VjdXJfcGFyYW1zLmlkID09IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZW5mY2VlX2lkKVxcbiAzNDk6XFx0XFx0XFx0XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvID0gY29ubl9pbmZvO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxNDoyMy43NDA4MDgxMloiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzQ0NTY5MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgc2l0dWF0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSwgdGhlIGRhdGEgaXQgaGFuZGxlcywgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBicm9hZGVyIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBmcmFtZXdvcmsuIE15IGV4cGVydGlzZSBkZW1hbmRzIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgcGFja2V0J3Mgc3RydWN0dXJlIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBjb250ZW50LiBMZXQgbWUgZGlzc2VjdCB0aGlzIHRob3JvdWdobHksIHN0YXJ0aW5nIHdpdGggaXRzIHNwZWNpZmljIGZ1bmN0aW9uLCBhbmQgZm9sbG93IHRoYXQgd2l0aCBob3cgaXQgZ2V0cyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDEzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxNDoyNS40ODUzODA3NDVaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvcnNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcbiAzNTE6XFx0XFx0XFx0Y29ubl9pbmZvLVxcdTAwM2Vjb25uX2lkID0gcnNwLVxcdTAwM2Vjb25uX2lkO1xcbiAzNTI6XFx0XFx0XFx0Y29ubl9pbmZvLVxcdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuID0gcnNwLVxcdTAwM2VtYXhfY3RybF9wa3RfcGF5bG9hZF9sZW47XFxuIDM1MzpcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWNyZWRpdHNfY250LCByc3AtXFx1MDAzZWNyZWRpdHNfY250KTtcXG4gMzU0OlxcdFxcdH1cXG4gMzU1OlxcdFxcbiAzNTY6XFx0ZnJlZV9jb25uX2luZm86XFxuIDM1NzpcXHRcXHRpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfUkVKRUNURUQpXFxuIDM1ODpcXHRcXHRcXHRkZXZtX2tmcmVlKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIGNvbm5faW5mbyk7XFxuIDM1OTpcXHRleGl0OlxcbiAzNjA6XFx0XFxuIDM2MTpcXHRcXHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7XFxuIDM2MjpcXHR9XFxuIDM2MzpcXHRcXG4gMzY0OlxcdHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4gMzY1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIDM2NjpcXHR7XFxuIDM2NzpcXHRcXHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xcbiAzNjg6XFx0XFx0X191OCBzdGF0dXMgPSBza2ItXFx1MDAzZWRhdGFbMF07XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdHByX2RlYnVnKFxcXCJzdGF0dXMgMHgleFxcXFxuXFxcIiwgc3RhdHVzKTtcXG4gMzcxOlxcdFxcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykge1xcbiAzNzI6XFx0XFx0XFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LFxcbiAzNzM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5kZXYtXFx1MDAzZWN1cl9jb25uX2lkKTtcXG4gMzc0OlxcdFxcdFxcdGlmIChjb25uX2luZm8pIHtcXG4gMzc1OlxcdFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWxpc3QpO1xcbiAzNzY6XFx0XFx0XFx0XFx0aWYgKGNvbm5faW5mbyA9PSBuZGV2LVxcdTAwM2VyZl9jb25uX2luZm8pXFxuIDM3NzpcXHRcXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xcbiAzNzg6XFx0XFx0XFx0XFx0ZGV2bV9rZnJlZShcXHUwMDI2bmRldi1cXHUwMDNlbmZjX2Rldi1cXHUwMDNlZGV2LCBjb25uX2luZm8tXFx1MDAzZWRlc3RfcGFyYW1zKTtcXG4gMzc5OlxcdFxcdFxcdFxcdGRldm1fa2ZyZWUoXFx1MDAyNm5kZXYtXFx1MDAzZW5mY19kZXYtXFx1MDAzZWRldiwgY29ubl9pbmZvKTtcXG4gMzgwOlxcdFxcdFxcdH1cXG4gMzgxOlxcdFxcdH1cXG4gMzgyOlxcdFxcdG5jaV9yZXFfY29tcGxldGUobmRldiwgc3RhdHVzKTtcXG4gMzgzOlxcdH1cXG4gMzg0OlxcdFxcbiAzODU6XFx0dm9pZCBuY2lfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzg2OlxcdHtcXG4gMzg3OlxcdFxcdF9fdTE2IHJzcF9vcGNvZGUgPSBuY2lfb3Bjb2RlKHNrYi1cXHUwMDNlZGF0YSk7XFxuIDM4ODpcXHRcXG4gMzg5OlxcdFxcdC8qIHdlIGdvdCBhIHJzcCwgc3RvcCB0aGUgY21kIHRpbWVyICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjE0OjI1LjQ4NTQ2NzU3NVoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NjM1ODIzMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIEtNU0FOIE5lZWRlZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBjcnVjaWFsIGNoZWNrLiBCZWZvcmUsIHdlIGhhZCBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgY2FzdGluZyBgc2tiLVx1MDAzZWRhdGFgIHRvIGEgcmVzcG9uc2Ugc3RydWN0IChgcnNwYCkgYW5kIHRoZW4gcmVhZGluZyBmaWVsZHMgbGlrZSBgY29ubl9pZGAsIGBtYXhfY3RybF9wa3RfcGF5bG9hZF9sZW5gLCBhbmQgYGNyZWRpdHNfY250YC4gVGhlIHByb2JsZW0gd2FzLCBpZiB0aGUgYHNrYi1cdTAwM2VsZW5gICh0aGUgYWN0dWFsIHBhY2tldCBsZW5ndGgpIHdhcyBzbWFsbGVyIHRoYW4gdGhlIGV4cGVjdGVkIHNpemUgb2YgdGhhdCByZXNwb25zZSBzdHJ1Y3QsIHdlIHdlcmUgcG90ZW50aWFsbHkgcmVhZGluZyAqcGFzdCogdGhlIGVuZCBvZiB0aGUgYHNrYi1cdTAwM2VkYXRhYCBidWZmZXIgLSBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIGEgY2xhc3NpYyBidWZmZXIgb3ZlcnJlYWQuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhhdCwgb3IgZXZlbiBLQVNBTiBzbGFiIE9PQiBpbiBtb3JlIHN1YnRsZSBjYXNlcy5cblxuVGhlIHBhdGNoJ3MgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgYWRkcyBhIHNpemUgY2hlY2sgKGBza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKnJzcClgKSB0byBlbnN1cmUgdGhlIHJlc3BvbnNlIHBhY2tldCBpcyBsYXJnZSBlbm91Z2ggYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmVhZCBhbnkgb2YgaXRzIGZpZWxkcy4gU28sIGluIGVmZmVjdCwgd2UncmUgaGFyZGVuaW5nIHRoZSBjb2RlIGFnYWluc3QgYSBzaW1wbGUgT09CIHJlYWQuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBmb3IgS01TQU46IGRvZXMgdGhpcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBBYnNvbHV0ZWx5IG5vdC4gVGhlIGBza2JgIGRhdGEgaXMgY29taW5nIGZyb20gdGhlIGRyaXZlciBvciBkZXZpY2UgLSBpdCdzIGFscmVhZHkgZmlsbGVkIHdpdGggZGF0YS4gUmVhZGluZyBwYXN0IHRoZSBsZW5ndGggaXMgdGhlIHZ1bG5lcmFiaWxpdHksIG5vdCBhbiB1bmluaXRpYWxpemVkIHZhbHVlLlxuXG5MZXQncyBydW4gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2U6XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vcGUuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuXG4zLiAgQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBsYXRlciB1bmluaXRpYWxpemVkIHJlYWRzPyBOb3BlLCBqdXN0IHRoZSBib3VuZHMgY2hlY2suXG40LiAgQm91bmRzIGNoZWNrcyB0aGF0IGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyBOb3BlLCBpdCB0aWdodGVucyB0aGUgYm91bmRzLlxuXG5BY2NvcmRpbmcgdG8gdGhlIHJ1bGVzLCB3ZSBzaG91bGRuJ3QgZXZlbiBjb25zaWRlciBLTVNBTiBpZiBhIGJ1ZyBjYW4gYmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIHdoaWNoIGlzIGRlZmluaXRlbHkgdGhlIGNhc2UgaGVyZS4gVGhpcyBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5LiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFsbCBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCwgb3IgYm91bmRzLWNoZWNrZWQgZm9yIHJlYWRzLiBJdCdzIGEgcHJldmVudGF0aXZlIG1lYXN1cmUgYWdhaW5zdCBhIGJ1ZmZlciBvdmVycmVhZCwgd2hpY2ggS0FTQU4gd291bGQgcmVsaWFibHkgY2F0Y2guIE5vIEtNU0FOIG5lZWRlZC5cblxuU28sIGxldCdzIGZvcm1hbGl6ZSB0aGUgcmVzcG9uc2U6XG5cbiogICAqKk5lZWRzS01TQU46IGZhbHNlKipcbiogICAqKktNU0FOUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbGVuZ3RoIHZhbGlkYXRpb24gY2hlY2sgKGBza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKnJzcClgKSBpbiBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgYmVmb3JlIHJlYWRpbmcgcmVzcG9uc2UgZmllbGRzIGZyb20gYHNrYi1cdTAwM2VkYXRhYC4gVGhpcyBwcmV2ZW50cyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgKE9PQiBvdmVycmVhZCkgb24gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKS4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0YWNrIHZhcmlhYmxlcywgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBJdCBzaW1wbHkgcHJldmVudHMgcmVhZGluZyBiZXlvbmQgdGhlIHBhY2tldCdzIGJvdW5kYXJpZXMgYW5kIGRvZXMgbm90IGV4cG9zZSBvciBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBLTVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0OCwiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxNDozMy4xMjEyOTM2MDNaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggdmFsaWRhdGlvbiBjaGVjayAoYHNrYi1cXHUwMDNlbGVuIFxcdTAwM2Mgc2l6ZW9mKCpyc3ApYCkgaW4gYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoKWAgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIGZyb20gYHNrYi1cXHUwMDNlZGF0YWAgd2hlbiBwYXJzaW5nIHRydW5jYXRlZCBOQ0kgcmVzcG9uc2UgcGFja2V0cy4gT3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgYXJlIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgYnVncyBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIHZhbGlkYXRpb24gY2hlY2sgKGBza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVvZigqcnNwKWApIGluIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KClgIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBmcm9tIGBza2ItXFx1MDAzZWRhdGFgIHdoZW4gcGFyc2luZyB0cnVuY2F0ZWQgTkNJIHJlc3BvbnNlIHBhY2tldHMuIE91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFyZSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGJ1Z3MgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowt4p7z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 17:09:16 +0000 UTC FinishedAt: 2026-09-12 17:14:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI", "NFC_VIRTUAL_NCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI", "NFC_VIRTUAL_NCI" ], "series_id": "1a4e0f75-80e4-4554-ada4-fa54c189a407" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nci_core_conn_create_rsp_packet", "nci_rsp_packet" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "df2908090cda368b01ff43709f51890076c56157", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfTkNJJiMzNDssCiAgICAmIzM0O05GQ19WSVJUVUFMX05DSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmNpX3JzcF9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIHZhbGlkYXRpb24gY2hlY2sgKGBza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKnJzcClgKSBpbiBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCgpYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgc2tiLVx1MDAzZWRhdGFgIHdoZW4gcGFyc2luZyB0cnVuY2F0ZWQgTkNJIHJlc3BvbnNlIHBhY2tldHMuIE91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFyZSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGJ1Z3MgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgb24gaW5jb21pbmcgTkNJIHJlc3BvbnNlIHBhY2tldHMgaW4gbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCB2aXJ0dWFsIE5DSSBkZXZpY2VzIChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJIC9kZXYvdmlydHVhbF9uY2kpIG9yIGVtdWxhdGVkIFVTQiBORkMgZGV2aWNlcywgYm90aCBvZiB3aGljaCBhcmUgc3VwcG9ydGVkIGFuZCBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzAyOGRkYWU0ZjlmYjY2OThiZDUxNTdmNDBlOTQ3NmFjMjcxNDliNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDE3OjEyOjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL3JzcC5jIGIvbmV0L25mYy9uY2kvcnNwLmNcbmluZGV4IGIwYWI0ZjVhY2JjZTguLjcyYjc0OGYwYmU5ZjIgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9yc3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvcnNwLmNcbkBAIC0zMTIsNiAmIzQzOzMxMiwxMCBAQCBzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIFx0cHJfZGVidWcoXCYjMzQ7c3RhdHVzIDB4JXhcXG5cJiMzNDssIHN0YXR1cyk7XG4gXG4gXHRpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfT0spIHtcbiYjNDM7XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKnJzcCkpIHtcbiYjNDM7XHRcdFx0c3RhdHVzID0gTkNJX1NUQVRVU19TWU5UQVhfRVJST1I7XG4mIzQzO1x0XHRcdGdvdG8gZXhpdDtcbiYjNDM7XHRcdH1cbiBcdFx0cnNwID0gKHN0cnVjdCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3AgKilza2ItXHUwMDNlZGF0YTtcbiBcbiBcdFx0Y29ubl9pbmZvID0gZGV2bV9remFsbG9jKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDssCiAgICAmIzM0O05GQ19OQ0kmIzM0OywKICAgICYjMzQ7TkZDX1ZJUlRVQUxfTkNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfcnNwX3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIG9uIGluY29taW5nIE5DSSByZXNwb25zZSBwYWNrZXRzIGluIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHRocm91Z2ggdmlydHVhbCBOQ0kgZGV2aWNlcyAoQ09ORklHX05GQ19WSVJUVUFMX05DSSAvZGV2L3ZpcnR1YWxfbmNpKSBvciBlbXVsYXRlZCBVU0IgTkZDIGRldmljZXMsIGJvdGggb2Ygd2hpY2ggYXJlIHN1cHBvcnRlZCBhbmQgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcwMjhkZGFlNGY5ZmI2Njk4YmQ1MTU3ZjQwZTk0NzZhYzI3MTQ5YjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAxNzoxMjo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL3JzcC5jIGIvbmV0L25mYy9uY2kvcnNwLmMKaW5kZXggYjBhYjRmNWFjYmNlOC4uNzJiNzQ4ZjBiZTlmMiAxMDA2NDQKLS0tIGEvbmV0L25mYy9uY2kvcnNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvcnNwLmMKQEAgLTMxMiw2ICYjNDM7MzEyLDEwIEBAIHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsCiAJcHJfZGVidWcoJiMzNDtzdGF0dXMgMHgleFxuJiMzNDssIHN0YXR1cyk7CiAKIAlpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfT0spIHsKJiM0MzsJCWlmIChza2ItJmd0O2xlbiAmbHQ7IHNpemVvZigqcnNwKSkgewomIzQzOwkJCXN0YXR1cyA9IE5DSV9TVEFUVVNfU1lOVEFYX0VSUk9SOwomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsJCX0KIAkJcnNwID0gKHN0cnVjdCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3AgKilza2ItJmd0O2RhdGE7CiAKIAkJY29ubl9pbmZvID0gZGV2bV9remFsbG9jKCZhbXA7bmRldi0mZ3Q7bmZjX2Rldi0mZ3Q7ZGV2LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTE2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIFBhdGNoJiMzOTtzIFN1aXRhYmlsaXR5IGZvciBTeXprYWxsZXIgRnV6emluZyoqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCBpdHNlbGYgaXMgYWRkaW5nIGEgc2l6ZSBjaGVjayB0byBgbmV0L25mYy9uY2kvcnNwLmNgLiBTcGVjaWZpY2FsbHksIGl0IGNoZWNrcyBpZiBgc2tiLSZndDtsZW5gIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKCpyc3ApYCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBgcnNwYCBzdHJ1Y3QuIFRoaXMgaXMgYSBjbGFzc2ljIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHNwb3QsIGEgbWlzc2luZyBib3VuZHMgY2hlY2suIElmIHRoZSBwYWNrZXQgcmVjZWl2ZWQgaGFzIGluc3VmZmljaWVudCBzaXplLCBhY2Nlc3NpbmcgYHNrYi0mZ3Q7ZGF0YWAgbWlnaHQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3IsIGluIGV4dHJlbWUgY2FzZXMsIGEgY3Jhc2guCgpNeSBpbml0aWFsIGh1bmNoLCBiYXNlZCBwdXJlbHkgb24gdGhpcyBkaWZmLCBpcyB0aGF0IGl0JiMzOTtzICpsaWtlbHkqIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIE1pc3NpbmcgYm91bmRzIGNoZWNrcyBhcmUgYSBmYXZvcml0ZSBwbGF5Z3JvdW5kIGZvciBmdXp6ZXJzIGxpa2Ugc3l6a2FsbGVyLgoKVG8gZ2V0IGEgYmV0dGVyIGdyaXAsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb250ZXh0IGFyb3VuZCBgbmV0L25mYy9uY2kvcnNwLmNgIHdpdGggc29tZXRoaW5nIGxpa2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBORkMgKE5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbikgc3Vic3lzdGVtIGludGVyYWN0cyB3aXRoIHRoaXMgcGFydGljdWxhciBmaWxlLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgYSBjcml0aWNhbCBkYXRhIHBhdGggb3IganVzdCBzb21lIHJhcmVseS11c2VkIGRlYnVnIGZ1bmN0aW9uLiBJZiBJIGNhbiB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIHVzZWQsIEkgY2FuIGV2YWx1YXRlIGhvdyBnb29kIG9mIGEgdGFyZ2V0IGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvcnNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFxuIDMwMTpcdFx0cHJfZGVidWcoXCYjMzQ7c3RhdHVzIDB4JXhcXG5cJiMzNDssIHN0YXR1cyk7XG4gMzAyOlx0XHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7XG4gMzAzOlx0fVxuIDMwNDpcdFxuIDMwNTpcdHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gMzA2Olx0XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMwNzpcdHtcbiAzMDg6XHRcdF9fdTggc3RhdHVzID0gc2tiLVx1MDAzZWRhdGFbMF07XG4gMzA5Olx0XHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvID0gTlVMTDtcbiAzMTA6XHRcdGNvbnN0IHN0cnVjdCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3AgKnJzcDtcbiAzMTE6XHRcbiAzMTI6XHRcdHByX2RlYnVnKFwmIzM0O3N0YXR1cyAweCV4XFxuXCYjMzQ7LCBzdGF0dXMpO1xuIDMxMzpcdFxuIDMxNDpcdFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XG4gMzE1Olx0XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKnJzcCkpIHtcbiAzMTY6XHRcdFx0XHRzdGF0dXMgPSBOQ0lfU1RBVFVTX1NZTlRBWF9FUlJPUjtcbiAzMTc6XHRcdFx0XHRnb3RvIGV4aXQ7XG4gMzE4Olx0XHRcdH1cbiAzMTk6XHRcdFx0cnNwID0gKHN0cnVjdCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3AgKilza2ItXHUwMDNlZGF0YTtcbiAzMjA6XHRcbiAzMjE6XHRcdFx0Y29ubl9pbmZvID0gZGV2bV9remFsbG9jKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsXG4gMzIyOlx0XHRcdFx0XHRcdCBzaXplb2YoKmNvbm5faW5mbyksIEdGUF9LRVJORUwpO1xuIDMyMzpcdFx0XHRpZiAoIWNvbm5faW5mbykge1xuIDMyNDpcdFx0XHRcdHN0YXR1cyA9IE5DSV9TVEFUVVNfUkVKRUNURUQ7XG4gMzI1Olx0XHRcdFx0Z290byBleGl0O1xuIDMyNjpcdFx0XHR9XG4gMzI3Olx0XG4gMzI4Olx0XHRcdGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcyA9IGRldm1fa3phbGxvYyhcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LFxuIDMyOTpcdFx0XHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyksXG4gMzMwOlx0XHRcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4gMzMxOlx0XHRcdGlmICghY29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zKSB7XG4gMzMyOlx0XHRcdFx0c3RhdHVzID0gTkNJX1NUQVRVU19SRUpFQ1RFRDtcbiAzMzM6XHRcdFx0XHRnb3RvIGZyZWVfY29ubl9pbmZvO1xuIDMzNDpcdFx0XHR9XG4gMzM1Olx0XG4gMzM2Olx0XHRcdGNvbm5faW5mby1cdTAwM2VkZXN0X3R5cGUgPSBuZGV2LVx1MDAzZWN1cl9kZXN0X3R5cGU7XG4gMzM3Olx0XHRcdGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcy1cdTAwM2VpZCA9IG5kZXYtXHUwMDNlY3VyX3BhcmFtcy5pZDtcbiAzMzg6XHRcdFx0Y29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zLVx1MDAzZXByb3RvY29sID0gbmRldi1cdTAwM2VjdXJfcGFyYW1zLnByb3RvY29sO1xuIDMzOTpcdFx0XHRjb25uX2luZm8tXHUwMDNlY29ubl9pZCA9IHJzcC1cdTAwM2Vjb25uX2lkO1xuIDM0MDpcdFxuIDM0MTpcdFx0XHQvKiBOb3RlOiBkYXRhX2V4Y2hhbmdlX2NiIGFuZCBkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgbmVlZCB0b1xuIDM0MjpcdFx0XHQgKiBiZSBzcGVjaWZ5IG91dCBvZiBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0XG4gMzQzOlx0XHRcdCAqL1xuIDM0NDpcdFxuIDM0NTpcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZjb25uX2luZm8tXHUwMDNlbGlzdCk7XG4gMzQ2Olx0XHRcdGxpc3RfYWRkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0LCBcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19saXN0KTtcbiAzNDc6XHRcbiAzNDg6XHRcdFx0aWYgKG5kZXYtXHUwMDNlY3VyX3BhcmFtcy5pZCA9PSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlbmZjZWVfaWQpXG4gMzQ5Olx0XHRcdFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbyA9IGNvbm5faW5mbztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDEzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIE5DSSBQYWNrZXQgSGFuZGxpbmcqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgaXMgdXNlZC4gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbiBzcGVjaWZpY2FsbHksIGFuZCB0aGVuLCBtb3JlIGJyb2FkbHksIG1hcCBvdXQgdGhlIGVudGlyZSByZWNlaXZlIGFuZCBkaXNwYXRjaCBwcm9jZXNzIGZvciBOQ0kgcGFja2V0cyB3aXRoaW4gdGhpcyBzeXN0ZW0uIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGRhdGEgZmxvdyBmcm9tIHRoZSBwaHlzaWNhbCBsYXllciB1cCB0byB0aGUgcG9pbnQgd2hlcmUgdGhpcyByZXNwb25zZSBwYWNrZXQgaXMgdWx0aW1hdGVseSBoYW5kbGVkLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgdGhpcyBmdW5jdGlvbiBjYWxsIGlzIGEga2V5IHBpZWNlIGluIHRoZSBjb25uZWN0aW9uIHNldHVwLCB3aGljaCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0sIGJ1dCBJJiMzOTtsbCBmb2N1cyBvbiBob3cgdGhlIHBhY2tldCBpcyByZWNlaXZlZCwgdGhlIHN1YnNlcXVlbnQgcHJvY2Vzc2luZyBpdCB1bmRlcmdvZXMsIGFuZCBob3cgaXQgaXMgcm91dGVkIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyLiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgZm9yIHBhY2tldCBpZGVudGlmaWNhdGlvbiwgdGhlIHJvbGUgb2YgYW55IGludGVycnVwdCBoYW5kbGluZywgYW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHF1ZXVpbmcgb3IgYnVmZmVyaW5nIHVzZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgcG9pbnRzIG9mIGVycm9yLCBhbmQgYW55IGFyZWFzIHRoYXQgbWlnaHQgYmVuZWZpdCBmcm9tIG9wdGltaXphdGlvbiwgZ2l2ZW4gbXkgcGFzdCBleHBlcmllbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvcnNwLmM9Mjk2PXN0YXRpYyB2b2lkIG5jaV9uZmNlZV9tb2RlX3NldF9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuLS1cbm5ldC9uZmMvbmNpL3JzcC5jLTMwNC1cbm5ldC9uZmMvbmNpL3JzcC5jOjMwNTpzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxubmV0L25mYy9uY2kvcnNwLmMtMzA2LVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL25jaS9yc3AuYy0zNDEtXHRcdC8qIE5vdGU6IGRhdGFfZXhjaGFuZ2VfY2IgYW5kIGRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCBuZWVkIHRvXG5uZXQvbmZjL25jaS9yc3AuYzozNDI6XHRcdCAqIGJlIHNwZWNpZnkgb3V0IG9mIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcbm5ldC9uZmMvbmNpL3JzcC5jLTM0My1cdFx0ICovXG4tLVxubmV0L25mYy9uY2kvcnNwLmM9Mzg1PXZvaWQgbmNpX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9uY2kvcnNwLmMtNDIzLVx0Y2FzZSBOQ0lfT1BfQ09SRV9DT05OX0NSRUFURV9SU1A6XG5uZXQvbmZjL25jaS9yc3AuYzo0MjQ6XHRcdG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQobmRldiwgc2tiKTtcbm5ldC9uZmMvbmNpL3JzcC5jLTQyNS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA4MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBuY2lfcnNwX3BhY2tldGAgQ2FsbCBTaXRlcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgbmNpX3JzcF9wYWNrZXRgLiBUaW1lIHRvIHRyYWNrIGRvd24gYWxsIHRoZSBjYWxscyB0byB0aGF0IGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBkaWZmZXJlbnQgY29udGV4dHMgaW4gd2hpY2ggaXQmIzM5O3MgYmVpbmcgaW52b2tlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHJlc3BvbnNlIHBhY2tldHMgYXJlIGJlaW5nIGhhbmRsZWQsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIHN0YXJ0IHRvIHJlYXNvbiBhYm91dCBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6YXRpb25zLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoZXJlJiMzOTtzIGFueSB1bnVzdWFsIG9yIHVuZXhwZWN0ZWQgY29udHJvbCBmbG93IHdoZW4gdGhhdCByb3V0aW5lIGlzIGVudGVyZWQuIFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZGF0YSBkZXBlbmRlbmNpZXM/IExldCYjMzk7cyB0cmFjZSBpdCBhbmQgc2VlIHdoZXJlIHRoZSBkYXRhIGNvbWVzIGZyb20gYW5kIHdoZXJlIGl0IGdvZXMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmNpX3JzcF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjL25jaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9jb3JlLmM9MTU1OT1zdGF0aWMgdm9pZCBuY2lfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTE1NzgtXHRcdGNhc2UgTkNJX01UX1JTUF9QS1Q6XG5uZXQvbmZjL25jaS9jb3JlLmM6MTU3OTpcdFx0XHRuY2lfcnNwX3BhY2tldChuZGV2LCBza2IpO1xubmV0L25mYy9uY2kvY29yZS5jLTE1ODAtXHRcdFx0YnJlYWs7XG4tLVxubmV0L25mYy9uY2kvcnNwLmM9MzY0PXN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi0tXG5uZXQvbmZjL25jaS9yc3AuYy0zODQtXG5uZXQvbmZjL25jaS9yc3AuYzozODU6dm9pZCBuY2lfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9uZmMvbmNpL3JzcC5jLTM4Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU1MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gUmVhY2hpbmcgTkNJIGluIGEgRnV6emluZyBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgd2UgY2FuIGFjdHVhbGx5IGdldCBhdCB0aGUgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGZyb20gd2l0aGluIHN0YW5kYXJkIGZ1enppbmcgc2V0dXBzLCBsaWtlIFN5emthbGxlci4gTXkgZ3V0IHRlbGxzIG1lIGl0ICpzaG91bGQqIGJlIHBvc3NpYmxlLCBidXQgdGhlIHNwZWNpZmljcyBhcmUgZ29pbmcgdG8gbWF0dGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgTkZDL05DSSBkZXZpY2VzIGFyZSBlbXVsYXRlZCBvciBicm91Z2h0IGludG8gZXhpc3RlbmNlLgoKRmlyc3QsIGxldCYjMzk7cyBleHBsb3JlIGlmIHRoZXJlIGFyZSBhbHJlYWR5IHZpcnR1YWwgcmVwcmVzZW50YXRpb25zIG9mIE5GQy9OQ0kuIEkmIzM5O20gdGhpbmtpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIHNvbWV0aGluZyBsaWtlICYjMzQ7dmlydHVhbF9uZmMsJiMzNDsgJiMzNDtyYXcgbmNpLCYjMzQ7IG9yIG1heWJlIGV2ZW4gYSBtb3JlIGRldGFpbGVkICYjMzQ7c2ltdWxhdGVkIG5mYy4mIzM0OyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgdG8gc2VlIHdoYXQmIzM5O3Mgb3V0IHRoZXJlLgoKVG8gc3RhcnQsIEkmIzM5O2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzdGFydCB3aXRoIGBkcml2ZXJzL25mY2AgYW5kIGFsc28gY2hlY2sgYG5ldC9uZmNgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIG1vc3QgbGlrZWx5IHBsYWNlcyB3aGVyZSBhbnkgcmVsZXZhbnQgZW11bGF0aW9uIG9yIGRyaXZlciBzdXBwb3J0IHdvdWxkIHJlc2lkZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZ3JvdW5kIHRydXRoIG9uIHRoZSB2aXJ0dWFsIE5GQy9OQ0kgb3B0aW9ucywgaWYgdGhleSBldmVuIGV4aXN0LiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBoYXZlIGEgYmV0dGVyIHBpY3R1cmUgb2YgaG93IHJlYWNoYWJsZSB0aGVzZSBpbnRlcmZhY2VzIGFyZSB2aWEgU3l6a2FsbGVyJiMzOTtzIHN0YW5kYXJkIGRldmljZSBtb2RlbHMsIHdoZXRoZXIgaXQgYmUgdmlydHVhbCBkZXZpY2VzLCBVU0IsIG9yIHBvdGVudGlhbGx5IGV2ZW4gdmlydHVhbCBORkMgaW50ZXJmYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmNpX3JlY3ZfZnJhbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvZmRwL2kyYy5jPTIyMj1zdGF0aWMgaXJxcmV0dXJuX3QgZmRwX25jaV9pMmNfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpwaHlfaWQpXG4tLVxuZHJpdmVycy9uZmMvZmRwL2kyYy5jLTIzOC1cdGlmIChza2IgIT0gTlVMTClcbmRyaXZlcnMvbmZjL2ZkcC9pMmMuYzoyMzk6XHRcdG5jaV9yZWN2X2ZyYW1lKHBoeS1cdTAwM2VuZGV2LCBza2IpO1xuZHJpdmVycy9uZmMvZmRwL2kyYy5jLTI0MC1cbi0tXG5kcml2ZXJzL25mYy9uZmNtcnZsL2kyYy5jPTY0PXN0YXRpYyBpcnFyZXR1cm5fdCBuZmNtcnZsX2kyY19pbnRfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpkcnZfZGF0YV9wdHIpXG4tLVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9pMmMuYy04Ni1cdGRlZmF1bHQ6XG5kcml2ZXJzL25mYy9uZmNtcnZsL2kyYy5jOjg3Olx0XHRpZiAobmZjbXJ2bF9uY2lfcmVjdl9mcmFtZShkcnZfZGF0YS1cdTAwM2Vwcml2LCBza2IpIFx1MDAzYyAwKVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9pMmMuYy04OC1cdFx0XHRuZmNfZXJyKFx1MDAyNmRydl9kYXRhLVx1MDAzZWkyYy1cdTAwM2VkZXYsIFwmIzM0O2NvcnJ1cHRlZCBSWCBwYWNrZXRcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmZjL25mY21ydmwvbWFpbi5jPTE5Mj1FWFBPUlRfU1lNQk9MX0dQTChuZmNtcnZsX25jaV91bnJlZ2lzdGVyX2Rldik7XG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0xOTMtXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYzoxOTQ6aW50IG5mY21ydmxfbmNpX3JlY3ZfZnJhbWUoc3RydWN0IG5mY21ydmxfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmZjL25mY21ydmwvbWFpbi5jLTE5NS17XG4tLVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmMtMjEzLVx0aWYgKHRlc3RfYml0KE5GQ01SVkxfTkNJX1JVTk5JTkcsIFx1MDAyNnByaXYtXHUwMDNlZmxhZ3MpKVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmM6MjE0Olx0XHRuY2lfcmVjdl9mcmFtZShwcml2LVx1MDAzZW5kZXYsIHNrYik7XG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0yMTUtXHRlbHNlIHtcbi0tXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0yMjItfVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmM6MjIzOkVYUE9SVF9TWU1CT0xfR1BMKG5mY21ydmxfbmNpX3JlY3ZfZnJhbWUpO1xuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmMtMjI0LVxuLS1cbmRyaXZlcnMvbmZjL25mY21ydmwvbmZjbXJ2bC5oPTExOT12b2lkIG5mY21ydmxfbmNpX3VucmVnaXN0ZXJfZGV2KHN0cnVjdCBuZmNtcnZsX3ByaXZhdGUgKnByaXYpO1xuZHJpdmVycy9uZmMvbmZjbXJ2bC9uZmNtcnZsLmg6MTIwOmludCBuZmNtcnZsX25jaV9yZWN2X2ZyYW1lKHN0cnVjdCBuZmNtcnZsX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZmMvbmZjbXJ2bC9uZmNtcnZsLmgtMTIxLXN0cnVjdCBuZmNtcnZsX3ByaXZhdGUgKm5mY21ydmxfbmNpX3JlZ2lzdGVyX2RldihlbnVtIG5mY21ydmxfcGh5IHBoeSxcbi0tXG5kcml2ZXJzL25mYy9uZmNtcnZsL3NwaS5jPTI3PXN0YXRpYyBpcnFyZXR1cm5fdCBuZmNtcnZsX3NwaV9pbnRfaXJxX3RocmVhZF9mbihpbnQgaXJxLCB2b2lkICpkcnZfZGF0YV9wdHIpXG4tLVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9zcGkuYy00OC1cbmRyaXZlcnMvbmZjL25mY21ydmwvc3BpLmM6NDk6XHRpZiAobmZjbXJ2bF9uY2lfcmVjdl9mcmFtZShkcnZfZGF0YS1cdTAwM2Vwcml2LCBza2IpIFx1MDAzYyAwKVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9zcGkuYy01MC1cdFx0bmZjX2VycihcdTAwMjZkcnZfZGF0YS1cdTAwM2VzcGktXHUwMDNlZGV2LCBcJiMzNDtjb3JydXB0ZWQgUlggcGFja2V0XCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25mYy9uZmNtcnZsL3VhcnQuYz0xNTI9c3RhdGljIGludCBuZmNtcnZsX25jaV91YXJ0X3JlY3Yoc3RydWN0IG5jaV91YXJ0ICpudSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmZjL25mY21ydmwvdWFydC5jLTE1My17XG5kcml2ZXJzL25mYy9uZmNtcnZsL3VhcnQuYzoxNTQ6XHRyZXR1cm4gbmZjbXJ2bF9uY2lfcmVjdl9mcmFtZSgoc3RydWN0IG5mY21ydmxfcHJpdmF0ZSAqKW51LVx1MDAzZWRydl9kYXRhLFxuZHJpdmVycy9uZmMvbmZjbXJ2bC91YXJ0LmMtMTU1LVx0XHRcdFx0ICAgICAgc2tiKTtcbi0tXG5kcml2ZXJzL25mYy9uZmNtcnZsL3VzYi5jPTU2PXN0YXRpYyB2b2lkIG5mY21ydmxfYnVsa19jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4tLVxuZHJpdmVycy9uZmMvbmZjbXJ2bC91c2IuYy03Ni1cdFx0XHRcdCAgICAgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGgpO1xuZHJpdmVycy9uZmMvbmZjbXJ2bC91c2IuYzo3NzpcdFx0XHRpZiAobmZjbXJ2bF9uY2lfcmVjdl9mcmFtZShkcnZfZGF0YS1cdTAwM2Vwcml2LCBza2IpIFx1MDAzYyAwKVxuZHJpdmVycy9uZmMvbmZjbXJ2bC91c2IuYy03OC1cdFx0XHRcdG5mY19lcnIoXHUwMDI2ZHJ2X2RhdGEtXHUwMDNldWRldi1cdTAwM2VkZXYsXG4tLVxuZHJpdmVycy9uZmMvbnhwLW5jaS9pMmMuYz0xOTA9c3RhdGljIGlycXJldHVybl90IG54cF9uY2lfaTJjX2lycV90aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqcGh5X2lkKVxuLS1cbmRyaXZlcnMvbmZjL254cC1uY2kvaTJjLmMtMjQ4LVx0Y2FzZSBOWFBfTkNJX01PREVfTkNJOlxuZHJpdmVycy9uZmMvbnhwLW5jaS9pMmMuYzoyNDk6XHRcdG5jaV9yZWN2X2ZyYW1lKHBoeS1cdTAwM2VuZGV2LCBza2IpO1xuZHJpdmVycy9uZmMvbnhwLW5jaS9pMmMuYy0yNTAtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jPTIxMD1pbnQgczNmd3JuNV9yZWN2X2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jLTIxNC1cdGNhc2UgUzNGV1JONV9NT0RFX05DSTpcbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jOjIxNTpcdFx0cmV0dXJuIG5jaV9yZWN2X2ZyYW1lKG5kZXYsIHNrYik7XG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYy0yMTYtXHRjYXNlIFMzRldSTjVfTU9ERV9GVzpcbi0tXG5kcml2ZXJzL25mYy9zdC1uY2kvbmRsYy5jPTE0Nz1zdGF0aWMgdm9pZCBsbHRfbmRsY19yY3ZfcXVldWUoc3RydWN0IGxsdF9uZGxjICpuZGxjKVxuLS1cbmRyaXZlcnMvbmZjL3N0LW5jaS9uZGxjLmMtMTg4LVx0XHR9IGVsc2UgaWYgKChwY2IgXHUwMDI2IFBDQl9UWVBFX01BU0spID09IFBDQl9UWVBFX0RBVEFGUkFNRSkge1xuZHJpdmVycy9uZmMvc3QtbmNpL25kbGMuYzoxODk6XHRcdFx0bmNpX3JlY3ZfZnJhbWUobmRsYy1cdTAwM2VuZGV2LCBza2IpO1xuZHJpdmVycy9uZmMvc3QtbmNpL25kbGMuYy0xOTAtXHRcdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYz0xMTM9c3RhdGljIHNzaXplX3QgdmlydHVhbF9uY2lkZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMjgtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjEyOTpcdG5jaV9yZWN2X2ZyYW1lKHZkZXYtXHUwMDNlbmRldiwgc2tiKTtcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTMwLVx0cmV0dXJuIGNvdW50O1xuLS1cbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oPTI5MT1pbnQgbmNpX2NvcmVfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldik7XG5pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaC0yOTItXG5pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaDoyOTM6aW50IG5jaV9yZWN2X2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oLTI5NC1pbnQgbmNpX3NlbmRfZnJhbWUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xMzQzPUVYUE9SVF9TWU1CT0wobmNpX3VucmVnaXN0ZXJfZGV2aWNlKTtcbi0tXG5uZXQvbmZjL25jaS9jb3JlLmMtMTM0NS0vKipcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMzQ2OiAqIG5jaV9yZWN2X2ZyYW1lIC0gcmVjZWl2ZSBmcmFtZSBmcm9tIE5DSSBkcml2ZXJzXG5uZXQvbmZjL25jaS9jb3JlLmMtMTM0Ny0gKlxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYy0xMzUwLSAqL1xubmV0L25mYy9uY2kvY29yZS5jOjEzNTE6aW50IG5jaV9yZWN2X2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L25mYy9uY2kvY29yZS5jLTEzNTIte1xuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYy0xMzY2LX1cbm5ldC9uZmMvbmNpL2NvcmUuYzoxMzY3OkVYUE9SVF9TWU1CT0wobmNpX3JlY3ZfZnJhbWUpO1xubmV0L25mYy9uY2kvY29yZS5jLTEzNjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gTkNJIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byBOQ0kgZnV6emluZy4gQmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlLCBJJiMzOTt2ZSBnb3QgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZXhhbWluZSBgZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuY2AsIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgZmlyc3Qgc3RvcC4gSXQgbG9va3MgbGlrZSB0aGlzIGRyaXZlciBsZXRzIHVzZXJzcGFjZSBpbmplY3QgTkNJIGZyYW1lcyBkaXJlY3RseS4gU3BlY2lmaWNhbGx5LCBgbmNpX3JlY3ZfZnJhbWUodmRldi0mZ3Q7bmRldiwgc2tiKTtgIHdpdGhpbiBgdmlydHVhbF9uY2lkZXZfd3JpdGVgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZGlzc2VjdC4gVGhhdCBzY3JlYW1zIHZ1bG5lcmFiaWxpdHkgc3VyZmFjZSB0byBtZS4KCkkgYWxzbyBzaG91bGQgbG9vayBhdCBgZHJpdmVycy9uZmMvbmZjbXJ2bC91c2IuY2AsIGJlY2F1c2UgdGhlIFVTQiBlbXVsYXRpb24gcm91dGUgY291bGQgYmUgYW5vdGhlciBhbmdsZSB0byBleHBsb2l0LiBJIHJlbWVtYmVyIHN5emthbGxlcuKAmXMgVVNCIGdhZGdldCBhbmQgVVNCIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMsIGFuZCB0aGF0IHN1Z2dlc3RzIGFub3RoZXIgcG90ZW50aWFsIHdheSB0byBpbmplY3QgTkNJIGRhdGEuCgpUaGUgZmFjdCB0aGF0IHN5emthbGxlciBzdXBwb3J0cyBgdmlydHVhbF9uY2lkZXZgIGRpcmVjdGx5LCBhbG9uZyB3aXRoIG5ldGxpbmsgYW5kIHJhdy1nYWRnZXQgbWV0aG9kcywgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0LiBTbywgaXQmIzM5O3MgYmFjayB0byBgdmlydHVhbF9uY2lkZXYuY2AgdG8gc2VlIHdoYXQga2luZCBvZiBkYW1hZ2UgY2FuIGJlIGRvbmUgYW5kIHVuZGVyc3RhbmQgaWYgc3l6a2FsbGVyIGlzIHRoZSBiZXN0IG9wdGlvbiBmb3IgdGhpcyB0eXBlIG9mIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiBWaXJ0dWFsIE5DSSBkZXZpY2Ugc2ltdWxhdGlvbiBkcml2ZXJcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoQykgMjAyMCBTYW1zdW5nIEVsZWN0cm9uaWNzXG4gICA2Olx0ICogQm9uZ3N1IEplb24gXHUwMDNjYm9uZ3N1Lmplb25Ac2Ftc3VuZy5jb21cdTAwM2VcbiAgIDc6XHQgKi9cbiAgIDg6XHRcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWlzY2RldmljZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXQuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZmMvbmNpX2NvcmUuaFx1MDAzZVxuICAxNTpcdFxuICAxNjpcdCNkZWZpbmUgSU9DVExfR0VUX05DSURFVl9JRFggICAgMFxuICAxNzpcdCNkZWZpbmUgVklSVFVBTF9ORkNfUFJPVE9DT0xTXHQoTkZDX1BST1RPX0pFV0VMX01BU0sgfCBcXFxuICAxODpcdFx0XHRcdFx0IE5GQ19QUk9UT19NSUZBUkVfTUFTSyB8IFxcXG4gIDE5Olx0XHRcdFx0XHQgTkZDX1BST1RPX0ZFTElDQV9NQVNLIHwgXFxcbiAgMjA6XHRcdFx0XHRcdCBORkNfUFJPVE9fSVNPMTQ0NDNfTUFTSyB8IFxcXG4gIDIxOlx0XHRcdFx0XHQgTkZDX1BST1RPX0lTTzE0NDQzX0JfTUFTSyB8IFxcXG4gIDIyOlx0XHRcdFx0XHQgTkZDX1BST1RPX0lTTzE1NjkzX01BU0spXG4gIDIzOlx0XG4gIDI0Olx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiB7XG4gIDI1Olx0XHRzdHJ1Y3QgbmNpX2RldiAqbmRldjtcbiAgMjY6XHRcdHN0cnVjdCBtdXRleCBtdHg7XG4gIDI3Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2VuZF9idWZmO1xuICAyODpcdFx0c3RydWN0IHdhaXRfcXVldWVfaGVhZCB3cTtcbiAgMjk6XHRcdGJvb2wgcnVubmluZztcbiAgMzA6XHR9O1xuICAzMTpcdFxuICAzMjpcdHN0YXRpYyBpbnQgdmlydHVhbF9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiAgMzM6XHR7XG4gIDM0Olx0XHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xuICAzNTpcdFxuICAzNjpcdFx0dmRldi1cdTAwM2VydW5uaW5nID0gdHJ1ZTtcbiAgMzc6XHRcdHJldHVybiAwO1xuICAzODpcdH1cbiAgMzk6XHRcbiAgNDA6XHRzdGF0aWMgaW50IHZpcnR1YWxfbmNpX2Nsb3NlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuICA0MTpcdHtcbiAgNDI6XHRcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG4gIDQzOlx0XG4gIDQ0Olx0XHRtdXRleF9sb2NrKFx1MDAyNnZkZXYtXHUwMDNlbXR4KTtcbiAgNDU6XHRcdGtmcmVlX3NrYih2ZGV2LVx1MDAzZXNlbmRfYnVmZik7XG4gIDQ2Olx0XHR2ZGV2LVx1MDAzZXNlbmRfYnVmZiA9IE5VTEw7XG4gIDQ3Olx0XHR2ZGV2LVx1MDAzZXJ1bm5pbmcgPSBmYWxzZTtcbiAgNDg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2ZGV2LVx1MDAzZW10eCk7XG4gIDQ5Olx0XG4gIDUwOlx0XHRyZXR1cm4gMDtcbiAgNTE6XHR9XG4gIDUyOlx0XG4gIDUzOlx0c3RhdGljIGludCB2aXJ0dWFsX25jaV9zZW5kKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICA1NDpcdHtcbiAgNTU6XHRcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XG4gIDU2Olx0XG4gIDU3Olx0XHRtdXRleF9sb2NrKFx1MDAyNnZkZXYtXHUwMDNlbXR4KTtcbiAgNTg6XHRcdGlmICh2ZGV2LVx1MDAzZXNlbmRfYnVmZiB8fCAhdmRldi1cdTAwM2VydW5uaW5nKSB7XG4gIDU5Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2ZGV2LVx1MDAzZW10eCk7XG4gIDYwOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDU2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2NvbmZpZyBEaXZlOiBgdmlydHVhbF9uY2lkZXZgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGB2aXJ0dWFsX25jaWRldmAgS2NvbmZpZy4gSSB3YW50IHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSXMgdGhpcyBhIHN0YW5kYWxvbmUgbW9kdWxlLCBvciBkb2VzIGl0IHJlbHkgb24gc29tZSBvdGhlciBjb3JlIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBjb25mbGljdHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLCBwZXJoYXBzIHdpdGggb3RoZXIgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZXM/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrIC0gd2hhdCBwcm9ibGVtIGlzIHRoaXMgcGFydGljdWxhciB2aXJ0dWFsIGRldmljZSBzb2x2aW5nLCBhbmQgaG93IGRvZXMgaXQgaW50ZXJmYWNlIHdpdGggdGhlIGNvcmUgbmV0d29ya2luZyBpbmZyYXN0cnVjdHVyZT8gTGV0JiMzOTtzIGNoZWNrIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgc3ltYm9scyB0byBwaW5wb2ludCBpdHMgcm9sZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGJlZm9yZSBJIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGFueSByZWxhdGVkIGNvZGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtWSVJUVUFMX05DSURFViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NjgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTkZDIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBORkMgZHJpdmVyIGJ1aWxkIHByb2Nlc3MgYW5kIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZ2V0IG15IGJlYXJpbmdzIGFuZCBsb29rIGF0IHRoZSBrZXkgZmlsZXMgdGhhdCBkaWN0YXRlIHRoZSBidWlsZCBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgYGRyaXZlcnMvbmZjL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTkZDIGRyaXZlciBtb2R1bGVzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBkZXBlbmRlbmNpZXMsIHNvdXJjZSBmaWxlcywgYW5kIGNvbXBpbGF0aW9uIGZsYWdzIHNwZWNpZmljIHRvIE5GQy4gVGhlbiwgSSAqbXVzdCogbG9vayBhdCBgZHJpdmVycy9uZmMvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIE5GQyBkcml2ZXIgYXJlIGRlZmluZWQuIFRoaXMgd2lsbCByZXZlYWwgdGhlIHZhcmlvdXMgZmVhdHVyZXMgdGhhdCBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgY29tcG9uZW50cywgYW5kIHRoZSBvdmVyYWxsIGNvbmZpZ3VyYWJpbGl0eSBvZiB0aGUgTkZDIHN1YnN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGUgYEtjb25maWdgIG9wdGlvbnMgaXMgY3J1Y2lhbCBmb3IgdGFpbG9yaW5nIHRoZSBORkMgZHJpdmVyIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgb3IgdXNlIGNhc2UuIFRoZXNlIHR3byBmaWxlcyBhcmUgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZpcnR1YWxfbmNpZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXHQmIzQzOz0gc3Q5NWhmL1xuZHJpdmVycy9uZmMvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX05GQ19WSVJUVUFMX05DSSlcdCYjNDM7PSB2aXJ0dWFsX25jaWRldi5vXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYz03Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5jaV9vcHMgdmlydHVhbF9uY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtODEtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjgyOnN0YXRpYyBzc2l6ZV90IHZpcnR1YWxfbmNpZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTgzLVx0XHRcdFx0ICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTItXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjExMzpzdGF0aWMgc3NpemVfdCB2aXJ0dWFsX25jaWRldl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTE0LVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzItXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjEzMzpzdGF0aWMgaW50IHZpcnR1YWxfbmNpZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzNC17XG4tLVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjMtXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE2NDpzdGF0aWMgaW50IHZpcnR1YWxfbmNpZGV2X2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjUte1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTc1LVxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNzY6c3RhdGljIGxvbmcgdmlydHVhbF9uY2lkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3Ny1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5MS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTkyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZpcnR1YWxfbmNpZGV2X2ZvcHMgPSB7XG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5My1cdC5vd25lciA9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTQ6XHQucmVhZCA9IHZpcnR1YWxfbmNpZGV2X3JlYWQsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NTpcdC53cml0ZSA9IHZpcnR1YWxfbmNpZGV2X3dyaXRlLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTY6XHQub3BlbiA9IHZpcnR1YWxfbmNpZGV2X29wZW4sXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NzpcdC5yZWxlYXNlID0gdmlydHVhbF9uY2lkZXZfY2xvc2UsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5ODpcdC51bmxvY2tlZF9pb2N0bCA9IHZpcnR1YWxfbmNpZGV2X2lvY3RsXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5OS19O1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM9MjAxPXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBtaXNjZGV2ID0ge1xuLS1cbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjAzLVx0Lm5hbWUgPSBcJiMzNDt2aXJ0dWFsX25jaVwmIzM0OyxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MjA0Olx0LmZvcHMgPSBcdTAwMjZ2aXJ0dWFsX25jaWRldl9mb3BzLFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0yMDUtXHQubW9kZSA9IDA2MDAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzU3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgTkZDIFZpcnR1YWwgTkNJIERyaXZlcioqCgpBbHJpZ2h0LCBzbyBgTkZDX1ZJUlRVQUxfTkNJYOKApiB0aGF0JiMzOTtzIGdvdCB0byBiZSB0aGUgdmlydHVhbCBkZXZpY2UgZHJpdmVyIGltcGxlbWVudGF0aW9uIGZvciB0aGUgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpLCByaWdodD8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCBhbmQgZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLCBzbyBsZXQmIzM5O3MganVtcCBzdHJhaWdodCBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSBgQ09ORklHX05GQ19OQ0lgIGFuZCBzZWUgd2hhdCBlbHNlIGlzIHJlbGF0ZWQgaW4gYG5ldC9uZmMvS2NvbmZpZ2AuIEkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgYW55IGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsZXZhbnQgb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3VyIG9mIHRoaXMgdmlydHVhbCBkZXZpY2UuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY29uZmlndXJhdGlvbiBkZXRhaWxzIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZHJpdmVyIGlzIGFyY2hpdGVjdGVkIGFuZCB3aGF0JiMzOTtzIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GQ19OQ0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfTkZDKSAmIzQzOz0gbmZjLm9cbm5ldC9uZmMvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfTkZDX05DSSkgJiM0Mzs9IG5jaS9cbm5ldC9uZmMvTWFrZWZpbGUtOC1vYmotJChDT05GSUdfTkZDX0hDSSkgJiM0Mzs9IGhjaS9cbi0tXG5uZXQvbmZjL25jaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbmZjL25jaS9LY29uZmlnOjI6Y29uZmlnIE5GQ19OQ0lcbm5ldC9uZmMvbmNpL0tjb25maWctMy1cdGRlcGVuZHMgb24gTkZDXG4tLVxubmV0L25mYy9uY2kvS2NvbmZpZy0xMi1cbm5ldC9uZmMvbmNpL0tjb25maWc6MTM6Y29uZmlnIE5GQ19OQ0lfU1BJXG5uZXQvbmZjL25jaS9LY29uZmlnOjE0Olx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBTUElcbm5ldC9uZmMvbmNpL0tjb25maWctMTUtXHRzZWxlY3QgQ1JDX0NDSVRUXG4tLVxubmV0L25mYy9uY2kvS2NvbmZpZy0yMy1cbm5ldC9uZmMvbmNpL0tjb25maWc6MjQ6Y29uZmlnIE5GQ19OQ0lfVUFSVFxubmV0L25mYy9uY2kvS2NvbmZpZzoyNTpcdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgVFRZXG5uZXQvbmZjL25jaS9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7TkNJIG92ZXIgVUFSVCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25mYy9uY2kvTWFrZWZpbGUtNS1cbm5ldC9uZmMvbmNpL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX05GQ19OQ0kpICYjNDM7PSBuY2kub1xubmV0L25mYy9uY2kvTWFrZWZpbGUtNy1cbi0tXG5uZXQvbmZjL25jaS9NYWtlZmlsZT0xMD1uY2lfc3BpLXkgJiM0Mzs9IHNwaS5vXG5uZXQvbmZjL25jaS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfTkZDX05DSV9TUEkpICYjNDM7PSBuY2lfc3BpLm9cbm5ldC9uZmMvbmNpL01ha2VmaWxlLTEyLVxubmV0L25mYy9uY2kvTWFrZWZpbGU9MTM9bmNpX3VhcnQteSAmIzQzOz0gdWFydC5vXG5uZXQvbmZjL25jaS9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfTkZDX05DSV9VQVJUKSAmIzQzOz0gbmNpX3VhcnQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUyOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJJiMzOTttIGhhdmluZyBpdDoKCioqRGlnZ2luZyBpbnRvIE5GQyBWaXJ0dWFsIE5DSSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdmlydHVhbCBOQ0kgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBORkMgZHJpdmVyLiBGaXJzdCwgdGhlIHNlbnNpYmxlIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBjb25maWd1cmF0aW9uLiBXaGVyZSB3b3VsZCB0aGF0IGJlPyBBaCwgeWVzLCBgZHJpdmVycy9uZmMvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBidWlsZC10aW1lIG9wdGlvbnMgdXN1YWxseSByZXNpZGUuIExldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBzZWUgd2hhdCBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAgaXMgYWxsIGFib3V0LiBXaGF0JiMzOTtzIGl0IGRvaW5nIGFuZCB3aGF0IGRvZXMgaXQgY29udHJvbCBpbiB0aGUgYnVpbGQ/IEhvcGVmdWxseSwgdGhlIEtjb25maWcgZmlsZSB3aWxsIHByb3ZpZGUgYSBjb25jaXNlIGV4cGxhbmF0aW9uIGFuZCBhbnkgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCB0byBnZXQgYSBjbGVhciBpZGVhIG9mIGhvdyB0aGlzIHZpcnR1YWwgbGF5ZXIgaXMgdXNlZCBvciBpZiBpdCYjMzk7cyBvcHRpb25hbCwgYW5kIGlmIGl0IGlzLCB0aGUgcmVhc29ucyB3aHkuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgbWVzaGVzIHdpdGggdGhlIGhhcmR3YXJlLXNwZWNpZmljIE5GQyBjb250cm9sbGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZDX1ZJUlRVQUxfTkNJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvS2NvbmZpZz00Mj1jb25maWcgTkZDX1BPUlQxMDBcbi0tXG5kcml2ZXJzL25mYy9LY29uZmlnLTUxLVxuZHJpdmVycy9uZmMvS2NvbmZpZzo1Mjpjb25maWcgTkZDX1ZJUlRVQUxfTkNJXG5kcml2ZXJzL25mYy9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7TkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZmMvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX05GQ19TVDk1SEYpXHQmIzQzOz0gc3Q5NWhmL1xuZHJpdmVycy9uZmMvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX05GQ19WSVJUVUFMX05DSSlcdCYjNDM7PSB2aXJ0dWFsX25jaWRldi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTQ4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTkZDIEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIHBvcCBvdmVyIHRvIHRoZSBgZHJpdmVycy9uZmMvS2NvbmZpZ2AgZmlsZSBhbmQgemVybyBpbiBhcm91bmQgbGluZSA1Mi4gTXkgaW5pdGlhbCBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBORkMgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3Igc29tZXRoaW5nIG5ldyBvciBwb3NzaWJseSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhbnl0aGluZyB0aGF0IGlzIGJyb2tlbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY291bGQgcHJvdmlkZSBtZSB3aXRoIHVzZWZ1bCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQ1Olx0XHRkZXBlbmRzIG9uIE5GQ19ESUdJVEFMXG4gIDQ2Olx0XHRoZWxwXG4gIDQ3Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBTb255IFBvcnQtMTAwIGNoaXAgYmFzZWQgVVNCIGRldmljZXMgc3VjaCBhcyB0aGVcbiAgNDg6XHRcdCAgUkMtUzM4MCBkb25nbGUuXG4gIDQ5Olx0XG4gIDUwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDUxOlx0XG4gIDUyOlx0Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxuICA1MzpcdFx0dHJpc3RhdGUgXCYjMzQ7TkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIE5GQ19OQ0lcbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgTkNJIHZpcnR1YWwgZGV2aWNlIHNpbXVsYXRlcyBhIE5DSSBkZXZpY2UgdG8gdGhlIHVzZXIuXG4gIDU3Olx0XHQgIEl0IGNhbiBiZSB1c2VkIHRvIHZhbGlkYXRlIHRoZSBOQ0kgbW9kdWxlIGFuZCBhcHBsaWNhdGlvbnMuXG4gIDU4Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlIGFuZFxuICA1OTpcdFx0ICBtb2R1bGUuXG4gIDYwOlx0XG4gIDYxOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDYyOlx0XG4gIDYzOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmZjL2ZkcC9LY29uZmlnXCYjMzQ7XG4gIDY0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmZjL3BuNTQ0L0tjb25maWdcJiMzNDtcbiAgNjU6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZmMvcG41MzMvS2NvbmZpZ1wmIzM0O1xuICA2NjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9taWNyb3JlYWQvS2NvbmZpZ1wmIzM0O1xuICA2NzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWdcJiMzNDtcbiAgNjg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZmMvc3QyMW5mY2EvS2NvbmZpZ1wmIzM0O1xuICA2OTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9zdC1uY2kvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUxMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBORkMgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IE5GQyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBDT05GSUdfTkZDYCwgYENPTkZJR19ORkNfTkNJYCwgYW5kIGBDT05GSUdfTkZDX1ZJUlRVQUxfTkNJYCDigJMgdGhhdCYjMzk7cyB0aGUgY29yZSBORkMgZnJhbWV3b3JrLCB0aGUgTkNJIHRyYW5zcG9ydCBsYXllciwgYW5kIGEgdmlydHVhbCBOQ0kgaW50ZXJmYWNlLCByZXNwZWN0aXZlbHkuIE1ha2VzIHNlbnNlLiBJJiMzOTttIGFsc28gbm90aWNpbmcgYSBVU0Itc3BlY2lmaWMgZHJpdmVyLCBgQ09ORklHX05GQ19NUlZMX1VTQmAuIEFoLCByaWdodCwgdGhhdCBwb2ludHMgdG93YXJkcyBNYXJ2ZWxsJiMzOTtzIFVTQiBORkMgZGV2aWNlcy4gTmF0dXJhbGx5LCB0aGF0JiMzOTtzIGdvaW5nIHRvIGJlIGRlcGVuZGVudCBvbiB0aGUgYnJvYWRlciBgTkZDX01SVkxgIGRyaXZlciBhbmQgdGhlIGJhc2UgYFVTQmAgc3Vic3lzdGVtLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBpbiB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IHNwZWNpZmljIE1hcnZlbGwgVVNCIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgaW4gYGRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZ2AgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5GQ19NUlZMXG4gICAzOlx0XHR0cmlzdGF0ZVxuICAgNDpcdFx0aGVscFxuICAgNTpcdFx0ICBUaGUgY29yZSBkcml2ZXIgdG8gc3VwcG9ydCBNYXJ2ZWxsIE5GQyBkZXZpY2VzLlxuICAgNjpcdFxuICAgNzpcdFx0ICBUaGlzIGRyaXZlciBpcyByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byBzdXBwb3J0XG4gICA4Olx0XHQgIE1hcnZlbGwgTkZDIGRldmljZSA4ODk3LlxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBORkNfTVJWTF9VU0JcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgTkZDLW92ZXItVVNCIGRyaXZlclwmIzM0O1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBVU0JcbiAgMTM6XHRcdHNlbGVjdCBORkNfTVJWTFxuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBNYXJ2ZWxsIE5GQy1vdmVyLVVTQiBkcml2ZXIuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIE1hcnZlbGwgTkZDLW92ZXItVVNCIGRldmljZXM6XG4gIDE4Olx0XHQgIDg4OTcuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBNYXJ2ZWxsIE5GQy1vdmVyLVVTQiBkcml2ZXJcbiAgMjE6XHRcdCAgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgaXQgYXMgbW9kdWxlLlxuICAyMjpcdFxuICAyMzpcdGNvbmZpZyBORkNfTVJWTF9VQVJUXG4gIDI0Olx0XHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE5GQy1vdmVyLVVBUlQgZHJpdmVyXCYjMzQ7XG4gIDI1Olx0XHRkZXBlbmRzIG9uIE5GQ19OQ0kgXHUwMDI2XHUwMDI2IE5GQ19OQ0lfVUFSVFxuICAyNjpcdFx0c2VsZWN0IE5GQ19NUlZMXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIE1hcnZlbGwgTkZDLW92ZXItVUFSVCBkcml2ZXIuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIE1hcnZlbGwgTkZDLW92ZXItVUFSVCBkZXZpY2VzXG4gIDMxOlx0XG4gIDMyOlx0XHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBNYXJ2ZWxsIE5GQy1vdmVyLVVBUlQgZHJpdmVyXG4gIDMzOlx0XHQgIGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0byBjb21waWxlIGl0IGFzIG1vZHVsZS5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgTkZDX01SVkxfSTJDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjk5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVzcG9uc2UgUGFja2V0KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgZnVuY3Rpb24gYW5kIHdoYXQmIzM5O3MgY2hhbmdlZC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaGFuZGxpbmcgdGhlIHJlc3BvbnNlIHRvIGEgY29ubmVjdGlvbiBjcmVhdGlvbiByZXF1ZXN0LiBJIHNlZSBpdCYjMzk7cyB0YWtpbmcgdGhlIGBuY2lfZGV2YCBhbmQgdGhlIHJlY2VpdmVkIGBza19idWZmYCBhcyBpbnB1dC4gVGhlIGZpcnN0IGJ5dGUgaW4gYHNrYi0mZ3Q7ZGF0YWAgaXMgdGhlIHN0YXR1cyBjb2RlLCB3aGljaCBpcyBnb29kIHByYWN0aWNlLiBJIG5vdGUgdGhlIGRlYnVnIHByaW50OyBoZWxwZnVsIGZvciB0cmFjaW5nLgoKTm93LCB0aGUgaW1wb3J0YW50IGNoYW5nZSwgYW5kIHdoYXQgbGlrZWx5IGZpeGVzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3IgZXJyb3IgY29uZGl0aW9uLiAgVGhlIGNvZGUgY2hlY2tzIHRoZSBzdGF0dXM7IGlmIGl0JiMzOTtzICYjMzQ7T0smIzM0OywgdGhlbiB0aGVyZSBpcyB0aGUgYWRkaXRpb24gb2YgYSBgc2tiLSZndDtsZW5gIGNoZWNrLiBJdCYjMzk7cyBtYWtpbmcgc3VyZSB0aGUgcmVjZWl2ZWQgcGFja2V0IGlzIGFjdHVhbGx5ICpsYXJnZSogZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BgIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyBzbWFydC4gSXQmIzM5O3MgdmVyaWZ5aW5nIHRoZSBwYWNrZXQgbGVuZ3RoIG5vdyBiZWZvcmUgZGVyZWZlcmVuY2luZyB0aGUgY29udGVudHMgb2YgdGhlIHJlc3BvbnNlLiBJZiB0aGUgcGFja2V0IGlzIHNtYWxsZXIgdGhhbiB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiBgcnNwYCwgaXQgZmxhZ3MgYSBzeW50YXggZXJyb3IuIFRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0OyBpdCBwcmV2ZW50cyByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgY3Jhc2ggb3IsIHdvcnNlLCBhIHNlY3VyaXR5IGlzc3VlIGlmIHRoZSBzdHJ1Y3R1cmUgY29udGFpbmVkIHNlbnNpdGl2ZSBkYXRhLiBTbywgdGhlIHBhdGNoIGlzIGFkZGluZyByb2J1c3QgaW5wdXQgdmFsaWRhdGlvbiB0byBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgZGF0YSB3ZSYjMzk7cmUgcmVjZWl2aW5nLiBHb29kIGpvYi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZmMvbmNpLmg9MzYyPXN0cnVjdCBuY2lfY29yZV9zZXRfY29uZmlnX3JzcCB7XG4tLVxuaW5jbHVkZS9uZXQvbmZjL25jaS5oLTM2OC0jZGVmaW5lIE5DSV9PUF9DT1JFX0NPTk5fQ1JFQVRFX1JTUFx0bmNpX29wY29kZV9wYWNrKE5DSV9HSURfQ09SRSwgMHgwNClcbmluY2x1ZGUvbmV0L25mYy9uY2kuaDozNjk6c3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCB7XG5pbmNsdWRlL25ldC9uZmMvbmNpLmgtMzcwLVx0X191OFx0c3RhdHVzO1xuLS1cbm5ldC9uZmMvbmNpL3JzcC5jPTMwNT1zdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuLS1cbm5ldC9uZmMvbmNpL3JzcC5jLTMwOS1cdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm8gPSBOVUxMO1xubmV0L25mYy9uY2kvcnNwLmM6MzEwOlx0Y29uc3Qgc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCAqcnNwO1xubmV0L25mYy9uY2kvcnNwLmMtMzExLVxuLS1cbm5ldC9uZmMvbmNpL3JzcC5jLTMxOC1cdFx0fVxubmV0L25mYy9uY2kvcnNwLmM6MzE5Olx0XHRyc3AgPSAoc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCAqKXNrYi1cdTAwM2VkYXRhO1xubmV0L25mYy9uY2kvcnNwLmMtMzIwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE4OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IHdpdGhpbiBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgYW5kIHNlZSB3aGF0IGhhcHBlbnMgKmFmdGVyKiBsaW5lIDM1MC4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGNyZWF0aW9uIG9mIGEgY29ubmVjdGlvbiByZXNwb25zZSBwYWNrZXQgd2l0aGluIGFuIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBjb250ZXh0LiBMaW5lIDM1MCBjb3VsZCBiZSBhIGNydWNpYWwgcG9pbnQg4oCTIHBlcmhhcHMgd2hlcmUgYSBrZXkgZGF0YSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIGEgc3BlY2lmaWMgZXJyb3IgY2hlY2sgaXMgcGVyZm9ybWVkLCBvciBhIHBhcnRpY3VsYXIgc3RhdGUgdHJhbnNpdGlvbiBvY2N1cnMuIEkgbmVlZCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aGF0IHBvaW50IGZvcndhcmQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yLiBNeSBmb2N1cyBpcyBvbiB0aGUgbG9naWMgYW5kIGRhdGEgZmxvdyAqYmV5b25kKiB0aGF0IGxpbmUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBwYXJ0cyBvZiB0aGUgcmVzcG9uc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvcnNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0NTpcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZjb25uX2luZm8tXHUwMDNlbGlzdCk7XG4gMzQ2Olx0XHRcdGxpc3RfYWRkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0LCBcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19saXN0KTtcbiAzNDc6XHRcbiAzNDg6XHRcdFx0aWYgKG5kZXYtXHUwMDNlY3VyX3BhcmFtcy5pZCA9PSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlbmZjZWVfaWQpXG4gMzQ5Olx0XHRcdFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbyA9IGNvbm5faW5mbztcbiAzNTA6XHRcbiAzNTE6XHRcdFx0Y29ubl9pbmZvLVx1MDAzZWNvbm5faWQgPSByc3AtXHUwMDNlY29ubl9pZDtcbiAzNTI6XHRcdFx0Y29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4gPSByc3AtXHUwMDNlbWF4X2N0cmxfcGt0X3BheWxvYWRfbGVuO1xuIDM1MzpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCwgcnNwLVx1MDAzZWNyZWRpdHNfY250KTtcbiAzNTQ6XHRcdH1cbiAzNTU6XHRcbiAzNTY6XHRmcmVlX2Nvbm5faW5mbzpcbiAzNTc6XHRcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19SRUpFQ1RFRClcbiAzNTg6XHRcdFx0ZGV2bV9rZnJlZShcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LCBjb25uX2luZm8pO1xuIDM1OTpcdGV4aXQ6XG4gMzYwOlx0XG4gMzYxOlx0XHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7XG4gMzYyOlx0fVxuIDM2MzpcdFxuIDM2NDpcdHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiAzNjU6XHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzNjY6XHR7XG4gMzY3Olx0XHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIDM2ODpcdFx0X191OCBzdGF0dXMgPSBza2ItXHUwMDNlZGF0YVswXTtcbiAzNjk6XHRcbiAzNzA6XHRcdHByX2RlYnVnKFwmIzM0O3N0YXR1cyAweCV4XFxuXCYjMzQ7LCBzdGF0dXMpO1xuIDM3MTpcdFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XG4gMzcyOlx0XHRcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldixcbiAzNzM6XHRcdFx0XHRcdFx0XHRcdCBuZGV2LVx1MDAzZWN1cl9jb25uX2lkKTtcbiAzNzQ6XHRcdFx0aWYgKGNvbm5faW5mbykge1xuIDM3NTpcdFx0XHRcdGxpc3RfZGVsKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0KTtcbiAzNzY6XHRcdFx0XHRpZiAoY29ubl9pbmZvID09IG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvKVxuIDM3NzpcdFx0XHRcdFx0bmRldi1cdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xuIDM3ODpcdFx0XHRcdGRldm1fa2ZyZWUoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgY29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zKTtcbiAzNzk6XHRcdFx0XHRkZXZtX2tmcmVlKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsIGNvbm5faW5mbyk7XG4gMzgwOlx0XHRcdH1cbiAzODE6XHRcdH1cbiAzODI6XHRcdG5jaV9yZXFfY29tcGxldGUobmRldiwgc3RhdHVzKTtcbiAzODM6XHR9XG4gMzg0Olx0XG4gMzg1Olx0dm9pZCBuY2lfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzODY6XHR7XG4gMzg3Olx0XHRfX3UxNiByc3Bfb3Bjb2RlID0gbmNpX29wY29kZShza2ItXHUwMDNlZGF0YSk7XG4gMzg4Olx0XG4gMzg5Olx0XHQvKiB3ZSBnb3QgYSByc3AsIHN0b3AgdGhlIGNtZCB0aW1lciAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE5NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBORkMgUmVzcG9uc2UgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvbmZjL25jaS9yc3AuY2AsIHNwZWNpZmljYWxseSB0aGUgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBwcmV2aW91cyBjb2RlIHdhcyBhY2Nlc3NpbmcgYHJzcC0mZ3Q7Y29ubl9pZGAsIGByc3AtJmd0O21heF9jdHJsX3BrdF9wYXlsb2FkX2xlbmAsIGFuZCBgcnNwLSZndDtjcmVkaXRzX2NudGAgZGlyZWN0bHksIHdpdGhvdXQgY2hlY2tpbmcgaWYgdGhlIHJlY2VpdmVkICpza2IqIChzb2NrZXQgYnVmZmVyKSB3YXMgbGFyZ2UgZW5vdWdoIHRvIGFjdHVhbGx5IGhvbGQgdGhlIGVudGlyZSBgcnNwYCBzdHJ1Y3QuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIGBza2ItJmd0O2xlbmAgd2FzIGxlc3MgdGhhbiBgc2l6ZW9mKCpyc3ApYCDigJMgc2F5LCBpdCBvbmx5IGhhZCBvbmUgYnl0ZSwgbWF5YmUgYSBgc3RhdHVzID09IE5DSV9TVEFUVVNfT0tgIOKAkyB0aGVuIHRoZXJlIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYSBjbGFzc2ljIHZ1bG5lcmFiaWxpdHkuCgpUaGlzIHBhdGNoIGFkZHMgYSBiYXNpYyBjaGVjaywgYSBzaW1wbGUgYGlmIChza2ItJmd0O2xlbiAmbHQ7IHNpemVvZigqcnNwKSlgLCB3aGljaCBzZXRzIGBOQ0lfU1RBVFVTX1NZTlRBWF9FUlJPUmAgYW5kIGp1bXBzIHRvIGV4aXQuIEEgZ29vZCBkZWZlbnNpdmUgbWVhc3VyZSwgYnV0IGlzIGl0IHJlYWNoYWJsZT8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBXZSBoYXZlIGEgc29saWQgc3RyYXRlZ3ksIHBhdGNoIGZ1enppbmcsIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLCBhbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMuIEJ1dCwgaXQmIzM5O3Mgbm90IHdvcnRoIGZ1enppbmcgdW5yZWFjaGFibGUgY29kZSwgYW5kIHJlYWNoYWJpbGl0eSBpcyB0aGUgcHJpbWFyeSBnYXRlLgoKVGhlIGNyaXRlcmlhIGZvciBmdXp6aW5nIGFwcGxpY2FiaWxpdHkgYXJlIHN0cmljdC4gV2UgbmVlZCBjb2RlIHRoYXQgY2FuICphY3R1YWxseSBleGVjdXRlKiBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgdXNpbmcgZW11bGF0ZWQgZGV2aWNlcy4gRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIG9yIHNvY2tldHMgYXJlIGdvb2QgdGFyZ2V0cy4gUmVmYWN0b3JpbmdzLCBjb2RlIGNsZWFudXBzLCBydW50aW1lIGFzc2VydGlvbnMsIGFuZCBkZWZlbnNpdmUgY2hlY2tzIGxpa2UgdGhpcyBhcmUgYWxsIHBvdGVudGlhbGx5IHJlbGV2YW50LiBCdXQgaG93IGlzIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCBldmVuIGNhbGxlZD8gV2hlbiBpcyBhIHJlc3BvbnNlIHBhY2tldCBwcm9jZXNzZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIEkgbmVlZCB0byBzZWUgaG93IGBuY2lfcnNwX3BhY2tldGAgaXMgcmVhY2hlZCB3aXRoaW4gYG5ldC9uZmMvbmNpL3JzcC5jYC4gVGhpcyBpcyBteSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvcnNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4NTpcdHZvaWQgbmNpX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gMzg2Olx0e1xuIDM4NzpcdFx0X191MTYgcnNwX29wY29kZSA9IG5jaV9vcGNvZGUoc2tiLVx1MDAzZWRhdGEpO1xuIDM4ODpcdFxuIDM4OTpcdFx0Lyogd2UgZ290IGEgcnNwLCBzdG9wIHRoZSBjbWQgdGltZXIgKi9cbiAzOTA6XHRcdHRpbWVyX2RlbGV0ZShcdTAwMjZuZGV2LVx1MDAzZWNtZF90aW1lcik7XG4gMzkxOlx0XG4gMzkyOlx0XHRwcl9kZWJ1ZyhcJiMzNDtOQ0kgUlg6IE1UPXJzcCwgUEJGPSVkLCBHSUQ9MHgleCwgT0lEPTB4JXgsIHBsZW49JWRcXG5cJiMzNDssXG4gMzkzOlx0XHRcdCBuY2lfcGJmKHNrYi1cdTAwM2VkYXRhKSxcbiAzOTQ6XHRcdFx0IG5jaV9vcGNvZGVfZ2lkKHJzcF9vcGNvZGUpLFxuIDM5NTpcdFx0XHQgbmNpX29wY29kZV9vaWQocnNwX29wY29kZSksXG4gMzk2Olx0XHRcdCBuY2lfcGxlbihza2ItXHUwMDNlZGF0YSkpO1xuIDM5NzpcdFxuIDM5ODpcdFx0Lyogc3RyaXAgdGhlIG5jaSBjb250cm9sIGhlYWRlciAqL1xuIDM5OTpcdFx0c2tiX3B1bGwoc2tiLCBOQ0lfQ1RSTF9IRFJfU0laRSk7XG4gNDAwOlx0XG4gNDAxOlx0XHRpZiAobmNpX29wY29kZV9naWQocnNwX29wY29kZSkgPT0gTkNJX0dJRF9QUk9QUklFVEFSWSkge1xuIDQwMjpcdFx0XHRpZiAobmNpX3Byb3BfcnNwX3BhY2tldChuZGV2LCByc3Bfb3Bjb2RlLCBza2IpID09IC1FTk9UU1VQUCkge1xuIDQwMzpcdFx0XHRcdHByX2VycihcJiMzNDt1bnN1cHBvcnRlZCByc3Agb3Bjb2RlIDB4JXhcXG5cJiMzNDssXG4gNDA0Olx0XHRcdFx0ICAgICAgIHJzcF9vcGNvZGUpO1xuIDQwNTpcdFx0XHR9XG4gNDA2Olx0XG4gNDA3Olx0XHRcdGdvdG8gZW5kO1xuIDQwODpcdFx0fVxuIDQwOTpcdFxuIDQxMDpcdFx0c3dpdGNoIChyc3Bfb3Bjb2RlKSB7XG4gNDExOlx0XHRjYXNlIE5DSV9PUF9DT1JFX1JFU0VUX1JTUDpcbiA0MTI6XHRcdFx0bmNpX2NvcmVfcmVzZXRfcnNwX3BhY2tldChuZGV2LCBza2IpO1xuIDQxMzpcdFx0XHRicmVhaztcbiA0MTQ6XHRcbiA0MTU6XHRcdGNhc2UgTkNJX09QX0NPUkVfSU5JVF9SU1A6XG4gNDE2Olx0XHRcdG5jaV9jb3JlX2luaXRfcnNwX3BhY2tldChuZGV2LCBza2IpO1xuIDQxNzpcdFx0XHRicmVhaztcbiA0MTg6XHRcbiA0MTk6XHRcdGNhc2UgTkNJX09QX0NPUkVfU0VUX0NPTkZJR19SU1A6XG4gNDIwOlx0XHRcdG5jaV9jb3JlX3NldF9jb25maWdfcnNwX3BhY2tldChuZGV2LCBza2IpO1xuIDQyMTpcdFx0XHRicmVhaztcbiA0MjI6XHRcbiA0MjM6XHRcdGNhc2UgTkNJX09QX0NPUkVfQ09OTl9DUkVBVEVfUlNQOlxuIDQyNDpcdFx0XHRuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KG5kZXYsIHNrYik7XG4gNDI1Olx0XHRcdGJyZWFrO1xuIDQyNjpcdFxuIDQyNzpcdFx0Y2FzZSBOQ0lfT1BfQ09SRV9DT05OX0NMT1NFX1JTUDpcbiA0Mjg6XHRcdFx0bmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0KG5kZXYsIHNrYik7XG4gNDI5Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgzOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTkNJIFBhY2tldCBIYW5kbGluZyBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgTmV0d29yayBDb250cm9sbGVyIEludGVyZmFjZSAoTkNJKSBwYWNrZXRzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYG5jaV9yeF93b3JrYCwgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcHJvY2Vzc2luZyBoYXBwZW5zIGFmdGVyIHJlY2VpdmluZyBkYXRhLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgYmUgdXNlZCB0byBmdXp6IE5DST8gQW5kIHRoZSBhbnN3ZXIsIGl0IHNlZW1zLCBpcyBhIHJlc291bmRpbmcgeWVzISBTeXprYWxsZXIgKmRvZXMqIGhhdmUgTkZDIGFuZCBOQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMuIEkgbmVlZCB0byBnZXQgdGhpcyByaWdodCBiZWNhdXNlIHRoZXJlJiMzOTtzIHBvdGVudGlhbCBoZXJlIGZvciBzb21lIGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdHkgZGlzY292ZXJ5LgoKU3l6a2FsbGVyIGxldmVyYWdlcyBhIGZldyBtZWNoYW5pc21zLCBhbmQgdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZC4gSXQgY2FuIHVzZSBgL2Rldi92aXJ0dWFsX25jaWAsIHdoaWNoIGlzIGRlZmluZWQgYnkgYENPTkZJR19ORkNfVklSVFVBTF9OQ0lgLCBVU0IgZ2FkZ2V0cyBlbmFibGVkIHdpdGggYENPTkZJR19VU0JfUkFXX0dBREdFVGAgYW5kIGBDT05GSUdfTkZDX01SVkxfVVNCYCwgb3IgZXZlbiBuZXRsaW5rIGNvbW1hbmRzIGZvciBpdHMgZnV6emluZy4gVGhhdCB2aXJ0dWFsIGRldmljZSByb3V0ZSBsb29rcyBwYXJ0aWN1bGFybHkgcHJvbWlzaW5nLiBJIGNhbiBzZWUgdGhhdCBzeXprYWxsZXIgaXMgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQgdG8gaW50ZXJhY3Qgd2l0aCBgL2Rldi92aXJ0dWFsX25jaWAsIHdoaWNoIGlzIGEga2V5IHRhcmdldC4gSXQgaGFzIGNhbGxzIGRlZmluZWQgbGlrZSBgb3BlbmF0JHZpcnR1YWxfbmNpYCBhbmQgYHdyaXRlJHZpcnR1YWxfbmNpYC4KClRoZSBgd3JpdGUkdmlydHVhbF9uY2lgIGNhbGwgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGxlYWRzIHRvIGB2aXJ0dWFsX25jaWRldl93cml0ZWAuIExvb2tpbmcgYXQgdGhlIGB2aXJ0dWFsX25jaWRldl93cml0ZWAgZnVuY3Rpb24sIGl0IGRvZXMgdGhlIHR5cGljYWwgYGFsbG9jX3NrYmAsIHRoZW4gYGNvcHlfZnJvbV91c2VyYCB0byB0cmFuc2ZlciB0aGUgZnV6emVkIGJ1ZmZlciBpbnRvIHRoZSBza2IsIGFuZCB0aGVuLCBjcnVjaWFsbHksIGl0IGNhbGxzIGBuY2lfcmVjdl9mcmFtZWAgd2l0aCB0aGlzIG5ld2x5IGNyYWZ0ZWQgc2tiLiBUaGlzIGlzIHdoZXJlIEkgd2FudCB0byBmb2N1cywgYXMgdGhpcyBmbG93IG9mIGRhdGEgcHJlc2VudHMgYSBwZXJmZWN0IHRhcmdldCBmb3IgaW5qZWN0aW9uIHdpdGggbWFsaWNpb3VzIGRhdGEuCgpgbmNpX3JlY3ZfZnJhbWVgIGlzIHRoZSBjb3JlIG9mIHBhY2tldCBoYW5kbGluZy4gQWNjb3JkaW5nIHRvIHdoYXQgSSBoYXZlIGhlcmUsIHRoaXMgd2lsbCB0aGVuIHF1ZXVlIHRoZSBgc2tiYCB0byBgbmRldi0mZ3Q7cnhfcWAgYW5kIHNjaGVkdWxlcyBgbmNpX3J4X3dvcmtgLiBUaGF0JiMzOTtzIHRoZSBsaW5rLiBUbyB0cnVseSB1bmRlcnN0YW5kIHRoaXMsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgbmNpX3JlY3ZfZnJhbWVgIGluIGBuZXQvbmZjL25jaS9jb3JlLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM0ODpcdCAqIEBuZGV2OiBUaGUgbmNpIGRldmljZVxuMTM0OTpcdCAqIEBza2I6IFRoZSBza19idWZmIHRvIHJlY2VpdmVcbjEzNTA6XHQgKi9cbjEzNTE6XHRpbnQgbmNpX3JlY3ZfZnJhbWUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4xMzUyOlx0e1xuMTM1MzpcdFx0cHJfZGVidWcoXCYjMzQ7bGVuICVkXFxuXCYjMzQ7LCBza2ItXHUwMDNlbGVuKTtcbjEzNTQ6XHRcbjEzNTU6XHRcdGlmICghbmRldiB8fCAoIXRlc3RfYml0KE5DSV9VUCwgXHUwMDI2bmRldi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4xMzU2Olx0XHQgICAgIXRlc3RfYml0KE5DSV9JTklULCBcdTAwMjZuZGV2LVx1MDAzZWZsYWdzKSkpIHtcbjEzNTc6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4xMzU4Olx0XHRcdHJldHVybiAtRU5YSU87XG4xMzU5Olx0XHR9XG4xMzYwOlx0XG4xMzYxOlx0XHQvKiBRdWV1ZSBmcmFtZSBmb3Igcnggd29ya2VyIHRocmVhZCAqL1xuMTM2MjpcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bmRldi1cdTAwM2VyeF9xLCBza2IpO1xuMTM2MzpcdFx0cXVldWVfd29yayhuZGV2LVx1MDAzZXJ4X3dxLCBcdTAwMjZuZGV2LVx1MDAzZXJ4X3dvcmspO1xuMTM2NDpcdFxuMTM2NTpcdFx0cmV0dXJuIDA7XG4xMzY2Olx0fVxuMTM2NzpcdEVYUE9SVF9TWU1CT0wobmNpX3JlY3ZfZnJhbWUpO1xuMTM2ODpcdFxuMTM2OTpcdGludCBuY2lfc2VuZF9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEzNzA6XHR7XG4xMzcxOlx0XHRwcl9kZWJ1ZyhcJiMzNDtsZW4gJWRcXG5cJiMzNDssIHNrYi1cdTAwM2VsZW4pO1xuMTM3MjpcdFxuMTM3MzpcdFx0aWYgKCFuZGV2KSB7XG4xMzc0Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTM3NTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbjEzNzY6XHRcdH1cbjEzNzc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNTkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGNvZGUgc25pcHBldCwgZGVsaXZlcmVkIGFzIGlmIGl0JiMzOTtzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgbmNpX3J4X3dvcmtgIEZ1bmN0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCBgbmNpX3J4X3dvcmtgIHdpdGhpbiBgbmV0L25mYy9uY2kvY29yZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgb2YgaGFuZGxpbmcgaW5jb21pbmcgTkNJIGZyYW1lcyBzZWVtcyB0byBoYXBwZW4sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBpbiBkZXRhaWwuIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgTkNJIGRhdGEgZmxvdy4gSSYjMzk7bSB2aXN1YWxpemluZyB0aGUgZGF0YSBjb21pbmcgaW4sIHByZXN1bWFibHkgdmlhIHNvbWUgaGFyZHdhcmUgaW50ZXJydXB0IG9yIERNQSBjb21wbGV0aW9uLCBhbmQgbm93IGl0JiMzOTtzIHVwIHRvIHRoaXMgZnVuY3Rpb24gdG8gbWFrZSBzZW5zZSBvZiBpdC4gSSYjMzk7bSB3b25kZXJpbmcgaWYgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIHRoZSBpbml0aWFsIHBhcnNpbmcsIG9yIGlmIHRoZXJlJiMzOTtzIGEgcHJlLXByb2Nlc3Npbmcgc3RhZ2UuIFRoZSAmIzM0O3dvcmsmIzM0OyBhc3BlY3QgaGludHMgYXQgdGhpcyBiZWluZyBhIGJvdHRvbSBoYWxmIGhhbmRsZXIsIHJ1bm5pbmcgaW4gYSB3b3JrcXVldWUsIHNvIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgZm9yIGFueSBsb2NraW5nIGNvbmNlcm5zIGFyb3VuZCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBBcmUgdGhlcmUgcmFjZSBjb25kaXRpb25zIHRvIHdvcnJ5IGFib3V0PyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gYG5jaV9yeF93b3JrYCwgc3BlY2lmaWNhbGx5IHdoYXQmIzM5O3MgaW4gdGhlIGBuY2lfZGV2YCBhbmQgYW55IHBvdGVudGlhbCBkYXRhIGJ1ZmZlcnMgaXQgYWNjZXNzZXMuIFRpbWUgdG8gZ2V0IGRvd24gdG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTYwOlx0e1xuMTU2MTpcdFx0c3RydWN0IG5jaV9kZXYgKm5kZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5jaV9kZXYsIHJ4X3dvcmspO1xuMTU2MjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjE1NjM6XHRcbjE1NjQ6XHRcdGZvciAoOyAoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2bmRldi1cdTAwM2VyeF9xKSk7IGtjb3ZfcmVtb3RlX3N0b3AoKSkge1xuMTU2NTpcdFx0XHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbjE1NjY6XHRcbjE1Njc6XHRcdFx0LyogU2VuZCBjb3B5IHRvIHNuaWZmZXIgKi9cbjE1Njg6XHRcdFx0bmZjX3NlbmRfdG9fcmF3X3NvY2sobmRldi1cdTAwM2VuZmNfZGV2LCBza2IsXG4xNTY5Olx0XHRcdFx0XHQgICAgIFJBV19QQVlMT0FEX05DSSwgTkZDX0RJUkVDVElPTl9SWCk7XG4xNTcwOlx0XG4xNTcxOlx0XHRcdGlmICghbmNpX3ZhbGlkX3NpemUoc2tiKSkge1xuMTU3MjpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTU3MzpcdFx0XHRcdGNvbnRpbnVlO1xuMTU3NDpcdFx0XHR9XG4xNTc1Olx0XG4xNTc2Olx0XHRcdC8qIFByb2Nlc3MgZnJhbWUgKi9cbjE1Nzc6XHRcdFx0c3dpdGNoIChuY2lfbXQoc2tiLVx1MDAzZWRhdGEpKSB7XG4xNTc4Olx0XHRcdGNhc2UgTkNJX01UX1JTUF9QS1Q6XG4xNTc5Olx0XHRcdFx0bmNpX3JzcF9wYWNrZXQobmRldiwgc2tiKTtcbjE1ODA6XHRcdFx0XHRicmVhaztcbjE1ODE6XHRcbjE1ODI6XHRcdFx0Y2FzZSBOQ0lfTVRfTlRGX1BLVDpcbjE1ODM6XHRcdFx0XHRuY2lfbnRmX3BhY2tldChuZGV2LCBza2IpO1xuMTU4NDpcdFx0XHRcdGJyZWFrO1xuMTU4NTpcdFxuMTU4NjpcdFx0XHRjYXNlIE5DSV9NVF9EQVRBX1BLVDpcbjE1ODc6XHRcdFx0XHRuY2lfcnhfZGF0YV9wYWNrZXQobmRldiwgc2tiKTtcbjE1ODg6XHRcdFx0XHRicmVhaztcbjE1ODk6XHRcbjE1OTA6XHRcdFx0ZGVmYXVsdDpcbjE1OTE6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7dW5rbm93biBNVCAweCV4XFxuXCYjMzQ7LCBuY2lfbXQoc2tiLVx1MDAzZWRhdGEpKTtcbjE1OTI6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjE1OTM6XHRcdFx0XHRicmVhaztcbjE1OTQ6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTAzMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogTkZDIE5DSSBQYWNrZXQgUHJvY2Vzc2luZyoqCgpPa2F5LCB0aGlzIGlzIGludGVyZXN0aW5nLiBMaW5lIDE1NjQtMTU2NSBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXQgbWU6IGBrY292X3JlbW90ZV9zdG9wKClgIGFuZCBga2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKClgISBUaGF0JiMzOTtzIGEgZGVhZCBnaXZlYXdheSDigJMgc3BlY2lmaWMgaW5zdHJ1bWVudGF0aW9uIGZvciBzeXprYWxsZXIgY292ZXJhZ2UsIHdoaWNoIG1lYW5zIHRoZXkmIzM5O3JlIGFjdGl2ZWx5IGZ1enppbmcgdGhpcyBhcmVhLiBCcmlsbGlhbnQhIFNvLCBOQ0kgcGFja2V0IHByb2Nlc3NpbmcgaXMgYWxyZWFkeSBnZXR0aW5nIGhhbW1lcmVkIGJ5IHN5emthbGxlciB0aHJvdWdoIHJlbW90ZSBjb3ZlcmFnZSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuCgpUaGlzIHBhcnRpY3VsYXIgY2hhbmdlIGludHJvZHVjZXMgYSBib3VuZHMgY2hlY2sgd2l0aGluIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYWx0ZXJpbmcgdGhlIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB0aGUgcGFja2V0IGxlbmd0aC4gVGhpcyBpcyBhbiBleGNlbGxlbnQgb3Bwb3J0dW5pdHkuIEEgc2hvcnQgcGFja2V0IG1pZ2h0IHRyaWdnZXIgYW4gaW50ZXJlc3RpbmcgY29uZGl0aW9uIGhlcmUsIHdoaWNoIG1ha2VzIHRoaXMgd29ydGggZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOgoKKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlLioqIEFic29sdXRlbHkuIFRoaXMgbG9va3MgbGlrZSBhIHByb21pc2luZyBhdmVudWUuCgoqICAgKipGb2N1c1N5bWJvbHM6KiogSSYjMzk7bSBnb2luZyB0byBjZW50ZXIgbXkgYXR0ZW50aW9uIG9uOgogICAgKiAgIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCAtIFRoZSBsb2NhdGlvbiBvZiB0aGUgbmV3IGJvdW5kcyBjaGVjay4KICAgICogICBgbmNpX3JzcF9wYWNrZXRgIC0gVGhlIHN0cnVjdHVyZSBvZiB0aGUgcmVzcG9uc2UgcGFja2V0cyBpbiBnZW5lcmFsLgogICAgKiAgIGBuY2lfcnhfd29ya2AgLSBUaGUgYXNzb2NpYXRlZCByZWNlaXZlIHdvcmtlci4gSG93IGlzIHRoaXMgcGFja2V0IGFjdHVhbGx5IGJlaW5nIGhhbmRsZWQuCgoqICAgKipFbmFibGVDb25maWdzOioqIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGhlcmUuIExldCYjMzk7cyBkaWcgaW50bzoKICAgICogICBgbmV0L25mYy9uY2kvcnNwLmNgIC0gVG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGNvdWxkIGltcGFjdCB0aGUgTkNJIHJlc3BvbnNlIHBhY2tldC4KICAgICogICBWaXJ0dWFsIE5DSSAvIE5GQyBjb25maWd1cmF0aW9uIC0gV2hpY2ggaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IHRvIGV2YWx1YXRlIGFuZCBzZXQuCiAgICAqICAgYG5ldC9uZmMvTWFrZWZpbGVgIGFuZCBgbmV0L25mYy9uY2kvTWFrZWZpbGVgIC0gVG8gZGV0ZXJtaW5lIGV4YWN0bHkgaG93IHRoaXMgbW9kdWxlIGlzIGJ1aWx0IGFuZCB3aGF0IG90aGVyIGRlcGVuZGVuY2llcyBhcmUgYXQgcGxheS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aG9zZSBNYWtlZmlsZXMgYW5kIHN0YXJ0IGNoZWNraW5nIHRoZSBjb25maWdzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IE5GQyBzdWJzeXN0ZW0uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19ORkMpICYjNDM7PSBuZmMub1xuICAgNzpcdG9iai0kKENPTkZJR19ORkNfTkNJKSAmIzQzOz0gbmNpL1xuICAgODpcdG9iai0kKENPTkZJR19ORkNfSENJKSAmIzQzOz0gaGNpL1xuICAgOTpcdG9iai0kKENPTkZJR19ORkNfRElHSVRBTCkgJiM0Mzs9IG5mY19kaWdpdGFsLm9cbiAgMTA6XHRcbiAgMTE6XHRuZmMtb2JqcyA6PSBjb3JlLm8gbmV0bGluay5vIGFmX25mYy5vIHJhd3NvY2subyBsbGNwX2NvcmUubyBsbGNwX2NvbW1hbmRzLm8gXFxcbiAgMTI6XHRcdFx0bGxjcF9zb2NrLm9cbiAgMTM6XHRcbiAgMTQ6XHRuZmNfZGlnaXRhbC1vYmpzIDo9IGRpZ2l0YWxfY29yZS5vIGRpZ2l0YWxfdGVjaG5vbG9neS5vIGRpZ2l0YWxfZGVwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5MzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIE5DSSBNYWtlZmlsZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgbmV0L25mYy9uY2kvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGJ1aWxkIGluc3RydWN0aW9ucyBmb3IgdGhlIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBhcmUgZ29pbmcgdG8gcmVzaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE5GQyBkcml2ZXIgaXMgYnVpbHQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBvciB3aGF0ZXZlciBidWlsZCBzeXN0ZW0gaXMgaW4gdXNlLiBJIGV4cGVjdCB0byBmaW5kIHJ1bGVzIGZvciBjb21waWxpbmcgdGhlIE5DSSBkcml2ZXIgbW9kdWxlcywgbGlua2luZyB0aGVtLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBpbnN0cnVjdGlvbnMgZm9yIGhhbmRsaW5nIGZpcm13YXJlIGxvYWRpbmcgaWYgdGhlIE5GQyBjb250cm9sbGVyIG5lZWRzIGl0LiBMb29raW5nIGF0IHRoZSBtYWtlZmlsZSBpcyB0aGUgbW9zdCBkaXJlY3Qgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MuIEZyb20gdGhlcmUsIEkgY2FuIHJldmVyc2UgZW5naW5lZXIgaG93IGl0IGlzIGJyb3VnaHQgaW50byB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggTkZDIE5DSSBsYXllci5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX05GQ19OQ0kpICYjNDM7PSBuY2kub1xuICAgNzpcdFxuICAgODpcdG5jaS1vYmpzIDo9IGNvcmUubyBkYXRhLm8gbGliLm8gbnRmLm8gcnNwLm8gaGNpLm9cbiAgIDk6XHRcbiAgMTA6XHRuY2lfc3BpLXkgJiM0Mzs9IHNwaS5vXG4gIDExOlx0b2JqLSQoQ09ORklHX05GQ19OQ0lfU1BJKSAmIzQzOz0gbmNpX3NwaS5vXG4gIDEyOlx0XG4gIDEzOlx0bmNpX3VhcnQteSAmIzQzOz0gdWFydC5vXG4gIDE0Olx0b2JqLSQoQ09ORklHX05GQ19OQ0lfVUFSVCkgJiM0Mzs9IG5jaV91YXJ0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNjQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTkZDIE5DSSBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYG5ldC9uZmMvbmNpL3JzcC5jYCBpcyBnb2luZyB0byBiZSBjb21waWxlZCBpbnRvIGBuY2kub2Agd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcywgYnV0IG9ubHkgaWYgYENPTkZJR19ORkNfTkNJYCBpcyBkZWZpbmVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGl0JiMzOTtzIGEgc3RhbmRhcmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2NlbmFyaW8uIEFuZCwgcHJlZGljdGFibHksIGBDT05GSUdfTkZDX05DSWAgaXRzZWxmIGlzIGRlcGVuZGVudCBvbiBgQ09ORklHX05GQ2AsIHNvIHdlIGhhdmUgYSBkZXBlbmRlbmN5IGNoYWluIHRoZXJlLiBOb3csIHRoZSBtb3JlIGludGVyZXN0aW5nIGJpdCBpcyBob3cgd2UgY2FuIGludGVyYWN0IHdpdGggdGhpcyBmcm9tIGEgdXNlci1zcGFjZSBwZXJzcGVjdGl2ZSwgcGFydGljdWxhcmx5IGZvciBmdXp6aW5nLgoKTXkgdGhpbmtpbmcgaXMgdGhhdCB0byBnZXQgdG8gYC9kZXYvdmlydHVhbF9uY2lgLCB3ZSBuZWVkIGBDT05GSUdfTkZDX1ZJUlRVQUxfTkNJYCwgd2hpY2ggaGFzIHRvLCBpbiB0dXJuLCBiZSBlbmFibGVkIGFuZCBpdCBkZXBlbmRzIG9uIHRoZSBjb3JlIGBORkNfTkNJYCBjb25maWd1cmF0aW9uLCBzbyB0aGF0IGlzIHRoZSBwYXRoIHRvIHRlc3RpbmcgdGhhdCBtb2R1bGUuIFRoaXMgbWFrZXMgc2Vuc2UgYXMgYSB2aXJ0dWFsIGRldmljZSBmb3IgdGVzdCBhbmQgZW11bGF0aW9uIHB1cnBvc2VzLiBBbHNvLCB0aGVyZSBpcyBgQ09ORklHX05GQ19NUlZMX1VTQmAgdG8gdGVzdCB0aGUgTkZDIE5DSSBpbnRlcmZhY2UgdGhyb3VnaCBVU0IsIHNvIHRoYXQgd2lsbCBiZSBhbm90aGVyIHdheSB0byB0ZXN0IGl0LgoKQWxyaWdodCwgdGltZSB0byBnbyBhbmQgY2hlY2sgYG5ldC9uZmMvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGVzZSBkZXBlbmRlbmNpZXMgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBhY3R1YWwgS2NvbmZpZyBmaWxlIGFuZCBzZWUgd2hhdCBvdGhlciBvcHRpb25zIGFyZSBhdmFpbGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTkZDIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkZDXG4gICA3Olx0XHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXG4gICA4Olx0XHR0cmlzdGF0ZSBcJiMzNDtORkMgc3Vic3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDk6XHRcdGRlZmF1bHQgblxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIE5GQyAoTmVhciBmaWVsZFxuICAxMjpcdFx0ICBjb21tdW5pY2F0aW9uKSBkZXZpY2VzLlxuICAxMzpcdFxuICAxNDpcdFx0ICBUbyBjb21waWxlIHRoaXMgc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gIDE1Olx0XHQgIGJlIGNhbGxlZCBuZmMuXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIE5GQ19ESUdJVEFMXG4gIDE4Olx0XHRkZXBlbmRzIG9uIE5GQ1xuICAxOTpcdFx0c2VsZWN0IENSQ19DQ0lUVFxuICAyMDpcdFx0c2VsZWN0IENSQ19JVFVfVFxuICAyMTpcdFx0dHJpc3RhdGUgXCYjMzQ7TkZDIERpZ2l0YWwgUHJvdG9jb2wgc3RhY2sgc3VwcG9ydFwmIzM0O1xuICAyMjpcdFx0ZGVmYXVsdCBuXG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIGJ1aWxkIE5GQyBkaWdpdGFsIHByb3RvY29sIHN0YWNrIHN1cHBvcnQuXG4gIDI1Olx0XHQgIFRoaXMgaXMgbmVlZGVkIGJ5IE5GQyBjaGlwc2V0cyB3aG9zZSBmaXJtd2FyZSBvbmx5IGltcGxlbWVudFxuICAyNjpcdFx0ICB0aGUgTkZDIGFuYWxvZyBsYXllci5cbiAgMjc6XHRcbiAgMjg6XHRcdCAgVG8gY29tcGlsZSB0aGlzIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICAyOTpcdFx0ICBiZSBjYWxsZWQgbmZjX2RpZ2l0YWwuXG4gIDMwOlx0XG4gIDMxOlx0c291cmNlIFwmIzM0O25ldC9uZmMvbmNpL0tjb25maWdcJiMzNDtcbiAgMzI6XHRzb3VyY2UgXCYjMzQ7bmV0L25mYy9oY2kvS2NvbmZpZ1wmIzM0O1xuICAzMzpcdFxuICAzNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjUzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG5ldC9uZmMvbmNpL0tjb25maWdgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgTkZDIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGp1bXAgaW50byBgbmV0L25mYy9uY2kvS2NvbmZpZ2AuIEkga25vdyB0aGlzIGlzIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiwgaXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9wdGlvbnMgZm9yIHRoZSBOQ0kgKE5GQyBDb250cm9sbGVyIEludGVyZmFjZSkgZHJpdmVycyBzaG91bGQgYmUgZGVmaW5lZC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBmaW5kIGFsbCB0aGUgdXN1YWwgc3VzcGVjdHM6IGVuYWJsZW1lbnQgZmxhZ3MsIG1heWJlIHNvbWUgYm9hcmQtc3BlY2lmaWMgb3ZlcnJpZGVzLCBhbmQgaG9wZWZ1bGx5IGNsZWFyIGRlcGVuZGVuY2llcyBvbiB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBuZXR3b3JraW5nIHN1YnN5c3RlbXMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaGllcmFyY2h5IGFuZCBob3cgdGhlc2Ugb3B0aW9ucyByZWxhdGUgdG8gb3RoZXIgTkZDIGNvbXBvbmVudHMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgYnJva2VuIGRvd24gaW50byBsb2dpY2FsIHNlY3Rpb25zLCBwb3NzaWJseSBiYXNlZCBvbiB0aGUgcGh5c2ljYWwgdHJhbnNwb3J0IG9yIHRoZSBzcGVjaWZpYyBOQ0kgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyAob3IgaGVhZGFjaGVzISkgYXdhaXQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gbWFnaWMgaGFwcGVucywgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0mIzM5O3MgTkZDIGNhcGFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5GQ19OQ0lcbiAgIDM6XHRcdGRlcGVuZHMgb24gTkZDXG4gICA0Olx0XHR0cmlzdGF0ZSBcJiMzNDtOQ0kgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuICAgNTpcdFx0ZGVmYXVsdCBuXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBpcyBhIGNvbW11bmljYXRpb24gcHJvdG9jb2wgYmV0d2VlblxuICAgODpcdFx0ICBhbiBORkMgQ29udHJvbGxlciAoTkZDQykgYW5kIGEgRGV2aWNlIEhvc3QgKERIKS5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIE5DSSBzdXBwb3J0IGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0b1xuICAxMTpcdFx0ICBjb21waWxlIGl0IGFzIG1vZHVsZSAobmNpKS5cbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgTkZDX05DSV9TUElcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgU1BJXG4gIDE1Olx0XHRzZWxlY3QgQ1JDX0NDSVRUXG4gIDE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOQ0kgb3ZlciBTUEkgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuICAxNzpcdFx0ZGVmYXVsdCBuXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBpcyBhIGNvbW11bmljYXRpb24gcHJvdG9jb2wgYmV0d2VlblxuICAyMDpcdFx0ICBhbiBORkMgQ29udHJvbGxlciAoTkZDQykgYW5kIGEgRGV2aWNlIEhvc3QgKERIKS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MDkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTkZDIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIFN5bWJvbCBBY2Nlc3NpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBORkMgY29uZmlndXJhdGlvbnMgYW5kIGl0IHNlZW1zIEkgbmVlZCB0byBjb25zaWRlciB0aGVzZSB0aHJlZTogYE5GQ2AsIGBORkNfTkNJYCwgYW5kIGBORkNfVklSVFVBTF9OQ0lgLiBSaWdodCwgc3RhbmRhcmQgTkZDIHNldHVwLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMuCgpOb3csIG15IGZvY3VzIGlzIG9uIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCBhcyBhIHBvdGVudGlhbCBwb2ludCBvZiBpbnRlcmVzdC4gSSBzZWUgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L25mYy9uY2kvcnNwLmNgLiBXYWl0LCBpcyBpdCBzdGF0aWM/IEFoLCB5ZXMsIGxpbmUgMzA1IGNvbmZpcm1zIGl0OiBgc3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCguLi4pYC4gSG1tLCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIGxpbWl0ZWQgdG8gdGhlIGZpbGUgc2NvcGUuIEJ1dCBob2xkIG9uLCBjYW4gc3RhdGljIGZ1bmN0aW9ucyAqYWN0dWFsbHkqIGJlIGxldmVyYWdlZCBhcyBhIGZvY3VzIHN5bWJvbD8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0LCBpZiBpdCBpc24mIzM5O3QgaW5saW5lZCwgdGhlIHN5bWJvbCBpcyBwcmVzZW50IGluIHZtbGludXgva2FsbHN5bXMsIGFuZCBzeXprYWxsZXIgY2FuIGluZGVlZCB0YXJnZXQgdGhlbS4gR29vZCB0byByZW1lbWJlci4KCk9rYXksIGxldCYjMzk7cyBiYWNrIHVwIGEgc3RlcC4gSSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hhdCBjYWxscyBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAuIExvb2tpbmcgYXQgaXQsIEkgc2VlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBuY2lfcnNwX3BhY2tldGAuIEFuZCB3aGVyZSBpcyB0aGF0PyBJdCYjMzk7cyBpbiBgbmV0L25mYy9uY2kvY29yZS5jYCBhbmQgaXMgcGFydCBvZiBgbmNpX3J4X3dvcmtgLiBUaGF0JiMzOTtzIG5vbi1zdGF0aWMsIHNvIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCBjYW4gYmUgY2FsbGVkLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBpdCBpcyBleHBvcnRlZCBvciBkZWNsYXJlZCBpbiBhIGhlYWRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmNpX3JzcF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oPTM1Mj1zdGF0aWMgaW5saW5lIGludCBuY2lfc2V0X3ZlbmRvcl9jbWRzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuLS1cbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oLTM1OC1cbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oOjM1OTp2b2lkIG5jaV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oLTM2MC12b2lkIG5jaV9udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTc6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2MjkKCQkJCQkJCW91dHB1dDogMTY3CgkJCQkJCQl0aG91Z2h0czogMTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXM6IEEgQ29uY2lzZSBQbGFuKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoaXMuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRob3NlIHZlcnkgc3BlY2lmaWMgc3ltYm9sczogYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGFuZCBgbmNpX3JzcF9wYWNrZXRgLiBUaGV5IGp1bXAgb3V0IGFzIHBlcmZlY3QgdGFyZ2V0cy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nOyBJJiMzOTtsbCBxdWlja2x5IGdsYW5jZSBhdCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMsIGxpa2UgYG5jaV9yeF93b3JrYCB3aXRoaW4gYG5ldC9uZmMvbmNpL2NvcmUuY2AgYW5kIGBuY2lfcmVjdl9mcmFtZWAuIEhvd2V2ZXIsIHRob3NlIGZpcnN0IHR3byBzZWVtIHRoZSBtb3N0IGRpcmVjdCBhbmQgcmVsZXZhbnQgZ2l2ZW4gdGhlIGNvbnRleHQsIGxpa2UgcGlucG9pbnRpbmcgYSB2ZXJ5IHNwZWNpZmljIHZ1bG5lcmFiaWxpdHkuCgpJJiMzOTtsbCBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBpbnN0cnVjdGlvbnMgYWdhaW4sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgZGV0YWlsOiAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGlzIGNsZWFyOyAmIzM0O0ZvY3VzU3ltYm9scywmIzM0OyB3aGljaCBpcyB3aGF0IEkmIzM5O20gZG9pbmcgbm93LCBkaXJlY3RseSBndWlkZXMgdGhpcyB3b3JrOyB0aGUgJiMzNDtFbmFibGVDb25maWdzJiMzNDsgcGFydCBtZWFucyBJJiMzOTt2ZSBjaGVja2VkIHRoZSBmbGFncyBhbmQgJiMzNDtSZWFzb25pbmcmIzM0OyBrZWVwcyBteSB3b3JrIGNvbmNpc2UuCgpSaWdodCwgYWxsIGNsZWFyLiBUaW1lIHRvIGV4ZWN1dGUuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX05DSSYjMzQ7LAogICAgJiMzNDtORkNfVklSVFVBTF9OQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9yc3BfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgb24gaW5jb21pbmcgTkNJIHJlc3BvbnNlIHBhY2tldHMgaW4gbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCB2aXJ0dWFsIE5DSSBkZXZpY2VzIChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJIC9kZXYvdmlydHVhbF9uY2kpIG9yIGVtdWxhdGVkIFVTQiBORkMgZGV2aWNlcywgYm90aCBvZiB3aGljaCBhcmUgc3VwcG9ydGVkIGFuZCBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OywKICAgICYjMzQ7TkZDX05DSSYjMzQ7LAogICAgJiMzNDtORkNfVklSVFVBTF9OQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9yc3BfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgb24gaW5jb21pbmcgTkNJIHJlc3BvbnNlIHBhY2tldHMgaW4gbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCB2aXJ0dWFsIE5DSSBkZXZpY2VzIChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJIC9kZXYvdmlydHVhbF9uY2kpIG9yIGVtdWxhdGVkIFVTQiBORkMgZGV2aWNlcywgYm90aCBvZiB3aGljaCBhcmUgc3VwcG9ydGVkIGFuZCBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGxlbmd0aCB2YWxpZGF0aW9uIGNoZWNrIChgc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKCpyc3ApYCkgaW4gYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoKWAgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIGZyb20gYHNrYi1cdTAwM2VkYXRhYCB3aGVuIHBhcnNpbmcgdHJ1bmNhdGVkIE5DSSByZXNwb25zZSBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBidWdzIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIGNvcHkgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzAyOGRkYWU0ZjlmYjY2OThiZDUxNTdmNDBlOTQ3NmFjMjcxNDliNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDE3OjEyOjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvcnNwLmMgYi9uZXQvbmZjL25jaS9yc3AuYwppbmRleCBiMGFiNGY1YWNiY2U4Li43MmI3NDhmMGJlOWYyIDEwMDY0NAotLS0gYS9uZXQvbmZjL25jaS9yc3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL25jaS9yc3AuYwpAQCAtMzEyLDYgJiM0MzszMTIsMTAgQEAgc3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAlwcl9kZWJ1ZygmIzM0O3N0YXR1cyAweCV4XG4mIzM0Oywgc3RhdHVzKTsKIAogCWlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykgewomIzQzOwkJaWYgKHNrYi0mZ3Q7bGVuICZsdDsgc2l6ZW9mKCpyc3ApKSB7CiYjNDM7CQkJc3RhdHVzID0gTkNJX1NUQVRVU19TWU5UQVhfRVJST1I7CiYjNDM7CQkJZ290byBleGl0OwomIzQzOwkJfQogCQlyc3AgPSAoc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCAqKXNrYi0mZ3Q7ZGF0YTsKIAogCQljb25uX2luZm8gPSBkZXZtX2t6YWxsb2MoJmFtcDtuZGV2LSZndDtuZmNfZGV2LSZndDtkZXYsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBFdmFsdWF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggdG8gYG5ldC9uZmMvbmNpL3JzcC5jYCB3YXJyYW50cyBpdHMgb3duIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSByZXF1ZXN0IGlzIHN0cmFpZ2h0Zm9yd2FyZDogZGV0ZXJtaW5lIGlmIEtNU0FOIG9yIEtBU0FOIGlzIHRoZSBiZXR0ZXIgY2hvaWNlIGZvciB0aGlzIHBhdGNoLCBwcm9iYWJseSBhcyBwYXJ0IG9mIGEgc3l6a2FsbGVyIHNldHVwLiBUaGUgY29udGV4dCBoZXJlIGlzIHByZXR0eSBzdGFuZGFyZDogaXQmIzM5O3MgYSBjb2RlIHJldmlldyBhbmQgd2UmIzM5O3JlIHNlbGVjdGluZyB0aGUgcmlnaHQgc2FuaXRpemVyLiBTZXZlcml0eS13aXNlLCBpdCYjMzk7cyBtb3JlIG9mIGEgYmVuaWduLCBkZWZlbnNpdmUgUUEgZWZmb3J0OyB3ZSYjMzk7cmUgdHJpYWdpbmcgc2FuaXRpemVycy4KCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGNvZGUuIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSBgbmV0L25mYy9uY2kvcnNwLmNgIGFyb3VuZCBsaW5lIDMxMi4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVsZXZhbnQgbG9naWMgbXVzdCBsaWUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhlcmUuIEkmIzM5O2xsIGxvb2sgZm9yIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IG1pZ2h0IHNsaXAgcGFzdCBLQVNBTi4gV2UgbmVlZCB0byBhc3Nlc3MgdGhlIHNwZWNpZmljIGRhdGEgZmxvd3MgYW5kIGlmIHRoZXJlJiMzOTtzIGFueSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHJhY2UgY29uZGl0aW9ucywgb3Igc2ltaWxhciBpc3N1ZXMgdGhhdCBjb3VsZCBiZSBleHBvc2VkIGJ5IEtNU0FOLiBUaW1lIHRvIGRpZyBpbiBhbmQgZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL3JzcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcbiAzMDE6XHRcdHByX2RlYnVnKFwmIzM0O3N0YXR1cyAweCV4XFxuXCYjMzQ7LCBzdGF0dXMpO1xuIDMwMjpcdFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBzdGF0dXMpO1xuIDMwMzpcdH1cbiAzMDQ6XHRcbiAzMDU6XHRzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIDMwNjpcdFx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzMDc6XHR7XG4gMzA4Olx0XHRfX3U4IHN0YXR1cyA9IHNrYi1cdTAwM2VkYXRhWzBdO1xuIDMwOTpcdFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbyA9IE5VTEw7XG4gMzEwOlx0XHRjb25zdCBzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwICpyc3A7XG4gMzExOlx0XG4gMzEyOlx0XHRwcl9kZWJ1ZyhcJiMzNDtzdGF0dXMgMHgleFxcblwmIzM0Oywgc3RhdHVzKTtcbiAzMTM6XHRcbiAzMTQ6XHRcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykge1xuIDMxNTpcdFx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKCpyc3ApKSB7XG4gMzE2Olx0XHRcdFx0c3RhdHVzID0gTkNJX1NUQVRVU19TWU5UQVhfRVJST1I7XG4gMzE3Olx0XHRcdFx0Z290byBleGl0O1xuIDMxODpcdFx0XHR9XG4gMzE5Olx0XHRcdHJzcCA9IChzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwICopc2tiLVx1MDAzZWRhdGE7XG4gMzIwOlx0XG4gMzIxOlx0XHRcdGNvbm5faW5mbyA9IGRldm1fa3phbGxvYyhcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LFxuIDMyMjpcdFx0XHRcdFx0XHQgc2l6ZW9mKCpjb25uX2luZm8pLCBHRlBfS0VSTkVMKTtcbiAzMjM6XHRcdFx0aWYgKCFjb25uX2luZm8pIHtcbiAzMjQ6XHRcdFx0XHRzdGF0dXMgPSBOQ0lfU1RBVFVTX1JFSkVDVEVEO1xuIDMyNTpcdFx0XHRcdGdvdG8gZXhpdDtcbiAzMjY6XHRcdFx0fVxuIDMyNzpcdFxuIDMyODpcdFx0XHRjb25uX2luZm8tXHUwMDNlZGVzdF9wYXJhbXMgPSBkZXZtX2t6YWxsb2MoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldixcbiAzMjk6XHRcdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMpLFxuIDMzMDpcdFx0XHRcdFx0XHRcdEdGUF9LRVJORUwpO1xuIDMzMTpcdFx0XHRpZiAoIWNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcykge1xuIDMzMjpcdFx0XHRcdHN0YXR1cyA9IE5DSV9TVEFUVVNfUkVKRUNURUQ7XG4gMzMzOlx0XHRcdFx0Z290byBmcmVlX2Nvbm5faW5mbztcbiAzMzQ6XHRcdFx0fVxuIDMzNTpcdFxuIDMzNjpcdFx0XHRjb25uX2luZm8tXHUwMDNlZGVzdF90eXBlID0gbmRldi1cdTAwM2VjdXJfZGVzdF90eXBlO1xuIDMzNzpcdFx0XHRjb25uX2luZm8tXHUwMDNlZGVzdF9wYXJhbXMtXHUwMDNlaWQgPSBuZGV2LVx1MDAzZWN1cl9wYXJhbXMuaWQ7XG4gMzM4Olx0XHRcdGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcy1cdTAwM2Vwcm90b2NvbCA9IG5kZXYtXHUwMDNlY3VyX3BhcmFtcy5wcm90b2NvbDtcbiAzMzk6XHRcdFx0Y29ubl9pbmZvLVx1MDAzZWNvbm5faWQgPSByc3AtXHUwMDNlY29ubl9pZDtcbiAzNDA6XHRcbiAzNDE6XHRcdFx0LyogTm90ZTogZGF0YV9leGNoYW5nZV9jYiBhbmQgZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0IG5lZWQgdG9cbiAzNDI6XHRcdFx0ICogYmUgc3BlY2lmeSBvdXQgb2YgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldFxuIDM0MzpcdFx0XHQgKi9cbiAzNDQ6XHRcbiAzNDU6XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWxpc3QpO1xuIDM0NjpcdFx0XHRsaXN0X2FkZChcdTAwMjZjb25uX2luZm8tXHUwMDNlbGlzdCwgXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbGlzdCk7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRcdGlmIChuZGV2LVx1MDAzZWN1cl9wYXJhbXMuaWQgPT0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZW5mY2VlX2lkKVxuIDM0OTpcdFx0XHRcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8gPSBjb25uX2luZm87XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MTMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCBzaXR1YXRpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyByb2xlLCB0aGUgZGF0YSBpdCBoYW5kbGVzLCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJyb2FkZXIgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGZyYW1ld29yay4gTXkgZXhwZXJ0aXNlIGRlbWFuZHMgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBwYWNrZXQmIzM5O3Mgc3RydWN0dXJlIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBjb250ZW50LiBMZXQgbWUgZGlzc2VjdCB0aGlzIHRob3JvdWdobHksIHN0YXJ0aW5nIHdpdGggaXRzIHNwZWNpZmljIGZ1bmN0aW9uLCBhbmQgZm9sbG93IHRoYXQgd2l0aCBob3cgaXQgZ2V0cyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbmNpL3JzcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTA6XHRcbiAzNTE6XHRcdFx0Y29ubl9pbmZvLVx1MDAzZWNvbm5faWQgPSByc3AtXHUwMDNlY29ubl9pZDtcbiAzNTI6XHRcdFx0Y29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4gPSByc3AtXHUwMDNlbWF4X2N0cmxfcGt0X3BheWxvYWRfbGVuO1xuIDM1MzpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCwgcnNwLVx1MDAzZWNyZWRpdHNfY250KTtcbiAzNTQ6XHRcdH1cbiAzNTU6XHRcbiAzNTY6XHRmcmVlX2Nvbm5faW5mbzpcbiAzNTc6XHRcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19SRUpFQ1RFRClcbiAzNTg6XHRcdFx0ZGV2bV9rZnJlZShcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LCBjb25uX2luZm8pO1xuIDM1OTpcdGV4aXQ6XG4gMzYwOlx0XG4gMzYxOlx0XHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7XG4gMzYyOlx0fVxuIDM2MzpcdFxuIDM2NDpcdHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiAzNjU6XHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzNjY6XHR7XG4gMzY3Olx0XHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIDM2ODpcdFx0X191OCBzdGF0dXMgPSBza2ItXHUwMDNlZGF0YVswXTtcbiAzNjk6XHRcbiAzNzA6XHRcdHByX2RlYnVnKFwmIzM0O3N0YXR1cyAweCV4XFxuXCYjMzQ7LCBzdGF0dXMpO1xuIDM3MTpcdFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XG4gMzcyOlx0XHRcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldixcbiAzNzM6XHRcdFx0XHRcdFx0XHRcdCBuZGV2LVx1MDAzZWN1cl9jb25uX2lkKTtcbiAzNzQ6XHRcdFx0aWYgKGNvbm5faW5mbykge1xuIDM3NTpcdFx0XHRcdGxpc3RfZGVsKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0KTtcbiAzNzY6XHRcdFx0XHRpZiAoY29ubl9pbmZvID09IG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvKVxuIDM3NzpcdFx0XHRcdFx0bmRldi1cdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xuIDM3ODpcdFx0XHRcdGRldm1fa2ZyZWUoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgY29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zKTtcbiAzNzk6XHRcdFx0XHRkZXZtX2tmcmVlKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsIGNvbm5faW5mbyk7XG4gMzgwOlx0XHRcdH1cbiAzODE6XHRcdH1cbiAzODI6XHRcdG5jaV9yZXFfY29tcGxldGUobmRldiwgc3RhdHVzKTtcbiAzODM6XHR9XG4gMzg0Olx0XG4gMzg1Olx0dm9pZCBuY2lfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAzODY6XHR7XG4gMzg3Olx0XHRfX3UxNiByc3Bfb3Bjb2RlID0gbmNpX29wY29kZShza2ItXHUwMDNlZGF0YSk7XG4gMzg4Olx0XG4gMzg5Olx0XHQvKiB3ZSBnb3QgYSByc3AsIHN0b3AgdGhlIGNtZCB0aW1lciAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjQ4CgkJCQkJCQlvdXRwdXQ6IDE0NwoJCQkJCQkJdGhvdWdodHM6IDg4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBLTVNBTiBOZWVkZWQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBjcnVjaWFsIGNoZWNrLiBCZWZvcmUsIHdlIGhhZCBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgY2FzdGluZyBgc2tiLSZndDtkYXRhYCB0byBhIHJlc3BvbnNlIHN0cnVjdCAoYHJzcGApIGFuZCB0aGVuIHJlYWRpbmcgZmllbGRzIGxpa2UgYGNvbm5faWRgLCBgbWF4X2N0cmxfcGt0X3BheWxvYWRfbGVuYCwgYW5kIGBjcmVkaXRzX2NudGAuIFRoZSBwcm9ibGVtIHdhcywgaWYgdGhlIGBza2ItJmd0O2xlbmAgKHRoZSBhY3R1YWwgcGFja2V0IGxlbmd0aCkgd2FzIHNtYWxsZXIgdGhhbiB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGF0IHJlc3BvbnNlIHN0cnVjdCwgd2Ugd2VyZSBwb3RlbnRpYWxseSByZWFkaW5nICpwYXN0KiB0aGUgZW5kIG9mIHRoZSBgc2tiLSZndDtkYXRhYCBidWZmZXIgLSBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIGEgY2xhc3NpYyBidWZmZXIgb3ZlcnJlYWQuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhhdCwgb3IgZXZlbiBLQVNBTiBzbGFiIE9PQiBpbiBtb3JlIHN1YnRsZSBjYXNlcy4KClRoZSBwYXRjaCYjMzk7cyBmaXggaXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBhZGRzIGEgc2l6ZSBjaGVjayAoYHNrYi0mZ3Q7bGVuICZsdDsgc2l6ZW9mKCpyc3ApYCkgdG8gZW5zdXJlIHRoZSByZXNwb25zZSBwYWNrZXQgaXMgbGFyZ2UgZW5vdWdoIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJlYWQgYW55IG9mIGl0cyBmaWVsZHMuIFNvLCBpbiBlZmZlY3QsIHdlJiMzOTtyZSBoYXJkZW5pbmcgdGhlIGNvZGUgYWdhaW5zdCBhIHNpbXBsZSBPT0IgcmVhZC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBmb3IgS01TQU46IGRvZXMgdGhpcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBBYnNvbHV0ZWx5IG5vdC4gVGhlIGBza2JgIGRhdGEgaXMgY29taW5nIGZyb20gdGhlIGRyaXZlciBvciBkZXZpY2UgLSBpdCYjMzk7cyBhbHJlYWR5IGZpbGxlZCB3aXRoIGRhdGEuIFJlYWRpbmcgcGFzdCB0aGUgbGVuZ3RoIGlzIHRoZSB2dWxuZXJhYmlsaXR5LCBub3QgYW4gdW5pbml0aWFsaXplZCB2YWx1ZS4KCkxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2U6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuCjMuICBDb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIGxhdGVyIHVuaW5pdGlhbGl6ZWQgcmVhZHM/IE5vcGUsIGp1c3QgdGhlIGJvdW5kcyBjaGVjay4KNC4gIEJvdW5kcyBjaGVja3MgdGhhdCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcz8gTm9wZSwgaXQgdGlnaHRlbnMgdGhlIGJvdW5kcy4KCkFjY29yZGluZyB0byB0aGUgcnVsZXMsIHdlIHNob3VsZG4mIzM5O3QgZXZlbiBjb25zaWRlciBLTVNBTiBpZiBhIGJ1ZyBjYW4gYmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIHdoaWNoIGlzIGRlZmluaXRlbHkgdGhlIGNhc2UgaGVyZS4gVGhpcyBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5LiBJdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbGwgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQsIG9yIGJvdW5kcy1jaGVja2VkIGZvciByZWFkcy4gSXQmIzM5O3MgYSBwcmV2ZW50YXRpdmUgbWVhc3VyZSBhZ2FpbnN0IGEgYnVmZmVyIG92ZXJyZWFkLCB3aGljaCBLQVNBTiB3b3VsZCByZWxpYWJseSBjYXRjaC4gTm8gS01TQU4gbmVlZGVkLgoKU28sIGxldCYjMzk7cyBmb3JtYWxpemUgdGhlIHJlc3BvbnNlOgoKKiAgICoqTmVlZHNLTVNBTjogZmFsc2UqKgoqICAgKipLTVNBTlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxlbmd0aCB2YWxpZGF0aW9uIGNoZWNrIChgc2tiLSZndDtsZW4gJmx0OyBzaXplb2YoKnJzcClgKSBpbiBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgYmVmb3JlIHJlYWRpbmcgcmVzcG9uc2UgZmllbGRzIGZyb20gYHNrYi0mZ3Q7ZGF0YWAuIFRoaXMgcHJldmVudHMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIChPT0Igb3ZlcnJlYWQpIG9uIHRoZSBzb2NrZXQgYnVmZmVyIChgc2tiYCkuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIHRyYWNrZWQgYW5kIGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdGFjayB2YXJpYWJsZXMsIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgc2ltcGx5IHByZXZlbnRzIHJlYWRpbmcgYmV5b25kIHRoZSBwYWNrZXQmIzM5O3MgYm91bmRhcmllcyBhbmQgZG9lcyBub3QgZXhwb3NlIG9yIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIEtNU0FOLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIHZhbGlkYXRpb24gY2hlY2sgKGBza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKnJzcClgKSBpbiBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCgpYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgc2tiLVx1MDAzZWRhdGFgIHdoZW4gcGFyc2luZyB0cnVuY2F0ZWQgTkNJIHJlc3BvbnNlIHBhY2tldHMuIE91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFyZSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGJ1Z3MgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIHZhbGlkYXRpb24gY2hlY2sgKGBza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKnJzcClgKSBpbiBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCgpYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgZnJvbSBgc2tiLVx1MDAzZWRhdGFgIHdoZW4gcGFyc2luZyB0cnVuY2F0ZWQgTkNJIHJlc3BvbnNlIHBhY2tldHMuIE91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFyZSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGJ1Z3MgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEyOjU1LjgxMDI5NTAzMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MzExMDQ5MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiLFxuICAgIFwiTkZDX05DSVwiLFxuICAgIFwiTkZDX1ZJUlRVQUxfTkNJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldFwiLFxuICAgIFwibmNpX3JzcF9wYWNrZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggdmFsaWRhdGlvbiBjaGVjayAoYHNrYi1cXHUwMDNlbGVuIFxcdTAwM2Mgc2l6ZW9mKCpyc3ApYCkgaW4gYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoKWAgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIGZyb20gYHNrYi1cXHUwMDNlZGF0YWAgd2hlbiBwYXJzaW5nIHRydW5jYXRlZCBOQ0kgcmVzcG9uc2UgcGFja2V0cy4gT3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgYXJlIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgYnVncyBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIGNoZWNrIG9uIGluY29taW5nIE5DSSByZXNwb25zZSBwYWNrZXRzIGluIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHRocm91Z2ggdmlydHVhbCBOQ0kgZGV2aWNlcyAoQ09ORklHX05GQ19WSVJUVUFMX05DSSAvZGV2L3ZpcnR1YWxfbmNpKSBvciBlbXVsYXRlZCBVU0IgTkZDIGRldmljZXMsIGJvdGggb2Ygd2hpY2ggYXJlIHN1cHBvcnRlZCBhbmQgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTI6NTUuODEwMzAwMTYyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc1MzczOTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzAyOGRkYWU0ZjlmYjY2OThiZDUxNTdmNDBlOTQ3NmFjMjcxNDliNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCAxMiAxNzoxMjo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9yc3AuYyBiL25ldC9uZmMvbmNpL3JzcC5jXFxuaW5kZXggYjBhYjRmNWFjYmNlOC4uNzJiNzQ4ZjBiZTlmMiAxMDA2NDRcXG4tLS0gYS9uZXQvbmZjL25jaS9yc3AuY1xcbisrKyBiL25ldC9uZmMvbmNpL3JzcC5jXFxuQEAgLTMxMiw2ICszMTIsMTAgQEAgc3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4gXFx0cHJfZGVidWcoXFxcInN0YXR1cyAweCV4XFxcXG5cXFwiLCBzdGF0dXMpO1xcbiBcXG4gXFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XFxuK1xcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVvZigqcnNwKSkge1xcbitcXHRcXHRcXHRzdGF0dXMgPSBOQ0lfU1RBVFVTX1NZTlRBWF9FUlJPUjtcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXHRcXHR9XFxuIFxcdFxcdHJzcCA9IChzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwICopc2tiLVxcdTAwM2VkYXRhO1xcbiBcXG4gXFx0XFx0Y29ubl9pbmZvID0gZGV2bV9remFsbG9jKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEyOjU3LjI4NjM0NTI2OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzgyMDE0NTg5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0XCIsXG4gICAgXCJuY2lfcnNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgb24gaW5jb21pbmcgTkNJIHJlc3BvbnNlIHBhY2tldHMgaW4gbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCB2aXJ0dWFsIE5DSSBkZXZpY2VzIChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJIC9kZXYvdmlydHVhbF9uY2kpIG9yIGVtdWxhdGVkIFVTQiBORkMgZGV2aWNlcywgYm90aCBvZiB3aGljaCBhcmUgc3VwcG9ydGVkIGFuZCBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcwMjhkZGFlNGY5ZmI2Njk4YmQ1MTU3ZjQwZTk0NzZhYzI3MTQ5YjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxNzoxMjo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL3JzcC5jIGIvbmV0L25mYy9uY2kvcnNwLmNcbmluZGV4IGIwYWI0ZjVhY2JjZTguLjcyYjc0OGYwYmU5ZjIgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9yc3AuY1xuKysrIGIvbmV0L25mYy9uY2kvcnNwLmNcbkBAIC0zMTIsNiArMzEyLDEwIEBAIHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRwcl9kZWJ1ZyhcInN0YXR1cyAweCV4XFxuXCIsIHN0YXR1cyk7XG4gXG4gXHRpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfT0spIHtcbitcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZigqcnNwKSkge1xuK1x0XHRcdHN0YXR1cyA9IE5DSV9TVEFUVVNfU1lOVEFYX0VSUk9SO1xuK1x0XHRcdGdvdG8gZXhpdDtcbitcdFx0fVxuIFx0XHRyc3AgPSAoc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCAqKXNrYi1cdTAwM2VkYXRhO1xuIFxuIFx0XHRjb25uX2luZm8gPSBkZXZtX2t6YWxsb2MoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEyOjU3LjI4NjM0NjkwOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ4OTQ3ODk4NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgUGF0Y2gncyBTdWl0YWJpbGl0eSBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUuLi4gdGhlIHBhdGNoIGl0c2VsZiBpcyBhZGRpbmcgYSBzaXplIGNoZWNrIHRvIGBuZXQvbmZjL25jaS9yc3AuY2AuIFNwZWNpZmljYWxseSwgaXQgY2hlY2tzIGlmIGBza2ItXHUwMDNlbGVuYCBpcyBsZXNzIHRoYW4gYHNpemVvZigqcnNwKWAgYmVmb3JlIGFjY2Vzc2luZyB0aGUgYHJzcGAgc3RydWN0LiBUaGlzIGlzIGEgY2xhc3NpYyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBzcG90LCBhIG1pc3NpbmcgYm91bmRzIGNoZWNrLiBJZiB0aGUgcGFja2V0IHJlY2VpdmVkIGhhcyBpbnN1ZmZpY2llbnQgc2l6ZSwgYWNjZXNzaW5nIGBza2ItXHUwMDNlZGF0YWAgbWlnaHQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3IsIGluIGV4dHJlbWUgY2FzZXMsIGEgY3Jhc2guXG5cbk15IGluaXRpYWwgaHVuY2gsIGJhc2VkIHB1cmVseSBvbiB0aGlzIGRpZmYsIGlzIHRoYXQgaXQncyAqbGlrZWx5KiBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBNaXNzaW5nIGJvdW5kcyBjaGVja3MgYXJlIGEgZmF2b3JpdGUgcGxheWdyb3VuZCBmb3IgZnV6emVycyBsaWtlIHN5emthbGxlci5cblxuVG8gZ2V0IGEgYmV0dGVyIGdyaXAsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIGBuZXQvbmZjL25jaS9yc3AuY2Agd2l0aCBzb21ldGhpbmcgbGlrZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE5GQyAoTmVhciBGaWVsZCBDb21tdW5pY2F0aW9uKSBzdWJzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhpcyBwYXJ0aWN1bGFyIGZpbGUuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBhIGNyaXRpY2FsIGRhdGEgcGF0aCBvciBqdXN0IHNvbWUgcmFyZWx5LXVzZWQgZGVidWcgZnVuY3Rpb24uIElmIEkgY2FuIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgdXNlZCwgSSBjYW4gZXZhbHVhdGUgaG93IGdvb2Qgb2YgYSB0YXJnZXQgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzowMi4xODExMzkyNThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL25jaS9yc3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFxuIDMwMTpcXHRcXHRwcl9kZWJ1ZyhcXFwic3RhdHVzIDB4JXhcXFxcblxcXCIsIHN0YXR1cyk7XFxuIDMwMjpcXHRcXHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7XFxuIDMwMzpcXHR9XFxuIDMwNDpcXHRcXG4gMzA1OlxcdHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuIDMwNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzA3OlxcdHtcXG4gMzA4OlxcdFxcdF9fdTggc3RhdHVzID0gc2tiLVxcdTAwM2VkYXRhWzBdO1xcbiAzMDk6XFx0XFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbyA9IE5VTEw7XFxuIDMxMDpcXHRcXHRjb25zdCBzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwICpyc3A7XFxuIDMxMTpcXHRcXG4gMzEyOlxcdFxcdHByX2RlYnVnKFxcXCJzdGF0dXMgMHgleFxcXFxuXFxcIiwgc3RhdHVzKTtcXG4gMzEzOlxcdFxcbiAzMTQ6XFx0XFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XFxuIDMxNTpcXHRcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBzaXplb2YoKnJzcCkpIHtcXG4gMzE2OlxcdFxcdFxcdFxcdHN0YXR1cyA9IE5DSV9TVEFUVVNfU1lOVEFYX0VSUk9SO1xcbiAzMTc6XFx0XFx0XFx0XFx0Z290byBleGl0O1xcbiAzMTg6XFx0XFx0XFx0fVxcbiAzMTk6XFx0XFx0XFx0cnNwID0gKHN0cnVjdCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3AgKilza2ItXFx1MDAzZWRhdGE7XFxuIDMyMDpcXHRcXG4gMzIxOlxcdFxcdFxcdGNvbm5faW5mbyA9IGRldm1fa3phbGxvYyhcXHUwMDI2bmRldi1cXHUwMDNlbmZjX2Rldi1cXHUwMDNlZGV2LFxcbiAzMjI6XFx0XFx0XFx0XFx0XFx0XFx0IHNpemVvZigqY29ubl9pbmZvKSwgR0ZQX0tFUk5FTCk7XFxuIDMyMzpcXHRcXHRcXHRpZiAoIWNvbm5faW5mbykge1xcbiAzMjQ6XFx0XFx0XFx0XFx0c3RhdHVzID0gTkNJX1NUQVRVU19SRUpFQ1RFRDtcXG4gMzI1OlxcdFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4gMzI2OlxcdFxcdFxcdH1cXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0XFx0Y29ubl9pbmZvLVxcdTAwM2VkZXN0X3BhcmFtcyA9IGRldm1fa3phbGxvYyhcXHUwMDI2bmRldi1cXHUwMDNlbmZjX2Rldi1cXHUwMDNlZGV2LFxcbiAzMjk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zKSxcXG4gMzMwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbiAzMzE6XFx0XFx0XFx0aWYgKCFjb25uX2luZm8tXFx1MDAzZWRlc3RfcGFyYW1zKSB7XFxuIDMzMjpcXHRcXHRcXHRcXHRzdGF0dXMgPSBOQ0lfU1RBVFVTX1JFSkVDVEVEO1xcbiAzMzM6XFx0XFx0XFx0XFx0Z290byBmcmVlX2Nvbm5faW5mbztcXG4gMzM0OlxcdFxcdFxcdH1cXG4gMzM1OlxcdFxcbiAzMzY6XFx0XFx0XFx0Y29ubl9pbmZvLVxcdTAwM2VkZXN0X3R5cGUgPSBuZGV2LVxcdTAwM2VjdXJfZGVzdF90eXBlO1xcbiAzMzc6XFx0XFx0XFx0Y29ubl9pbmZvLVxcdTAwM2VkZXN0X3BhcmFtcy1cXHUwMDNlaWQgPSBuZGV2LVxcdTAwM2VjdXJfcGFyYW1zLmlkO1xcbiAzMzg6XFx0XFx0XFx0Y29ubl9pbmZvLVxcdTAwM2VkZXN0X3BhcmFtcy1cXHUwMDNlcHJvdG9jb2wgPSBuZGV2LVxcdTAwM2VjdXJfcGFyYW1zLnByb3RvY29sO1xcbiAzMzk6XFx0XFx0XFx0Y29ubl9pbmZvLVxcdTAwM2Vjb25uX2lkID0gcnNwLVxcdTAwM2Vjb25uX2lkO1xcbiAzNDA6XFx0XFxuIDM0MTpcXHRcXHRcXHQvKiBOb3RlOiBkYXRhX2V4Y2hhbmdlX2NiIGFuZCBkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgbmVlZCB0b1xcbiAzNDI6XFx0XFx0XFx0ICogYmUgc3BlY2lmeSBvdXQgb2YgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldFxcbiAzNDM6XFx0XFx0XFx0ICovXFxuIDM0NDpcXHRcXG4gMzQ1OlxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWxpc3QpO1xcbiAzNDY6XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlbGlzdCwgXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19saXN0KTtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0XFx0aWYgKG5kZXYtXFx1MDAzZWN1cl9wYXJhbXMuaWQgPT0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlbmZjZWVfaWQpXFxuIDM0OTpcXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm8gPSBjb25uX2luZm87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjAyLjE4MTIwNzkxOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxNDI5MzYwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBOQ0kgUGFja2V0IEhhbmRsaW5nKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgaXMgdXNlZC4gSSdtIHRoaW5raW5nIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uIHNwZWNpZmljYWxseSwgYW5kIHRoZW4sIG1vcmUgYnJvYWRseSwgbWFwIG91dCB0aGUgZW50aXJlIHJlY2VpdmUgYW5kIGRpc3BhdGNoIHByb2Nlc3MgZm9yIE5DSSBwYWNrZXRzIHdpdGhpbiB0aGlzIHN5c3RlbS4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGF0YSBmbG93IGZyb20gdGhlIHBoeXNpY2FsIGxheWVyIHVwIHRvIHRoZSBwb2ludCB3aGVyZSB0aGlzIHJlc3BvbnNlIHBhY2tldCBpcyB1bHRpbWF0ZWx5IGhhbmRsZWQuIEknbSBhc3N1bWluZyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FsbCBpcyBhIGtleSBwaWVjZSBpbiB0aGUgY29ubmVjdGlvbiBzZXR1cCwgd2hpY2ggSSdsbCBuZWVkIHRvIGNvbmZpcm0sIGJ1dCBJJ2xsIGZvY3VzIG9uIGhvdyB0aGUgcGFja2V0IGlzIHJlY2VpdmVkLCB0aGUgc3Vic2VxdWVudCBwcm9jZXNzaW5nIGl0IHVuZGVyZ29lcywgYW5kIGhvdyBpdCBpcyByb3V0ZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXIuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBmb3IgcGFja2V0IGlkZW50aWZpY2F0aW9uLCB0aGUgcm9sZSBvZiBhbnkgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgcXVldWluZyBvciBidWZmZXJpbmcgdXNlZC4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHBvaW50cyBvZiBlcnJvciwgYW5kIGFueSBhcmVhcyB0aGF0IG1pZ2h0IGJlbmVmaXQgZnJvbSBvcHRpbWl6YXRpb24sIGdpdmVuIG15IHBhc3QgZXhwZXJpZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MTMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjA1LjMyNDE0NTkzM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU5MTIyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmMvbmNpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbmNpL3JzcC5jPTI5Nj1zdGF0aWMgdm9pZCBuY2lfbmZjZWVfbW9kZV9zZXRfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jLTMwNC1cXG5uZXQvbmZjL25jaS9yc3AuYzozMDU6c3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG5uZXQvbmZjL25jaS9yc3AuYy0zMDYtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL25jaS9yc3AuYy0zNDEtXFx0XFx0LyogTm90ZTogZGF0YV9leGNoYW5nZV9jYiBhbmQgZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0IG5lZWQgdG9cXG5uZXQvbmZjL25jaS9yc3AuYzozNDI6XFx0XFx0ICogYmUgc3BlY2lmeSBvdXQgb2YgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldFxcbm5ldC9uZmMvbmNpL3JzcC5jLTM0My1cXHRcXHQgKi9cXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jPTM4NT12b2lkIG5jaV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9uY2kvcnNwLmMtNDIzLVxcdGNhc2UgTkNJX09QX0NPUkVfQ09OTl9DUkVBVEVfUlNQOlxcbm5ldC9uZmMvbmNpL3JzcC5jOjQyNDpcXHRcXHRuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KG5kZXYsIHNrYik7XFxubmV0L25mYy9uY2kvcnNwLmMtNDI1LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzowNS4zNzI3NDE5NzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODI4MjYxMjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbmNpX3JzcF9wYWNrZXRgIENhbGwgU2l0ZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIGBuY2lfcnNwX3BhY2tldGAuIFRpbWUgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBpZGVudGlmeSB0aGUgZGlmZmVyZW50IGNvbnRleHRzIGluIHdoaWNoIGl0J3MgYmVpbmcgaW52b2tlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHJlc3BvbnNlIHBhY2tldHMgYXJlIGJlaW5nIGhhbmRsZWQsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIHN0YXJ0IHRvIHJlYXNvbiBhYm91dCBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6YXRpb25zLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhlcmUncyBhbnkgdW51c3VhbCBvciB1bmV4cGVjdGVkIGNvbnRyb2wgZmxvdyB3aGVuIHRoYXQgcm91dGluZSBpcyBlbnRlcmVkLiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGRhdGEgZGVwZW5kZW5jaWVzPyBMZXQncyB0cmFjZSBpdCBhbmQgc2VlIHdoZXJlIHRoZSBkYXRhIGNvbWVzIGZyb20gYW5kIHdoZXJlIGl0IGdvZXMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzowNy4yMDEwMDUzNjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1MDE5ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNpX3JzcF9wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9uY2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvY29yZS5jPTE1NTk9c3RhdGljIHZvaWQgbmNpX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTE1NzgtXFx0XFx0Y2FzZSBOQ0lfTVRfUlNQX1BLVDpcXG5uZXQvbmZjL25jaS9jb3JlLmM6MTU3OTpcXHRcXHRcXHRuY2lfcnNwX3BhY2tldChuZGV2LCBza2IpO1xcbm5ldC9uZmMvbmNpL2NvcmUuYy0xNTgwLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25mYy9uY2kvcnNwLmM9MzY0PXN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jLTM4NC1cXG5uZXQvbmZjL25jaS9yc3AuYzozODU6dm9pZCBuY2lfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbmZjL25jaS9yc3AuYy0zODYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzowNy4yNDk1MTI5MDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNTg3MjA2NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gUmVhY2hpbmcgTkNJIGluIGEgRnV6emluZyBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGV0aGVyIHdlIGNhbiBhY3R1YWxseSBnZXQgYXQgdGhlIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBmcm9tIHdpdGhpbiBzdGFuZGFyZCBmdXp6aW5nIHNldHVwcywgbGlrZSBTeXprYWxsZXIuIE15IGd1dCB0ZWxscyBtZSBpdCAqc2hvdWxkKiBiZSBwb3NzaWJsZSwgYnV0IHRoZSBzcGVjaWZpY3MgYXJlIGdvaW5nIHRvIG1hdHRlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIE5GQy9OQ0kgZGV2aWNlcyBhcmUgZW11bGF0ZWQgb3IgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZS5cblxuRmlyc3QsIGxldCdzIGV4cGxvcmUgaWYgdGhlcmUgYXJlIGFscmVhZHkgdmlydHVhbCByZXByZXNlbnRhdGlvbnMgb2YgTkZDL05DSS4gSSdtIHRoaW5raW5nIGFsb25nIHRoZSBsaW5lcyBvZiBzb21ldGhpbmcgbGlrZSBcInZpcnR1YWxfbmZjLFwiIFwicmF3IG5jaSxcIiBvciBtYXliZSBldmVuIGEgbW9yZSBkZXRhaWxlZCBcInNpbXVsYXRlZCBuZmMuXCIgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBkb2N1bWVudGF0aW9uIGFuZCBzb3VyY2UgY29kZSB0byBzZWUgd2hhdCdzIG91dCB0aGVyZS5cblxuVG8gc3RhcnQsIEknbGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0J3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9uZmNgIGFuZCBhbHNvIGNoZWNrIGBuZXQvbmZjYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgd2hlcmUgYW55IHJlbGV2YW50IGVtdWxhdGlvbiBvciBkcml2ZXIgc3VwcG9ydCB3b3VsZCByZXNpZGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGdyb3VuZCB0cnV0aCBvbiB0aGUgdmlydHVhbCBORkMvTkNJIG9wdGlvbnMsIGlmIHRoZXkgZXZlbiBleGlzdC4gRnJvbSB0aGVyZSwgSSdsbCBoYXZlIGEgYmV0dGVyIHBpY3R1cmUgb2YgaG93IHJlYWNoYWJsZSB0aGVzZSBpbnRlcmZhY2VzIGFyZSB2aWEgU3l6a2FsbGVyJ3Mgc3RhbmRhcmQgZGV2aWNlIG1vZGVscywgd2hldGhlciBpdCBiZSB2aXJ0dWFsIGRldmljZXMsIFVTQiwgb3IgcG90ZW50aWFsbHkgZXZlbiB2aXJ0dWFsIE5GQyBpbnRlcmZhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTUyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6MDkuODM2NzIzNDEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM0NjkwMzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5jaV9yZWN2X2ZyYW1lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmZjL2ZkcC9pMmMuYz0yMjI9c3RhdGljIGlycXJldHVybl90IGZkcF9uY2lfaTJjX2lycV90aHJlYWRfZm4oaW50IGlycSwgdm9pZCAqcGh5X2lkKVxcbi0tXFxuZHJpdmVycy9uZmMvZmRwL2kyYy5jLTIzOC1cXHRpZiAoc2tiICE9IE5VTEwpXFxuZHJpdmVycy9uZmMvZmRwL2kyYy5jOjIzOTpcXHRcXHRuY2lfcmVjdl9mcmFtZShwaHktXFx1MDAzZW5kZXYsIHNrYik7XFxuZHJpdmVycy9uZmMvZmRwL2kyYy5jLTI0MC1cXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvaTJjLmM9NjQ9c3RhdGljIGlycXJldHVybl90IG5mY21ydmxfaTJjX2ludF9pcnFfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKmRydl9kYXRhX3B0cilcXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvaTJjLmMtODYtXFx0ZGVmYXVsdDpcXG5kcml2ZXJzL25mYy9uZmNtcnZsL2kyYy5jOjg3OlxcdFxcdGlmIChuZmNtcnZsX25jaV9yZWN2X2ZyYW1lKGRydl9kYXRhLVxcdTAwM2Vwcml2LCBza2IpIFxcdTAwM2MgMClcXG5kcml2ZXJzL25mYy9uZmNtcnZsL2kyYy5jLTg4LVxcdFxcdFxcdG5mY19lcnIoXFx1MDAyNmRydl9kYXRhLVxcdTAwM2VpMmMtXFx1MDAzZWRldiwgXFxcImNvcnJ1cHRlZCBSWCBwYWNrZXRcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmM9MTkyPUVYUE9SVF9TWU1CT0xfR1BMKG5mY21ydmxfbmNpX3VucmVnaXN0ZXJfZGV2KTtcXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0xOTMtXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmM6MTk0OmludCBuZmNtcnZsX25jaV9yZWN2X2ZyYW1lKHN0cnVjdCBuZmNtcnZsX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9tYWluLmMtMTk1LXtcXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvbWFpbi5jLTIxMy1cXHRpZiAodGVzdF9iaXQoTkZDTVJWTF9OQ0lfUlVOTklORywgXFx1MDAyNnByaXYtXFx1MDAzZWZsYWdzKSlcXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYzoyMTQ6XFx0XFx0bmNpX3JlY3ZfZnJhbWUocHJpdi1cXHUwMDNlbmRldiwgc2tiKTtcXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0yMTUtXFx0ZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0yMjItfVxcbmRyaXZlcnMvbmZjL25mY21ydmwvbWFpbi5jOjIyMzpFWFBPUlRfU1lNQk9MX0dQTChuZmNtcnZsX25jaV9yZWN2X2ZyYW1lKTtcXG5kcml2ZXJzL25mYy9uZmNtcnZsL21haW4uYy0yMjQtXFxuLS1cXG5kcml2ZXJzL25mYy9uZmNtcnZsL25mY21ydmwuaD0xMTk9dm9pZCBuZmNtcnZsX25jaV91bnJlZ2lzdGVyX2RldihzdHJ1Y3QgbmZjbXJ2bF9wcml2YXRlICpwcml2KTtcXG5kcml2ZXJzL25mYy9uZmNtcnZsL25mY21ydmwuaDoxMjA6aW50IG5mY21ydmxfbmNpX3JlY3ZfZnJhbWUoc3RydWN0IG5mY21ydmxfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9uZmNtcnZsLmgtMTIxLXN0cnVjdCBuZmNtcnZsX3ByaXZhdGUgKm5mY21ydmxfbmNpX3JlZ2lzdGVyX2RldihlbnVtIG5mY21ydmxfcGh5IHBoeSxcXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvc3BpLmM9Mjc9c3RhdGljIGlycXJldHVybl90IG5mY21ydmxfc3BpX2ludF9pcnFfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKmRydl9kYXRhX3B0cilcXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvc3BpLmMtNDgtXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9zcGkuYzo0OTpcXHRpZiAobmZjbXJ2bF9uY2lfcmVjdl9mcmFtZShkcnZfZGF0YS1cXHUwMDNlcHJpdiwgc2tiKSBcXHUwMDNjIDApXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9zcGkuYy01MC1cXHRcXHRuZmNfZXJyKFxcdTAwMjZkcnZfZGF0YS1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsIFxcXCJjb3JydXB0ZWQgUlggcGFja2V0XFxcIik7XFxuLS1cXG5kcml2ZXJzL25mYy9uZmNtcnZsL3VhcnQuYz0xNTI9c3RhdGljIGludCBuZmNtcnZsX25jaV91YXJ0X3JlY3Yoc3RydWN0IG5jaV91YXJ0ICpudSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25mYy9uZmNtcnZsL3VhcnQuYy0xNTMte1xcbmRyaXZlcnMvbmZjL25mY21ydmwvdWFydC5jOjE1NDpcXHRyZXR1cm4gbmZjbXJ2bF9uY2lfcmVjdl9mcmFtZSgoc3RydWN0IG5mY21ydmxfcHJpdmF0ZSAqKW51LVxcdTAwM2VkcnZfZGF0YSxcXG5kcml2ZXJzL25mYy9uZmNtcnZsL3VhcnQuYy0xNTUtXFx0XFx0XFx0XFx0ICAgICAgc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvdXNiLmM9NTY9c3RhdGljIHZvaWQgbmZjbXJ2bF9idWxrX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvdXNiLmMtNzYtXFx0XFx0XFx0XFx0ICAgICB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGgpO1xcbmRyaXZlcnMvbmZjL25mY21ydmwvdXNiLmM6Nzc6XFx0XFx0XFx0aWYgKG5mY21ydmxfbmNpX3JlY3ZfZnJhbWUoZHJ2X2RhdGEtXFx1MDAzZXByaXYsIHNrYikgXFx1MDAzYyAwKVxcbmRyaXZlcnMvbmZjL25mY21ydmwvdXNiLmMtNzgtXFx0XFx0XFx0XFx0bmZjX2VycihcXHUwMDI2ZHJ2X2RhdGEtXFx1MDAzZXVkZXYtXFx1MDAzZWRldixcXG4tLVxcbmRyaXZlcnMvbmZjL254cC1uY2kvaTJjLmM9MTkwPXN0YXRpYyBpcnFyZXR1cm5fdCBueHBfbmNpX2kyY19pcnFfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKnBoeV9pZClcXG4tLVxcbmRyaXZlcnMvbmZjL254cC1uY2kvaTJjLmMtMjQ4LVxcdGNhc2UgTlhQX05DSV9NT0RFX05DSTpcXG5kcml2ZXJzL25mYy9ueHAtbmNpL2kyYy5jOjI0OTpcXHRcXHRuY2lfcmVjdl9mcmFtZShwaHktXFx1MDAzZW5kZXYsIHNrYik7XFxuZHJpdmVycy9uZmMvbnhwLW5jaS9pMmMuYy0yNTAtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L2NvcmUuYz0yMTA9aW50IHMzZndybjVfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jLTIxNC1cXHRjYXNlIFMzRldSTjVfTU9ERV9OQ0k6XFxuZHJpdmVycy9uZmMvczNmd3JuNS9jb3JlLmM6MjE1OlxcdFxcdHJldHVybiBuY2lfcmVjdl9mcmFtZShuZGV2LCBza2IpO1xcbmRyaXZlcnMvbmZjL3MzZndybjUvY29yZS5jLTIxNi1cXHRjYXNlIFMzRldSTjVfTU9ERV9GVzpcXG4tLVxcbmRyaXZlcnMvbmZjL3N0LW5jaS9uZGxjLmM9MTQ3PXN0YXRpYyB2b2lkIGxsdF9uZGxjX3Jjdl9xdWV1ZShzdHJ1Y3QgbGx0X25kbGMgKm5kbGMpXFxuLS1cXG5kcml2ZXJzL25mYy9zdC1uY2kvbmRsYy5jLTE4OC1cXHRcXHR9IGVsc2UgaWYgKChwY2IgXFx1MDAyNiBQQ0JfVFlQRV9NQVNLKSA9PSBQQ0JfVFlQRV9EQVRBRlJBTUUpIHtcXG5kcml2ZXJzL25mYy9zdC1uY2kvbmRsYy5jOjE4OTpcXHRcXHRcXHRuY2lfcmVjdl9mcmFtZShuZGxjLVxcdTAwM2VuZGV2LCBza2IpO1xcbmRyaXZlcnMvbmZjL3N0LW5jaS9uZGxjLmMtMTkwLVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jPTExMz1zdGF0aWMgc3NpemVfdCB2aXJ0dWFsX25jaWRldl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTI4LVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTI5OlxcdG5jaV9yZWN2X2ZyYW1lKHZkZXYtXFx1MDAzZW5kZXYsIHNrYik7XFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzAtXFx0cmV0dXJuIGNvdW50O1xcbi0tXFxuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmg9MjkxPWludCBuY2lfY29yZV9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KTtcXG5pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaC0yOTItXFxuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmg6MjkzOmludCBuY2lfcmVjdl9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmgtMjk0LWludCBuY2lfc2VuZF9mcmFtZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmM9MTM0Mz1FWFBPUlRfU1lNQk9MKG5jaV91bnJlZ2lzdGVyX2RldmljZSk7XFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTM0NS0vKipcXG5uZXQvbmZjL25jaS9jb3JlLmM6MTM0NjogKiBuY2lfcmVjdl9mcmFtZSAtIHJlY2VpdmUgZnJhbWUgZnJvbSBOQ0kgZHJpdmVyc1xcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMzQ3LSAqXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTM1MC0gKi9cXG5uZXQvbmZjL25jaS9jb3JlLmM6MTM1MTppbnQgbmNpX3JlY3ZfZnJhbWUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L25mYy9uY2kvY29yZS5jLTEzNTIte1xcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jLTEzNjYtfVxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMzY3OkVYUE9SVF9TWU1CT0wobmNpX3JlY3ZfZnJhbWUpO1xcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMzY4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzoxMS41NzE0MjA2NzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzcxNjE0MTAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBOQ0kgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBOQ0kgZnV6emluZy4gQmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlLCBJJ3ZlIGdvdCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBleGFtaW5lIGBkcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jYCwgdGhhdCdzIHRoZSBvYnZpb3VzIGZpcnN0IHN0b3AuIEl0IGxvb2tzIGxpa2UgdGhpcyBkcml2ZXIgbGV0cyB1c2Vyc3BhY2UgaW5qZWN0IE5DSSBmcmFtZXMgZGlyZWN0bHkuIFNwZWNpZmljYWxseSwgYG5jaV9yZWN2X2ZyYW1lKHZkZXYtXHUwMDNlbmRldiwgc2tiKTtgIHdpdGhpbiBgdmlydHVhbF9uY2lkZXZfd3JpdGVgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZGlzc2VjdC4gVGhhdCBzY3JlYW1zIHZ1bG5lcmFiaWxpdHkgc3VyZmFjZSB0byBtZS5cblxuSSBhbHNvIHNob3VsZCBsb29rIGF0IGBkcml2ZXJzL25mYy9uZmNtcnZsL3VzYi5jYCwgYmVjYXVzZSB0aGUgVVNCIGVtdWxhdGlvbiByb3V0ZSBjb3VsZCBiZSBhbm90aGVyIGFuZ2xlIHRvIGV4cGxvaXQuIEkgcmVtZW1iZXIgc3l6a2FsbGVy4oCZcyBVU0IgZ2FkZ2V0IGFuZCBVU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcywgYW5kIHRoYXQgc3VnZ2VzdHMgYW5vdGhlciBwb3RlbnRpYWwgd2F5IHRvIGluamVjdCBOQ0kgZGF0YS5cblxuVGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgc3VwcG9ydHMgYHZpcnR1YWxfbmNpZGV2YCBkaXJlY3RseSwgYWxvbmcgd2l0aCBuZXRsaW5rIGFuZCByYXctZ2FkZ2V0IG1ldGhvZHMsIGNvbmZpcm1zIG15IGluaXRpYWwgdGhvdWdodC4gU28sIGl0J3MgYmFjayB0byBgdmlydHVhbF9uY2lkZXYuY2AgdG8gc2VlIHdoYXQga2luZCBvZiBkYW1hZ2UgY2FuIGJlIGRvbmUgYW5kIHVuZGVyc3RhbmQgaWYgc3l6a2FsbGVyIGlzIHRoZSBiZXN0IG9wdGlvbiBmb3IgdGhpcyB0eXBlIG9mIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6MTUuMjg3NTY0NDAyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBWaXJ0dWFsIE5DSSBkZXZpY2Ugc2ltdWxhdGlvbiBkcml2ZXJcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU2Ftc3VuZyBFbGVjdHJvbmljc1xcbiAgIDY6XFx0ICogQm9uZ3N1IEplb24gXFx1MDAzY2JvbmdzdS5qZW9uQHNhbXN1bmcuY29tXFx1MDAzZVxcbiAgIDc6XFx0ICovXFxuICAgODpcXHRcXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9taXNjZGV2aWNlLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC93YWl0LmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25mYy9uY2lfY29yZS5oXFx1MDAzZVxcbiAgMTU6XFx0XFxuICAxNjpcXHQjZGVmaW5lIElPQ1RMX0dFVF9OQ0lERVZfSURYICAgIDBcXG4gIDE3OlxcdCNkZWZpbmUgVklSVFVBTF9ORkNfUFJPVE9DT0xTXFx0KE5GQ19QUk9UT19KRVdFTF9NQVNLIHwgXFxcXFxcbiAgMTg6XFx0XFx0XFx0XFx0XFx0IE5GQ19QUk9UT19NSUZBUkVfTUFTSyB8IFxcXFxcXG4gIDE5OlxcdFxcdFxcdFxcdFxcdCBORkNfUFJPVE9fRkVMSUNBX01BU0sgfCBcXFxcXFxuICAyMDpcXHRcXHRcXHRcXHRcXHQgTkZDX1BST1RPX0lTTzE0NDQzX01BU0sgfCBcXFxcXFxuICAyMTpcXHRcXHRcXHRcXHRcXHQgTkZDX1BST1RPX0lTTzE0NDQzX0JfTUFTSyB8IFxcXFxcXG4gIDIyOlxcdFxcdFxcdFxcdFxcdCBORkNfUFJPVE9fSVNPMTU2OTNfTUFTSylcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiB7XFxuICAyNTpcXHRcXHRzdHJ1Y3QgbmNpX2RldiAqbmRldjtcXG4gIDI2OlxcdFxcdHN0cnVjdCBtdXRleCBtdHg7XFxuICAyNzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2VuZF9idWZmO1xcbiAgMjg6XFx0XFx0c3RydWN0IHdhaXRfcXVldWVfaGVhZCB3cTtcXG4gIDI5OlxcdFxcdGJvb2wgcnVubmluZztcXG4gIDMwOlxcdH07XFxuICAzMTpcXHRcXG4gIDMyOlxcdHN0YXRpYyBpbnQgdmlydHVhbF9uY2lfb3BlbihzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4gIDMzOlxcdHtcXG4gIDM0OlxcdFxcdHN0cnVjdCB2aXJ0dWFsX25jaV9kZXYgKnZkZXYgPSBuY2lfZ2V0X2RydmRhdGEobmRldik7XFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdHZkZXYtXFx1MDAzZXJ1bm5pbmcgPSB0cnVlO1xcbiAgMzc6XFx0XFx0cmV0dXJuIDA7XFxuICAzODpcXHR9XFxuICAzOTpcXHRcXG4gIDQwOlxcdHN0YXRpYyBpbnQgdmlydHVhbF9uY2lfY2xvc2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuICA0MTpcXHR7XFxuICA0MjpcXHRcXHRzdHJ1Y3QgdmlydHVhbF9uY2lfZGV2ICp2ZGV2ID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtdHgpO1xcbiAgNDU6XFx0XFx0a2ZyZWVfc2tiKHZkZXYtXFx1MDAzZXNlbmRfYnVmZik7XFxuICA0NjpcXHRcXHR2ZGV2LVxcdTAwM2VzZW5kX2J1ZmYgPSBOVUxMO1xcbiAgNDc6XFx0XFx0dmRldi1cXHUwMDNlcnVubmluZyA9IGZhbHNlO1xcbiAgNDg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtdHgpO1xcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHRyZXR1cm4gMDtcXG4gIDUxOlxcdH1cXG4gIDUyOlxcdFxcbiAgNTM6XFx0c3RhdGljIGludCB2aXJ0dWFsX25jaV9zZW5kKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgNTQ6XFx0e1xcbiAgNTU6XFx0XFx0c3RydWN0IHZpcnR1YWxfbmNpX2RldiAqdmRldiA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dmRldi1cXHUwMDNlbXR4KTtcXG4gIDU4OlxcdFxcdGlmICh2ZGV2LVxcdTAwM2VzZW5kX2J1ZmYgfHwgIXZkZXYtXFx1MDAzZXJ1bm5pbmcpIHtcXG4gIDU5OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2dmRldi1cXHUwMDNlbXR4KTtcXG4gIDYwOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzoxNS4yODc3NzIzNDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTc4MjQ1MjIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2NvbmZpZyBEaXZlOiBgdmlydHVhbF9uY2lkZXZgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYHZpcnR1YWxfbmNpZGV2YCBLY29uZmlnLiBJIHdhbnQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJcyB0aGlzIGEgc3RhbmRhbG9uZSBtb2R1bGUsIG9yIGRvZXMgaXQgcmVseSBvbiBzb21lIG90aGVyIGNvcmUgbmV0d29yayBkZXZpY2UgZHJpdmVycz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmZsaWN0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YsIHBlcmhhcHMgd2l0aCBvdGhlciB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlcz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2sgLSB3aGF0IHByb2JsZW0gaXMgdGhpcyBwYXJ0aWN1bGFyIHZpcnR1YWwgZGV2aWNlIHNvbHZpbmcsIGFuZCBob3cgZG9lcyBpdCBpbnRlcmZhY2Ugd2l0aCB0aGUgY29yZSBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlPyBMZXQncyBjaGVjayB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIHN5bWJvbHMgdG8gcGlucG9pbnQgaXRzIHJvbGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBiZWZvcmUgSSBnZXQgaW50byB0aGUgZGV0YWlscyBvZiBhbnkgcmVsYXRlZCBjb2RlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NTYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjE3LjA3MDIyNzU5MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2ODgwNzIwNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVklSVFVBTF9OQ0lERVZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjE4LjYzOTA0NDM2NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzE3NDA4NTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTkZDIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIE5GQyBkcml2ZXIgYnVpbGQgcHJvY2VzcyBhbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBnZXQgbXkgYmVhcmluZ3MgYW5kIGxvb2sgYXQgdGhlIGtleSBmaWxlcyB0aGF0IGRpY3RhdGUgdGhlIGJ1aWxkIHByb2Nlc3MuIEknbGwgbmVlZCB0byBleGFtaW5lIGBkcml2ZXJzL25mYy9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE5GQyBkcml2ZXIgbW9kdWxlcyBhcmUgY29tcGlsZWQgYW5kIGxpbmtlZC4gVGhpcyB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgZGVwZW5kZW5jaWVzLCBzb3VyY2UgZmlsZXMsIGFuZCBjb21waWxhdGlvbiBmbGFncyBzcGVjaWZpYyB0byBORkMuIFRoZW4sIEkgKm11c3QqIGxvb2sgYXQgYGRyaXZlcnMvbmZjL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBORkMgZHJpdmVyIGFyZSBkZWZpbmVkLiBUaGlzIHdpbGwgcmV2ZWFsIHRoZSB2YXJpb3VzIGZlYXR1cmVzIHRoYXQgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIGFuZCB0aGUgb3ZlcmFsbCBjb25maWd1cmFiaWxpdHkgb2YgdGhlIE5GQyBzdWJzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgdGhlIGBLY29uZmlnYCBvcHRpb25zIGlzIGNydWNpYWwgZm9yIHRhaWxvcmluZyB0aGUgTkZDIGRyaXZlciB0byBhIHNwZWNpZmljIGhhcmR3YXJlIG9yIHVzZSBjYXNlLiBUaGVzZSB0d28gZmlsZXMgYXJlIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjY4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6MjAuOTU2NDU1MzExWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcxODcyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aXJ0dWFsX25jaWRldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfTkZDX1NUOTVIRilcXHQrPSBzdDk1aGYvXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX05GQ19WSVJUVUFMX05DSSlcXHQrPSB2aXJ0dWFsX25jaWRldi5vXFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jPTc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmNpX29wcyB2aXJ0dWFsX25jaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTgxLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6ODI6c3RhdGljIHNzaXplX3QgdmlydHVhbF9uY2lkZXZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTgzLVxcdFxcdFxcdFxcdCAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTItXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxMTM6c3RhdGljIHNzaXplX3QgdmlydHVhbF9uY2lkZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMTQtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTEzMi1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjEzMzpzdGF0aWMgaW50IHZpcnR1YWxfbmNpZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xMzQte1xcbi0tXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYy0xNjMtXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxNjQ6c3RhdGljIGludCB2aXJ0dWFsX25jaWRldl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE2NS17XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3NS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE3NjpzdGF0aWMgbG9uZyB2aXJ0dWFsX25jaWRldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE3Ny1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jLTE5MS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5MjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aXJ0dWFsX25jaWRldl9mb3BzID0ge1xcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTkzLVxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmM6MTk0OlxcdC5yZWFkID0gdmlydHVhbF9uY2lkZXZfcmVhZCxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NTpcXHQud3JpdGUgPSB2aXJ0dWFsX25jaWRldl93cml0ZSxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5NjpcXHQub3BlbiA9IHZpcnR1YWxfbmNpZGV2X29wZW4sXFxuZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuYzoxOTc6XFx0LnJlbGVhc2UgPSB2aXJ0dWFsX25jaWRldl9jbG9zZSxcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjE5ODpcXHQudW5sb2NrZWRfaW9jdGwgPSB2aXJ0dWFsX25jaWRldl9pb2N0bFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMTk5LX07XFxuLS1cXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jPTIwMT1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbWlzY2RldiA9IHtcXG4tLVxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjAzLVxcdC5uYW1lID0gXFxcInZpcnR1YWxfbmNpXFxcIixcXG5kcml2ZXJzL25mYy92aXJ0dWFsX25jaWRldi5jOjIwNDpcXHQuZm9wcyA9IFxcdTAwMjZ2aXJ0dWFsX25jaWRldl9mb3BzLFxcbmRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmMtMjA1LVxcdC5tb2RlID0gMDYwMCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6MjEuMDAzMTc4Nzk0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5NjI0OTM1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIE5GQyBWaXJ0dWFsIE5DSSBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBzbyBgTkZDX1ZJUlRVQUxfTkNJYOKApiB0aGF0J3MgZ290IHRvIGJlIHRoZSB2aXJ0dWFsIGRldmljZSBkcml2ZXIgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBOQ0kgKE5GQyBDb250cm9sbGVyIEludGVyZmFjZSksIHJpZ2h0PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGF0IGFuZCBnZXQgYSBsYXkgb2YgdGhlIGxhbmQsIHNvIGxldCdzIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgYENPTkZJR19ORkNfTkNJYCBhbmQgc2VlIHdoYXQgZWxzZSBpcyByZWxhdGVkIGluIGBuZXQvbmZjL0tjb25maWdgLiBJJ2xsIHdhbnQgdG8gY2hlY2sgYW55IGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsZXZhbnQgb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3VyIG9mIHRoaXMgdmlydHVhbCBkZXZpY2UuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY29uZmlndXJhdGlvbiBkZXRhaWxzIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZHJpdmVyIGlzIGFyY2hpdGVjdGVkIGFuZCB3aGF0J3MgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NTcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzoyMi45NjU2NzQ5MjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTM1NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GQ19OQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX05GQykgKz0gbmZjLm9cXG5uZXQvbmZjL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX05GQ19OQ0kpICs9IG5jaS9cXG5uZXQvbmZjL01ha2VmaWxlLTgtb2JqLSQoQ09ORklHX05GQ19IQ0kpICs9IGhjaS9cXG4tLVxcbm5ldC9uZmMvbmNpL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbmZjL25jaS9LY29uZmlnOjI6Y29uZmlnIE5GQ19OQ0lcXG5uZXQvbmZjL25jaS9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBORkNcXG4tLVxcbm5ldC9uZmMvbmNpL0tjb25maWctMTItXFxubmV0L25mYy9uY2kvS2NvbmZpZzoxMzpjb25maWcgTkZDX05DSV9TUElcXG5uZXQvbmZjL25jaS9LY29uZmlnOjE0OlxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBTUElcXG5uZXQvbmZjL25jaS9LY29uZmlnLTE1LVxcdHNlbGVjdCBDUkNfQ0NJVFRcXG4tLVxcbm5ldC9uZmMvbmNpL0tjb25maWctMjMtXFxubmV0L25mYy9uY2kvS2NvbmZpZzoyNDpjb25maWcgTkZDX05DSV9VQVJUXFxubmV0L25mYy9uY2kvS2NvbmZpZzoyNTpcXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgVFRZXFxubmV0L25mYy9uY2kvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiTkNJIG92ZXIgVUFSVCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25mYy9uY2kvTWFrZWZpbGUtNS1cXG5uZXQvbmZjL25jaS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19ORkNfTkNJKSArPSBuY2kub1xcbm5ldC9uZmMvbmNpL01ha2VmaWxlLTctXFxuLS1cXG5uZXQvbmZjL25jaS9NYWtlZmlsZT0xMD1uY2lfc3BpLXkgKz0gc3BpLm9cXG5uZXQvbmZjL25jaS9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfTkZDX05DSV9TUEkpICs9IG5jaV9zcGkub1xcbm5ldC9uZmMvbmNpL01ha2VmaWxlLTEyLVxcbm5ldC9uZmMvbmNpL01ha2VmaWxlPTEzPW5jaV91YXJ0LXkgKz0gdWFydC5vXFxubmV0L25mYy9uY2kvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX05GQ19OQ0lfVUFSVCkgKz0gbmNpX3VhcnQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzoyMy4wMTI4MjI3MzdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI1ODcwOTU3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJJ20gaGF2aW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBORkMgVmlydHVhbCBOQ0kgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB2aXJ0dWFsIE5DSSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIE5GQyBkcml2ZXIuIEZpcnN0LCB0aGUgc2Vuc2libGUgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGNvbmZpZ3VyYXRpb24uIFdoZXJlIHdvdWxkIHRoYXQgYmU/IEFoLCB5ZXMsIGBkcml2ZXJzL25mYy9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgYnVpbGQtdGltZSBvcHRpb25zIHVzdWFsbHkgcmVzaWRlLiBMZXQncyBkcmlsbCBkb3duIGFuZCBzZWUgd2hhdCBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAgaXMgYWxsIGFib3V0LiBXaGF0J3MgaXQgZG9pbmcgYW5kIHdoYXQgZG9lcyBpdCBjb250cm9sIGluIHRoZSBidWlsZD8gSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgcHJvdmlkZSBhIGNvbmNpc2UgZXhwbGFuYXRpb24gYW5kIGFueSBkZXBlbmRlbmNpZXMuIEkgZXhwZWN0IHRvIGdldCBhIGNsZWFyIGlkZWEgb2YgaG93IHRoaXMgdmlydHVhbCBsYXllciBpcyB1c2VkIG9yIGlmIGl0J3Mgb3B0aW9uYWwsIGFuZCBpZiBpdCBpcywgdGhlIHJlYXNvbnMgd2h5LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXQgbWVzaGVzIHdpdGggdGhlIGhhcmR3YXJlLXNwZWNpZmljIE5GQyBjb250cm9sbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzoyNS4yNzE1MzQ2MDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDczMzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GQ19WSVJUVUFMX05DSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnPTQyPWNvbmZpZyBORkNfUE9SVDEwMFxcbi0tXFxuZHJpdmVycy9uZmMvS2NvbmZpZy01MS1cXG5kcml2ZXJzL25mYy9LY29uZmlnOjUyOmNvbmZpZyBORkNfVklSVFVBTF9OQ0lcXG5kcml2ZXJzL25mYy9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25mYy9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfTkZDX1NUOTVIRilcXHQrPSBzdDk1aGYvXFxuZHJpdmVycy9uZmMvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX05GQ19WSVJUVUFMX05DSSlcXHQrPSB2aXJ0dWFsX25jaWRldi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjI1LjMxNjYxODYwNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDEyOTQ2NzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBORkMgS2NvbmZpZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gcG9wIG92ZXIgdG8gdGhlIGBkcml2ZXJzL25mYy9LY29uZmlnYCBmaWxlIGFuZCB6ZXJvIGluIGFyb3VuZCBsaW5lIDUyLiBNeSBpbml0aWFsIGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggdGhlIE5GQyBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHNvbWV0aGluZyBuZXcgb3IgcG9zc2libHkgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYW55dGhpbmcgdGhhdCBpcyBicm9rZW4uIEknbGwgYmUgbG9va2luZyBmb3IgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY291bGQgcHJvdmlkZSBtZSB3aXRoIHVzZWZ1bCBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk0OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjI3LjMyOTU2ODE3OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ1OlxcdFxcdGRlcGVuZHMgb24gTkZDX0RJR0lUQUxcXG4gIDQ2OlxcdFxcdGhlbHBcXG4gIDQ3OlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIFNvbnkgUG9ydC0xMDAgY2hpcCBiYXNlZCBVU0IgZGV2aWNlcyBzdWNoIGFzIHRoZVxcbiAgNDg6XFx0XFx0ICBSQy1TMzgwIGRvbmdsZS5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgTkZDX1ZJUlRVQUxfTkNJXFxuICA1MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTkNJIGRldmljZSBzaW11bGF0b3IgZHJpdmVyXFxcIlxcbiAgNTQ6XFx0XFx0ZGVwZW5kcyBvbiBORkNfTkNJXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIE5DSSB2aXJ0dWFsIGRldmljZSBzaW11bGF0ZXMgYSBOQ0kgZGV2aWNlIHRvIHRoZSB1c2VyLlxcbiAgNTc6XFx0XFx0ICBJdCBjYW4gYmUgdXNlZCB0byB2YWxpZGF0ZSB0aGUgTkNJIG1vZHVsZSBhbmQgYXBwbGljYXRpb25zLlxcbiAgNTg6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHZpcnR1YWwgTkNJIGRldmljZSBhbmRcXG4gIDU5OlxcdFxcdCAgbW9kdWxlLlxcbiAgNjA6XFx0XFxuICA2MTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2MjpcXHRcXG4gIDYzOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZmMvZmRwL0tjb25maWdcXFwiXFxuICA2NDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3BuNTQ0L0tjb25maWdcXFwiXFxuICA2NTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3BuNTMzL0tjb25maWdcXFwiXFxuICA2NjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL21pY3JvcmVhZC9LY29uZmlnXFxcIlxcbiAgNjc6XFx0c291cmNlIFxcXCJkcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWdcXFwiXFxuICA2ODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3N0MjFuZmNhL0tjb25maWdcXFwiXFxuICA2OTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmZjL3N0LW5jaS9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzoyNy4zMjk2MzYwNjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDA1NTQxMzgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE5GQyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IE5GQyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBDT05GSUdfTkZDYCwgYENPTkZJR19ORkNfTkNJYCwgYW5kIGBDT05GSUdfTkZDX1ZJUlRVQUxfTkNJYCDigJMgdGhhdCdzIHRoZSBjb3JlIE5GQyBmcmFtZXdvcmssIHRoZSBOQ0kgdHJhbnNwb3J0IGxheWVyLCBhbmQgYSB2aXJ0dWFsIE5DSSBpbnRlcmZhY2UsIHJlc3BlY3RpdmVseS4gTWFrZXMgc2Vuc2UuIEknbSBhbHNvIG5vdGljaW5nIGEgVVNCLXNwZWNpZmljIGRyaXZlciwgYENPTkZJR19ORkNfTVJWTF9VU0JgLiBBaCwgcmlnaHQsIHRoYXQgcG9pbnRzIHRvd2FyZHMgTWFydmVsbCdzIFVTQiBORkMgZGV2aWNlcy4gTmF0dXJhbGx5LCB0aGF0J3MgZ29pbmcgdG8gYmUgZGVwZW5kZW50IG9uIHRoZSBicm9hZGVyIGBORkNfTVJWTGAgZHJpdmVyIGFuZCB0aGUgYmFzZSBgVVNCYCBzdWJzeXN0ZW0uIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIGluIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgc3BlY2lmaWMgTWFydmVsbCBVU0IgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSBpbiBgZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUxMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6MzEuMzg1MDUyODI4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5GQ19NUlZMXFxuICAgMzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBUaGUgY29yZSBkcml2ZXIgdG8gc3VwcG9ydCBNYXJ2ZWxsIE5GQyBkZXZpY2VzLlxcbiAgIDY6XFx0XFxuICAgNzpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIHJlcXVpcmVkIGlmIHlvdSB3YW50IHRvIHN1cHBvcnRcXG4gICA4OlxcdFxcdCAgTWFydmVsbCBORkMgZGV2aWNlIDg4OTcuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBORkNfTVJWTF9VU0JcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE5GQy1vdmVyLVVTQiBkcml2ZXJcXFwiXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgVVNCXFxuICAxMzpcXHRcXHRzZWxlY3QgTkZDX01SVkxcXG4gIDE0OlxcdFxcdGhlbHBcXG4gIDE1OlxcdFxcdCAgTWFydmVsbCBORkMtb3Zlci1VU0IgZHJpdmVyLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIE1hcnZlbGwgTkZDLW92ZXItVVNCIGRldmljZXM6XFxuICAxODpcXHRcXHQgIDg4OTcuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIE1hcnZlbGwgTkZDLW92ZXItVVNCIGRyaXZlclxcbiAgMjE6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG8gY29tcGlsZSBpdCBhcyBtb2R1bGUuXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBORkNfTVJWTF9VQVJUXFxuICAyNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBORkMtb3Zlci1VQVJUIGRyaXZlclxcXCJcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBORkNfTkNJX1VBUlRcXG4gIDI2OlxcdFxcdHNlbGVjdCBORkNfTVJWTFxcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBNYXJ2ZWxsIE5GQy1vdmVyLVVBUlQgZHJpdmVyLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIE1hcnZlbGwgTkZDLW92ZXItVUFSVCBkZXZpY2VzXFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIE1hcnZlbGwgTkZDLW92ZXItVUFSVCBkcml2ZXJcXG4gIDMzOlxcdFxcdCAgaW50byB0aGUga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgaXQgYXMgbW9kdWxlLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgTkZDX01SVkxfSTJDXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjMxLjM4NTEyODc3OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODE4OTU0ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVzcG9uc2UgUGFja2V0KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGZ1bmN0aW9uIGFuZCB3aGF0J3MgY2hhbmdlZC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaGFuZGxpbmcgdGhlIHJlc3BvbnNlIHRvIGEgY29ubmVjdGlvbiBjcmVhdGlvbiByZXF1ZXN0LiBJIHNlZSBpdCdzIHRha2luZyB0aGUgYG5jaV9kZXZgIGFuZCB0aGUgcmVjZWl2ZWQgYHNrX2J1ZmZgIGFzIGlucHV0LiBUaGUgZmlyc3QgYnl0ZSBpbiBgc2tiLVx1MDAzZWRhdGFgIGlzIHRoZSBzdGF0dXMgY29kZSwgd2hpY2ggaXMgZ29vZCBwcmFjdGljZS4gSSBub3RlIHRoZSBkZWJ1ZyBwcmludDsgaGVscGZ1bCBmb3IgdHJhY2luZy5cblxuTm93LCB0aGUgaW1wb3J0YW50IGNoYW5nZSwgYW5kIHdoYXQgbGlrZWx5IGZpeGVzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3IgZXJyb3IgY29uZGl0aW9uLiAgVGhlIGNvZGUgY2hlY2tzIHRoZSBzdGF0dXM7IGlmIGl0J3MgXCJPS1wiLCB0aGVuIHRoZXJlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIGBza2ItXHUwMDNlbGVuYCBjaGVjay4gSXQncyBtYWtpbmcgc3VyZSB0aGUgcmVjZWl2ZWQgcGFja2V0IGlzIGFjdHVhbGx5ICpsYXJnZSogZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BgIHN0cnVjdHVyZS4gVGhhdCdzIHNtYXJ0LiBJdCdzIHZlcmlmeWluZyB0aGUgcGFja2V0IGxlbmd0aCBub3cgYmVmb3JlIGRlcmVmZXJlbmNpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNwb25zZS4gSWYgdGhlIHBhY2tldCBpcyBzbWFsbGVyIHRoYW4gdGhlIGV4cGVjdGVkIHNpemUgb2YgYHJzcGAsIGl0IGZsYWdzIGEgc3ludGF4IGVycm9yLiBUaGF0J3MgZXhhY3RseSB3aGF0IEknZCBleHBlY3Q7IGl0IHByZXZlbnRzIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBjcmFzaCBvciwgd29yc2UsIGEgc2VjdXJpdHkgaXNzdWUgaWYgdGhlIHN0cnVjdHVyZSBjb250YWluZWQgc2Vuc2l0aXZlIGRhdGEuIFNvLCB0aGUgcGF0Y2ggaXMgYWRkaW5nIHJvYnVzdCBpbnB1dCB2YWxpZGF0aW9uIHRvIGVuc3VyZSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBkYXRhIHdlJ3JlIHJlY2VpdmluZy4gR29vZCBqb2IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjk5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6MzUuMjA0MDg2ODI2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA5ODM0NzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmZjL25jaS5oPTM2Mj1zdHJ1Y3QgbmNpX2NvcmVfc2V0X2NvbmZpZ19yc3Age1xcbi0tXFxuaW5jbHVkZS9uZXQvbmZjL25jaS5oLTM2OC0jZGVmaW5lIE5DSV9PUF9DT1JFX0NPTk5fQ1JFQVRFX1JTUFxcdG5jaV9vcGNvZGVfcGFjayhOQ0lfR0lEX0NPUkUsIDB4MDQpXFxuaW5jbHVkZS9uZXQvbmZjL25jaS5oOjM2OTpzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwIHtcXG5pbmNsdWRlL25ldC9uZmMvbmNpLmgtMzcwLVxcdF9fdThcXHRzdGF0dXM7XFxuLS1cXG5uZXQvbmZjL25jaS9yc3AuYz0zMDU9c3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jLTMwOS1cXHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvID0gTlVMTDtcXG5uZXQvbmZjL25jaS9yc3AuYzozMTA6XFx0Y29uc3Qgc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCAqcnNwO1xcbm5ldC9uZmMvbmNpL3JzcC5jLTMxMS1cXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jLTMxOC1cXHRcXHR9XFxubmV0L25mYy9uY2kvcnNwLmM6MzE5OlxcdFxcdHJzcCA9IChzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwICopc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9uZmMvbmNpL3JzcC5jLTMyMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6MzYuNzEzOTI3MTk4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMzMzMzkzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyB3aXRoaW4gYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGFuZCBzZWUgd2hhdCBoYXBwZW5zICphZnRlciogbGluZSAzNTAuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBoYW5kbGVzIHRoZSBjcmVhdGlvbiBvZiBhIGNvbm5lY3Rpb24gcmVzcG9uc2UgcGFja2V0IHdpdGhpbiBhbiBOQ0kgKE5GQyBDb250cm9sbGVyIEludGVyZmFjZSkgY29udGV4dC4gTGluZSAzNTAgY291bGQgYmUgYSBjcnVjaWFsIHBvaW50IOKAkyBwZXJoYXBzIHdoZXJlIGEga2V5IGRhdGEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLCBhIHNwZWNpZmljIGVycm9yIGNoZWNrIGlzIHBlcmZvcm1lZCwgb3IgYSBwYXJ0aWN1bGFyIHN0YXRlIHRyYW5zaXRpb24gb2NjdXJzLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhhdCBwb2ludCBmb3J3YXJkIHRvIGZ1bGx5IGdyYXNwIHRoZSBmdW5jdGlvbidzIGJlaGF2aW9yLiBNeSBmb2N1cyBpcyBvbiB0aGUgbG9naWMgYW5kIGRhdGEgZmxvdyAqYmV5b25kKiB0aGF0IGxpbmUuIEknbSBsb29raW5nIGZvciB0aGUgZXNzZW50aWFsIHBhcnRzIG9mIHRoZSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxODgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzozOC45NDcyNjk1ODhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvcnNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQ1OlxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWxpc3QpO1xcbiAzNDY6XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlbGlzdCwgXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19saXN0KTtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0XFx0aWYgKG5kZXYtXFx1MDAzZWN1cl9wYXJhbXMuaWQgPT0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlbmZjZWVfaWQpXFxuIDM0OTpcXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm8gPSBjb25uX2luZm87XFxuIDM1MDpcXHRcXG4gMzUxOlxcdFxcdFxcdGNvbm5faW5mby1cXHUwMDNlY29ubl9pZCA9IHJzcC1cXHUwMDNlY29ubl9pZDtcXG4gMzUyOlxcdFxcdFxcdGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiA9IHJzcC1cXHUwMDNlbWF4X2N0cmxfcGt0X3BheWxvYWRfbGVuO1xcbiAzNTM6XFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2Y29ubl9pbmZvLVxcdTAwM2VjcmVkaXRzX2NudCwgcnNwLVxcdTAwM2VjcmVkaXRzX2NudCk7XFxuIDM1NDpcXHRcXHR9XFxuIDM1NTpcXHRcXG4gMzU2OlxcdGZyZWVfY29ubl9pbmZvOlxcbiAzNTc6XFx0XFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX1JFSkVDVEVEKVxcbiAzNTg6XFx0XFx0XFx0ZGV2bV9rZnJlZShcXHUwMDI2bmRldi1cXHUwMDNlbmZjX2Rldi1cXHUwMDNlZGV2LCBjb25uX2luZm8pO1xcbiAzNTk6XFx0ZXhpdDpcXG4gMzYwOlxcdFxcbiAzNjE6XFx0XFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBzdGF0dXMpO1xcbiAzNjI6XFx0fVxcbiAzNjM6XFx0XFxuIDM2NDpcXHRzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuIDM2NTpcXHRcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzNjY6XFx0e1xcbiAzNjc6XFx0XFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcXG4gMzY4OlxcdFxcdF9fdTggc3RhdHVzID0gc2tiLVxcdTAwM2VkYXRhWzBdO1xcbiAzNjk6XFx0XFxuIDM3MDpcXHRcXHRwcl9kZWJ1ZyhcXFwic3RhdHVzIDB4JXhcXFxcblxcXCIsIHN0YXR1cyk7XFxuIDM3MTpcXHRcXHRpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfT0spIHtcXG4gMzcyOlxcdFxcdFxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldixcXG4gMzczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBuZGV2LVxcdTAwM2VjdXJfY29ubl9pZCk7XFxuIDM3NDpcXHRcXHRcXHRpZiAoY29ubl9pbmZvKSB7XFxuIDM3NTpcXHRcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2Y29ubl9pbmZvLVxcdTAwM2VsaXN0KTtcXG4gMzc2OlxcdFxcdFxcdFxcdGlmIChjb25uX2luZm8gPT0gbmRldi1cXHUwMDNlcmZfY29ubl9pbmZvKVxcbiAzNzc6XFx0XFx0XFx0XFx0XFx0bmRldi1cXHUwMDNlcmZfY29ubl9pbmZvID0gTlVMTDtcXG4gMzc4OlxcdFxcdFxcdFxcdGRldm1fa2ZyZWUoXFx1MDAyNm5kZXYtXFx1MDAzZW5mY19kZXYtXFx1MDAzZWRldiwgY29ubl9pbmZvLVxcdTAwM2VkZXN0X3BhcmFtcyk7XFxuIDM3OTpcXHRcXHRcXHRcXHRkZXZtX2tmcmVlKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIGNvbm5faW5mbyk7XFxuIDM4MDpcXHRcXHRcXHR9XFxuIDM4MTpcXHRcXHR9XFxuIDM4MjpcXHRcXHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7XFxuIDM4MzpcXHR9XFxuIDM4NDpcXHRcXG4gMzg1OlxcdHZvaWQgbmNpX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDM4NjpcXHR7XFxuIDM4NzpcXHRcXHRfX3UxNiByc3Bfb3Bjb2RlID0gbmNpX29wY29kZShza2ItXFx1MDAzZWRhdGEpO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHQvKiB3ZSBnb3QgYSByc3AsIHN0b3AgdGhlIGNtZCB0aW1lciAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzozOC45NDczNDY4OThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDQxMzI5OTUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBORkMgUmVzcG9uc2UgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0L25mYy9uY2kvcnNwLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgcHJldmlvdXMgY29kZSB3YXMgYWNjZXNzaW5nIGByc3AtXHUwMDNlY29ubl9pZGAsIGByc3AtXHUwMDNlbWF4X2N0cmxfcGt0X3BheWxvYWRfbGVuYCwgYW5kIGByc3AtXHUwMDNlY3JlZGl0c19jbnRgIGRpcmVjdGx5LCB3aXRob3V0IGNoZWNraW5nIGlmIHRoZSByZWNlaXZlZCAqc2tiKiAoc29ja2V0IGJ1ZmZlcikgd2FzIGxhcmdlIGVub3VnaCB0byBhY3R1YWxseSBob2xkIHRoZSBlbnRpcmUgYHJzcGAgc3RydWN0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpZiBgc2tiLVx1MDAzZWxlbmAgd2FzIGxlc3MgdGhhbiBgc2l6ZW9mKCpyc3ApYCDigJMgc2F5LCBpdCBvbmx5IGhhZCBvbmUgYnl0ZSwgbWF5YmUgYSBgc3RhdHVzID09IE5DSV9TVEFUVVNfT0tgIOKAkyB0aGVuIHRoZXJlIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYSBjbGFzc2ljIHZ1bG5lcmFiaWxpdHkuXG5cblRoaXMgcGF0Y2ggYWRkcyBhIGJhc2ljIGNoZWNrLCBhIHNpbXBsZSBgaWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZigqcnNwKSlgLCB3aGljaCBzZXRzIGBOQ0lfU1RBVFVTX1NZTlRBWF9FUlJPUmAgYW5kIGp1bXBzIHRvIGV4aXQuIEEgZ29vZCBkZWZlbnNpdmUgbWVhc3VyZSwgYnV0IGlzIGl0IHJlYWNoYWJsZT8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uIFdlIGhhdmUgYSBzb2xpZCBzdHJhdGVneSwgcGF0Y2ggZnV6emluZywgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsIGFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucy4gQnV0LCBpdCdzIG5vdCB3b3J0aCBmdXp6aW5nIHVucmVhY2hhYmxlIGNvZGUsIGFuZCByZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZS5cblxuVGhlIGNyaXRlcmlhIGZvciBmdXp6aW5nIGFwcGxpY2FiaWxpdHkgYXJlIHN0cmljdC4gV2UgbmVlZCBjb2RlIHRoYXQgY2FuICphY3R1YWxseSBleGVjdXRlKiBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgdXNpbmcgZW11bGF0ZWQgZGV2aWNlcy4gRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIG9yIHNvY2tldHMgYXJlIGdvb2QgdGFyZ2V0cy4gUmVmYWN0b3JpbmdzLCBjb2RlIGNsZWFudXBzLCBydW50aW1lIGFzc2VydGlvbnMsIGFuZCBkZWZlbnNpdmUgY2hlY2tzIGxpa2UgdGhpcyBhcmUgYWxsIHBvdGVudGlhbGx5IHJlbGV2YW50LiBCdXQgaG93IGlzIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCBldmVuIGNhbGxlZD8gV2hlbiBpcyBhIHJlc3BvbnNlIHBhY2tldCBwcm9jZXNzZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIEkgbmVlZCB0byBzZWUgaG93IGBuY2lfcnNwX3BhY2tldGAgaXMgcmVhY2hlZCB3aXRoaW4gYG5ldC9uZmMvbmNpL3JzcC5jYC4gVGhpcyBpcyBteSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTk0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6NDMuMzYwNjQ4NzUyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvbmNpL3JzcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4NTpcXHR2b2lkIG5jaV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzODY6XFx0e1xcbiAzODc6XFx0XFx0X191MTYgcnNwX29wY29kZSA9IG5jaV9vcGNvZGUoc2tiLVxcdTAwM2VkYXRhKTtcXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0Lyogd2UgZ290IGEgcnNwLCBzdG9wIHRoZSBjbWQgdGltZXIgKi9cXG4gMzkwOlxcdFxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2bmRldi1cXHUwMDNlY21kX3RpbWVyKTtcXG4gMzkxOlxcdFxcbiAzOTI6XFx0XFx0cHJfZGVidWcoXFxcIk5DSSBSWDogTVQ9cnNwLCBQQkY9JWQsIEdJRD0weCV4LCBPSUQ9MHgleCwgcGxlbj0lZFxcXFxuXFxcIixcXG4gMzkzOlxcdFxcdFxcdCBuY2lfcGJmKHNrYi1cXHUwMDNlZGF0YSksXFxuIDM5NDpcXHRcXHRcXHQgbmNpX29wY29kZV9naWQocnNwX29wY29kZSksXFxuIDM5NTpcXHRcXHRcXHQgbmNpX29wY29kZV9vaWQocnNwX29wY29kZSksXFxuIDM5NjpcXHRcXHRcXHQgbmNpX3BsZW4oc2tiLVxcdTAwM2VkYXRhKSk7XFxuIDM5NzpcXHRcXG4gMzk4OlxcdFxcdC8qIHN0cmlwIHRoZSBuY2kgY29udHJvbCBoZWFkZXIgKi9cXG4gMzk5OlxcdFxcdHNrYl9wdWxsKHNrYiwgTkNJX0NUUkxfSERSX1NJWkUpO1xcbiA0MDA6XFx0XFxuIDQwMTpcXHRcXHRpZiAobmNpX29wY29kZV9naWQocnNwX29wY29kZSkgPT0gTkNJX0dJRF9QUk9QUklFVEFSWSkge1xcbiA0MDI6XFx0XFx0XFx0aWYgKG5jaV9wcm9wX3JzcF9wYWNrZXQobmRldiwgcnNwX29wY29kZSwgc2tiKSA9PSAtRU5PVFNVUFApIHtcXG4gNDAzOlxcdFxcdFxcdFxcdHByX2VycihcXFwidW5zdXBwb3J0ZWQgcnNwIG9wY29kZSAweCV4XFxcXG5cXFwiLFxcbiA0MDQ6XFx0XFx0XFx0XFx0ICAgICAgIHJzcF9vcGNvZGUpO1xcbiA0MDU6XFx0XFx0XFx0fVxcbiA0MDY6XFx0XFxuIDQwNzpcXHRcXHRcXHRnb3RvIGVuZDtcXG4gNDA4OlxcdFxcdH1cXG4gNDA5OlxcdFxcbiA0MTA6XFx0XFx0c3dpdGNoIChyc3Bfb3Bjb2RlKSB7XFxuIDQxMTpcXHRcXHRjYXNlIE5DSV9PUF9DT1JFX1JFU0VUX1JTUDpcXG4gNDEyOlxcdFxcdFxcdG5jaV9jb3JlX3Jlc2V0X3JzcF9wYWNrZXQobmRldiwgc2tiKTtcXG4gNDEzOlxcdFxcdFxcdGJyZWFrO1xcbiA0MTQ6XFx0XFxuIDQxNTpcXHRcXHRjYXNlIE5DSV9PUF9DT1JFX0lOSVRfUlNQOlxcbiA0MTY6XFx0XFx0XFx0bmNpX2NvcmVfaW5pdF9yc3BfcGFja2V0KG5kZXYsIHNrYik7XFxuIDQxNzpcXHRcXHRcXHRicmVhaztcXG4gNDE4OlxcdFxcbiA0MTk6XFx0XFx0Y2FzZSBOQ0lfT1BfQ09SRV9TRVRfQ09ORklHX1JTUDpcXG4gNDIwOlxcdFxcdFxcdG5jaV9jb3JlX3NldF9jb25maWdfcnNwX3BhY2tldChuZGV2LCBza2IpO1xcbiA0MjE6XFx0XFx0XFx0YnJlYWs7XFxuIDQyMjpcXHRcXG4gNDIzOlxcdFxcdGNhc2UgTkNJX09QX0NPUkVfQ09OTl9DUkVBVEVfUlNQOlxcbiA0MjQ6XFx0XFx0XFx0bmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChuZGV2LCBza2IpO1xcbiA0MjU6XFx0XFx0XFx0YnJlYWs7XFxuIDQyNjpcXHRcXG4gNDI3OlxcdFxcdGNhc2UgTkNJX09QX0NPUkVfQ09OTl9DTE9TRV9SU1A6XFxuIDQyODpcXHRcXHRcXHRuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQobmRldiwgc2tiKTtcXG4gNDI5OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzo0My4zNjA3MjEwMjJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTIwMTUxMjUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTkNJIFBhY2tldCBIYW5kbGluZyBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IE5ldHdvcmsgQ29udHJvbGxlciBJbnRlcmZhY2UgKE5DSSkgcGFja2V0cyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBuY2lfcnhfd29ya2AsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgcHJvY2Vzc2luZyBoYXBwZW5zIGFmdGVyIHJlY2VpdmluZyBkYXRhLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgYmUgdXNlZCB0byBmdXp6IE5DST8gQW5kIHRoZSBhbnN3ZXIsIGl0IHNlZW1zLCBpcyBhIHJlc291bmRpbmcgeWVzISBTeXprYWxsZXIgKmRvZXMqIGhhdmUgTkZDIGFuZCBOQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMuIEkgbmVlZCB0byBnZXQgdGhpcyByaWdodCBiZWNhdXNlIHRoZXJlJ3MgcG90ZW50aWFsIGhlcmUgZm9yIHNvbWUgaW50ZXJlc3RpbmcgdnVsbmVyYWJpbGl0eSBkaXNjb3ZlcnkuXG5cblN5emthbGxlciBsZXZlcmFnZXMgYSBmZXcgbWVjaGFuaXNtcywgYW5kIHRoYXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZC4gSXQgY2FuIHVzZSBgL2Rldi92aXJ0dWFsX25jaWAsIHdoaWNoIGlzIGRlZmluZWQgYnkgYENPTkZJR19ORkNfVklSVFVBTF9OQ0lgLCBVU0IgZ2FkZ2V0cyBlbmFibGVkIHdpdGggYENPTkZJR19VU0JfUkFXX0dBREdFVGAgYW5kIGBDT05GSUdfTkZDX01SVkxfVVNCYCwgb3IgZXZlbiBuZXRsaW5rIGNvbW1hbmRzIGZvciBpdHMgZnV6emluZy4gVGhhdCB2aXJ0dWFsIGRldmljZSByb3V0ZSBsb29rcyBwYXJ0aWN1bGFybHkgcHJvbWlzaW5nLiBJIGNhbiBzZWUgdGhhdCBzeXprYWxsZXIgaXMgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQgdG8gaW50ZXJhY3Qgd2l0aCBgL2Rldi92aXJ0dWFsX25jaWAsIHdoaWNoIGlzIGEga2V5IHRhcmdldC4gSXQgaGFzIGNhbGxzIGRlZmluZWQgbGlrZSBgb3BlbmF0JHZpcnR1YWxfbmNpYCBhbmQgYHdyaXRlJHZpcnR1YWxfbmNpYC5cblxuVGhlIGB3cml0ZSR2aXJ0dWFsX25jaWAgY2FsbCBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgbGVhZHMgdG8gYHZpcnR1YWxfbmNpZGV2X3dyaXRlYC4gTG9va2luZyBhdCB0aGUgYHZpcnR1YWxfbmNpZGV2X3dyaXRlYCBmdW5jdGlvbiwgaXQgZG9lcyB0aGUgdHlwaWNhbCBgYWxsb2Nfc2tiYCwgdGhlbiBgY29weV9mcm9tX3VzZXJgIHRvIHRyYW5zZmVyIHRoZSBmdXp6ZWQgYnVmZmVyIGludG8gdGhlIHNrYiwgYW5kIHRoZW4sIGNydWNpYWxseSwgaXQgY2FsbHMgYG5jaV9yZWN2X2ZyYW1lYCB3aXRoIHRoaXMgbmV3bHkgY3JhZnRlZCBza2IuIFRoaXMgaXMgd2hlcmUgSSB3YW50IHRvIGZvY3VzLCBhcyB0aGlzIGZsb3cgb2YgZGF0YSBwcmVzZW50cyBhIHBlcmZlY3QgdGFyZ2V0IGZvciBpbmplY3Rpb24gd2l0aCBtYWxpY2lvdXMgZGF0YS5cblxuYG5jaV9yZWN2X2ZyYW1lYCBpcyB0aGUgY29yZSBvZiBwYWNrZXQgaGFuZGxpbmcuIEFjY29yZGluZyB0byB3aGF0IEkgaGF2ZSBoZXJlLCB0aGlzIHdpbGwgdGhlbiBxdWV1ZSB0aGUgYHNrYmAgdG8gYG5kZXYtXHUwMDNlcnhfcWAgYW5kIHNjaGVkdWxlcyBgbmNpX3J4X3dvcmtgLiBUaGF0J3MgdGhlIGxpbmsuIFRvIHRydWx5IHVuZGVyc3RhbmQgdGhpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBuY2lfcmVjdl9mcmFtZWAgaW4gYG5ldC9uZmMvbmNpL2NvcmUuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODM5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6NDguNTYyMjM1OTEzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL25jaS9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM0OCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM0ODpcXHQgKiBAbmRldjogVGhlIG5jaSBkZXZpY2VcXG4xMzQ5OlxcdCAqIEBza2I6IFRoZSBza19idWZmIHRvIHJlY2VpdmVcXG4xMzUwOlxcdCAqL1xcbjEzNTE6XFx0aW50IG5jaV9yZWN2X2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEzNTI6XFx0e1xcbjEzNTM6XFx0XFx0cHJfZGVidWcoXFxcImxlbiAlZFxcXFxuXFxcIiwgc2tiLVxcdTAwM2VsZW4pO1xcbjEzNTQ6XFx0XFxuMTM1NTpcXHRcXHRpZiAoIW5kZXYgfHwgKCF0ZXN0X2JpdChOQ0lfVVAsIFxcdTAwMjZuZGV2LVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4xMzU2OlxcdFxcdCAgICAhdGVzdF9iaXQoTkNJX0lOSVQsIFxcdTAwMjZuZGV2LVxcdTAwM2VmbGFncykpKSB7XFxuMTM1NzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xMzU4OlxcdFxcdFxcdHJldHVybiAtRU5YSU87XFxuMTM1OTpcXHRcXHR9XFxuMTM2MDpcXHRcXG4xMzYxOlxcdFxcdC8qIFF1ZXVlIGZyYW1lIGZvciByeCB3b3JrZXIgdGhyZWFkICovXFxuMTM2MjpcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2bmRldi1cXHUwMDNlcnhfcSwgc2tiKTtcXG4xMzYzOlxcdFxcdHF1ZXVlX3dvcmsobmRldi1cXHUwMDNlcnhfd3EsIFxcdTAwMjZuZGV2LVxcdTAwM2VyeF93b3JrKTtcXG4xMzY0OlxcdFxcbjEzNjU6XFx0XFx0cmV0dXJuIDA7XFxuMTM2NjpcXHR9XFxuMTM2NzpcXHRFWFBPUlRfU1lNQk9MKG5jaV9yZWN2X2ZyYW1lKTtcXG4xMzY4OlxcdFxcbjEzNjk6XFx0aW50IG5jaV9zZW5kX2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEzNzA6XFx0e1xcbjEzNzE6XFx0XFx0cHJfZGVidWcoXFxcImxlbiAlZFxcXFxuXFxcIiwgc2tiLVxcdTAwM2VsZW4pO1xcbjEzNzI6XFx0XFxuMTM3MzpcXHRcXHRpZiAoIW5kZXYpIHtcXG4xMzc0OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjEzNzU6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTM3NjpcXHRcXHR9XFxuMTM3NzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6NDguNTYyMzM4NzUzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MjA0NjQ5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGNvZGUgc25pcHBldCwgZGVsaXZlcmVkIGFzIGlmIGl0J3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYG5jaV9yeF93b3JrYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IGBuY2lfcnhfd29ya2Agd2l0aGluIGBuZXQvbmZjL25jaS9jb3JlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBvZiBoYW5kbGluZyBpbmNvbWluZyBOQ0kgZnJhbWVzIHNlZW1zIHRvIGhhcHBlbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGluIGRldGFpbC4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBOQ0kgZGF0YSBmbG93LiBJJ20gdmlzdWFsaXppbmcgdGhlIGRhdGEgY29taW5nIGluLCBwcmVzdW1hYmx5IHZpYSBzb21lIGhhcmR3YXJlIGludGVycnVwdCBvciBETUEgY29tcGxldGlvbiwgYW5kIG5vdyBpdCdzIHVwIHRvIHRoaXMgZnVuY3Rpb24gdG8gbWFrZSBzZW5zZSBvZiBpdC4gSSdtIHdvbmRlcmluZyBpZiBpdCdzIHJlc3BvbnNpYmxlIGZvciB0aGUgaW5pdGlhbCBwYXJzaW5nLCBvciBpZiB0aGVyZSdzIGEgcHJlLXByb2Nlc3Npbmcgc3RhZ2UuIFRoZSBcIndvcmtcIiBhc3BlY3QgaGludHMgYXQgdGhpcyBiZWluZyBhIGJvdHRvbSBoYWxmIGhhbmRsZXIsIHJ1bm5pbmcgaW4gYSB3b3JrcXVldWUsIHNvIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgYW55IGxvY2tpbmcgY29uY2VybnMgYXJvdW5kIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMuIEFyZSB0aGVyZSByYWNlIGNvbmRpdGlvbnMgdG8gd29ycnkgYWJvdXQ/IEknbGwgcHJvYmFibHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIGBuY2lfcnhfd29ya2AsIHNwZWNpZmljYWxseSB3aGF0J3MgaW4gdGhlIGBuY2lfZGV2YCBhbmQgYW55IHBvdGVudGlhbCBkYXRhIGJ1ZmZlcnMgaXQgYWNjZXNzZXMuIFRpbWUgdG8gZ2V0IGRvd24gdG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTU5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzo1MS4xODI4MDY3M1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAxODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1NjA6XFx0e1xcbjE1NjE6XFx0XFx0c3RydWN0IG5jaV9kZXYgKm5kZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5jaV9kZXYsIHJ4X3dvcmspO1xcbjE1NjI6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4xNTYzOlxcdFxcbjE1NjQ6XFx0XFx0Zm9yICg7IChza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2bmRldi1cXHUwMDNlcnhfcSkpOyBrY292X3JlbW90ZV9zdG9wKCkpIHtcXG4xNTY1OlxcdFxcdFxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xcbjE1NjY6XFx0XFxuMTU2NzpcXHRcXHRcXHQvKiBTZW5kIGNvcHkgdG8gc25pZmZlciAqL1xcbjE1Njg6XFx0XFx0XFx0bmZjX3NlbmRfdG9fcmF3X3NvY2sobmRldi1cXHUwMDNlbmZjX2Rldiwgc2tiLFxcbjE1Njk6XFx0XFx0XFx0XFx0XFx0ICAgICBSQVdfUEFZTE9BRF9OQ0ksIE5GQ19ESVJFQ1RJT05fUlgpO1xcbjE1NzA6XFx0XFxuMTU3MTpcXHRcXHRcXHRpZiAoIW5jaV92YWxpZF9zaXplKHNrYikpIHtcXG4xNTcyOlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjE1NzM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTU3NDpcXHRcXHRcXHR9XFxuMTU3NTpcXHRcXG4xNTc2OlxcdFxcdFxcdC8qIFByb2Nlc3MgZnJhbWUgKi9cXG4xNTc3OlxcdFxcdFxcdHN3aXRjaCAobmNpX210KHNrYi1cXHUwMDNlZGF0YSkpIHtcXG4xNTc4OlxcdFxcdFxcdGNhc2UgTkNJX01UX1JTUF9QS1Q6XFxuMTU3OTpcXHRcXHRcXHRcXHRuY2lfcnNwX3BhY2tldChuZGV2LCBza2IpO1xcbjE1ODA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTU4MTpcXHRcXG4xNTgyOlxcdFxcdFxcdGNhc2UgTkNJX01UX05URl9QS1Q6XFxuMTU4MzpcXHRcXHRcXHRcXHRuY2lfbnRmX3BhY2tldChuZGV2LCBza2IpO1xcbjE1ODQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTU4NTpcXHRcXG4xNTg2OlxcdFxcdFxcdGNhc2UgTkNJX01UX0RBVEFfUEtUOlxcbjE1ODc6XFx0XFx0XFx0XFx0bmNpX3J4X2RhdGFfcGFja2V0KG5kZXYsIHNrYik7XFxuMTU4ODpcXHRcXHRcXHRcXHRicmVhaztcXG4xNTg5OlxcdFxcbjE1OTA6XFx0XFx0XFx0ZGVmYXVsdDpcXG4xNTkxOlxcdFxcdFxcdFxcdHByX2VycihcXFwidW5rbm93biBNVCAweCV4XFxcXG5cXFwiLCBuY2lfbXQoc2tiLVxcdTAwM2VkYXRhKSk7XFxuMTU5MjpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xNTkzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE1OTQ6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzo1MS4xODI5MTk5ODFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzc5NTkyMjc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogTkZDIE5DSSBQYWNrZXQgUHJvY2Vzc2luZyoqXG5cbk9rYXksIHRoaXMgaXMgaW50ZXJlc3RpbmcuIExpbmUgMTU2NC0xNTY1IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhdCBtZTogYGtjb3ZfcmVtb3RlX3N0b3AoKWAgYW5kIGBrY292X3JlbW90ZV9zdGFydF9jb21tb24oKWAhIFRoYXQncyBhIGRlYWQgZ2l2ZWF3YXkg4oCTIHNwZWNpZmljIGluc3RydW1lbnRhdGlvbiBmb3Igc3l6a2FsbGVyIGNvdmVyYWdlLCB3aGljaCBtZWFucyB0aGV5J3JlIGFjdGl2ZWx5IGZ1enppbmcgdGhpcyBhcmVhLiBCcmlsbGlhbnQhIFNvLCBOQ0kgcGFja2V0IHByb2Nlc3NpbmcgaXMgYWxyZWFkeSBnZXR0aW5nIGhhbW1lcmVkIGJ5IHN5emthbGxlciB0aHJvdWdoIHJlbW90ZSBjb3ZlcmFnZSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEknbSBsb29raW5nIGZvci5cblxuVGhpcyBwYXJ0aWN1bGFyIGNoYW5nZSBpbnRyb2R1Y2VzIGEgYm91bmRzIGNoZWNrIHdpdGhpbiBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAuIEl0IGxvb2tzIGxpa2Ugd2UncmUgYWx0ZXJpbmcgdGhlIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB0aGUgcGFja2V0IGxlbmd0aC4gVGhpcyBpcyBhbiBleGNlbGxlbnQgb3Bwb3J0dW5pdHkuIEEgc2hvcnQgcGFja2V0IG1pZ2h0IHRyaWdnZXIgYW4gaW50ZXJlc3RpbmcgY29uZGl0aW9uIGhlcmUsIHdoaWNoIG1ha2VzIHRoaXMgd29ydGggZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5UaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXM6XG5cbiogICAqKldvcnRoRnV6emluZzogVHJ1ZS4qKiBBYnNvbHV0ZWx5LiBUaGlzIGxvb2tzIGxpa2UgYSBwcm9taXNpbmcgYXZlbnVlLlxuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogSSdtIGdvaW5nIHRvIGNlbnRlciBteSBhdHRlbnRpb24gb246XG4gICAgKiAgIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCAtIFRoZSBsb2NhdGlvbiBvZiB0aGUgbmV3IGJvdW5kcyBjaGVjay5cbiAgICAqICAgYG5jaV9yc3BfcGFja2V0YCAtIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHJlc3BvbnNlIHBhY2tldHMgaW4gZ2VuZXJhbC5cbiAgICAqICAgYG5jaV9yeF93b3JrYCAtIFRoZSBhc3NvY2lhdGVkIHJlY2VpdmUgd29ya2VyLiBIb3cgaXMgdGhpcyBwYWNrZXQgYWN0dWFsbHkgYmVpbmcgaGFuZGxlZC5cblxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBoZXJlLiBMZXQncyBkaWcgaW50bzpcbiAgICAqICAgYG5ldC9uZmMvbmNpL3JzcC5jYCAtIFRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBjb3VsZCBpbXBhY3QgdGhlIE5DSSByZXNwb25zZSBwYWNrZXQuXG4gICAgKiAgIFZpcnR1YWwgTkNJIC8gTkZDIGNvbmZpZ3VyYXRpb24gLSBXaGljaCBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gZXZhbHVhdGUgYW5kIHNldC5cbiAgICAqICAgYG5ldC9uZmMvTWFrZWZpbGVgIGFuZCBgbmV0L25mYy9uY2kvTWFrZWZpbGVgIC0gVG8gZGV0ZXJtaW5lIGV4YWN0bHkgaG93IHRoaXMgbW9kdWxlIGlzIGJ1aWx0IGFuZCB3aGF0IG90aGVyIGRlcGVuZGVuY2llcyBhcmUgYXQgcGxheS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhvc2UgTWFrZWZpbGVzIGFuZCBzdGFydCBjaGVja2luZyB0aGUgY29uZmlncy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAzMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjU0Ljk3ODg0NTUzMloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IE5GQyBzdWJzeXN0ZW0uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19ORkMpICs9IG5mYy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfTkZDX05DSSkgKz0gbmNpL1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX05GQ19IQ0kpICs9IGhjaS9cXG4gICA5OlxcdG9iai0kKENPTkZJR19ORkNfRElHSVRBTCkgKz0gbmZjX2RpZ2l0YWwub1xcbiAgMTA6XFx0XFxuICAxMTpcXHRuZmMtb2JqcyA6PSBjb3JlLm8gbmV0bGluay5vIGFmX25mYy5vIHJhd3NvY2subyBsbGNwX2NvcmUubyBsbGNwX2NvbW1hbmRzLm8gXFxcXFxcbiAgMTI6XFx0XFx0XFx0bGxjcF9zb2NrLm9cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0bmZjX2RpZ2l0YWwtb2JqcyA6PSBkaWdpdGFsX2NvcmUubyBkaWdpdGFsX3RlY2hub2xvZ3kubyBkaWdpdGFsX2RlcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjEzOjU0Ljk3ODkwOTAzMloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTQ0OTY0NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIE5DSSBNYWtlZmlsZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBuZXQvbmZjL25jaS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBidWlsZCBpbnN0cnVjdGlvbnMgZm9yIHRoZSBOQ0kgKE5GQyBDb250cm9sbGVyIEludGVyZmFjZSkgYXJlIGdvaW5nIHRvIHJlc2lkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBORkMgZHJpdmVyIGlzIGJ1aWx0LCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBvciB3aGF0ZXZlciBidWlsZCBzeXN0ZW0gaXMgaW4gdXNlLiBJIGV4cGVjdCB0byBmaW5kIHJ1bGVzIGZvciBjb21waWxpbmcgdGhlIE5DSSBkcml2ZXIgbW9kdWxlcywgbGlua2luZyB0aGVtLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBpbnN0cnVjdGlvbnMgZm9yIGhhbmRsaW5nIGZpcm13YXJlIGxvYWRpbmcgaWYgdGhlIE5GQyBjb250cm9sbGVyIG5lZWRzIGl0LiBMb29raW5nIGF0IHRoZSBtYWtlZmlsZSBpcyB0aGUgbW9zdCBkaXJlY3Qgd2F5IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MuIEZyb20gdGhlcmUsIEkgY2FuIHJldmVyc2UgZW5naW5lZXIgaG93IGl0IGlzIGJyb3VnaHQgaW50byB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTkzOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6NTYuOTIzODc2MTQ1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvbmNpL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IE5GQyBOQ0kgbGF5ZXIuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19ORkNfTkNJKSArPSBuY2kub1xcbiAgIDc6XFx0XFxuICAgODpcXHRuY2ktb2JqcyA6PSBjb3JlLm8gZGF0YS5vIGxpYi5vIG50Zi5vIHJzcC5vIGhjaS5vXFxuICAgOTpcXHRcXG4gIDEwOlxcdG5jaV9zcGkteSArPSBzcGkub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX05GQ19OQ0lfU1BJKSArPSBuY2lfc3BpLm9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0bmNpX3VhcnQteSArPSB1YXJ0Lm9cXG4gIDE0OlxcdG9iai0kKENPTkZJR19ORkNfTkNJX1VBUlQpICs9IG5jaV91YXJ0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6NTYuOTIzOTM5NDM1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1ODk4ODU3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTkZDIE5DSSBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYG5ldC9uZmMvbmNpL3JzcC5jYCBpcyBnb2luZyB0byBiZSBjb21waWxlZCBpbnRvIGBuY2kub2Agd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcywgYnV0IG9ubHkgaWYgYENPTkZJR19ORkNfTkNJYCBpcyBkZWZpbmVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGl0J3MgYSBzdGFuZGFyZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzY2VuYXJpby4gQW5kLCBwcmVkaWN0YWJseSwgYENPTkZJR19ORkNfTkNJYCBpdHNlbGYgaXMgZGVwZW5kZW50IG9uIGBDT05GSUdfTkZDYCwgc28gd2UgaGF2ZSBhIGRlcGVuZGVuY3kgY2hhaW4gdGhlcmUuIE5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgYml0IGlzIGhvdyB3ZSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGlzIGZyb20gYSB1c2VyLXNwYWNlIHBlcnNwZWN0aXZlLCBwYXJ0aWN1bGFybHkgZm9yIGZ1enppbmcuXG5cbk15IHRoaW5raW5nIGlzIHRoYXQgdG8gZ2V0IHRvIGAvZGV2L3ZpcnR1YWxfbmNpYCwgd2UgbmVlZCBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAsIHdoaWNoIGhhcyB0bywgaW4gdHVybiwgYmUgZW5hYmxlZCBhbmQgaXQgZGVwZW5kcyBvbiB0aGUgY29yZSBgTkZDX05DSWAgY29uZmlndXJhdGlvbiwgc28gdGhhdCBpcyB0aGUgcGF0aCB0byB0ZXN0aW5nIHRoYXQgbW9kdWxlLiBUaGlzIG1ha2VzIHNlbnNlIGFzIGEgdmlydHVhbCBkZXZpY2UgZm9yIHRlc3QgYW5kIGVtdWxhdGlvbiBwdXJwb3Nlcy4gQWxzbywgdGhlcmUgaXMgYENPTkZJR19ORkNfTVJWTF9VU0JgIHRvIHRlc3QgdGhlIE5GQyBOQ0kgaW50ZXJmYWNlIHRocm91Z2ggVVNCLCBzbyB0aGF0IHdpbGwgYmUgYW5vdGhlciB3YXkgdG8gdGVzdCBpdC5cblxuQWxyaWdodCwgdGltZSB0byBnbyBhbmQgY2hlY2sgYG5ldC9uZmMvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGVzZSBkZXBlbmRlbmNpZXMgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGFjdHVhbCBLY29uZmlnIGZpbGUgYW5kIHNlZSB3aGF0IG90aGVyIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNjQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxMzo1OS41MTM4MjcyNjhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE5GQyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIE5GQ1xcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgIDg6XFx0XFx0dHJpc3RhdGUgXFxcIk5GQyBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA5OlxcdFxcdGRlZmF1bHQgblxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIE5GQyAoTmVhciBmaWVsZFxcbiAgMTI6XFx0XFx0ICBjb21tdW5pY2F0aW9uKSBkZXZpY2VzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDE1OlxcdFxcdCAgYmUgY2FsbGVkIG5mYy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIE5GQ19ESUdJVEFMXFxuICAxODpcXHRcXHRkZXBlbmRzIG9uIE5GQ1xcbiAgMTk6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgMjA6XFx0XFx0c2VsZWN0IENSQ19JVFVfVFxcbiAgMjE6XFx0XFx0dHJpc3RhdGUgXFxcIk5GQyBEaWdpdGFsIFByb3RvY29sIHN0YWNrIHN1cHBvcnRcXFwiXFxuICAyMjpcXHRcXHRkZWZhdWx0IG5cXG4gIDIzOlxcdFxcdGhlbHBcXG4gIDI0OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYnVpbGQgTkZDIGRpZ2l0YWwgcHJvdG9jb2wgc3RhY2sgc3VwcG9ydC5cXG4gIDI1OlxcdFxcdCAgVGhpcyBpcyBuZWVkZWQgYnkgTkZDIGNoaXBzZXRzIHdob3NlIGZpcm13YXJlIG9ubHkgaW1wbGVtZW50XFxuICAyNjpcXHRcXHQgIHRoZSBORkMgYW5hbG9nIGxheWVyLlxcbiAgMjc6XFx0XFxuICAyODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDI5OlxcdFxcdCAgYmUgY2FsbGVkIG5mY19kaWdpdGFsLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRzb3VyY2UgXFxcIm5ldC9uZmMvbmNpL0tjb25maWdcXFwiXFxuICAzMjpcXHRzb3VyY2UgXFxcIm5ldC9uZmMvaGNpL0tjb25maWdcXFwiXFxuICAzMzpcXHRcXG4gIDM0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZmMvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTM6NTkuNTEzODg2NzI4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQwMjg0NTg3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBuZXQvbmZjL25jaS9LY29uZmlnYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgTkZDIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGp1bXAgaW50byBgbmV0L25mYy9uY2kvS2NvbmZpZ2AuIEkga25vdyB0aGlzIGlzIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiwgaXQncyB3aGVyZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3B0aW9ucyBmb3IgdGhlIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBkcml2ZXJzIHNob3VsZCBiZSBkZWZpbmVkLiBJJ20gdGhpbmtpbmcgSSdsbCBmaW5kIGFsbCB0aGUgdXN1YWwgc3VzcGVjdHM6IGVuYWJsZW1lbnQgZmxhZ3MsIG1heWJlIHNvbWUgYm9hcmQtc3BlY2lmaWMgb3ZlcnJpZGVzLCBhbmQgaG9wZWZ1bGx5IGNsZWFyIGRlcGVuZGVuY2llcyBvbiB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCBuZXR3b3JraW5nIHN1YnN5c3RlbXMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBoaWVyYXJjaHkgYW5kIGhvdyB0aGVzZSBvcHRpb25zIHJlbGF0ZSB0byBvdGhlciBORkMgY29tcG9uZW50cy4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGJyb2tlbiBkb3duIGludG8gbG9naWNhbCBzZWN0aW9ucywgcG9zc2libHkgYmFzZWQgb24gdGhlIHBoeXNpY2FsIHRyYW5zcG9ydCBvciB0aGUgc3BlY2lmaWMgTkNJIGltcGxlbWVudGF0aW9uLiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRyZWFzdXJlcyAob3IgaGVhZGFjaGVzISkgYXdhaXQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gbWFnaWMgaGFwcGVucywgYW5kIGl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSdzIE5GQyBjYXBhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjUzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxNDowMy41NDIzNDkwOTNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5GQ19OQ0lcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gTkZDXFxuICAgNDpcXHRcXHR0cmlzdGF0ZSBcXFwiTkNJIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuICAgNTpcXHRcXHRkZWZhdWx0IG5cXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgTkNJIChORkMgQ29udHJvbGxlciBJbnRlcmZhY2UpIGlzIGEgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBiZXR3ZWVuXFxuICAgODpcXHRcXHQgIGFuIE5GQyBDb250cm9sbGVyIChORkNDKSBhbmQgYSBEZXZpY2UgSG9zdCAoREgpLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBOQ0kgc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG9cXG4gIDExOlxcdFxcdCAgY29tcGlsZSBpdCBhcyBtb2R1bGUgKG5jaSkuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBORkNfTkNJX1NQSVxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFNQSVxcbiAgMTU6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIk5DSSBvdmVyIFNQSSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbiAgMTc6XFx0XFx0ZGVmYXVsdCBuXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBpcyBhIGNvbW11bmljYXRpb24gcHJvdG9jb2wgYmV0d2VlblxcbiAgMjA6XFx0XFx0ICBhbiBORkMgQ29udHJvbGxlciAoTkZDQykgYW5kIGEgRGV2aWNlIEhvc3QgKERIKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTQ6MDMuNTQyNDExNDczWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUyOTgwNjA1MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTkZDIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIFN5bWJvbCBBY2Nlc3NpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgTkZDIGNvbmZpZ3VyYXRpb25zIGFuZCBpdCBzZWVtcyBJIG5lZWQgdG8gY29uc2lkZXIgdGhlc2UgdGhyZWU6IGBORkNgLCBgTkZDX05DSWAsIGFuZCBgTkZDX1ZJUlRVQUxfTkNJYC4gUmlnaHQsIHN0YW5kYXJkIE5GQyBzZXR1cC4gTGV0J3MgZGlnIGludG8gdGhlIGRldGFpbHMuXG5cbk5vdywgbXkgZm9jdXMgaXMgb24gYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGFzIGEgcG90ZW50aWFsIHBvaW50IG9mIGludGVyZXN0LiBJIHNlZSBpdCdzIGRlZmluZWQgaW4gYG5ldC9uZmMvbmNpL3JzcC5jYC4gV2FpdCwgaXMgaXQgc3RhdGljPyBBaCwgeWVzLCBsaW5lIDMwNSBjb25maXJtcyBpdDogYHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoLi4uKWAuIEhtbSwgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgdXN1YWxseSBtZWFucyBpdCdzIGxpbWl0ZWQgdG8gdGhlIGZpbGUgc2NvcGUuIEJ1dCBob2xkIG9uLCBjYW4gc3RhdGljIGZ1bmN0aW9ucyAqYWN0dWFsbHkqIGJlIGxldmVyYWdlZCBhcyBhIGZvY3VzIHN5bWJvbD8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0LCBpZiBpdCBpc24ndCBpbmxpbmVkLCB0aGUgc3ltYm9sIGlzIHByZXNlbnQgaW4gdm1saW51eC9rYWxsc3ltcywgYW5kIHN5emthbGxlciBjYW4gaW5kZWVkIHRhcmdldCB0aGVtLiBHb29kIHRvIHJlbWVtYmVyLlxuXG5Pa2F5LCBsZXQncyBiYWNrIHVwIGEgc3RlcC4gSSBhbHNvIG5lZWQgdG8gY2hlY2sgd2hhdCBjYWxscyBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAuIExvb2tpbmcgYXQgaXQsIEkgc2VlIHRoYXQgaXQncyBjYWxsZWQgYnkgYG5jaV9yc3BfcGFja2V0YC4gQW5kIHdoZXJlIGlzIHRoYXQ/IEl0J3MgaW4gYG5ldC9uZmMvbmNpL2NvcmUuY2AgYW5kIGlzIHBhcnQgb2YgYG5jaV9yeF93b3JrYC4gVGhhdCdzIG5vbi1zdGF0aWMsIHNvIGl0J3MgZXhwb3J0ZWQgYW5kIGNhbiBiZSBjYWxsZWQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGl0IGlzIGV4cG9ydGVkIG9yIGRlY2xhcmVkIGluIGEgaGVhZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgwOSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjE0OjA4Ljg0MDQ3NDk0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE3NzU3NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5jaV9yc3BfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmg9MzUyPXN0YXRpYyBpbmxpbmUgaW50IG5jaV9zZXRfdmVuZG9yX2NtZHMoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuLS1cXG5pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaC0zNTgtXFxuaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmg6MzU5OnZvaWQgbmNpX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oLTM2MC12b2lkIG5jaV9udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTQ6MTAuMjU4MjM4MDQ3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUxNTgzMjUwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGb2N1czogQSBDb25jaXNlIFBsYW4qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoaXMuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRob3NlIHZlcnkgc3BlY2lmaWMgc3ltYm9sczogYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGFuZCBgbmNpX3JzcF9wYWNrZXRgLiBUaGV5IGp1bXAgb3V0IGFzIHBlcmZlY3QgdGFyZ2V0cy4gTGV0J3MgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZzsgSSdsbCBxdWlja2x5IGdsYW5jZSBhdCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMsIGxpa2UgYG5jaV9yeF93b3JrYCB3aXRoaW4gYG5ldC9uZmMvbmNpL2NvcmUuY2AgYW5kIGBuY2lfcmVjdl9mcmFtZWAuIEhvd2V2ZXIsIHRob3NlIGZpcnN0IHR3byBzZWVtIHRoZSBtb3N0IGRpcmVjdCBhbmQgcmVsZXZhbnQgZ2l2ZW4gdGhlIGNvbnRleHQsIGxpa2UgcGlucG9pbnRpbmcgYSB2ZXJ5IHNwZWNpZmljIHZ1bG5lcmFiaWxpdHkuXG5cbkknbGwgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgaW5zdHJ1Y3Rpb25zIGFnYWluLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJ3QgbWlzc2VkIGEgZGV0YWlsOiBcIldvcnRoRnV6emluZ1wiIGlzIGNsZWFyOyBcIkZvY3VzU3ltYm9scyxcIiB3aGljaCBpcyB3aGF0IEknbSBkb2luZyBub3csIGRpcmVjdGx5IGd1aWRlcyB0aGlzIHdvcms7IHRoZSBcIkVuYWJsZUNvbmZpZ3NcIiBwYXJ0IG1lYW5zIEkndmUgY2hlY2tlZCB0aGUgZmxhZ3MgYW5kIFwiUmVhc29uaW5nXCIga2VlcHMgbXkgd29yayBjb25jaXNlLlxuXG5SaWdodCwgYWxsIGNsZWFyLiBUaW1lIHRvIGV4ZWN1dGUuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2MjksIk91dHB1dFRva2VucyI6MTY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjE0OjE1LjQxNjU2NTc2MVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMjM0OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIixcbiAgICBcIk5GQ19OQ0lcIixcbiAgICBcIk5GQ19WSVJUVUFMX05DSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcIixcbiAgICBcIm5jaV9yc3BfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGxlbmd0aCBjaGVjayBvbiBpbmNvbWluZyBOQ0kgcmVzcG9uc2UgcGFja2V0cyBpbiBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIHZpcnR1YWwgTkNJIGRldmljZXMgKENPTkZJR19ORkNfVklSVFVBTF9OQ0kgL2Rldi92aXJ0dWFsX25jaSkgb3IgZW11bGF0ZWQgVVNCIE5GQyBkZXZpY2VzLCBib3RoIG9mIHdoaWNoIGFyZSBzdXBwb3J0ZWQgYW5kIGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0XCIsXG4gICAgXCJuY2lfcnNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggY2hlY2sgb24gaW5jb21pbmcgTkNJIHJlc3BvbnNlIHBhY2tldHMgaW4gbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCgpIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCB2aXJ0dWFsIE5DSSBkZXZpY2VzIChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJIC9kZXYvdmlydHVhbF9uY2kpIG9yIGVtdWxhdGVkIFVTQiBORkMgZGV2aWNlcywgYm90aCBvZiB3aGljaCBhcmUgc3VwcG9ydGVkIGFuZCBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxNDoxNS40ODc4MDgxNVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MzM1MjUxOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxNDoxNS40ODgyNDcxMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3NjMzMDgxMDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIHZhbGlkYXRpb24gY2hlY2sgKGBza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVvZigqcnNwKWApIGluIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KClgIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBmcm9tIGBza2ItXFx1MDAzZWRhdGFgIHdoZW4gcGFyc2luZyB0cnVuY2F0ZWQgTkNJIHJlc3BvbnNlIHBhY2tldHMuIE91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFyZSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGJ1Z3MgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzAyOGRkYWU0ZjlmYjY2OThiZDUxNTdmNDBlOTQ3NmFjMjcxNDliNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDE3OjEyOjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvcnNwLmMgYi9uZXQvbmZjL25jaS9yc3AuY1xuaW5kZXggYjBhYjRmNWFjYmNlOC4uNzJiNzQ4ZjBiZTlmMiAxMDA2NDRcbi0tLSBhL25ldC9uZmMvbmNpL3JzcC5jXG4rKysgYi9uZXQvbmZjL25jaS9yc3AuY1xuQEAgLTMxMiw2ICszMTIsMTAgQEAgc3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcdHByX2RlYnVnKFwic3RhdHVzIDB4JXhcXG5cIiwgc3RhdHVzKTtcbiBcbiBcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykge1xuK1x0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKCpyc3ApKSB7XG4rXHRcdFx0c3RhdHVzID0gTkNJX1NUQVRVU19TWU5UQVhfRVJST1I7XG4rXHRcdFx0Z290byBleGl0O1xuK1x0XHR9XG4gXHRcdHJzcCA9IChzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwICopc2tiLVx1MDAzZWRhdGE7XG4gXG4gXHRcdGNvbm5faW5mbyA9IGRldm1fa3phbGxvYyhcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTc6MTQ6MTUuNDg4MjQ4MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MjUyNDc5MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBFdmFsdWF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCB0byBgbmV0L25mYy9uY2kvcnNwLmNgIHdhcnJhbnRzIGl0cyBvd24gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcmVxdWVzdCBpcyBzdHJhaWdodGZvcndhcmQ6IGRldGVybWluZSBpZiBLTVNBTiBvciBLQVNBTiBpcyB0aGUgYmV0dGVyIGNob2ljZSBmb3IgdGhpcyBwYXRjaCwgcHJvYmFibHkgYXMgcGFydCBvZiBhIHN5emthbGxlciBzZXR1cC4gVGhlIGNvbnRleHQgaGVyZSBpcyBwcmV0dHkgc3RhbmRhcmQ6IGl0J3MgYSBjb2RlIHJldmlldyBhbmQgd2UncmUgc2VsZWN0aW5nIHRoZSByaWdodCBzYW5pdGl6ZXIuIFNldmVyaXR5LXdpc2UsIGl0J3MgbW9yZSBvZiBhIGJlbmlnbiwgZGVmZW5zaXZlIFFBIGVmZm9ydDsgd2UncmUgdHJpYWdpbmcgc2FuaXRpemVycy5cblxuQWxyaWdodCwgdGltZSB0byBnZXQgaW50byB0aGUgY29kZS4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgYG5ldC9uZmMvbmNpL3JzcC5jYCBhcm91bmQgbGluZSAzMTIuIFRoYXQncyB3aGVyZSB0aGUgcmVsZXZhbnQgbG9naWMgbXVzdCBsaWUuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIHRoZXJlLiBJJ2xsIGxvb2sgZm9yIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IG1pZ2h0IHNsaXAgcGFzdCBLQVNBTi4gV2UgbmVlZCB0byBhc3Nlc3MgdGhlIHNwZWNpZmljIGRhdGEgZmxvd3MgYW5kIGlmIHRoZXJlJ3MgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmFjZSBjb25kaXRpb25zLCBvciBzaW1pbGFyIGlzc3VlcyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgYnkgS01TQU4uIFRpbWUgdG8gZGlnIGluIGFuZCBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxNDoyMy43NDA3MzExOTFaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvcnNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzAwOlxcdFxcbiAzMDE6XFx0XFx0cHJfZGVidWcoXFxcInN0YXR1cyAweCV4XFxcXG5cXFwiLCBzdGF0dXMpO1xcbiAzMDI6XFx0XFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBzdGF0dXMpO1xcbiAzMDM6XFx0fVxcbiAzMDQ6XFx0XFxuIDMwNTpcXHRzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbiAzMDY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIDMwNzpcXHR7XFxuIDMwODpcXHRcXHRfX3U4IHN0YXR1cyA9IHNrYi1cXHUwMDNlZGF0YVswXTtcXG4gMzA5OlxcdFxcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm8gPSBOVUxMO1xcbiAzMTA6XFx0XFx0Y29uc3Qgc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCAqcnNwO1xcbiAzMTE6XFx0XFxuIDMxMjpcXHRcXHRwcl9kZWJ1ZyhcXFwic3RhdHVzIDB4JXhcXFxcblxcXCIsIHN0YXR1cyk7XFxuIDMxMzpcXHRcXG4gMzE0OlxcdFxcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykge1xcbiAzMTU6XFx0XFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2Mgc2l6ZW9mKCpyc3ApKSB7XFxuIDMxNjpcXHRcXHRcXHRcXHRzdGF0dXMgPSBOQ0lfU1RBVFVTX1NZTlRBWF9FUlJPUjtcXG4gMzE3OlxcdFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4gMzE4OlxcdFxcdFxcdH1cXG4gMzE5OlxcdFxcdFxcdHJzcCA9IChzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwICopc2tiLVxcdTAwM2VkYXRhO1xcbiAzMjA6XFx0XFxuIDMyMTpcXHRcXHRcXHRjb25uX2luZm8gPSBkZXZtX2t6YWxsb2MoXFx1MDAyNm5kZXYtXFx1MDAzZW5mY19kZXYtXFx1MDAzZWRldixcXG4gMzIyOlxcdFxcdFxcdFxcdFxcdFxcdCBzaXplb2YoKmNvbm5faW5mbyksIEdGUF9LRVJORUwpO1xcbiAzMjM6XFx0XFx0XFx0aWYgKCFjb25uX2luZm8pIHtcXG4gMzI0OlxcdFxcdFxcdFxcdHN0YXR1cyA9IE5DSV9TVEFUVVNfUkVKRUNURUQ7XFxuIDMyNTpcXHRcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuIDMyNjpcXHRcXHRcXHR9XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdFxcdGNvbm5faW5mby1cXHUwMDNlZGVzdF9wYXJhbXMgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNm5kZXYtXFx1MDAzZW5mY19kZXYtXFx1MDAzZWRldixcXG4gMzI5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyksXFxuIDMzMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMKTtcXG4gMzMxOlxcdFxcdFxcdGlmICghY29ubl9pbmZvLVxcdTAwM2VkZXN0X3BhcmFtcykge1xcbiAzMzI6XFx0XFx0XFx0XFx0c3RhdHVzID0gTkNJX1NUQVRVU19SRUpFQ1RFRDtcXG4gMzMzOlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9jb25uX2luZm87XFxuIDMzNDpcXHRcXHRcXHR9XFxuIDMzNTpcXHRcXG4gMzM2OlxcdFxcdFxcdGNvbm5faW5mby1cXHUwMDNlZGVzdF90eXBlID0gbmRldi1cXHUwMDNlY3VyX2Rlc3RfdHlwZTtcXG4gMzM3OlxcdFxcdFxcdGNvbm5faW5mby1cXHUwMDNlZGVzdF9wYXJhbXMtXFx1MDAzZWlkID0gbmRldi1cXHUwMDNlY3VyX3BhcmFtcy5pZDtcXG4gMzM4OlxcdFxcdFxcdGNvbm5faW5mby1cXHUwMDNlZGVzdF9wYXJhbXMtXFx1MDAzZXByb3RvY29sID0gbmRldi1cXHUwMDNlY3VyX3BhcmFtcy5wcm90b2NvbDtcXG4gMzM5OlxcdFxcdFxcdGNvbm5faW5mby1cXHUwMDNlY29ubl9pZCA9IHJzcC1cXHUwMDNlY29ubl9pZDtcXG4gMzQwOlxcdFxcbiAzNDE6XFx0XFx0XFx0LyogTm90ZTogZGF0YV9leGNoYW5nZV9jYiBhbmQgZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0IG5lZWQgdG9cXG4gMzQyOlxcdFxcdFxcdCAqIGJlIHNwZWNpZnkgb3V0IG9mIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcXG4gMzQzOlxcdFxcdFxcdCAqL1xcbiAzNDQ6XFx0XFxuIDM0NTpcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y29ubl9pbmZvLVxcdTAwM2VsaXN0KTtcXG4gMzQ2OlxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWxpc3QsIFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbGlzdCk7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdFxcdGlmIChuZGV2LVxcdTAwM2VjdXJfcGFyYW1zLmlkID09IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZW5mY2VlX2lkKVxcbiAzNDk6XFx0XFx0XFx0XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvID0gY29ubl9pbmZvO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxNDoyMy43NDA4MDgxMloiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzQ0NTY5MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgc2l0dWF0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgcm9sZSwgdGhlIGRhdGEgaXQgaGFuZGxlcywgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBicm9hZGVyIE5DSSAoTkZDIENvbnRyb2xsZXIgSW50ZXJmYWNlKSBmcmFtZXdvcmsuIE15IGV4cGVydGlzZSBkZW1hbmRzIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgcGFja2V0J3Mgc3RydWN0dXJlIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBjb250ZW50LiBMZXQgbWUgZGlzc2VjdCB0aGlzIHRob3JvdWdobHksIHN0YXJ0aW5nIHdpdGggaXRzIHNwZWNpZmljIGZ1bmN0aW9uLCBhbmQgZm9sbG93IHRoYXQgd2l0aCBob3cgaXQgZ2V0cyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDEzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxNDoyNS40ODUzODA3NDVaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9uY2kvcnNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcbiAzNTE6XFx0XFx0XFx0Y29ubl9pbmZvLVxcdTAwM2Vjb25uX2lkID0gcnNwLVxcdTAwM2Vjb25uX2lkO1xcbiAzNTI6XFx0XFx0XFx0Y29ubl9pbmZvLVxcdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuID0gcnNwLVxcdTAwM2VtYXhfY3RybF9wa3RfcGF5bG9hZF9sZW47XFxuIDM1MzpcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWNyZWRpdHNfY250LCByc3AtXFx1MDAzZWNyZWRpdHNfY250KTtcXG4gMzU0OlxcdFxcdH1cXG4gMzU1OlxcdFxcbiAzNTY6XFx0ZnJlZV9jb25uX2luZm86XFxuIDM1NzpcXHRcXHRpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfUkVKRUNURUQpXFxuIDM1ODpcXHRcXHRcXHRkZXZtX2tmcmVlKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIGNvbm5faW5mbyk7XFxuIDM1OTpcXHRleGl0OlxcbiAzNjA6XFx0XFxuIDM2MTpcXHRcXHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7XFxuIDM2MjpcXHR9XFxuIDM2MzpcXHRcXG4gMzY0OlxcdHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4gMzY1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIDM2NjpcXHR7XFxuIDM2NzpcXHRcXHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xcbiAzNjg6XFx0XFx0X191OCBzdGF0dXMgPSBza2ItXFx1MDAzZWRhdGFbMF07XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdHByX2RlYnVnKFxcXCJzdGF0dXMgMHgleFxcXFxuXFxcIiwgc3RhdHVzKTtcXG4gMzcxOlxcdFxcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykge1xcbiAzNzI6XFx0XFx0XFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LFxcbiAzNzM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5kZXYtXFx1MDAzZWN1cl9jb25uX2lkKTtcXG4gMzc0OlxcdFxcdFxcdGlmIChjb25uX2luZm8pIHtcXG4gMzc1OlxcdFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWxpc3QpO1xcbiAzNzY6XFx0XFx0XFx0XFx0aWYgKGNvbm5faW5mbyA9PSBuZGV2LVxcdTAwM2VyZl9jb25uX2luZm8pXFxuIDM3NzpcXHRcXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xcbiAzNzg6XFx0XFx0XFx0XFx0ZGV2bV9rZnJlZShcXHUwMDI2bmRldi1cXHUwMDNlbmZjX2Rldi1cXHUwMDNlZGV2LCBjb25uX2luZm8tXFx1MDAzZWRlc3RfcGFyYW1zKTtcXG4gMzc5OlxcdFxcdFxcdFxcdGRldm1fa2ZyZWUoXFx1MDAyNm5kZXYtXFx1MDAzZW5mY19kZXYtXFx1MDAzZWRldiwgY29ubl9pbmZvKTtcXG4gMzgwOlxcdFxcdFxcdH1cXG4gMzgxOlxcdFxcdH1cXG4gMzgyOlxcdFxcdG5jaV9yZXFfY29tcGxldGUobmRldiwgc3RhdHVzKTtcXG4gMzgzOlxcdH1cXG4gMzg0OlxcdFxcbiAzODU6XFx0dm9pZCBuY2lfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzg2OlxcdHtcXG4gMzg3OlxcdFxcdF9fdTE2IHJzcF9vcGNvZGUgPSBuY2lfb3Bjb2RlKHNrYi1cXHUwMDNlZGF0YSk7XFxuIDM4ODpcXHRcXG4gMzg5OlxcdFxcdC8qIHdlIGdvdCBhIHJzcCwgc3RvcCB0aGUgY21kIHRpbWVyICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE3OjE0OjI1LjQ4NTQ2NzU3NVoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NjM1ODIzMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIEtNU0FOIE5lZWRlZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBjcnVjaWFsIGNoZWNrLiBCZWZvcmUsIHdlIGhhZCBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgY2FzdGluZyBgc2tiLVx1MDAzZWRhdGFgIHRvIGEgcmVzcG9uc2Ugc3RydWN0IChgcnNwYCkgYW5kIHRoZW4gcmVhZGluZyBmaWVsZHMgbGlrZSBgY29ubl9pZGAsIGBtYXhfY3RybF9wa3RfcGF5bG9hZF9sZW5gLCBhbmQgYGNyZWRpdHNfY250YC4gVGhlIHByb2JsZW0gd2FzLCBpZiB0aGUgYHNrYi1cdTAwM2VsZW5gICh0aGUgYWN0dWFsIHBhY2tldCBsZW5ndGgpIHdhcyBzbWFsbGVyIHRoYW4gdGhlIGV4cGVjdGVkIHNpemUgb2YgdGhhdCByZXNwb25zZSBzdHJ1Y3QsIHdlIHdlcmUgcG90ZW50aWFsbHkgcmVhZGluZyAqcGFzdCogdGhlIGVuZCBvZiB0aGUgYHNrYi1cdTAwM2VkYXRhYCBidWZmZXIgLSBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIGEgY2xhc3NpYyBidWZmZXIgb3ZlcnJlYWQuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhhdCwgb3IgZXZlbiBLQVNBTiBzbGFiIE9PQiBpbiBtb3JlIHN1YnRsZSBjYXNlcy5cblxuVGhlIHBhdGNoJ3MgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDogaXQgYWRkcyBhIHNpemUgY2hlY2sgKGBza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKnJzcClgKSB0byBlbnN1cmUgdGhlIHJlc3BvbnNlIHBhY2tldCBpcyBsYXJnZSBlbm91Z2ggYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmVhZCBhbnkgb2YgaXRzIGZpZWxkcy4gU28sIGluIGVmZmVjdCwgd2UncmUgaGFyZGVuaW5nIHRoZSBjb2RlIGFnYWluc3QgYSBzaW1wbGUgT09CIHJlYWQuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBmb3IgS01TQU46IGRvZXMgdGhpcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBBYnNvbHV0ZWx5IG5vdC4gVGhlIGBza2JgIGRhdGEgaXMgY29taW5nIGZyb20gdGhlIGRyaXZlciBvciBkZXZpY2UgLSBpdCdzIGFscmVhZHkgZmlsbGVkIHdpdGggZGF0YS4gUmVhZGluZyBwYXN0IHRoZSBsZW5ndGggaXMgdGhlIHZ1bG5lcmFiaWxpdHksIG5vdCBhbiB1bmluaXRpYWxpemVkIHZhbHVlLlxuXG5MZXQncyBydW4gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2U6XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vcGUuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuXG4zLiAgQ29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBsYXRlciB1bmluaXRpYWxpemVkIHJlYWRzPyBOb3BlLCBqdXN0IHRoZSBib3VuZHMgY2hlY2suXG40LiAgQm91bmRzIGNoZWNrcyB0aGF0IGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyBOb3BlLCBpdCB0aWdodGVucyB0aGUgYm91bmRzLlxuXG5BY2NvcmRpbmcgdG8gdGhlIHJ1bGVzLCB3ZSBzaG91bGRuJ3QgZXZlbiBjb25zaWRlciBLTVNBTiBpZiBhIGJ1ZyBjYW4gYmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIHdoaWNoIGlzIGRlZmluaXRlbHkgdGhlIGNhc2UgaGVyZS4gVGhpcyBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5LiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFsbCBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCwgb3IgYm91bmRzLWNoZWNrZWQgZm9yIHJlYWRzLiBJdCdzIGEgcHJldmVudGF0aXZlIG1lYXN1cmUgYWdhaW5zdCBhIGJ1ZmZlciBvdmVycmVhZCwgd2hpY2ggS0FTQU4gd291bGQgcmVsaWFibHkgY2F0Y2guIE5vIEtNU0FOIG5lZWRlZC5cblxuU28sIGxldCdzIGZvcm1hbGl6ZSB0aGUgcmVzcG9uc2U6XG5cbiogICAqKk5lZWRzS01TQU46IGZhbHNlKipcbiogICAqKktNU0FOUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbGVuZ3RoIHZhbGlkYXRpb24gY2hlY2sgKGBza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2YoKnJzcClgKSBpbiBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAgYmVmb3JlIHJlYWRpbmcgcmVzcG9uc2UgZmllbGRzIGZyb20gYHNrYi1cdTAwM2VkYXRhYC4gVGhpcyBwcmV2ZW50cyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgKE9PQiBvdmVycmVhZCkgb24gdGhlIHNvY2tldCBidWZmZXIgKGBza2JgKS4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgdHJhY2tlZCBhbmQgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0YWNrIHZhcmlhYmxlcywgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBJdCBzaW1wbHkgcHJldmVudHMgcmVhZGluZyBiZXlvbmQgdGhlIHBhY2tldCdzIGJvdW5kYXJpZXMgYW5kIGRvZXMgbm90IGV4cG9zZSBvciBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBLTVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0OCwiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNzoxNDozMy4xMjEyOTM2MDNaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBsZW5ndGggdmFsaWRhdGlvbiBjaGVjayAoYHNrYi1cXHUwMDNlbGVuIFxcdTAwM2Mgc2l6ZW9mKCpyc3ApYCkgaW4gYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoKWAgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIGZyb20gYHNrYi1cXHUwMDNlZGF0YWAgd2hlbiBwYXJzaW5nIHRydW5jYXRlZCBOQ0kgcmVzcG9uc2UgcGFja2V0cy4gT3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgYXJlIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgYnVncyBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbGVuZ3RoIHZhbGlkYXRpb24gY2hlY2sgKGBza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVvZigqcnNwKWApIGluIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KClgIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBmcm9tIGBza2ItXFx1MDAzZWRhdGFgIHdoZW4gcGFyc2luZyB0cnVuY2F0ZWQgTkNJIHJlc3BvbnNlIHBhY2tldHMuIE91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFyZSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGJ1Z3MgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowt4p7z[1] Phase: Succeeded StartedAt: 2026-09-12 17:14:44 +0000 UTC FinishedAt: 2026-09-12 17:14:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-12 17:14:44 +0000 UTC FinishedAt: 2026-09-12 17:14:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2] Phase: Succeeded StartedAt: 2026-09-12 17:14:44 +0000 UTC FinishedAt: 2026-09-12 20:54:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-12 17:14:44 +0000 UTC FinishedAt: 2026-09-12 20:54:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-12 17:14:44 +0000 UTC FinishedAt: 2026-09-12 17:14:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-12 17:14:44 +0000 UTC FinishedAt: 2026-09-12 17:14:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt4p7z/series-workflowt4p7z-convert-artifact-1701593923/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-12 17:14:54 +0000 UTC FinishedAt: 2026-09-12 17:31:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-12 17:14:54 +0000 UTC FinishedAt: 2026-09-12 17:31:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5904b60d-9057-41e4-9581-2959f2e6e118,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-workflowt4p7z/series-workflowt4p7z-convert-artifact-1701593923/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": "0622a13a-0b00-475b-9454-6e7c356fb9b4", "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-workflowt4p7z/series-workflowt4p7z-build-action-2462039473/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-12 17:14:54 +0000 UTC FinishedAt: 2026-09-12 17:31:05 +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:*5904b60d-9057-41e4-9581-2959f2e6e118,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-workflowt4p7z/series-workflowt4p7z-convert-artifact-1701593923/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": "0622a13a-0b00-475b-9454-6e7c356fb9b4", "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-workflowt4p7z/series-workflowt4p7z-build-action-2462039473/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-12 17:31:15 +0000 UTC FinishedAt: 2026-09-12 17:31:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-12 17:31:15 +0000 UTC FinishedAt: 2026-09-12 17:31:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-12 17:31:15 +0000 UTC FinishedAt: 2026-09-12 17:31:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-12 17:31:15 +0000 UTC FinishedAt: 2026-09-12 17:31:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt4p7z/series-workflowt4p7z-convert-artifact-118790650/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-12 17:31:25 +0000 UTC FinishedAt: 2026-09-12 17:33:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-12 17:31:25 +0000 UTC FinishedAt: 2026-09-12 17:33:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0622a13a-0b00-475b-9454-6e7c356fb9b4,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-workflowt4p7z/series-workflowt4p7z-build-action-2462039473/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-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-12 17:33:21 +0000 UTC FinishedAt: 2026-09-12 17:33:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-12 17:33:21 +0000 UTC FinishedAt: 2026-09-12 17:33:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-12 17:33:21 +0000 UTC FinishedAt: 2026-09-12 17:49:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-12 17:33:21 +0000 UTC FinishedAt: 2026-09-12 17:49:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5904b60d-9057-41e4-9581-2959f2e6e118,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-workflowt4p7z/series-workflowt4p7z-convert-artifact-118790650/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": "9ebd4e63-cad4-4105-bef9-0689d94e444c", "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-workflowt4p7z/series-workflowt4p7z-build-action-3379509598/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-12 17:33:21 +0000 UTC FinishedAt: 2026-09-12 17:49:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5904b60d-9057-41e4-9581-2959f2e6e118,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-workflowt4p7z/series-workflowt4p7z-convert-artifact-118790650/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": "9ebd4e63-cad4-4105-bef9-0689d94e444c", "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-workflowt4p7z/series-workflowt4p7z-build-action-3379509598/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-12 17:49:53 +0000 UTC FinishedAt: 2026-09-12 17:49:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-12 17:49:53 +0000 UTC FinishedAt: 2026-09-12 17:49:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-12 17:49:53 +0000 UTC FinishedAt: 2026-09-12 17:51:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-12 17:49:53 +0000 UTC FinishedAt: 2026-09-12 17:51:41 +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:*9ebd4e63-cad4-4105-bef9-0689d94e444c,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-workflowt4p7z/series-workflowt4p7z-build-action-3379509598/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-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-12 17:51:51 +0000 UTC FinishedAt: 2026-09-12 20:54:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-12 17:51:51 +0000 UTC FinishedAt: 2026-09-12 20:54:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"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:*0622a13a-0b00-475b-9454-6e7c356fb9b4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9ebd4e63-cad4-4105-bef9-0689d94e444c,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-workflowt4p7z/series-workflowt4p7z-build-action-2462039473/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-workflowt4p7z/series-workflowt4p7z-build-action-3379509598/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-12 17:51:51 +0000 UTC FinishedAt: 2026-09-12 17:52:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-12 17:51:51 +0000 UTC FinishedAt: 2026-09-12 17:51:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"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-workflowt4p7z/series-workflowt4p7z-convert-artifact-2829988399/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-12 17:51:51 +0000 UTC FinishedAt: 2026-09-12 17:51:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-12 17:51:51 +0000 UTC FinishedAt: 2026-09-12 17:51:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-12 17:51:51 +0000 UTC FinishedAt: 2026-09-12 17:51:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-12 17:52:01 +0000 UTC FinishedAt: 2026-09-12 20:54:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4p7z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_core_conn_create_rsp_packet","nci_rsp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"1a4e0f75-80e4-4554-ada4-fa54c189a407","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-12 17:52:01 +0000 UTC FinishedAt: 2026-09-12 20:54:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0622a13a-0b00-475b-9454-6e7c356fb9b4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9ebd4e63-cad4-4105-bef9-0689d94e444c,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-workflowt4p7z/series-workflowt4p7z-build-action-2462039473/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-workflowt4p7z/series-workflowt4p7z-build-action-3379509598/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-workflowt4p7z/series-workflowt4p7z-convert-artifact-2829988399/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,}