Name: series-workflowpzgs9 Phase: Succeeded StartedAt: 2026-09-11 12:36:30 +0000 UTC FinishedAt: 2026-09-11 13:16:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpzgs9[0] Phase: Succeeded StartedAt: 2026-09-11 12:36:30 +0000 UTC FinishedAt: 2026-09-11 12:40:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpzgs9[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 12:36:30 +0000 UTC FinishedAt: 2026-09-11 12:40:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STRICT_KERNEL_RWX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STRICT_KERNEL_RWX" ], "series_id": "28ec0797-ca6e-4150-9b75-cd4e2a6de68e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__change_page_attr", "__should_split_large_page", "change_page_attr_set_clr", "set_memory_ro", "set_memory_rw", "set_memory_rox", "set_memory_nx", "set_memory_x" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUUklDVF9LRVJORUxfUldYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19jaGFuZ2VfcGFnZV9hdHRyJiMzNDssCiAgICAmIzM0O19fc2hvdWxkX3NwbGl0X2xhcmdlX3BhZ2UmIzM0OywKICAgICYjMzQ7Y2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyJiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfcm8mIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ydyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3JveCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X254JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfeCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2ZXJpZnlfcnd4KClgIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCB0byBsb2cgYSB3YXJuaW5nIHZpYSBgcHJfd2Fybl9vbmNlYCBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSBmdWxsIGBXQVJOX09OQ0VgIHdoZW4gYSBXXlggdmlvbGF0aW9uIGlzIGRldGVjdGVkIGJlZm9yZSBrZXJuZWwgdGV4dCBoYXMgYmVlbiBtYXJrZWQgcmVhZC1vbmx5IChga2VybmVsX3NldF90b19yZWFkb25seWAgaXMgZmFsc2UpLiBcblxuVGhpcyBjaGFuZ2Ugb25seSB0b3VjaGVzIGxvZ2dpbmcgYW5kIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBhbiBleGlzdGluZyBnbG9iYWwgYm9vbGVhbiBmbGFnIGFuZCBzY2FsYXIgcGFnZS10YWJsZSBwcm90ZWN0aW9uIHZhbHVlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXXlggcGVybWlzc2lvbiB2ZXJpZmljYXRpb24gbG9naWMgKHZlcmlmeV9yd3gpIHdpdGhpbiB4ODYgQ2hhbmdlIFBhZ2UgQXR0cmlidXRlcyAoQ1BBKSBpbiBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhlY3V0ZWQgd2hlbmV2ZXIga2VybmVsIHBhZ2UgcHJvdGVjdGlvbnMgYXJlIGFkanVzdGVkIChzdWNoIGFzIHZpYSBCUEYgSklULCBmdHJhY2UsIG1vZHVsZSBsb2FkaW5nL3VubG9hZGluZywgb3IgZHJpdmVyIG1lbW9yeSBhdHRyaWJ1dGUgY2hhbmdlcykuIEl0IGludHJvZHVjZXMgbmV3IGNvbmRpdGlvbmFsIHdhcm5pbmcgYmVoYXZpb3Igd2hlbiBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5IGlzIGZhbHNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmRkNmQ0ZWVkYWFmNDMyZjdmYmEzN2MyZWZjODhiODQ1OWFmODAyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjM3OjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5pbmRleCBiMzA2MDAwMGRhOGQxLi5hNGY3ZmU2OWU2OTIyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuQEAgLTY5Nyw2ICYjNDM7Njk3LDIxIEBAIHN0YXRpYyBpbmxpbmUgcGdwcm90X3QgdmVyaWZ5X3J3eChwZ3Byb3RfdCBvbGQsIHBncHJvdF90IG5ldywgdW5zaWduZWQgbG9uZyBzdGFyXG4gXHRcdHJldHVybiBuZXc7XG4gXG4gXHRlbmQgPSBzdGFydCAmIzQzOyBucGcgKiBQQUdFX1NJWkUgLSAxO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBrZXJuZWwgdGV4dCBpcyBzdGlsbCBSV1gsIGdlbnRseSBjb21wbGFpbiwgdGhpcyBjb3VsZCBiZSBhXG4mIzQzO1x0ICogZmFsc2UgcG9zaXRpdmUuXG4mIzQzO1x0ICogT25jZSBkZWJ1Z19jaGVja3d4KCkgYmVjb21lcyBtYW5kYXRvcnkgZm9yIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWCxcbiYjNDM7XHQgKiB0aGUgd2FybmluZyBjYW4gYmUgcmVtb3ZlZCBjb21wbGV0ZWx5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICgha2VybmVsX3NldF90b19yZWFkb25seSkge1xuJiM0MztcdFx0cHJfd2Fybl9vbmNlKDEsIFwmIzM0O0NQQSBkZXRlY3RlZCBXXlggdmlvbGF0aW9uOiAlMDE2bGx4IC1cdTAwM2UgJTAxNmxseCByYW5nZTogMHglMDE2bHggLSAweCUwMTZseCBQRk4gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwob2xkKSxcbiYjNDM7XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXG4mIzQzO1x0XHQgIHN0YXJ0LCBlbmQsIHBmbik7XG4mIzQzO1x0XHRyZXR1cm4gbmV3O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRXQVJOX09OQ0UoMSwgXCYjMzQ7Q1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXG5cJiMzNDssXG4gXHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksXG4gXHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1RSSUNUX0tFUk5FTF9SV1gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2NoYW5nZV9wYWdlX2F0dHImIzM0OywKICAgICYjMzQ7X19zaG91bGRfc3BsaXRfbGFyZ2VfcGFnZSYjMzQ7LAogICAgJiMzNDtjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHImIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ybyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3J3JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfcm94JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfbngmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV94JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXXlggcGVybWlzc2lvbiB2ZXJpZmljYXRpb24gbG9naWMgKHZlcmlmeV9yd3gpIHdpdGhpbiB4ODYgQ2hhbmdlIFBhZ2UgQXR0cmlidXRlcyAoQ1BBKSBpbiBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhlY3V0ZWQgd2hlbmV2ZXIga2VybmVsIHBhZ2UgcHJvdGVjdGlvbnMgYXJlIGFkanVzdGVkIChzdWNoIGFzIHZpYSBCUEYgSklULCBmdHJhY2UsIG1vZHVsZSBsb2FkaW5nL3VubG9hZGluZywgb3IgZHJpdmVyIG1lbW9yeSBhdHRyaWJ1dGUgY2hhbmdlcykuIEl0IGludHJvZHVjZXMgbmV3IGNvbmRpdGlvbmFsIHdhcm5pbmcgYmVoYXZpb3Igd2hlbiBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5IGlzIGZhbHNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmRkNmQ0ZWVkYWFmNDMyZjdmYmEzN2MyZWZjODhiODQ1OWFmODAyMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDEyOjM3OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKaW5kZXggYjMwNjAwMDBkYThkMS4uYTRmN2ZlNjllNjkyMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCkBAIC02OTcsNiAmIzQzOzY5NywyMSBAQCBzdGF0aWMgaW5saW5lIHBncHJvdF90IHZlcmlmeV9yd3gocGdwcm90X3Qgb2xkLCBwZ3Byb3RfdCBuZXcsIHVuc2lnbmVkIGxvbmcgc3RhcgogCQlyZXR1cm4gbmV3OwogCiAJZW5kID0gc3RhcnQgJiM0MzsgbnBnICogUEFHRV9TSVpFIC0gMTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIGtlcm5lbCB0ZXh0IGlzIHN0aWxsIFJXWCwgZ2VudGx5IGNvbXBsYWluLCB0aGlzIGNvdWxkIGJlIGEKJiM0MzsJICogZmFsc2UgcG9zaXRpdmUuCiYjNDM7CSAqIE9uY2UgZGVidWdfY2hlY2t3eCgpIGJlY29tZXMgbWFuZGF0b3J5IGZvciBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gsCiYjNDM7CSAqIHRoZSB3YXJuaW5nIGNhbiBiZSByZW1vdmVkIGNvbXBsZXRlbHkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpIHsKJiM0MzsJCXByX3dhcm5fb25jZSgxLCAmIzM0O0NQQSBkZXRlY3RlZCBXXlggdmlvbGF0aW9uOiAlMDE2bGx4IC0mZ3Q7ICUwMTZsbHggcmFuZ2U6IDB4JTAxNmx4IC0gMHglMDE2bHggUEZOICVseFxuJiMzNDssCiYjNDM7CQkgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChvbGQpLAomIzQzOwkJICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwobmV3KSwKJiM0MzsJCSAgc3RhcnQsIGVuZCwgcGZuKTsKJiM0MzsJCXJldHVybiBuZXc7CiYjNDM7CX0KJiM0MzsKIAlXQVJOX09OQ0UoMSwgJiMzNDtDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtJmd0OyAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcbiYjMzQ7LAogCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChvbGQpLAogCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChuZXcpLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTI0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBhbmQgQXNzb2NpYXRlZCBUb29scyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBwYXRjaCBpdHNlbGYsIG9mIGNvdXJzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHRoZW4gcHV0IHRoYXQgaW50byBjb250ZXh0LiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBpcyB0byBleGFtaW5lIHRoZSByZWxldmFudCBjb2RlLCB3aGljaCBpbiB0aGlzIGNhc2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gSSB3aWxsIHRoZW4gZ28gYWhlYWQgYW5kIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgb24gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgaW5zcGVjdGluZyB0aGlzIGZpbGUgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjgwOlx0XHQgKiBkZXRlY3Rpb24gYW5kIGVuZm9yY2VtZW50IHRoZXJlLlxuIDY4MTpcdFx0ICovXG4gNjgyOlx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWDg2XzMyKSlcbiA2ODM6XHRcdFx0cmV0dXJuIG5ldztcbiA2ODQ6XHRcbiA2ODU6XHRcdC8qIE9ubHkgdmVyaWZ5IHdoZW4gTlggaXMgc3VwcG9ydGVkOiAqL1xuIDY4NjpcdFx0aWYgKCEoX19zdXBwb3J0ZWRfcHRlX21hc2sgXHUwMDI2IF9QQUdFX05YKSlcbiA2ODc6XHRcdFx0cmV0dXJuIG5ldztcbiA2ODg6XHRcbiA2ODk6XHRcdGlmICghKChwZ3Byb3RfdmFsKG9sZCkgXiBwZ3Byb3RfdmFsKG5ldykpIFx1MDAyNiAoX1BBR0VfUlcgfCBfUEFHRV9OWCkpKVxuIDY5MDpcdFx0XHRyZXR1cm4gbmV3O1xuIDY5MTpcdFxuIDY5MjpcdFx0aWYgKChwZ3Byb3RfdmFsKG5ldykgXHUwMDI2IChfUEFHRV9SVyB8IF9QQUdFX05YKSkgIT0gX1BBR0VfUlcpXG4gNjkzOlx0XHRcdHJldHVybiBuZXc7XG4gNjk0Olx0XG4gNjk1Olx0XHQvKiBOb24tbGVhZiB0cmFuc2xhdGlvbiBlbnRyaWVzIGNhbiBkaXNhYmxlIHdyaXRpbmcgb3IgZXhlY3V0aW9uLiAqL1xuIDY5NjpcdFx0aWYgKCFydyB8fCBueClcbiA2OTc6XHRcdFx0cmV0dXJuIG5ldztcbiA2OTg6XHRcbiA2OTk6XHRcdGVuZCA9IHN0YXJ0ICYjNDM7IG5wZyAqIFBBR0VfU0laRSAtIDE7XG4gNzAwOlx0XG4gNzAxOlx0XHQvKlxuIDcwMjpcdFx0ICogSWYgdGhlIGtlcm5lbCB0ZXh0IGlzIHN0aWxsIFJXWCwgZ2VudGx5IGNvbXBsYWluLCB0aGlzIGNvdWxkIGJlIGFcbiA3MDM6XHRcdCAqIGZhbHNlIHBvc2l0aXZlLlxuIDcwNDpcdFx0ICogT25jZSBkZWJ1Z19jaGVja3d4KCkgYmVjb21lcyBtYW5kYXRvcnkgZm9yIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWCxcbiA3MDU6XHRcdCAqIHRoZSB3YXJuaW5nIGNhbiBiZSByZW1vdmVkIGNvbXBsZXRlbHkuXG4gNzA2Olx0XHQgKi9cbiA3MDc6XHRcdGlmICgha2VybmVsX3NldF90b19yZWFkb25seSkge1xuIDcwODpcdFx0XHRwcl93YXJuX29uY2UoMSwgXCYjMzQ7Q1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXG5cJiMzNDssXG4gNzA5Olx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksXG4gNzEwOlx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXG4gNzExOlx0XHRcdCAgc3RhcnQsIGVuZCwgcGZuKTtcbiA3MTI6XHRcdFx0cmV0dXJuIG5ldztcbiA3MTM6XHRcdH1cbiA3MTQ6XHRcbiA3MTU6XHRcdFdBUk5fT05DRSgxLCBcJiMzNDtDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXHUwMDNlICUwMTZsbHggcmFuZ2U6IDB4JTAxNmx4IC0gMHglMDE2bHggUEZOICVseFxcblwmIzM0OyxcbiA3MTY6XHRcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwob2xkKSxcbiA3MTc6XHRcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwobmV3KSxcbiA3MTg6XHRcdFx0ICBzdGFydCwgZW5kLCBwZm4pO1xuIDcxOTpcdFxuIDcyMDpcdFx0LypcbiA3MjE6XHRcdCAqIEZvciBub3csIGFsbG93IGFsbCBwZXJtaXNzaW9uIGNoYW5nZSBhdHRlbXB0cyBieSByZXR1cm5pbmcgdGhlXG4gNzIyOlx0XHQgKiBhdHRlbXB0ZWQgcGVybWlzc2lvbnMuICBUaGlzIGNhbiAmIzM5O3JldHVybiBvbGQmIzM5OyB0byBhY3RpdmVseVxuIDcyMzpcdFx0ICogcmVmdXNlIHRoZSBwZXJtaXNzaW9uIGNoYW5nZSBhdCBhIGxhdGVyIHRpbWUuXG4gNzI0Olx0XHQgKi9cbiA3MjU6XHRcdHJldHVybiBuZXc7XG4gNzI2Olx0fVxuIDcyNzpcdFxuIDcyODpcdC8qXG4gNzI5Olx0ICogTG9va3VwIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGZvciBhIHZpcnR1YWwgYWRkcmVzcyBpbiBhIHNwZWNpZmljIHBnZC5cbiA3MzA6XHQgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBlbnRyeSAob3IgTlVMTCBpZiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QpLFxuIDczMTpcdCAqIHRoZSBsZXZlbCBvZiB0aGUgZW50cnksIGFuZCB0aGUgZWZmZWN0aXZlIE5YIGFuZCBSVyBiaXRzIG9mIGFsbFxuIDczMjpcdCAqIHBhZ2UgdGFibGUgbGV2ZWxzLlxuIDczMzpcdCAqL1xuIDczNDpcdHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gNzM1Olx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCAqbGV2ZWwsIGJvb2wgKm54LCBib29sICpydylcbiA3MzY6XHR7XG4gNzM3Olx0XHRwNGRfdCAqcDRkO1xuIDczODpcdFx0cHVkX3QgKnB1ZDtcbiA3Mzk6XHRcdHBtZF90ICpwbWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM3OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgdmVyaWZ5X3J3eGAgVXNhZ2UqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBgdmVyaWZ5X3J3eGAgZnVuY3Rpb24gYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gVG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW5mbHVlbmNlLCBJJiMzOTttIGdvaW5nIHRvIHJlYWNoIGZvciB0aGUgdHJpZWQgYW5kIHRydWUgYGdyZXBgIGNvbW1hbmQuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgc2VhcmNoIGZvciBgdmVyaWZ5X3J3eGAgdG8gaWRlbnRpZnkgZXZlcnkgaW5zdGFuY2Ugd2hlcmUgaXQmIzM5O3MgaW52b2tlZC4gVGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgYW5kIHJldmVhbCB0aGUgYXJlYXMgb2YgdGhlIGNvZGUgdGhhdCBkZXBlbmQgb24gaXRzIGZ1bmN0aW9uYWxpdHkuIFRoaXMgcXVpY2sgc2NhbiB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIGEgZGVlcGVyIGRpdmUsIGFsbG93aW5nIG1lIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZlcmlmeV9yd3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NjIzPXN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgc3RhdGljX3Byb3RlY3Rpb25zKHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy02NzAtICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjY3MTpzdGF0aWMgaW5saW5lIHBncHJvdF90IHZlcmlmeV9yd3gocGdwcm90X3Qgb2xkLCBwZ3Byb3RfdCBuZXcsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTY3Mi1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnBnLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9OTQzPXN0YXRpYyBpbnQgX19zaG91bGRfc3BsaXRfbGFyZ2VfcGFnZShwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTA2Ni1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTA2NzpcdG5ld19wcm90ID0gdmVyaWZ5X3J3eChvbGRfcHJvdCwgbmV3X3Byb3QsIGxwYWRkciwgb2xkX3BmbiwgbnVtcGFnZXMsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTEwNjgtXHRcdFx0ICAgICAgbngsIHJ3KTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE4NTA9c3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTg4MS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTg4MjpcdFx0bmV3X3Byb3QgPSB2ZXJpZnlfcnd4KG9sZF9wcm90LCBuZXdfcHJvdCwgYWRkcmVzcywgcGZuLCAxLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODgzLVx0XHRcdFx0ICAgICAgbngsIHJ3KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQ1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEtlcm5lbCBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaGVyZS4mIzM0OyBUaGUgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBwYXJ0aWN1bGFyIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYHZlcmlmeV9yd3hgIGFuZCBga2VybmVsX3NldF90b19yZWFkb25seWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgZG9lcywgYW5kIGhvdyB0aGV5IHJlbGF0ZS4gR2l2ZW4gdGhhdCB0aGUgZ29hbCBpcyB0byBmdWxseSBhbmFseXplIHRoZSBjb2RlLCBpdCBtYWtlcyBzZW5zZSB0byBzdGFydCB3aXRoIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YC4gTGV0JiMzOTtzIHNlYXJjaCBmb3IgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIHRoYXQgZnVuY3Rpb24gZmlyc3QuIEEgZ29vZCBzb2xpZCBkZWZpbml0aW9uIHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCBmb3VuZGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGludGVudCBvZiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZXJuZWxfc2V0X3RvX3JlYWRvbmx5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcGFyaXNjL21tL2luaXQuYz0xMTI9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Jvb3RtZW0odm9pZClcbi0tXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtMzQwLVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jOjM0MTpzdGF0aWMgYm9vbCBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5O1xuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTM0Mi1cbmFyY2gvcGFyaXNjL21tL2luaXQuYz0zNDM9c3RhdGljIHZvaWQgX19yZWYgbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfdmFkZHIsXG4tLVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTQwMy1cdFx0XHRcdFx0cHJvdCA9IFBBR0VfS0VSTkVMO1xuYXJjaC9wYXJpc2MvbW0vaW5pdC5jOjQwNDpcdFx0XHRcdH0gZWxzZSBpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpIHtcbmFyY2gvcGFyaXNjL21tL2luaXQuYy00MDUtXHRcdFx0XHRcdC8qIHN0aWxsIGluaXRpYWxpemluZywgYWxsb3cgd3JpdGluZyB0byBSTyBtZW1vcnkgKi9cbi0tXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM9NDg5PXZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcbi0tXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtNDk2LVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jOjQ5NzpcdGtlcm5lbF9zZXRfdG9fcmVhZG9ubHkgPSB0cnVlO1xuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTQ5OC1cdG1hcF9wYWdlcyhzdGFydCwgX19wYShzdGFydCksIGVuZCAtIHN0YXJ0LCBQQUdFX0tFUk5FTCwgMCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oPTkyPWJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtOTMtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6OTQ6ZXh0ZXJuIGludCBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5O1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTk1LVxuLS1cbmFyY2gveDg2L21tL2luaXRfMzIuYz02OTI9dm9pZCBfX2luaXQgbWVtX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzIwLVxuYXJjaC94ODYvbW0vaW5pdF8zMi5jOjcyMTppbnQga2VybmVsX3NldF90b19yZWFkb25seSBfX3JlYWRfbW9zdGx5O1xuYXJjaC94ODYvbW0vaW5pdF8zMi5jLTcyMi1cbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmM9NzQwPXZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzQ4LVxuYXJjaC94ODYvbW0vaW5pdF8zMi5jOjc0OTpcdGtlcm5lbF9zZXRfdG9fcmVhZG9ubHkgPSAxO1xuYXJjaC94ODYvbW0vaW5pdF8zMi5jLTc1MC1cbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM9MTM0Mz12b2lkIF9faW5pdCBtZW1faW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzU2LVxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjEzNTc6aW50IGtlcm5lbF9zZXRfdG9fcmVhZG9ubHk7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM1OC1cbmFyY2gveDg2L21tL2luaXRfNjQuYz0xMzU5PXZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM3MS1cbmFyY2gveDg2L21tL2luaXRfNjQuYzoxMzcyOlx0a2VybmVsX3NldF90b19yZWFkb25seSA9IDE7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM3My1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTUwNz1zdGF0aWMgcGdwcm90dmFsX3QgcHJvdGVjdF9wY2lfYmlvcyh1bnNpZ25lZCBsb25nIHNwZm4sIHVuc2lnbmVkIGxvbmcgZXBmbilcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTUxNS0gKiBhbGlhc2VzLiAgVGhpcyBhbHNvIGluY2x1ZGVzIF9fcm9fYWZ0ZXJfaW5pdCwgc28gZG8gbm90IGVuZm9yY2UgdW50aWxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NTE2OiAqIGtlcm5lbF9zZXRfdG9fcmVhZG9ubHkgaXMgdHJ1ZS5cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTE3LSAqL1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz01MTg9c3RhdGljIHBncHJvdHZhbF90IHByb3RlY3Rfcm9kYXRhKHVuc2lnbmVkIGxvbmcgc3BmbiwgdW5zaWduZWQgbG9uZyBlcGZuKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTI3LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo1Mjg6XHRpZiAoa2VybmVsX3NldF90b19yZWFkb25seSBcdTAwMjZcdTAwMjYgb3ZlcmxhcHMoc3BmbiwgZXBmbiwgc3Bmbl9ybywgZXBmbl9ybykpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTUyOS1cdFx0cmV0dXJuIF9QQUdFX1JXO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NTQxPXN0YXRpYyBwZ3Byb3R2YWxfdCBwcm90ZWN0X2tlcm5lbF90ZXh0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTUyLS8qXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjU1MzogKiBPbmNlIHRoZSBrZXJuZWwgbWFwcyB0aGUgdGV4dCBhcyBSTyAoa2VybmVsX3NldF90b19yZWFkb25seSBpcyBzZXQpLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy01NTQtICoga2VybmVsIHRleHQgbWFwcGluZ3MgZm9yIHRoZSBsYXJnZSBwYWdlIGFsaWduZWQgdGV4dCwgcm9kYXRhIHNlY3Rpb25zXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz01NjE9c3RhdGljIHBncHJvdHZhbF90IHByb3RlY3Rfa2VybmVsX3RleHRfcm8odW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTU2Ny1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NTY4Olx0aWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5IHx8ICFvdmVybGFwcyhzdGFydCwgZW5kLCB0X3N0YXJ0LCB0X2VuZCkpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTU2OS1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz02NzE9c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2ZXJpZnlfcnd4KHBncHJvdF90IG9sZCwgcGdwcm90X3QgbmV3LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNzA2LVx0ICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjcwNzpcdGlmICgha2VybmVsX3NldF90b19yZWFkb25seSkge1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03MDgtXHRcdHByX3dhcm5fb25jZSgxLCBcJiMzNDtDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXHUwMDNlICUwMTZsbHggcmFuZ2U6IDB4JTAxNmx4IC0gMHglMDE2bHggUEZOICVseFxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODY4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhZC1Pbmx5IERhdGEgTWFya2luZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgbWFya19yb2RhdGFfcm8oKWAgZ2V0cyBpbnZva2VkIGR1cmluZyB0aGUga2VybmVsJiMzOTtzIGJvb3QgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgZnVuY3Rpb25zIGBtYXJrX3JlYWRvbmx5KClgIG9yIGRpcmVjdGx5IGFzIGBtYXJrX3JvZGF0YV9ybygpYC4gVGhlIGNydWNpYWwgcGllY2UgaGVyZSBpcyB0aGF0IHdoZW4gdGhpcyBmdW5jdGlvbiBleGVjdXRlcyBkdXJpbmcgYm9vdCwgdGhlIHZhcmlhYmxlIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBnZXRzIHNldCB0byBhIHZhbHVlIG9mIDEuCgpUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCBhZnRlciB0aGUgYm9vdCBzZXF1ZW5jZSBjb21wbGV0ZXMsIGR1cmluZyB0aGUgc3RhbmRhcmQgcnVudGltZSBvZiB0aGUga2VybmVsLCBhbmQgZXZlbiBkdXJpbmcgZnV6emluZyBlZmZvcnRzLCB0aGlzIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCB2YXJpYWJsZSAqYWx3YXlzKiByZXRhaW5zIGl0cyB2YWx1ZSBvZiAxLgoKQnV0LCB3YWl0IGEgc2Vjb25kLi4uIHRoaXMgZmVlbHMgbGlrZSBpdCBtaWdodCBiZSBhbiBvdmVyc2ltcGxpZmljYXRpb24uIElzIGl0IHRydWx5IHRoZSBjYXNlIHRoYXQgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIGlzICpuZXZlciogemVybyBhZnRlciB0aGUgaW5pdGlhbCBib290PyBJIG5lZWQgdG8gY2xhcmlmeSBpZiB0aGVyZSYjMzk7cyBhIHRyYW5zaWVudCBwZXJpb2QgZHVyaW5nIHRoZSB2ZXJ5IGVhcmx5IHN0YWdlcyBvZiB0aGUgYm9vdCBwcm9jZXNzIHdoZXJlIHRoaXMgdmFyaWFibGUgbWlnaHQgYmUgMCwgYmVmb3JlIGJlaW5nIGluaXRpYWxpemVkIHRvIDEuIFRoaXMgY291bGQgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLgoKVGhlcmVmb3JlLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZW4gYG1hcmtfcm9kYXRhX3JvKClgIGlzIGFjdHVhbGx5IGNhbGxlZCBpbiB0aGUgYm9vdCBzZXF1ZW5jZS4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgZ3JlcCBzZWFyY2ggdG8gY29uZmlybSB0aGUgY2FsbCBzaXRlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgdmFyaWF0aW9ucyBpbiB0aGUgY2FsbCBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFya19yb2RhdGFfcm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vbW0vaW5pdC5jPTM5Mj1zdGF0aWMgdm9pZCBmaXhfa2Vybm1lbV9wZXJtcyh2b2lkKVxuLS1cbmFyY2gvYXJtL21tL2luaXQuYy0zOTYtXG5hcmNoL2FybS9tbS9pbml0LmM6Mzk3OnN0YXRpYyBpbnQgX19tYXJrX3JvZGF0YV9ybyh2b2lkICp1bnVzZWQpXG5hcmNoL2FybS9tbS9pbml0LmMtMzk4LXtcbi0tXG5hcmNoL2FybS9tbS9pbml0LmMtNDAyLVxuYXJjaC9hcm0vbW0vaW5pdC5jOjQwMzp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXG5hcmNoL2FybS9tbS9pbml0LmMtNDA0LXtcbmFyY2gvYXJtL21tL2luaXQuYzo0MDU6XHRzdG9wX21hY2hpbmUoX19tYXJrX3JvZGF0YV9ybywgTlVMTCwgTlVMTCk7XG5hcmNoL2FybS9tbS9pbml0LmMtNDA2LVx0YXJtX2RlYnVnX2NoZWNrd3goKTtcbi0tXG5hcmNoL2FybTY0L21tL21tdS5jPTExODA9c3RhdGljIHZvaWQgX19pbml0IG1hcF9tZW0odm9pZClcbi0tXG5hcmNoL2FybTY0L21tL21tdS5jLTEyNTMtXG5hcmNoL2FybTY0L21tL21tdS5jOjEyNTQ6dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxuYXJjaC9hcm02NC9tbS9tbXUuYy0xMjU1LXtcbi0tXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM9NDUxPXZvaWQgZnJlZV9pbml0bWVtKHZvaWQpXG4tLVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTQ4OC0jaWZkZWYgQ09ORklHX1NUUklDVF9LRVJORUxfUldYXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM6NDg5OnZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcbmFyY2gvcGFyaXNjL21tL2luaXQuYy00OTAte1xuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC5oPTE1Mj1zdGF0aWMgaW5saW5lIGludCBoYXNoX19wNGRfYmFkKHA0ZF90IHA0ZClcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaC0xNTYtI2lmZGVmIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLmg6MTU3OmV4dGVybiB2b2lkIGhhc2hfX21hcmtfcm9kYXRhX3JvKHZvaWQpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLmgtMTU4LWV4dGVybiB2b2lkIGhhc2hfX21hcmtfaW5pdG1lbV9ueCh2b2lkKTtcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4LmgtMTQxLSNpZmRlZiBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1hcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaDoxNDI6ZXh0ZXJuIHZvaWQgcmFkaXhfX21hcmtfcm9kYXRhX3JvKHZvaWQpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9yYWRpeC5oLTE0My1leHRlcm4gdm9pZCByYWRpeF9fbWFya19pbml0bWVtX254KHZvaWQpO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3MzMi9tbXUuYz0xOTY9aW50IG1tdV9tYXJrX2luaXRtZW1fbngodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzMzIvbW11LmMtMjM1LVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczMyL21tdS5jOjIzNjppbnQgbW11X21hcmtfcm9kYXRhX3JvKHZvaWQpXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzMzIvbW11LmMtMjM3LXtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmM9NTI0PXN0YXRpYyBib29sIGhhc2hfX2NoYW5nZV9tZW1vcnlfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jLTU2NC1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuYzo1NjU6dm9pZCBoYXNoX19tYXJrX3JvZGF0YV9ybyh2b2lkKVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jLTU2Ni17XG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYz0xODg9c3RhdGljIHZvaWQgcmFkaXhfX2NoYW5nZV9tZW1vcnlfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYy0yMzAtXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jOjIzMTp2b2lkIHJhZGl4X19tYXJrX3JvZGF0YV9ybyh2b2lkKVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYy0yMzIte1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9tbXVfZGVjbC5oPTE2Mz1pbnQgbW11X21hcmtfaW5pdG1lbV9ueCh2b2lkKTtcbmFyY2gvcG93ZXJwYy9tbS9tbXVfZGVjbC5oOjE2NDppbnQgbW11X21hcmtfcm9kYXRhX3JvKHZvaWQpO1xuYXJjaC9wb3dlcnBjL21tL21tdV9kZWNsLmgtMTY1LSNlbHNlXG5hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaD0xNjY9c3RhdGljIGlubGluZSBpbnQgbW11X21hcmtfaW5pdG1lbV9ueCh2b2lkKSB7IHJldHVybiAwOyB9XG5hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaDoxNjc6c3RhdGljIGlubGluZSBpbnQgbW11X21hcmtfcm9kYXRhX3JvKHZvaWQpIHsgcmV0dXJuIDA7IH1cbmFyY2gvcG93ZXJwYy9tbS9tbXVfZGVjbC5oLTE2OC0jZW5kaWZcbi0tXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoLzh4eC5jPTE3MT1pbnQgbW11X21hcmtfaW5pdG1lbV9ueCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvOHh4LmMtMTg4LSNpZmRlZiBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1hcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvOHh4LmM6MTg5OmludCBtbXVfbWFya19yb2RhdGFfcm8odm9pZClcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvOHh4LmMtMTkwLXtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL2U1MDAuYz0yNjY9dm9pZCBfX2luaXQgYWRqdXN0X3RvdGFsX2xvd21lbSh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvZTUwMC5jLTI4Ny0jaWZkZWYgQ09ORklHX1NUUklDVF9LRVJORUxfUldYXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL2U1MDAuYzoyODg6aW50IG1tdV9tYXJrX3JvZGF0YV9ybyh2b2lkKVxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9lNTAwLmMtMjg5LXtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL2U1MDAuYz0zMDE9aW50IG1tdV9tYXJrX2luaXRtZW1fbngodm9pZClcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvZTUwMC5jLTMwMi17XG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL2U1MDAuYzozMDM6XHQvKiBFdmVyeXRoaW5nIGlzIGRvbmUgaW4gbW11X21hcmtfcm9kYXRhX3JvKCkgKi9cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvZTUwMC5jLTMwNC1cdHJldHVybiAwO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmM9MTQ1PXZvaWQgbWFya19pbml0bWVtX254KHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYy0xNTMtI2lmZGVmIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYzoxNTQ6c3RhdGljIGludCBfX21hcmtfcm9kYXRhX3JvKHZvaWQpXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jLTE1NS17XG4tLVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYy0xNjEtXHRpZiAodl9ibG9ja19tYXBwZWQoKHVuc2lnbmVkIGxvbmcpX3N0ZXh0ICYjNDM7IDEpKVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYzoxNjI6XHRcdHJldHVybiBtbXVfbWFya19yb2RhdGFfcm8oKTtcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMtMTYzLVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMtMTc0LVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYzoxNzU6dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYy0xNzYte1xuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYzoxNzc6XHRpbnQgZXJyID0gX19tYXJrX3JvZGF0YV9ybygpO1xuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYy0xNzgtXG4tLVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYz0xMjY9c3RydWN0IHBhZ2UgKnBtZF9wYWdlKHBtZF90IHBtZClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jLTE0MS0jaWZkZWYgQ09ORklHX1NUUklDVF9LRVJORUxfUldYXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jOjE0Mjp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jLTE0My17XG4tLVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYy0xNDktXHRpZiAocmFkaXhfZW5hYmxlZCgpKVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYzoxNTA6XHRcdHJhZGl4X19tYXJrX3JvZGF0YV9ybygpO1xuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYy0xNTEtXHRlbHNlXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jOjE1MjpcdFx0aGFzaF9fbWFya19yb2RhdGFfcm8oKTtcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMtMTUzLX1cbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYz03MzI9c3RhdGljIF9fbWVtaW5pdCBwZ3Byb3RfdCBwZ3Byb3RfZnJvbV92YSh1aW50cHRyX3QgdmEpXG4tLVxuYXJjaC9yaXNjdi9tbS9pbml0LmMtNzQwLVx0ICogd3JpdHRlbi5cbmFyY2gvcmlzY3YvbW0vaW5pdC5jOjc0MTpcdCAqIEFuZCByb2RhdGEgc2VjdGlvbiBpcyBtYXJrZWQgcmVhZG9ubHkgaW4gbWFya19yb2RhdGFfcm8uXG5hcmNoL3Jpc2N2L21tL2luaXQuYy03NDItXHQgKi9cbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYy03NDgtXG5hcmNoL3Jpc2N2L21tL2luaXQuYzo3NDk6dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxuYXJjaC9yaXNjdi9tbS9pbml0LmMtNzUwLXtcbi0tXG5hcmNoL3MzOTAvbW0vaW5pdC5jPTEwMT12b2lkIF9faW5pdCBwYWdpbmdfaW5pdCh2b2lkKVxuLS1cbmFyY2gvczM5MC9tbS9pbml0LmMtMTA2LVxuYXJjaC9zMzkwL21tL2luaXQuYzoxMDc6dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxuYXJjaC9zMzkwL21tL2luaXQuYy0xMDgte1xuLS1cbmFyY2gvdW0va2VybmVsL21lbS5jPTEzMT1ERUNMQVJFX1ZNX0dFVF9QQUdFX1BST1RcbmFyY2gvdW0va2VybmVsL21lbS5jLTEzMi1cbmFyY2gvdW0va2VybmVsL21lbS5jOjEzMzp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXG5hcmNoL3VtL2tlcm5lbC9tZW0uYy0xMzQte1xuLS1cbmFyY2gveDg2L21tL2luaXRfMzIuYz03MjM9c3RhdGljIHZvaWQgbWFya19ueGRhdGFfbngodm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzM5LVxuYXJjaC94ODYvbW0vaW5pdF8zMi5jOjc0MDp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzQxLXtcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM9MTM1Nz1pbnQga2VybmVsX3NldF90b19yZWFkb25seTtcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzU4LVxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjEzNTk6dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzNjAte1xuLS1cbmluY2x1ZGUvbGludXgvY2FjaGUuaC01NS0gKiBfX3JvX2FmdGVyX2luaXQgaXMgdXNlZCB0byBtYXJrIHRoaW5ncyB0aGF0IGFyZSByZWFkLW9ubHkgYWZ0ZXIgaW5pdCAoaS5lLlxuaW5jbHVkZS9saW51eC9jYWNoZS5oOjU2OiAqIGFmdGVyIG1hcmtfcm9kYXRhX3JvKCkgaGFzIGJlZW4gY2FsbGVkKS4gVGhlc2UgYXJlIGVmZmVjdGl2ZWx5IHJlYWQtb25seSxcbmluY2x1ZGUvbGludXgvY2FjaGUuaC01Ny0gKiBidXQgbWF5IGdldCB3cml0dGVuIHRvIGR1cmluZyBpbml0LCBzbyBjYW4mIzM5O3QgbGl2ZSBpbiAucm9kYXRhICh2aWEgXCYjMzQ7Y29uc3RcJiMzNDspLlxuLS1cbmluY2x1ZGUvbGludXgvaW5pdC5oPTE2NT1leHRlcm4gYm9vbCByb2RhdGFfZW5hYmxlZDtcbmluY2x1ZGUvbGludXgvaW5pdC5oOjE2Njp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpO1xuaW5jbHVkZS9saW51eC9pbml0LmgtMTY3LVxuLS1cbmluY2x1ZGUvbGludXgvcm9kYXRhX3Rlc3QuaC0yLS8qXG5pbmNsdWRlL2xpbnV4L3JvZGF0YV90ZXN0Lmg6MzogKiByb2RhdGFfdGVzdC5oOiBmdW5jdGlvbmFsIHRlc3QgZm9yIG1hcmtfcm9kYXRhX3JvIGZ1bmN0aW9uXG5pbmNsdWRlL2xpbnV4L3JvZGF0YV90ZXN0LmgtNC0gKlxuLS1cbmluaXQvbWFpbi5jPTE1MjE9c3RhdGljIHZvaWQgbWFya19yZWFkb25seSh2b2lkKVxuLS1cbmluaXQvbWFpbi5jLTE1MzEtXHRcdGp1bXBfbGFiZWxfaW5pdF9ybygpO1xuaW5pdC9tYWluLmM6MTUzMjpcdFx0bWFya19yb2RhdGFfcm8oKTtcbmluaXQvbWFpbi5jLTE1MzMtXHRcdGRlYnVnX2NoZWNrd3goKTtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zMDg4PXN0YXRpYyBub2lubGluZSBpbnQgZG9faW5pdF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMxODgtXHQgKiBtYXBwaW5ncyB3aGljaCB3b24mIzM5O3QgYmUgY2xlYW5lZCB1cCB1bnRpbCBkb19mcmVlX2luaXQoKSBydW5zLiAgQW55XG5rZXJuZWwvbW9kdWxlL21haW4uYzozMTg5Olx0ICogY29kZSBzdWNoIGFzIG1hcmtfcm9kYXRhX3JvKCkgd2hpY2ggZGVwZW5kcyBvbiB0aG9zZSBtYXBwaW5ncyB0b1xua2VybmVsL21vZHVsZS9tYWluLmMtMzE5MC1cdCAqIGJlIGNsZWFuZWQgdXAgbmVlZHMgdG8gc3luYyB3aXRoIHRoZSBxdWV1ZWQgd29yayBieSBpbnZva2luZ1xuLS1cbm1tL3JvZGF0YV90ZXN0LmMtMi0vKlxubW0vcm9kYXRhX3Rlc3QuYzozOiAqIHJvZGF0YV90ZXN0LmM6IGZ1bmN0aW9uYWwgdGVzdCBmb3IgbWFya19yb2RhdGFfcm8gZnVuY3Rpb25cbm1tL3JvZGF0YV90ZXN0LmMtNC0gKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU4OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBgbWFya19yZWFkb25seWAgRHVyaW5nIEtlcm5lbCBCb290KioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZW4gYW5kIHdoZXJlIGBtYXJrX3JlYWRvbmx5YCBpcyBiZWluZyBjYWxsZWQsIHdoaWNoLCBhcyBJIHJlY2FsbCwgbGlrZWx5IHBlcnRhaW5zIHRvIG1lbW9yeSByZWdpb25zLiBUaGUgaGludCBpcyBpbiBgaW5pdC9tYWluLmNgLCBhbmQgbW9yZSBzcGVjaWZpY2FsbHksIGl0JiMzOTtzIHRyaWdnZXJlZCBkdXJpbmcgYm9vdCwgcmlnaHQgYXJvdW5kIHRoZSB0aW1lIHRoZSBrZXJuZWwgaXMgaW5pdGlhbGl6aW5nLCBiZWZvcmUgaXQgaGFuZHMgY29udHJvbCBvdmVyIHRvIHRoZSBpbml0IHByb2Nlc3MgYW5kIHN0YXJ0cyBmcmVlaW5nIG1lbW9yeSBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBpbml0aWFsIGJvb3Qgc2VxdWVuY2UuIFRoYXQgbmFycm93cyBpdCBkb3duIGNvbnNpZGVyYWJseS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGluaXQvbWFpbi5jYCBub3cgYW5kIHpvb20gaW4gYXJvdW5kIGxpbmUgMTUyMSwgdG8gZmluZCB0aGUgZXhhY3QgY29udGV4dCBvZiB0aGF0IGNhbGwgYW5kIHRyeSB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgbWVtb3J5IHJlZ2lvbnMgYXJlIGJlaW5nIG1hZGUgcmVhZC1vbmx5IGF0IHRoYXQgc3RhZ2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIGtlcm5lbCBpcyBzZXR0aW5nIHVwIG1lbW9yeSBwcm90ZWN0aW9uIGVhcmx5IG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTE1Olx0XHRcdHByX3dhcm4oXCYjMzQ7SW52YWxpZCBvcHRpb24gc3RyaW5nIGZvciByb2RhdGE6ICYjMzk7JXMmIzM5O1xcblwmIzM0Oywgc3RyKTtcbjE1MTY6XHRcdHJldHVybiAwO1xuMTUxNzpcdH1cbjE1MTg6XHRlYXJseV9wYXJhbShcJiMzNDtyb2RhdGFcJiMzNDssIHNldF9kZWJ1Z19yb2RhdGEpO1xuMTUxOTpcdCNlbmRpZlxuMTUyMDpcdFxuMTUyMTpcdHN0YXRpYyB2b2lkIG1hcmtfcmVhZG9ubHkodm9pZClcbjE1MjI6XHR7XG4xNTIzOlx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gpIFx1MDAyNlx1MDAyNiByb2RhdGFfZW5hYmxlZCkge1xuMTUyNDpcdFx0XHQvKlxuMTUyNTpcdFx0XHQgKiBsb2FkX21vZHVsZSgpIHJlc3VsdHMgaW4gVyYjNDM7WCBtYXBwaW5ncywgd2hpY2ggYXJlIGNsZWFuZWRcbjE1MjY6XHRcdFx0ICogdXAgd2l0aCBpbml0X2ZyZWVfd3EuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBxdWV1ZWQgd29yayBpc1xuMTUyNzpcdFx0XHQgKiBmbHVzaGVkIHNvIHRoYXQgd2UgZG9uJiMzOTt0IGhpdCBmYWxzZSBwb3NpdGl2ZXMgbG9va2luZyBmb3JcbjE1Mjg6XHRcdFx0ICogaW5zZWN1cmUgcGFnZXMgd2hpY2ggYXJlIFcmIzQzO1guXG4xNTI5Olx0XHRcdCAqL1xuMTUzMDpcdFx0XHRmbHVzaF9tb2R1bGVfaW5pdF9mcmVlX3dvcmsoKTtcbjE1MzE6XHRcdFx0anVtcF9sYWJlbF9pbml0X3JvKCk7XG4xNTMyOlx0XHRcdG1hcmtfcm9kYXRhX3JvKCk7XG4xNTMzOlx0XHRcdGRlYnVnX2NoZWNrd3goKTtcbjE1MzQ6XHRcdFx0cm9kYXRhX3Rlc3QoKTtcbjE1MzU6XHRcdH0gZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gpKSB7XG4xNTM2Olx0XHRcdHByX2luZm8oXCYjMzQ7S2VybmVsIG1lbW9yeSBwcm90ZWN0aW9uIGRpc2FibGVkLlxcblwmIzM0Oyk7XG4xNTM3Olx0XHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX1NUUklDVF9LRVJORUxfUldYKSkge1xuMTUzODpcdFx0XHRwcl93YXJuKFwmIzM0O0tlcm5lbCBtZW1vcnkgcHJvdGVjdGlvbiBub3Qgc2VsZWN0ZWQgYnkga2VybmVsIGNvbmZpZy5cXG5cJiMzNDspO1xuMTUzOTpcdFx0fSBlbHNlIHtcbjE1NDA6XHRcdFx0cHJfd2FybihcJiMzNDtUaGlzIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBoYXZlIGtlcm5lbCBtZW1vcnkgcHJvdGVjdGlvbi5cXG5cJiMzNDspO1xuMTU0MTpcdFx0fVxuMTU0MjpcdH1cbjE1NDM6XHRcbjE1NDQ6XHR2b2lkIF9fd2VhayBmcmVlX2luaXRtZW0odm9pZClcbjE1NDU6XHR7XG4xNTQ2Olx0XHRmcmVlX2luaXRtZW1fZGVmYXVsdChQT0lTT05fRlJFRV9JTklUTUVNKTtcbjE1NDc6XHR9XG4xNTQ4Olx0XG4xNTQ5Olx0c3RhdGljIGludCBfX3JlZiBrZXJuZWxfaW5pdCh2b2lkICp1bnVzZWQpXG4xNTUwOlx0e1xuMTU1MTpcdFx0aW50IHJldDtcbjE1NTI6XHRcbjE1NTM6XHRcdGluaXRfdXNlcnNwYWNlX2ZzKCk7XG4xNTU0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDY4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgV15YIFZpb2xhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdmVyaWZ5X3J3eGAgZnVuY3Rpb24gYW5kIGEgcG90ZW50aWFsIFdyaXRlIFhPUiBFeGVjdXRlIChXXlgpIHZpb2xhdGlvbi4gVGhlIGNydXggb2YgdGhlIGlzc3VlIHNlZW1zIHRvIGJlIHRpZWQgdG8gdGhlIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBmbGFnLCB3aGljaCBpbmRpY2F0ZXMgd2hldGhlciByZWFkLW9ubHkgZGF0YSBzZWN0aW9ucyBoYXZlIGJlZW4gcHJvcGVybHkgbWFya2VkIGFzIHN1Y2guIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgaGFwcGVucyBpbiBhIGZldyBzcGVjaWZpYyBzY2VuYXJpb3MuCgpGaXJzdCwgbGV0JiMzOTtzIGV4cGxvcmUgd2hhdCBvY2N1cnMgd2hlbiBgIXJvZGF0YV9lbmFibGVkYCwgd2hpY2ggZXNzZW50aWFsbHkgbWVhbnMgdGhlIGtlcm5lbCBpcyBib290ZWQgd2l0aCBgcm9kYXRhPW9mZmAgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIHRoZW4gYG1hcmtfcm9kYXRhX3JvKClgIGlzIG5ldmVyIGludm9rZWQuIENvbnNlcXVlbnRseSwgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIHJlbWFpbnMgMC4gVGhpcyBsYWNrIG9mIHNldHRpbmcgdGhlIGZsYWcgY291bGQgYmUgdGhlIHJvb3QgY2F1c2UuCgpOb3csIHdoYXQgaWYgdGhlcmUmIzM5O3MgYSBzaXR1YXRpb24gd2hlcmUgZWFybHkgYm9vdCBjb2RlLCB1c2luZyBgc2V0X21lbW9yeV8qYCBjYWxscywgbW9kaWZpZXMgbWVtb3J5IHJlZ2lvbnMgKmJlZm9yZSogYG1hcmtfcm9kYXRhX3JvKClgIGlzIGV2ZW4gY2FsbGVkPyBUaGlzIGNvdWxkIGFsc28gbGVhZCB0byBzaW1pbGFyIHByb2JsZW1zLiBJIG5lZWQgdG8ga2VlcCB0aGF0IHRpbWluZyBpbiBtaW5kLgoKSSYjMzk7bSBzZWVpbmcgdGhhdCBgdmVyaWZ5X3J3eGAgaXMgZmlyaW5nIGBXQVJOX09OQ0VgIGR1cmluZyBib290LCBpbmRpY2F0aW5nIGEgcG90ZW50aWFsIFdeWCBpc3N1ZS4gVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgd2FybmluZyBsb2dpYyB0byBpbmNsdWRlIHRoZSBga2VybmVsX3NldF90b19yZWFkb25seWAgY2hlY2suIFRoZSBpZGVhIGlzLCBpZiB0aGUgZmxhZyAqaXNuJiMzOTt0KiBzZXQsIHdlIGVtaXQgYSBzcGVjaWZpYyB3YXJuaW5nLCBhbmQgb3RoZXJ3aXNlIGlzc3VlIHRoZSBnZW5lcmFsIFdeWCB3YXJuaW5nLgoKV2FpdCBhIHNlY29uZCwgYmVmb3JlIEkgZGlnIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGNvbnN1bHQgYGdpdCBsb2dgIG9yIHRoZSBjb21taXQgaGlzdG9yeSBhcm91bmQgYHZlcmlmeV9yd3hgLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2XigJR3aGF0IHByb2JsZW1zIGl0IHdhcyBpbnRlbmRlZCB0byBzb2x2ZSBhbmQgd2hhdCBhc3N1bXB0aW9ucyB3ZXJlIG1hZGXigJR3aWxsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCBJJiMzOTttIGRlYWxpbmcgd2l0aC4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXJpZnlfcnd4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NjIzPXN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgc3RhdGljX3Byb3RlY3Rpb25zKHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy02NzAtICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjY3MTpzdGF0aWMgaW5saW5lIHBncHJvdF90IHZlcmlmeV9yd3gocGdwcm90X3Qgb2xkLCBwZ3Byb3RfdCBuZXcsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTY3Mi1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnBnLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9OTQzPXN0YXRpYyBpbnQgX19zaG91bGRfc3BsaXRfbGFyZ2VfcGFnZShwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTA2Ni1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTA2NzpcdG5ld19wcm90ID0gdmVyaWZ5X3J3eChvbGRfcHJvdCwgbmV3X3Byb3QsIGxwYWRkciwgb2xkX3BmbiwgbnVtcGFnZXMsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTEwNjgtXHRcdFx0ICAgICAgbngsIHJ3KTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE4NTA9c3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTg4MS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTg4MjpcdFx0bmV3X3Byb3QgPSB2ZXJpZnlfcnd4KG9sZF9wcm90LCBuZXdfcHJvdCwgYWRkcmVzcywgcGZuLCAxLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODgzLVx0XHRcdFx0ICAgICAgbngsIHJ3KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NDgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjoKCioqQW5hbHl6aW5nIGB2ZXJpZnlfcnd4YCBhbmQgQ29udGV4dCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhlIGB2ZXJpZnlfcnd4YCBmdW5jdGlvbiwgd2hpY2ggaW1wbGllcyBzb21lIGtpbmQgb2YgbWVtb3J5IGFjY2VzcyB2YWxpZGF0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byByZWFkLXdyaXRlLWV4ZWN1dGUgcGVybWlzc2lvbnMuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgbmVzdGxlZCB3aXRoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGltbWVkaWF0ZWx5IG5hcnJvd3MgdGhlIHNjb3BlLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIHg4NiBhcmNoaXRlY3R1cmUsIG1lbW9yeSBtYW5hZ2VtZW50LCBwb3RlbnRpYWxseSBpbmNsdWRpbmcgUGFnZSBBdHRyaWJ1dGUgVGFibGUgKFBBVCkgbWFuaXB1bGF0aW9uLCBhbmQgcGFydGljdWxhcmx5LCB0aGUgc2V0dGluZyBvZiBtZW1vcnkgYXR0cmlidXRlcy4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIHNlY3VyaXR5IGFuZCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3csIHRoZSB0eXBlcyBvZiB2YWxpZGF0aW9ucyBkb25lIGFuZCBob3cgcGVybWlzc2lvbnMgYXJlIGVuZm9yY2VkLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uJiMzOTtzIGFyZ3VtZW50cywgcmV0dXJuIHZhbHVlcywgYW5kIGFueSBzaWRlIGVmZmVjdHMgaXQgbWF5IGhhdmUsIHN1Y2ggYXMgZXJyb3IgcmVwb3J0aW5nIG9yIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIHVzZWQgYW5kIHRoZWlyIHNpemVzLCBhcyB0aGVzZSBjYW4gdGVsbCBhIGxvdCBhYm91dCB0aGUgaW50ZW5kZWQgdXNhZ2UgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoaXMgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHRcbiA2NjE6XHRcdHJlcyA9IHByb3RlY3Rfcm9kYXRhKHBmbiwgcGZuICYjNDM7IG5wZyAtIDEpO1xuIDY2MjpcdFx0Y2hlY2tfY29uZmxpY3Qod2Fybmx2bCwgcHJvdCwgcmVzLCBzdGFydCwgZW5kLCBwZm4sIFwmIzM0O1JvZGF0YSBST1wmIzM0Oyk7XG4gNjYzOlx0XHRmb3JiaWRkZW4gfD0gcmVzO1xuIDY2NDpcdFxuIDY2NTpcdFx0cmV0dXJuIF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgXHUwMDI2IH5mb3JiaWRkZW4pO1xuIDY2NjpcdH1cbiA2Njc6XHRcbiA2Njg6XHQvKlxuIDY2OTpcdCAqIFZhbGlkYXRlIHN0cmljdCBXXlggc2VtYW50aWNzLlxuIDY3MDpcdCAqL1xuIDY3MTpcdHN0YXRpYyBpbmxpbmUgcGdwcm90X3QgdmVyaWZ5X3J3eChwZ3Byb3RfdCBvbGQsIHBncHJvdF90IG5ldywgdW5zaWduZWQgbG9uZyBzdGFydCxcbiA2NzI6XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnBnLFxuIDY3MzpcdFx0XHRcdFx0ICBib29sIG54LCBib29sIHJ3KVxuIDY3NDpcdHtcbiA2NzU6XHRcdHVuc2lnbmVkIGxvbmcgZW5kO1xuIDY3NjpcdFxuIDY3NzpcdFx0LypcbiA2Nzg6XHRcdCAqIDMyLWJpdCBoYXMgc29tZSB1bmZpeGFibGUgVyYjNDM7WCBpc3N1ZXMsIGxpa2UgRUZJIGNvZGVcbiA2Nzk6XHRcdCAqIGFuZCB3cml0ZWFibGUgZGF0YSBiZWluZyBpbiB0aGUgc2FtZSBwYWdlLiAgRGlzYWJsZVxuIDY4MDpcdFx0ICogZGV0ZWN0aW9uIGFuZCBlbmZvcmNlbWVudCB0aGVyZS5cbiA2ODE6XHRcdCAqL1xuIDY4MjpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1g4Nl8zMikpXG4gNjgzOlx0XHRcdHJldHVybiBuZXc7XG4gNjg0Olx0XG4gNjg1Olx0XHQvKiBPbmx5IHZlcmlmeSB3aGVuIE5YIGlzIHN1cHBvcnRlZDogKi9cbiA2ODY6XHRcdGlmICghKF9fc3VwcG9ydGVkX3B0ZV9tYXNrIFx1MDAyNiBfUEFHRV9OWCkpXG4gNjg3Olx0XHRcdHJldHVybiBuZXc7XG4gNjg4Olx0XG4gNjg5Olx0XHRpZiAoISgocGdwcm90X3ZhbChvbGQpIF4gcGdwcm90X3ZhbChuZXcpKSBcdTAwMjYgKF9QQUdFX1JXIHwgX1BBR0VfTlgpKSlcbiA2OTA6XHRcdFx0cmV0dXJuIG5ldztcbiA2OTE6XHRcbiA2OTI6XHRcdGlmICgocGdwcm90X3ZhbChuZXcpIFx1MDAyNiAoX1BBR0VfUlcgfCBfUEFHRV9OWCkpICE9IF9QQUdFX1JXKVxuIDY5MzpcdFx0XHRyZXR1cm4gbmV3O1xuIDY5NDpcdFxuIDY5NTpcdFx0LyogTm9uLWxlYWYgdHJhbnNsYXRpb24gZW50cmllcyBjYW4gZGlzYWJsZSB3cml0aW5nIG9yIGV4ZWN1dGlvbi4gKi9cbiA2OTY6XHRcdGlmICghcncgfHwgbngpXG4gNjk3Olx0XHRcdHJldHVybiBuZXc7XG4gNjk4Olx0XG4gNjk5Olx0XHRlbmQgPSBzdGFydCAmIzQzOyBucGcgKiBQQUdFX1NJWkUgLSAxO1xuIDcwMDpcdFxuIDcwMTpcdFx0LypcbiA3MDI6XHRcdCAqIElmIHRoZSBrZXJuZWwgdGV4dCBpcyBzdGlsbCBSV1gsIGdlbnRseSBjb21wbGFpbiwgdGhpcyBjb3VsZCBiZSBhXG4gNzAzOlx0XHQgKiBmYWxzZSBwb3NpdGl2ZS5cbiA3MDQ6XHRcdCAqIE9uY2UgZGVidWdfY2hlY2t3eCgpIGJlY29tZXMgbWFuZGF0b3J5IGZvciBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gsXG4gNzA1Olx0XHQgKiB0aGUgd2FybmluZyBjYW4gYmUgcmVtb3ZlZCBjb21wbGV0ZWx5LlxuIDcwNjpcdFx0ICovXG4gNzA3Olx0XHRpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpIHtcbiA3MDg6XHRcdFx0cHJfd2Fybl9vbmNlKDEsIFwmIzM0O0NQQSBkZXRlY3RlZCBXXlggdmlvbGF0aW9uOiAlMDE2bGx4IC1cdTAwM2UgJTAxNmxseCByYW5nZTogMHglMDE2bHggLSAweCUwMTZseCBQRk4gJWx4XFxuXCYjMzQ7LFxuIDcwOTpcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChvbGQpLFxuIDcxMDpcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChuZXcpLFxuIDcxMTpcdFx0XHQgIHN0YXJ0LCBlbmQsIHBmbik7XG4gNzEyOlx0XHRcdHJldHVybiBuZXc7XG4gNzEzOlx0XHR9XG4gNzE0Olx0XG4gNzE1Olx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7Q1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXG5cJiMzNDssXG4gNzE2Olx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksXG4gNzE3Olx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXG4gNzE4Olx0XHRcdCAgc3RhcnQsIGVuZCwgcGZuKTtcbiA3MTk6XHRcbiA3MjA6XHRcdC8qXG4gNzIxOlx0XHQgKiBGb3Igbm93LCBhbGxvdyBhbGwgcGVybWlzc2lvbiBjaGFuZ2UgYXR0ZW1wdHMgYnkgcmV0dXJuaW5nIHRoZVxuIDcyMjpcdFx0ICogYXR0ZW1wdGVkIHBlcm1pc3Npb25zLiAgVGhpcyBjYW4gJiMzOTtyZXR1cm4gb2xkJiMzOTsgdG8gYWN0aXZlbHlcbiA3MjM6XHRcdCAqIHJlZnVzZSB0aGUgcGVybWlzc2lvbiBjaGFuZ2UgYXQgYSBsYXRlciB0aW1lLlxuIDcyNDpcdFx0ICovXG4gNzI1Olx0XHRyZXR1cm4gbmV3O1xuIDcyNjpcdH1cbiA3Mjc6XHRcbiA3Mjg6XHQvKlxuIDcyOTpcdCAqIExvb2t1cCB0aGUgcGFnZSB0YWJsZSBlbnRyeSBmb3IgYSB2aXJ0dWFsIGFkZHJlc3MgaW4gYSBzcGVjaWZpYyBwZ2QuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDgzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEV2YWx1YXRpb24gZm9yIHRoZSBDUEEgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCB3YXJyYW50cyBmdXp6aW5nLiBUaGlzIGlzIGEgY29yZSBzdWJzeXN0ZW0gcmVsYXRlZCB0byB4ODYgTWVtb3J5IE1hbmFnZW1lbnQgYW5kIENoYW5nZSBQYWdlIEF0dHJpYnV0ZXMgKENQQSksIHNvIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ2l2ZSBpdCBhIGNsb3NlIGxvb2suCgpGaXJzdCwgdGhlIGNvcmUgdHJpYWdlIHBoaWxvc29waHkgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC4gIFRoZSBwcmltYXJ5IGdvYWwgb2YgZnV6emluZyBpcyB0byB1bmVhcnRoIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciBuZXdseSBleHBvc2VkIGJ1Z3MsIHBhcnRpY3VsYXJseSB0aG9zZSBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaC4gVGhlIGtleSBoZXJlIGlzICpyZWFjaGFiaWxpdHkqIOKAkyBjYW4gdGhlIGNvZGUgYWN0dWFsbHkgZXhlY3V0ZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUsIG9yIHZpYSBlbXVsYXRlZCBkZXZpY2VzPyBUaGUgZG9jdW1lbnRhdGlvbiBzdHJlc3NlcyBub3QgdHJ1c3RpbmcgJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IG9yIHJlZmFjdG9yaW5nIGNsYWltcyBibGluZGx5LCBhbmQgdGhhdCBuZXcvbW9kaWZpZWQgYXNzZXJ0aW9ucyAqbXVzdCogYmUgZnV6emVkIGlmIHRoZXkmIzM5O3JlIGluIHJlYWNoYWJsZSBjb2RlLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvci4KCk5vdyBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBUaGUgcGF0Y2ggd291bGQgYmUgaWdub3JlZCBpZiB0aGUgY29kZSBtb2RpZmllZCBpcyAqc3RyaWN0bHkqIG5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLiAgVGhhdCBsYXN0IHBvaW50IOKAkyB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMg4oCTIGlzIGltcG9ydGFudC4gRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyBvbmx5IHVzZWQgZHVyaW5nIGhvdC11bnBsdWcsIG9yIGNvZGUgc3BlY2lmaWMgdG8gb3RoZXIgYXJjaGl0ZWN0dXJlcyBhcmUgb3V0LgoKVGhlbiwgdGhlcmUgYXJlIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYS4gV2UgKmRlZmluaXRlbHkqIHdhbnQgdG8gZnV6eiBpZiB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBUaGlzIGluY2x1ZGVzIGFueSBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBsb2NraW5nLCBCUEYsIHRoZSBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLiBSZWZhY3RvcmluZyByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsZ29yaXRobSBmbG93cyBpcyBhbHNvIGEgdHJpZ2dlci4gRmluYWxseSwgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgdGhlIGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzICptYW5kYXRlcyogZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGFuYWx5emUgdGhlIHBhdGNoIGl0c2VsZi4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGFuIGBpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpYCBjb25kaXRpb24gd2l0aGluIHRoZSBgdmVyaWZ5X3J3eCgpYCBmdW5jdGlvbi4gVGhpcyBhZmZlY3RzIGhvdyB0aGUgJiMzNDtXXlggdmlvbGF0aW9uJiMzNDsgaXMgaGFuZGxlZC4gIFByZXZpb3VzbHksIGBXQVJOX09OQ0VgIHdhcyBhbHdheXMgdHJpZ2dlcmVkLiBOb3csIGlmIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBpcyBmYWxzZSwgaXQgbG9ncyBhIGBwcl93YXJuX29uY2VgIG1lc3NhZ2UuIFRoZSBrZXkgaXMgd2hlbiBpcyB0aGlzIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBmbGFnIGZhbHNlPwoKQWgsIHJpZ2h0IOKAkyBga2VybmVsX3NldF90b19yZWFkb25seWAgaXMgemVybyAqZHVyaW5nIGJvb3QqLCAqYmVmb3JlKiBgbWFya19yb2RhdGFfcm8oKWAgaXMgY2FsbGVkLiBUaGlzIGlzIGltcG9ydGFudDogaXQmIzM5O3MgYWxzbyB6ZXJvIHdoZW4gdGhlIGtlcm5lbCBpcyBib290ZWQgd2l0aCBgcm9kYXRhPW9mZmAuIFN5emthbGxlciBtaWdodCBib290IHdpdGggYHJvZGF0YT1vZmZgLCB3aGljaCBtZWFucyB0aGlzIG5ldyBicmFuY2ggY291bGQgYmUgZnJlcXVlbnRseSB0YWtlbiBkdXJpbmcgZnV6emluZy4gQ1BBIChDaGFuZ2UgUGFnZSBBdHRyaWJ1dGUpIGlzIGNhbGxlZCBhdCBydW50aW1lIHdoZW4gbW9kdWxlcyBhcmUgbG9hZGVkL3VubG9hZGVkLCBCUEYgSklUIGFsbG9jYXRlcy9mcmVlcyBleGVjdXRhYmxlIG1lbW9yeSwgYW5kIHNldF9tZW1vcnlfcm8vcncveC9ueC91Yy93YiBpcyBjYWxsZWQgdmlhIHZhcmlvdXMgZHJpdmVycyBhbmQgc3Vic3lzdGVtcy4gVGhpcyBzdWdnZXN0cyB0aGUgY29kZSBpcyAqYWJzb2x1dGVseSogcmVhY2hhYmxlLgoKVG8gYmUgY2VydGFpbiwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdobyBjYWxscyBDUEEgZnVuY3Rpb25zIGF0IHJ1bnRpbWUuIEkgbmVlZCB0byBncmVwIHRoZSBrZXJuZWwgZm9yIGNhbGxlcnMgb2YgYGNoYW5nZV9wYWdlX2F0dHJgIG9yIGBzZXRfbWVtb3J5X2AgdG8gY29uZmlybSByZWFjaGFiaWxpdHkuCgpCYXNlZCBvbiB0aGlzLCBteSBwcmVsaW1pbmFyeSBldmFsdWF0aW9uIGlzICp5ZXMqLCB0aGlzIHBhdGNoICpkb2VzKiB3YXJyYW50IGZ1enppbmcuICBUaGUgY2hhbmdlIGludHJvZHVjZXMgYSBuZXcgY29kZSBwYXRoIHRoYXQmIzM5O3MgbGlrZWx5IHJlYWNoYWJsZSwgZXNwZWNpYWxseSB3aXRoIGByb2RhdGE9b2ZmYCwgYW5kIGludm9sdmVzIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IGNoYW5nZSBpbiBiZWhhdmlvci4gVGhpcyBkZWZpbml0ZWx5IGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4cG9zZSBsYXRlbnQgYnVncyBvciB0cmlnZ2VyIG5ldyBhc3NlcnRpb25zLCBzbyBJIHdvdWxkIGZsYWcgdGhpcyBmb3IgdGhlIGZ1enppbmcgcXVldWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9tZW1vcnlfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3NjEgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9leHBvcnRzLmg9Nj1QUk9WSURFKGVhcmx5X3NldF9wYWdlc19zdGF0ZVx0XHQ9IF9fcGlfZWFybHlfc2V0X3BhZ2VzX3N0YXRlKTtcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9leHBvcnRzLmg6NzpQUk9WSURFKGVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGVcdD0gX19waV9lYXJseV9zbnBfc2V0X21lbW9yeV9wcml2YXRlKTtcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9leHBvcnRzLmg6ODpQUk9WSURFKGVhcmx5X3NucF9zZXRfbWVtb3J5X3NoYXJlZFx0PSBfX3BpX2Vhcmx5X3NucF9zZXRfbWVtb3J5X3NoYXJlZCk7XG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvZXhwb3J0cy5oLTktUFJPVklERShnZXRfaHZfZmVhdHVyZXNcdFx0XHQ9IF9fcGlfZ2V0X2h2X2ZlYXR1cmVzKTtcbi0tXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvbWFwX2tlcm5lbC5jPTMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBzbWVfcG9zdHByb2Nlc3Nfc3RhcnR1cChzdHJ1Y3QgYm9vdF9wYXJhbXMgKmJwLFxuLS1cbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9tYXBfa2VybmVsLmMtNTktXHRcdFx0ICogbWFwcGluZyAoa2VybmVsIC50ZXh0KS4gUFZBTElEQVRFLCBieSB3YXkgb2ZcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9tYXBfa2VybmVsLmM6NjA6XHRcdFx0ICogZWFybHlfc25wX3NldF9tZW1vcnlfc2hhcmVkKCksIHJlcXVpcmVzIGEgdmFsaWQgdmlydHVhbFxuYXJjaC94ODYvYm9vdC9zdGFydHVwL21hcF9rZXJuZWwuYy02MS1cdFx0XHQgKiBhZGRyZXNzIGJ1dCB0aGUga2VybmVsIGlzIGN1cnJlbnRseSBydW5uaW5nIG9mZiBvZiB0aGUgaWRlbnRpdHlcbi0tXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvbWFwX2tlcm5lbC5jLTYzLVx0XHRcdCAqL1xuYXJjaC94ODYvYm9vdC9zdGFydHVwL21hcF9rZXJuZWwuYzo2NDpcdFx0XHRlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQocGFkZHIsIHBhZGRyLCBQVFJTX1BFUl9QTUQpO1xuYXJjaC94ODYvYm9vdC9zdGFydHVwL21hcF9rZXJuZWwuYy02NS1cbi0tXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc2V2LXN0YXJ0dXAuYz00OT1lYXJseV9zZXRfcGFnZXNfc3RhdGUodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkcixcbi0tXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc2V2LXN0YXJ0dXAuYy02Ni1cbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9zZXYtc3RhcnR1cC5jOjY3OnZvaWQgX19pbml0IGVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkcixcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9zZXYtc3RhcnR1cC5jLTY4LVx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBucGFnZXMpXG4tLVxuYXJjaC94ODYvYm9vdC9zdGFydHVwL3Nldi1zdGFydHVwLmMtOTEtXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc2V2LXN0YXJ0dXAuYzo5Mjp2b2lkIF9faW5pdCBlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkcixcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9zZXYtc3RhcnR1cC5jLTkzLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIG5wYWdlcylcbi0tXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM9Mzg3PXN0YXRpYyB2b2lkIHNldF9wYWdlc19zdGF0ZSh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIG5wYWdlcywgaW50IG9wKVxuLS1cbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy00MDUtXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6NDA2OnZvaWQgc25wX3NldF9tZW1vcnlfc2hhcmVkKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTQwNy17XG4tLVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTQxMy1cbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYzo0MTQ6dm9pZCBzbnBfc2V0X21lbW9yeV9wcml2YXRlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTQxNS17XG4tLVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jPTU0ND1zdGF0aWMgdm9pZCB1bnNoYXJlX2FsbF9tZW1vcnkodm9pZClcbi0tXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNTg1LVx0XHRcdHNldF9wdGVfZW5jKHB0ZSwgbGV2ZWwsICh2b2lkICopYWRkcik7XG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6NTg2Olx0XHRcdHNucF9zZXRfbWVtb3J5X3ByaXZhdGUoYWRkciwgbnBhZ2VzKTtcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy01ODctXHRcdH1cbi0tXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNjAzLVx0YWRkciA9ICh1bnNpZ25lZCBsb25nKV9fc3RhcnRfYnNzX2RlY3J5cHRlZDtcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYzo2MDQ6XHRzbnBfc2V0X21lbW9yeV9wcml2YXRlKGFkZHIsIG5wYWdlcyk7XG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNjA1LVxuLS1cbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYz02MTA9dm9pZCBzbnBfa2V4ZWNfYmVnaW4odm9pZClcbi0tXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNjIzLVx0ICovXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6NjI0Olx0aWYgKCFzZXRfbWVtb3J5X2VuY19zdG9wX2NvbnZlcnNpb24oKSlcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy02MjUtXHRcdHByX3dhcm4oXCYjMzQ7RmFpbGVkIHRvIHN0b3Agc2hhcmVkXHUwMDNjLVx1MDAzZXByaXZhdGUgY29udmVyc2lvbnNcXG5cJiMzNDspO1xuLS1cbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYz02ODc9dm9pZCBzbnBfa2V4ZWNfZmluaXNoKHZvaWQpXG4tLVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTcyMS1cdFx0c2V0X3B0ZV9lbmMocHRlLCBsZXZlbCwgKHZvaWQgKilhZGRyKTtcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYzo3MjI6XHRcdHNucF9zZXRfbWVtb3J5X3ByaXZhdGUoYWRkciwgKHNpemUgLyBQQUdFX1NJWkUpKTtcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy03MjMtXHR9XG4tLVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jPTEyMDg9c3RhdGljIHZvaWQgX19pbml0IGluaXRfZ2hjYihpbnQgY3B1KVxuLS1cbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy0xMjE0LVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jOjEyMTU6XHRlcnIgPSBlYXJseV9zZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZylcdTAwMjZkYXRhLVx1MDAzZWdoY2JfcGFnZSxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy0xMjE2LVx0XHRcdFx0XHQgc2l6ZW9mKGRhdGEtXHUwMDNlZ2hjYl9wYWdlKSk7XG4tLVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jPTE0NzM9c3RhdGljIHZvaWQgZnJlZV9zaGFyZWRfcGFnZXModm9pZCAqYnVmLCBzaXplX3Qgc3opXG4tLVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTE0ODAtXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6MTQ4MTpcdHJldCA9IHNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKWJ1ZiwgbnBhZ2VzKTtcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy0xNDgyLVx0aWYgKHJldCkge1xuLS1cbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYz0xNDkwPXN0YXRpYyB2b2lkICphbGxvY19zaGFyZWRfcGFnZXMoc2l6ZV90IHN6KVxuLS1cbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy0xNDk5LVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jOjE1MDA6XHRyZXQgPSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSksIG5wYWdlcyk7XG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtMTUwMS1cdGlmIChyZXQpIHtcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xMDEwPXN0YXRpYyB2b2lkIHRkeF9rZXhlY19iZWdpbih2b2lkKVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTEwMjAtXHQgKi9cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjEwMjE6XHRpZiAoIXNldF9tZW1vcnlfZW5jX3N0b3BfY29udmVyc2lvbigpKVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTAyMi1cdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gc3RvcCBzaGFyZWRcdTAwM2MtXHUwMDNlcHJpdmF0ZSBjb252ZXJzaW9uc1xcblwmIzM0Oyk7XG4tLVxuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYz0xMTg9c3RhdGljIGludCBodl9jcHVfaW5pdCh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtMTU4LVx0XHRcdGlmICgqaHZwIFx1MDAyNlx1MDAyNiAhbXNfaHlwZXJ2LnBhcmF2aXNvcl9wcmVzZW50IFx1MDAyNlx1MDAyNiBodl9pc29sYXRpb25fdHlwZV9zbnAoKSkge1xuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYzoxNTk6XHRcdFx0XHRXQVJOX09OX09OQ0Uoc2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpKCpodnApLCAxKSk7XG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jLTE2MC1cdFx0XHRcdG1lbXNldCgqaHZwLCAwLCBQQUdFX1NJWkUpO1xuLS1cbmFyY2gveDg2L2h5cGVydi9pdm0uYz02MTc9c3RhdGljIHZvaWQgaHZfdnRvbV9rZXhlY19iZWdpbih2b2lkKVxuLS1cbmFyY2gveDg2L2h5cGVydi9pdm0uYy02MjctXHQgKi9cbmFyY2gveDg2L2h5cGVydi9pdm0uYzo2Mjg6XHRpZiAoIXNldF9tZW1vcnlfZW5jX3N0b3BfY29udmVyc2lvbigpKVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTYyOS1cdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gc3RvcCBzaGFyZWRcdTAwM2MtXHUwMDNlcHJpdmF0ZSBjb252ZXJzaW9uc1xcblwmIzM0Oyk7XG4tLVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jPTY3Nz1zdGF0aWMgaW50IGh2X21hcmtfZ3BhX3Zpc2liaWxpdHkodTE2IGNvdW50LCBjb25zdCB1NjQgcGZuW10sXG4tLVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTczNy0gKiBXaGVuIHRyYW5zaXRpb25pbmcgbWVtb3J5IGJldHdlZW4gZW5jcnlwdGVkIGFuZCBkZWNyeXB0ZWQsIHRoZSBjYWxsZXJcbmFyY2gveDg2L2h5cGVydi9pdm0uYzo3Mzg6ICogb2Ygc2V0X21lbW9yeV9lbmNyeXB0ZWQoKSBvciBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIGlzIHJlc3BvbnNpYmxlIGZvclxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTczOS0gKiBlbnN1cmluZyB0aGF0IHRoZSBtZW1vcnkgaXNuJiMzOTt0IGluIHVzZSBhbmQgaXNuJiMzOTt0IHJlZmVyZW5jZWQgd2hpbGUgdGhlXG4tLVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jPTc1Nj1zdGF0aWMgaW50IGh2X3Z0b21fY2xlYXJfcHJlc2VudCh1bnNpZ25lZCBsb25nIGtidWZmZXIsIGludCBwYWdlY291bnQsIGJvb2wgZW5jKVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTc1Ny17XG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM6NzU4Olx0cmV0dXJuIHNldF9tZW1vcnlfbnAoa2J1ZmZlciwgcGFnZWNvdW50KTtcbmFyY2gveDg2L2h5cGVydi9pdm0uYy03NTktfVxuLS1cbmFyY2gveDg2L2h5cGVydi9pdm0uYz03Njk9c3RhdGljIGludCBodl92dG9tX3NldF9ob3N0X3Zpc2liaWxpdHkodW5zaWduZWQgbG9uZyBrYnVmZmVyLCBpbnQgcGFnZWNvdW50LCBib29sIGVuYylcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmMtNzgxLVx0XHRyZXQgPSAtRU5PTUVNO1xuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjc4MjpcdFx0Z290byBlcnJfc2V0X21lbW9yeV9wO1xuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTc4My1cdH1cbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmMtODA4LVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjgwOTplcnJfc2V0X21lbW9yeV9wOlxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTgxMC1cdC8qXG4tLVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTgxNS1cdCAqL1xuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjgxNjpcdGVyciA9IHNldF9tZW1vcnlfcChrYnVmZmVyLCBwYWdlY291bnQpO1xuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTgxNy1cdGlmIChlcnIgXHUwMDI2XHUwMDI2ICFyZXQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmg9MjM4PXN0YXRpYyBpbmxpbmUgdTMyIGVmaTY0X2NvbnZlcnRfc3RhdHVzKGVmaV9zdGF0dXNfdCBzdGF0dXMpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmgtMjk4LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmg6Mjk5OiNkZWZpbmUgX19lZmk2NF9hcmdtYXBfc2V0X21lbW9yeV9zcGFjZV9hdHRyaWJ1dGVzKHBoeXMsIHNpemUsIGZsYWdzKSBcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmgtMzAwLVx0KF9fZWZpNjRfc3BsaXQocGh5cyksIF9fZWZpNjRfc3BsaXQoc2l6ZSksIF9fZWZpNjRfc3BsaXQoZmxhZ3MpKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oLTMxNi1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oOjMxNzojZGVmaW5lIF9fZWZpNjRfYXJnbWFwX3NldF9tZW1vcnlfYXR0cmlidXRlcyhwcm90b2NvbCwgcGh5cywgc2l6ZSwgZmxhZ3MpIFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaC0zMTgtXHQoKHByb3RvY29sKSwgX19lZmk2NF9zcGxpdChwaHlzKSwgX19lZmk2NF9zcGxpdChzaXplKSwgX19lZmk2NF9zcGxpdChmbGFncykpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va2ZlbmNlLmg9MjI9c3RhdGljIGlubGluZSBib29sIGFyY2hfa2ZlbmNlX2luaXRfcG9vbCh2b2lkKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2tmZW5jZS5oLTMzLVx0XHRpZiAobGV2ZWwgIT0gUEdfTEVWRUxfNEspXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZmVuY2UuaDozNDpcdFx0XHRzZXRfbWVtb3J5XzRrKGFkZHIsIDEpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20va2ZlbmNlLmgtMzUtXHR9XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbWVtX2VuY3J5cHQuaD01MT12b2lkIHNtZV9lbmFibGUoc3RydWN0IGJvb3RfcGFyYW1zICpicCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1fZW5jcnlwdC5oLTUyLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbWVtX2VuY3J5cHQuaDo1MzppbnQgX19pbml0IGVhcmx5X3NldF9tZW1vcnlfZGVjcnlwdGVkKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1fZW5jcnlwdC5oOjU0OmludCBfX2luaXQgZWFybHlfc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21lbV9lbmNyeXB0LmgtNTUtdm9pZCBfX2luaXQgZWFybHlfc2V0X21lbV9lbmNfZGVjX2h5cGVyY2FsbCh1bnNpZ25lZCBsb25nIHZhZGRyLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL21lbV9lbmNyeXB0Lmg9ODk9c3RhdGljIGlubGluZSBpbnQgX19pbml0XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1fZW5jcnlwdC5oOjkwOmVhcmx5X3NldF9tZW1vcnlfZGVjcnlwdGVkKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkgeyByZXR1cm4gMDsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbWVtX2VuY3J5cHQuaC05MS1zdGF0aWMgaW5saW5lIGludCBfX2luaXRcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21lbV9lbmNyeXB0Lmg6OTI6ZWFybHlfc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBzaXplKSB7IHJldHVybiAwOyB9XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1fZW5jcnlwdC5oLTkzLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXRcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtOC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo5OiNkZWZpbmUgc2V0X21lbW9yeV9yb3ggc2V0X21lbW9yeV9yb3hcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxMDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTExLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTEyLS8qXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6MTM6ICogVGhlIHNldF9tZW1vcnlfKiBBUEkgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHZhcmlvdXMgYXR0cmlidXRlcyBvZiBhIHZpcnR1YWxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC0xNC0gKiBhZGRyZXNzIHJhbmdlLiBUaGUgYXR0cmlidXRlcyBpbmNsdWRlOlxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC00MC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo0MTppbnQgX3NldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQyOmludCBfc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NDM6aW50IF9zZXRfbWVtb3J5X3d0KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo0NDppbnQgX3NldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQ1OmludCBzZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo0NjppbnQgc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NDc6aW50IHNldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQ4OmludCBzZXRfbWVtb3J5X25wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo0OTppbnQgc2V0X21lbW9yeV9wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo1MDppbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtNTEtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NTI6Ym9vbCBzZXRfbWVtb3J5X2VuY19zdG9wX2NvbnZlcnNpb24odm9pZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NTM6aW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo1NDppbnQgc2V0X21lbW9yeV9kZWNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTU1LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjU2OmludCBzZXRfbWVtb3J5X25wX25vYWxpYXModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjU3OmludCBzZXRfbWVtb3J5X25vbmdsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NTg6aW50IHNldF9tZW1vcnlfZ2xvYmFsKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC01OS1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg9NjI9aW50IHNldF9wYWdlc19hcnJheV93YihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgYWRkcmluYXJyYXkpO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC02OC0gKiBtZW1vcnkgdGhhdCB0aGUgc3RydWN0IHBhZ2UgcmVwcmVzZW50cywgYW5kIGludGVybmFsbHkganVzdFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjY5OiAqIGNhbGwgdGhlIHNldF9tZW1vcnlfKiBmdW5jdGlvbi4gU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGVcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo3MDogKiBzZXRfbWVtb3J5XyogZnVuY3Rpb24gZm9yIG1vcmUgZGV0YWlscyBvbiBjb252ZW50aW9ucy5cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC03MS0gKlxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC03OS0gKiBnZXQgYSBzdHJ1Y3QgcGFnZSogdGhhdCB0aGUgb2xkIEFQSSByZXF1aXJlZC5cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo4MDogKiBUbyBjb252ZXJ0IHRoZXNlIGNhc2VzLCB1c2Ugc2V0X21lbW9yeV8qKCkgb24gdGhlIG9yaWdpbmFsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtODEtICogdmlydHVhbCBhZGRyZXNzLCBkbyBub3QgdXNlIHRoZXNlIGZ1bmN0aW9ucy5cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD01MDU9dm9pZCBzbnBfcmVnaXN0ZXJfZ2hjYl9lYXJseSh1bnNpZ25lZCBsb25nIHBhZGRyKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjUwNjp2b2lkIGVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkcixcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTUwNy1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NTA4OnZvaWQgZWFybHlfc25wX3NldF9tZW1vcnlfc2hhcmVkKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgcGFkZHIsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC01MDktXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NTEwOnZvaWQgc25wX3NldF9tZW1vcnlfc2hhcmVkKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjUxMTp2b2lkIHNucF9zZXRfbWVtb3J5X3ByaXZhdGUodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNTEyLXZvaWQgc25wX3NldF93YWtldXBfc2Vjb25kYXJ5X2NwdSh2b2lkKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02MTI9c3RhdGljIGlubGluZSB2b2lkIF9faW5pdFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjEzOmVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyBucGFnZXMpIHsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjE0LXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXRcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjYxNTplYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyBucGFnZXMpIHsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjE2OnN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0X21lbW9yeV9zaGFyZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBucGFnZXMpIHsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjE3OnN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0X21lbW9yeV9wcml2YXRlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKSB7IH1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTYxOC1zdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldF93YWtldXBfc2Vjb25kYXJ5X2NwdSh2b2lkKSB7IH1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92Z2EuaC0yNC1cdGlmIChJU19FTkFCTEVEKENPTkZJR19BTURfTUVNX0VOQ1JZUFQpKVx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92Z2EuaDoyNTpcdFx0c2V0X21lbW9yeV9kZWNyeXB0ZWQoc3RhcnQsIChzKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XHRcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdmdhLmgtMjYtXHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9MjE4PXN0YXRpYyB2b2lkICppdHNfYWxsb2Modm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yMzItXHRpZiAocGFnZXMgPT0gXHUwMDI2aXRzX3BhZ2VzKVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MjMzOlx0XHRzZXRfbWVtb3J5X3goKHVuc2lnbmVkIGxvbmcpcGFnZSwgMSk7XG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yMzQtXG4tLVxuYXJjaC94ODYva2VybmVsL2FtZF9nYXJ0XzY0LmM9NjE5PXN0YXRpYyBfX2luaXQgaW50IGluaXRfYW1kX2dhdHQoc3RydWN0IGFncF9rZXJuX2luZm8gKmluZm8pXG4tLVxuYXJjaC94ODYva2VybmVsL2FtZF9nYXJ0XzY0LmMtNjU0LVx0XHRwYW5pYyhcJiMzNDtDYW5ub3QgYWxsb2NhdGUgR0FUVCB0YWJsZVwmIzM0Oyk7XG5hcmNoL3g4Ni9rZXJuZWwvYW1kX2dhcnRfNjQuYzo2NTU6XHRpZiAoc2V0X21lbW9yeV91YygodW5zaWduZWQgbG9uZylnYXR0LCBnYXR0X3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpKVxuYXJjaC94ODYva2VybmVsL2FtZF9nYXJ0XzY0LmMtNjU2LVx0XHRwYW5pYyhcJiMzNDtDb3VsZCBub3Qgc2V0IEdBUlQgUFRFcyB0byB1bmNhY2hlYWJsZSBwYWdlc1wmIzM0Oyk7XG4tLVxuYXJjaC94ODYva2VybmVsL2FtZF9nYXJ0XzY0LmM9NzE0PWludCBfX2luaXQgZ2FydF9pb21tdV9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2FtZF9nYXJ0XzY0LmMtNzgxLVx0ICovXG5hcmNoL3g4Ni9rZXJuZWwvYW1kX2dhcnRfNjQuYzo3ODI6XHRzZXRfbWVtb3J5X25wKCh1bnNpZ25lZCBsb25nKV9fdmEoaW9tbXVfYnVzX2Jhc2UpLFxuYXJjaC94ODYva2VybmVsL2FtZF9nYXJ0XzY0LmMtNzgzLVx0XHRcdFx0aW9tbXVfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4tLVxuYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYz01NTk9c3RhdGljIF9faW5pdCB2b2lkIHNldF9ibG9ja19zaXplKHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYy01NjQtXHRcdC8qIGFkanVzdCBmb3IgZmZzIHJldHVybiBvZiAxLi42NCAqL1xuYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYzo1NjU6XHRcdHNldF9tZW1vcnlfYmxvY2tfc2l6ZV9vcmRlcihvcmRlciAtIDEpO1xuYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYy01NjYtXHRcdHByX2luZm8oXCYjMzQ7VVY6IG1lbV9ibG9ja19zaXplIHNldCB0byAweCVseFxcblwmIzM0OywgbWVtX2Jsb2NrX3NpemUpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMtNTY5LVx0XHRwcl9lcnIoXCYjMzQ7VVY6IG1lbV9ibG9ja19zaXplIGVycm9yIHdpdGggMHglbHhcXG5cJiMzNDssIG1lbV9ibG9ja19zaXplKTtcbmFyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmM6NTcwOlx0XHRzZXRfbWVtb3J5X2Jsb2NrX3NpemVfb3JkZXIoMzEpO1xuYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYy01NzEtXHR9XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYz0yNTg4PXZvaWQgX19pbml0IGFyY2hfY3B1X2ZpbmFsaXplX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jLTI2NjMtXHRcdGlmICghZGlyZWN0X2dicGFnZXMpXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jOjI2NjQ6XHRcdFx0c2V0X21lbW9yeV80aygodW5zaWduZWQgbG9uZylfX3ZhKDApLCAxKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMtMjY2NS1cdH0gZWxzZSB7XG4tLVxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jPTMwOT1jcmVhdGVfdHJhbXBvbGluZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBpbnQgKnRyYW1wX3NpemUpXG4tLVxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jLTQyNy1cbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYzo0Mjg6XHRzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZyl0cmFtcG9saW5lLCBucGFnZXMpO1xuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jLTQyOS1cdHJldHVybiAodW5zaWduZWQgbG9uZyl0cmFtcG9saW5lO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYz00MzU9dm9pZCBzZXRfZnRyYWNlX29wc19ybyh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00NTYtXHRcdG5wYWdlcyA9IERJVl9ST1VORF9VUChzaXplLCBQQUdFX1NJWkUpO1xuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jOjQ1NzpcdFx0c2V0X21lbW9yeV9ybygodW5zaWduZWQgbG9uZylvcHMtXHUwMDNldHJhbXBvbGluZSwgbnBhZ2VzKTtcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00NTgtXHR9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9vcChvcHMpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9pZHQuYz0yOTQ9dm9pZCBfX2luaXQgaWR0X3NldHVwX2FwaWNfYW5kX2lycV9nYXRlcyh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9pZHQuYy0zMjEtXHQvKiBNYWtlIHRoZSBJRFQgdGFibGUgcmVhZCBvbmx5ICovXG5hcmNoL3g4Ni9rZXJuZWwvaWR0LmM6MzIyOlx0c2V0X21lbW9yeV9ybygodW5zaWduZWQgbG9uZylcdTAwMjZpZHRfdGFibGUsIDEpO1xuYXJjaC94ODYva2VybmVsL2lkdC5jLTMyMy1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM9NDMyPXN0YXRpYyBpbmxpbmUgX19pbml0IHZvaWQgX19zZXRfcGVyY3B1X2RlY3J5cHRlZCh2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy00MzMte1xuYXJjaC94ODYva2VybmVsL2t2bS5jOjQzNDpcdGVhcmx5X3NldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKSBwdHIsIHNpemUpO1xuYXJjaC94ODYva2VybmVsL2t2bS5jLTQzNS19XG4tLVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM9MjI1PXN0YXRpYyB2b2lkIF9faW5pdCBrdm1jbG9ja19pbml0X21lbSh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTI1MC1cdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9HVUVTVF9NRU1fRU5DUllQVCkpIHtcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jOjI1MTpcdFx0ciA9IHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKSBodmNsb2NrX21lbSxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTI1Mi1cdFx0XHRcdFx0IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTI1NS1cdFx0XHRodmNsb2NrX21lbSA9IE5VTEw7XG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzoyNTY6XHRcdFx0cHJfd2FybihcJiMzNDtrdm1jbG9jazogc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBmYWlsZWQuIERpc2FibGluZ1xcblwmIzM0Oyk7XG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0yNTctXHRcdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmM9MTM1PWludCBtYWNoaW5lX2tleGVjX3ByZXBhcmUoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXG4tLVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYy0xMzgtXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jOjEzOTpcdHNldF9tZW1vcnlfeCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MoaW1hZ2UtXHUwMDNlY29udHJvbF9jb2RlX3BhZ2UpLCAxKTtcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMtMTQwLVx0ZXJyb3IgPSBtYWNoaW5lX2tleGVjX2FsbG9jX3BhZ2VfdGFibGVzKGltYWdlKTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jPTE1MT12b2lkIG1hY2hpbmVfa2V4ZWNfY2xlYW51cChzdHJ1Y3Qga2ltYWdlICppbWFnZSlcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMtMTUyLXtcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmM6MTUzOlx0c2V0X21lbW9yeV9ueCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MoaW1hZ2UtXHUwMDNlY29udHJvbF9jb2RlX3BhZ2UpLCAxKTtcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMtMTU0LVx0bWFjaGluZV9rZXhlY19mcmVlX3BhZ2VfdGFibGVzKGltYWdlKTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jPTM0Mz1pbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlKHN0cnVjdCBraW1hZ2UgKmltYWdlKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMtMzY0LVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYzozNjU6XHRzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZyljb250cm9sX3BhZ2UsIDEpO1xuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy0zNjYtXG4tLVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYz0zNzA9dm9pZCBtYWNoaW5lX2tleGVjX2NsZWFudXAoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXG4tLVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy0zNzMtXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jOjM3NDpcdHNldF9tZW1vcnlfbngoKHVuc2lnbmVkIGxvbmcpY29udHJvbF9wYWdlLCAxKTtcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM6Mzc1Olx0c2V0X21lbW9yeV9ydygodW5zaWduZWQgbG9uZyljb250cm9sX3BhZ2UsIDEpO1xuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy0zNzYtXG4tLVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYz02NDg9c3RhdGljIHZvaWQga2V4ZWNfbWFya19kbV9jcnlwdF9rZXlzKGJvb2wgcHJvdGVjdClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTY1Ny1cdFx0aWYgKHByb3RlY3QpXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jOjY1ODpcdFx0XHRzZXRfbWVtb3J5X25wKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChzdGFydF9wYWRkciksIG5yX3BhZ2VzKTtcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMtNjU5LVx0XHRlbHNlXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jOjY2MDpcdFx0XHRzZXRfbWVtb3J5X3AoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHN0YXJ0X3BhZGRyKSwgbnJfcGFnZXMpO1xuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy02NjEtXHR9XG4tLVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYz02ODY9aW50IGFyY2hfa2V4ZWNfcG9zdF9hbGxvY19wYWdlcyh2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IHBhZ2VzLCBnZnBfdCBnZnApXG4tLVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy02OTUtXHQgKi9cbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM6Njk2Olx0cmV0dXJuIHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBwYWdlcyk7XG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTY5Ny19XG4tLVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYz02OTk9dm9pZCBhcmNoX2tleGVjX3ByZV9mcmVlX3BhZ2VzKHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4tLVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy03MDctXHQgKi9cbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM6NzA4Olx0c2V0X21lbW9yeV9lbmNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIHBhZ2VzKTtcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMtNzA5LX1cbi0tXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYz0yOTEwPWludCBrdm1fYWxsb2NfYXBpY19hY2Nlc3NfcGFnZShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL2xhcGljLmMtMjkxOS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jOjI5MjA6XHRodmEgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULFxuYXJjaC94ODYva3ZtL2xhcGljLmMtMjkyMS1cdFx0XHRcdCAgICAgIEFQSUNfREVGQVVMVF9QSFlTX0JBU0UsIFBBR0VfU0laRSk7XG4tLVxuYXJjaC94ODYva3ZtL2xhcGljLmM9MjkzMT12b2lkIGt2bV9pbmhpYml0X2FwaWNfYWNjZXNzX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5NDItXHRpZiAoa3ZtLVx1MDAzZWFyY2guYXBpY19hY2Nlc3NfbWVtc2xvdF9lbmFibGVkKSB7XG5hcmNoL3g4Ni9rdm0vbGFwaWMuYzoyOTQzOlx0XHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULCAwLCAwKTtcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5NDQtXHRcdC8qXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02ODAxPXN0YXRpYyB2b2lkIGZyZWVfbW11X3BhZ2VzKHN0cnVjdCBrdm1fbW11ICptbXUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODAzLVx0aWYgKCF0ZHBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgbW11LVx1MDAzZXBhZV9yb290KVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2ODA0Olx0XHRzZXRfbWVtb3J5X2VuY3J5cHRlZCgodW5zaWduZWQgbG9uZyltbXUtXHUwMDNlcGFlX3Jvb3QsIDEpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODA1LVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW1tdS1cdTAwM2VwYWVfcm9vdCk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02ODEwPXN0YXRpYyBpbnQgX19rdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11ICptbXUsIHN0cnVjdCBrdm1fcGFnZXdhbGsgKncpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODU0LVx0aWYgKCF0ZHBfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Njg1NTpcdFx0c2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpbW11LVx1MDAzZXBhZV9yb290LCAxKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjg1Ni1cdGVsc2Vcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTgxMTM9c3RhdGljIHZvaWQgaHVnZXBhZ2Vfc2V0X21peGVkKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbixcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgxMTgtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjgxMTk6Ym9vbCBrdm1fYXJjaF9wcmVfc2V0X21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODEyMC1cdFx0XHRcdFx0c3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9ODE4Mj1zdGF0aWMgYm9vbCBodWdlcGFnZV9oYXNfYXR0cnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODE5OC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODE5OTpib29sIGt2bV9hcmNoX3Bvc3Rfc2V0X21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODIwMC1cdFx0XHRcdFx0IHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQwMjk9c3RhdGljIGludCBpbml0X3Jtb2RlX2lkZW50aXR5X21hcChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00MDQ0LVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo0MDQ1Olx0dWFkZHIgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTQwNDYtXHRcdFx0XHRcdElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1QsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz01Mjc2PWludCB2bXhfc2V0X3Rzc19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGFkZHIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01MjgzLVx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjUyODQ6XHRyZXQgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIFRTU19QUklWQVRFX01FTVNMT1QsIGFkZHIsXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTUyODUtXHRcdFx0XHQgICAgICBQQUdFX1NJWkUgKiAzKTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTg0Mz1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxNi0vKipcbmFyY2gveDg2L2t2bS94ODYuYzo5OTE3OiAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uOiBTZXR1cCBLVk0gaW50ZXJuYWwgbWVtb3J5IHNsb3RcbmFyY2gveDg2L2t2bS94ODYuYy05OTE4LSAqXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MzctICovXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkzODp2b2lkIF9fdXNlciAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlkLCBncGFfdCBncGEsXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkzOS1cdFx0XHRcdCAgICAgIHUzMiBzaXplKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05OTg5LX1cbmFyY2gveDg2L2t2bS94ODYuYzo5OTkwOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbik7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk5MS1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwMTQ9dm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjItXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDIzOlx0XHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDI0LVx0XHRcdFx0XHQwLCAwKTtcbmFyY2gveDg2L2t2bS94ODYuYzoxMDAyNTpcdFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBJREVOVElUWV9QQUdFVEFCTEVfUFJJVkFURV9NRU1TTE9ULFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDI2LVx0XHRcdFx0XHQwLCAwKTtcbmFyY2gveDg2L2t2bS94ODYuYzoxMDAyNzpcdFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBUU1NfUFJJVkFURV9NRU1TTE9ULCAwLCAwKTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyOC1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwOTM9c3RhdGljIGludCBrdm1fYWxsb2NfbWVtc2xvdF9tZXRhZGF0YShzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMTAwLVx0ICogQ2xlYXIgb3V0IHRoZSBwcmV2aW91cyBhcnJheSBwb2ludGVycyBmb3IgdGhlIEtWTV9NUl9NT1ZFIGNhc2UuICBUaGVcbmFyY2gveDg2L2t2bS94ODYuYzoxMDEwMTpcdCAqIG9sZCBhcnJheXMgd2lsbCBiZSBmcmVlZCBieSBrdm1fc2V0X21lbW9yeV9yZWdpb24oKSBpZiBpbnN0YWxsaW5nXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxMDItXHQgKiB0aGUgbmV3IG1lbXNsb3QgaXMgc3VjY2Vzc2Z1bC5cbi0tXG5hcmNoL3g4Ni9rdm0veDg2Lmg9NTI2PWludCBrdm1fZ2V0X25yX3BlbmRpbmdfbm1pcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5oLTUyNy1cbmFyY2gveDg2L2t2bS94ODYuaDo1Mjg6dm9pZCBfX3VzZXIgKl9feDg2X3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlkLCBncGFfdCBncGEsXG5hcmNoL3g4Ni9rdm0veDg2LmgtNTI5LVx0XHRcdFx0ICAgICB1MzIgc2l6ZSk7XG4tLVxuYXJjaC94ODYvbW0vaW5pdC5jPTg5Nz12b2lkIGZyZWVfaW5pdF9wYWdlcyhjb25zdCBjaGFyICp3aGF0LCB1bnNpZ25lZCBsb25nIGJlZ2luLCB1bnNpZ25lZCBsb25nIGVuZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0LmMtOTI1LVx0XHRrbWVtbGVha19mcmVlX3BhcnQoKHZvaWQgKiliZWdpbiwgZW5kIC0gYmVnaW4pO1xuYXJjaC94ODYvbW0vaW5pdC5jOjkyNjpcdFx0c2V0X21lbW9yeV9ucChiZWdpbiwgKGVuZCAtIGJlZ2luKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5hcmNoL3g4Ni9tbS9pbml0LmMtOTI3LVx0fSBlbHNlIHtcbi0tXG5hcmNoL3g4Ni9tbS9pbml0LmMtOTMyLVx0XHQgKi9cbmFyY2gveDg2L21tL2luaXQuYzo5MzM6XHRcdHNldF9tZW1vcnlfbngoYmVnaW4sIChlbmQgLSBiZWdpbikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuYXJjaC94ODYvbW0vaW5pdC5jOjkzNDpcdFx0c2V0X21lbW9yeV9ydyhiZWdpbiwgKGVuZCAtIGJlZ2luKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5hcmNoL3g4Ni9tbS9pbml0LmMtOTM1LVxuLS1cbmFyY2gveDg2L21tL2luaXQuYz05NDY9dm9pZCBmcmVlX2tlcm5lbF9pbWFnZV9wYWdlcyhjb25zdCBjaGFyICp3aGF0LCB2b2lkICpiZWdpbiwgdm9pZCAqZW5kKVxuLS1cbmFyY2gveDg2L21tL2luaXQuYy05NjktXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWDg2XzY0KSBcdTAwMjZcdTAwMjYgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9QVEkpKVxuYXJjaC94ODYvbW0vaW5pdC5jOjk3MDpcdFx0c2V0X21lbW9yeV9ucF9ub2FsaWFzKGJlZ2luX3VsLCBsZW5fcGFnZXMpO1xuYXJjaC94ODYvbW0vaW5pdC5jLTk3MS19XG4tLVxuYXJjaC94ODYvbW0vaW5pdF8zMi5jPTcyMz1zdGF0aWMgdm9pZCBtYXJrX254ZGF0YV9ueCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL2luaXRfMzIuYy03MzYtXHRcdHByaW50ayhLRVJOX0lORk8gXCYjMzQ7TlgtcHJvdGVjdGluZyB0aGUga2VybmVsIGRhdGE6ICVsdWtcXG5cJiMzNDssIHNpemUgXHUwMDNlXHUwMDNlIDEwKTtcbmFyY2gveDg2L21tL2luaXRfMzIuYzo3Mzc6XHRzZXRfbWVtb3J5X254KHN0YXJ0LCBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbmFyY2gveDg2L21tL2luaXRfMzIuYy03MzgtfVxuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYz0xMzU5PXZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM2OS1cdCAgICAgICAoZW5kIC0gc3RhcnQpIFx1MDAzZVx1MDAzZSAxMCk7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM3MDpcdHNldF9tZW1vcnlfcm8oc3RhcnQsIChlbmQgLSBzdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzNzEtXG4tLVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzODYtXHRhbGxfZW5kID0gcm91bmR1cCgodW5zaWduZWQgbG9uZylfYnJrX2VuZCwgUE1EX1NJWkUpO1xuYXJjaC94ODYvbW0vaW5pdF82NC5jOjEzODc6XHRzZXRfbWVtb3J5X254KHRleHRfZW5kLCAoYWxsX2VuZCAtIHRleHRfZW5kKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM4OC1cbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM5Mi1cdHByaW50ayhLRVJOX0lORk8gXCYjMzQ7VGVzdGluZyBDUEE6IHVuZG8gJWx4LSVseFxcblwmIzM0Oywgc3RhcnQsIGVuZCk7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM5MzpcdHNldF9tZW1vcnlfcncoc3RhcnQsIChlbmQtc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzk0LVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzOTUtXHRwcmludGsoS0VSTl9JTkZPIFwmIzM0O1Rlc3RpbmcgQ1BBOiBhZ2FpblxcblwmIzM0Oyk7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM5NjpcdHNldF9tZW1vcnlfcm8oc3RhcnQsIChlbmQtc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzk3LSNlbmRpZlxuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYy0xNDE1LS8qIEFkanVzdGFibGUgbWVtb3J5IGJsb2NrIHNpemUgKi9cbmFyY2gveDg2L21tL2luaXRfNjQuYzoxNDE2OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNldF9tZW1vcnlfYmxvY2tfc2l6ZTtcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxNDE3OmludCBfX2luaXQgc2V0X21lbW9yeV9ibG9ja19zaXplX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xNDE4LXtcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQyMy1cbmFyY2gveDg2L21tL2luaXRfNjQuYzoxNDI0Olx0c2V0X21lbW9yeV9ibG9ja19zaXplID0gc2l6ZTtcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xNDI1LVx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvbW0vaW5pdF82NC5jPTE0Mjg9c3RhdGljIHVuc2lnbmVkIGxvbmcgcHJvYmVfbWVtb3J5X2Jsb2NrX3NpemUodm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQzMy1cdC8qIElmIG1lbW9yeSBibG9jayBzaXplIGhhcyBiZWVuIHNldCwgdGhlbiB1c2UgaXQgKi9cbmFyY2gveDg2L21tL2luaXRfNjQuYzoxNDM0Olx0YnogPSBzZXRfbWVtb3J5X2Jsb2NrX3NpemU7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQzNS1cdGlmIChieilcbi0tXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM9NDU9aW50IGlvcmVtYXBfY2hhbmdlX2F0dHIodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBzaXplLFxuLS1cbmFyY2gveDg2L21tL2lvcmVtYXAuYy01My1cdGRlZmF1bHQ6XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NTQ6XHRcdGVyciA9IF9zZXRfbWVtb3J5X3VjKHZhZGRyLCBucnBhZ2VzKTtcbmFyY2gveDg2L21tL2lvcmVtYXAuYy01NS1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNTYtXHRjYXNlIF9QQUdFX0NBQ0hFX01PREVfV0M6XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NTc6XHRcdGVyciA9IF9zZXRfbWVtb3J5X3djKHZhZGRyLCBucnBhZ2VzKTtcbmFyY2gveDg2L21tL2lvcmVtYXAuYy01OC1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNTktXHRjYXNlIF9QQUdFX0NBQ0hFX01PREVfV1Q6XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NjA6XHRcdGVyciA9IF9zZXRfbWVtb3J5X3d0KHZhZGRyLCBucnBhZ2VzKTtcbmFyY2gveDg2L21tL2lvcmVtYXAuYy02MS1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNjItXHRjYXNlIF9QQUdFX0NBQ0hFX01PREVfV0I6XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NjM6XHRcdGVyciA9IF9zZXRfbWVtb3J5X3diKHZhZGRyLCBucnBhZ2VzKTtcbmFyY2gveDg2L21tL2lvcmVtYXAuYy02NC1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM9NTc9c3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzbnBfbWVtY3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgc3osXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNjYtXHRcdCAqL1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM6Njc6XHRcdGVhcmx5X3NucF9zZXRfbWVtb3J5X3NoYXJlZCgodW5zaWduZWQgbG9uZylfX3ZhKHBhZGRyKSwgcGFkZHIsIG5wYWdlcyk7XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy02OC1cbi0tXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy03MS1cdFx0LyogUmVzdG9yZSB0aGUgcGFnZSBzdGF0ZSBhZnRlciB0aGUgbWVtY3B5LiAqL1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM6NzI6XHRcdGVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUoKHVuc2lnbmVkIGxvbmcpX192YShwYWRkciksIHBhZGRyLCBucGFnZXMpO1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNzMtXHR9IGVsc2Uge1xuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jPTI4Nj1zdGF0aWMgaW50IGFtZF9lbmNfc3RhdHVzX2NoYW5nZV9wcmVwYXJlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBucGFnZXMsIGJvb2wgZW5jKVxuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTI5Mi1cdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9HVUVTVF9TRVZfU05QKSBcdTAwMjZcdTAwMjYgIWVuYylcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjI5MzpcdFx0c25wX3NldF9tZW1vcnlfc2hhcmVkKHZhZGRyLCBucGFnZXMpO1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMjk0LVxuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jPTI5OT1zdGF0aWMgaW50IGFtZF9lbmNfc3RhdHVzX2NoYW5nZV9maW5pc2godW5zaWduZWQgbG9uZyB2YWRkciwgaW50IG5wYWdlcywgYm9vbCBlbmMpXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzA1LVx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NFVl9TTlApIFx1MDAyNlx1MDAyNiBlbmMpXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzozMDY6XHRcdHNucF9zZXRfbWVtb3J5X3ByaXZhdGUodmFkZHIsIG5wYWdlcyk7XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zMDctXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM9MzU4PXN0YXRpYyB2b2lkIF9faW5pdCBfX3NldF9jbHJfcHRlX2VuYyhwdGVfdCAqa3B0ZSwgaW50IGxldmVsLCBib29sIGVuYylcbi0tXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zNzgtXHRcdCAqL1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM6Mzc5Olx0XHRlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQoKHVuc2lnbmVkIGxvbmcpX192YShkLnBhKSwgZC5wYSwgMSk7XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zODAtXHR9XG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzg4LVx0aWYgKGVuYylcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM0MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFdeWCBWaW9sYXRpb24gRGV0ZWN0aW9uIGluIHNldF9tZW1vcnkuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgYHNldF9tZW1vcnkuY2AgZmlsZSBhbmQsIHNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9ucyBsaWtlIGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBhbmQgb3RoZXJzLiBXaGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGNhbGxlZD8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGVpciB1c2FnZS4KCkkgcmVjYWxsIEJQRiBKSVQsIGZ0cmFjZSwgdGhlIG1vZHVsZSBsb2FkZXIg4oCTIHRoZXkgYWxsIG1hbmlwdWxhdGUgbWVtb3J5IHBlcm1pc3Npb25zLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSByZWxldmFudCBmdW5jdGlvbnM6IGBtb2R1bGVfZW5hYmxlX3JvKClgLCBgbW9kdWxlX2VuYWJsZV9ueCgpYCwgYGJwZl9qaXRfYmluYXJ5X2xvY2tfcm8oKWAsIGFuZCBgYnBmX3Byb2dfbG9ja19ybygpYC4gS3Byb2JlcyBhbHNvIGNvbWUgdG8gbWluZCB3aXRoIGBhbGxvY19pbnNuX3BhZ2UoKWAgYW5kIGl0cyBpbXBsaWNhdGlvbnMgb24gc2V0dGluZyByZWFkLW9ubHkvcmVhZC13cml0ZSBwZXJtaXNzaW9ucy4gTGV0JiMzOTtzIG5vdCBmb3JnZXQgYC9kZXYvbWVtYCBhbmQgYGlvcmVtYXBgIHdoaWNoIGNvdWxkIGJlIHJlbGV2YW50IHRvby4gSSBuZWVkIHRvIGtlZXAgdGhlc2UgaW4gbWluZCBhcyBwb3RlbnRpYWwgY2FsbCBzaXRlcy4KCk5vdywgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgcGF0Y2ggaXRzZWxmLCBJIHNob3VsZCBleGFtaW5lIHRoZSBgZ2l0IHNob3dgIG91dHB1dCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlIGludHJvZHVjZXMgYSB3YXJuaW5nIGFib3V0IFdeWCB2aW9sYXRpb25zIHdpdGhpbiB0aGUgYHZlcmlmeV9yd3hgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYSBgcHJfd2Fybl9vbmNlYCBjYWxsLgoKSSBjYXJlZnVsbHkgZXhhbWluZSB0aGUgYHZlcmlmeV9yd3hgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBjaGVjayBmb3IgY2hhbmdlcyB0aGF0IGNvdWxkIHZpb2xhdGUgdGhlIFdyaXRlIFhPUiBFeGVjdXRlIChXXlgpIHByaW5jaXBsZS4gSXQgaGFzIHNvbWUgY29uZGl0aW9ucyByZWxhdGVkIHRvIHRoZSBhcmNoaXRlY3R1cmUgKDMyLWJpdCBzcGVjaWZpY2FsbHkpIGFuZCBOWCBzdXBwb3J0LiBJIGNhbiBzZWUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIFdeWCBjaGVjaywgbG9va2luZyBhdCB0aGUgb2xkIGFuZCBuZXcgcGFnZSBwcm90ZWN0aW9uIGZsYWdzLgoKQWhhISBOb3cgSSBzZWUgYSBjcnVjaWFsIGRldGFpbDogdGhlcmUgYXJlIHR3byBgcHJfd2Fybl9vbmNlYCBjYWxscyBpbiB0aGUgY29kZS4gT25lIGlzIGNvbmRpdGlvbmFsIG9uIGAha2VybmVsX3NldF90b19yZWFkb25seWAgYW5kIHRoZSBvdGhlciBpcyB1bmNvbmRpdGlvbmFsLiBNeSBhdHRlbnRpb24gaXMgbm93IGRyYXduIHRvIHRoZSBmaXJzdCBhcmd1bWVudCBvZiBgcHJfd2Fybl9vbmNlYC4gSXMgaXQgYSBjb25kaXRpb24sIG9yIGlzIGl0IHBhcnQgb2YgdGhlIGZvcm1hdCBzdHJpbmc/IFRoYXQmIzM5O3MgYSBjbGFzc2ljIGdvdGNoYSEgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB3aGF0IHRoYXQgZmlyc3QgYXJndW1lbnQgaXMgZG9pbmcuIExldCYjMzk7cyBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgcHJfd2Fybl9vbmNlYCEgSSBuZWVkIHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGxvZ2dpbmcgYmVoYXZpb3IgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBwcl93YXJuX29uY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jZXBoL2NlcGhfZGVidWcuaC01OS1cdFx0Y2xpZW50LVx1MDAzZW1vbmMuYXV0aC1cdTAwM2VnbG9iYWxfaWQsICMjX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L2NlcGgvY2VwaF9kZWJ1Zy5oOjYwOiNkZWZpbmUgcHJfd2Fybl9vbmNlX2NsaWVudChjbGllbnQsIGZtdCwgLi4uKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvY2VwaC9jZXBoX2RlYnVnLmgtNjEtXHRwcl93YXJuX29uY2UoXCYjMzQ7WyVwVSAlbGx1XTogXCYjMzQ7IGZtdCwgXHUwMDI2Y2xpZW50LVx1MDAzZWZzaWQsXHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oPTQwNz1zdHJ1Y3QgcGlfZW50cnkge1xuLS1cbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjY3LVx0cHJpbnRrX29uY2UoS0VSTl9FUlIgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oOjY2ODojZGVmaW5lIHByX3dhcm5fb25jZShmbXQsIC4uLilcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjY5LVx0cHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuaD00MTc9ZXh0ZXJuIHUzMiBzdHJpbmdfdG9fYXZfcGVybShzdHJ1Y3QgcG9saWN5ZGIgKnAsIHUxNiB0Y2xhc3MsIGNvbnN0IGNoYXIgKm5hbWUpO1xuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5oLTQxOC1cbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuaDo0MTk6I2RlZmluZSBwcl93YXJuX29uY2VfcG9saWN5bG9hZChwb2xpY3ksIGZtdCwgLi4uKSAgICBcXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5oLTQyMC1cdGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9jdXN0b20uaD0xMj1leHRlcm4gdW5zaWduZWQgbG9uZyBkYWNfbW1hcF9taW5fYWRkcjtcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2N1c3RvbS5oLTIzLSAqL1xudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9jdXN0b20uaDoyNDojZGVmaW5lIHByX3dhcm5fb25jZSBwcl9lcnJcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvY3VzdG9tLmgtMjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNjkyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBCdWcgRGlzY292ZXJ5OiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBoZWFkIGFzIEkgYW5hbHl6ZSB0aGlzOiBJJiMzOTttIHN0YXJpbmcgYXQgdGhpcyBgcHJfd2Fybl9vbmNlKDEsICYjMzQ7Q1BBIGRldGVjdGVkLi4uJiMzNDspYCBhbmQgc29tZXRoaW5nIGluc3RhbnRseSBzY3JlYW1zICYjMzQ7d3JvbmchJiMzNDsgVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBjbGVhcmx5IGluZGljYXRlcyB0aGUgZmlyc3QgcGFyYW1ldGVyIHNob3VsZCBiZSB0aGUgZm9ybWF0IHN0cmluZywgbm90IGEgbnVtZXJpY2FsIHZhbHVlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXYWl0LCBgcHJfd2Fybl9vbmNlKGZtdCwgLi4uKWAgdGFrZXMgYGZtdGAgZmlyc3QhJiMzNDssIHRoZW4gSSBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIGBXQVJOX09OQ0UoY29uZGl0aW9uLCBmbXQsIC4uLilgIHdoaWNoIHRha2VzIHRoZSAqY29uZGl0aW9uKiBmaXJzdC4gSXQmIzM5O3MgbGlrZSBkZWphIHZ1LgoKSW4gdGhpcyBzcGVjaWZpYyBwYXRjaCwgaXQmIzM5O3MgY2FsbGluZyBgcHJfd2Fybl9vbmNlKDEsICYjMzQ7Q1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLSZndDsgLi4uJiMzNDssIC4uLilgIGFuZCB0aGUgZmlyc3QgYXJndW1lbnQgKmlzKiBqdXN0IHRoZSBudW1iZXIgYDFgIHdoaWNoIGlzIGJlaW5nIGludGVycHJldGVkIGFzIGEgcG9pbnRlciwgc3BlY2lmaWNhbGx5IGAoY29uc3QgY2hhciAqKTFgLCBvciwgZXNzZW50aWFsbHksIE5VTEwgcGx1cyBvbmUhIFRoaXMgaXMgd2hlbiB0aGUgYWxhcm0gYmVsbHMgZ28gb2ZmLgoKV2hlbiBgcHJfd2Fybl9vbmNlKDEsIC4uLilgIGlzIGludm9rZWQsIGBmbXRgIGlzIGJlaW5nIHNldCB0byBgKGNoYXIgKikxYC4gVGhhdCBtZWFucywgdWx0aW1hdGVseSwgd2UmIzM5O3JlIHRyeWluZyB0byBkZXJlZmVyZW5jZSB0aGUgYWRkcmVzcyBgMHgwMDAwMDAwMWAhIFRoaXMgaXMgZ29pbmcgdG8gY2F1c2UgYSBrZXJuZWwgb29wcywgYSBwYWdlIGZhdWx0LCBiZWNhdXNlIGl0JiMzOTtzIGFjY2Vzc2luZyBhbiBpbnZhbGlkIG1lbW9yeSBsb2NhdGlvbiEgSE9MWSBDT1csIHRoYXQmIzM5O3MgYSBzZXJpb3VzIGJ1ZyEgVGhlIGF1dGhvciBhcHBlYXJzIHRvIGhhdmUgY29waWVkIGBXQVJOX09OQ0UoMSwgJiMzNDsuLi4mIzM0OylgIGFuZCBzaW1wbHkgY2hhbmdlZCBgV0FSTl9PTkNFYCB0byBgcHJfd2Fybl9vbmNlYCwgd2l0aG91dCByZW1vdmluZyB0aGUgY29uZGl0aW9uYWwgYDFgISBUaGV5JiMzOTtyZSBwYXNzaW5nIGAxYCBhcyBhIGZvcm1hdCBzdHJpbmcgd2hlbiBpdCBzaG91bGQgYmUgYCYjMzQ7Q1BBIGRldGVjdGVkLi4uJiMzNDtgLgoKRXNzZW50aWFsbHksIGlmIGAha2VybmVsX3NldF90b19yZWFkb25seWAgYW5kIGB2ZXJpZnlfcnd4YCBkZXRlY3RzIGEgV15YIHZpb2xhdGlvbiwgY2FsbGluZyBgcHJfd2Fybl9vbmNlKDEsIC4uLilgIHBhc3NlcyBpbnRlZ2VyIDEgYXMgcG9pbnRlciB0byBmb3JtYXQgc3RyaW5nIGludG8gYHByaW50a19vbmNlYCAtJmd0OyBgdnByaW50a19zdG9yZWAgLSZndDsgcGFnZSBmYXVsdCEgVGhpcyBpcyBnb2luZyB0byBjcmFzaCB0aGUga2VybmVsIGluIHRoZSB3b3JzdCB3YXkuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHJlYWNoYWJsZSB0aGlzIGFjdHVhbGx5IGlzLiBXaGVuIGRvZXMgYHZlcmlmeV9yd3hgIGdldCBjYWxsZWQgd2hlbiBgIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgPyBUaGUgcG9zc2liaWxpdGllcyBJIGNhbiBzZWUgYXJlOgoKMS4gIEVhcmx5IGJvb3QgYmVmb3JlIGBtYXJrX3JvZGF0YV9ybygpYCBpcyBjYWxsZWQuCjIuICBXaGVuIGJvb3Rpbmcgd2l0aCBgcm9kYXRhPW9mZmAgb3IgaWYgYENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWGAgaXMgZGlzYWJsZWQuIEluIHRoYXQgY2FzZSwgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIHdvdWxkIHJlbWFpbiAwLgoKSWYgYHJvZGF0YT1vZmZgLCBga2VybmVsX3NldF90b19yZWFkb25seWAgc3RheXMgMCBmb3IgdGhlIGVudGlyZSBsaWZldGltZSBvZiB0aGUgc3lzdGVtIQoKQXQgcnVudGltZSwgYW55IEJQRiBwcm9ncmFtIGxvYWQsIG1vZHVsZSBsb2FkLCBmdHJhY2UgdHJhbXBvbGluZSBjcmVhdGlvbiwga3Byb2JlLCBvciBhbnkgdXNlci10cmlnZ2VyZWQgc3lzY2FsbCB0aGF0IGNoYW5nZXMgcGFnZSBwZXJtaXNzaW9ucyBjYW4gY2FsbCBgdmVyaWZ5X3J3eCgpYC4gSWYgYSBXXlggY2hhbmdlIGlzIGRldGVjdGVkIGJ5IGB2ZXJpZnlfcnd4KClgIChlLmcuIHNldHRpbmcgUlcgb24gYW4gZXhlY3V0YWJsZSBwYWdlIG9yIFggb24gYSB3cml0YWJsZSBwYWdlKSwgYCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBpcyB0cnVlIGFuZCBpdCBleGVjdXRlcyBgcHJfd2Fybl9vbmNlKDEsIC4uLilgIHdoaWNoIGNyYXNoZXMgdGhlIGtlcm5lbCBiZWNhdXNlIHRoZSBmb3JtYXQgc3RyaW5nIGlzIHJlYWxseSBgKGNoYXIgKikweDFgIQoKTGV0IG1lIG1ha2Ugc3VyZSB0aGlzIGNoZWNrcyBvdXQuIFdoYXQgZG9lcyBgcHJfd2Fybl9vbmNlYCBhY3R1YWxseSBleHBhbmQgdG8/IEkgbmVlZCB0byBjaGVjayBgaW5jbHVkZS9saW51eC9wcmludGsuaGA6CgpgYGBjCiNkZWZpbmUgcHJfd2Fybl9vbmNlKGZtdCwgLi4uKQkJCQkJXAoJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQpgYGAKCldhaXQsIGBwcl9mbXQoMSlgIGJlY29tZXMgYDFgLiBUaGVuIGBwcmludGtfb25jZShLRVJOX1dBUk5JTkcgMSwgLi4uKWAuLi4gZG9lcyB0aGlzIGV2ZW4gY29tcGlsZT8gYEtFUk5fV0FSTklOR2AgYmVjb21lcyBgJiMzNDtcMDAxJiMzNDsgJiMzNDs0JiMzNDtgIHdoaWNoIGNvbXBpbGVzIGFzIHN0cmluZyBjb25jYXRlbmF0aW9uLiBCdXQgYEtFUk5fV0FSTklORyAxYCBhdHRlbXB0cyB0byBjb25jYXRlbmF0ZSBzdHJpbmcgd2l0aCBpbnRlZ2VyLCB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IhIFdoeSBkaWQgaXQgY29tcGlsZT8gSSBuZWVkIHRvIGV4YW1pbmUgaG93IGBwcl9mbXRgIGlzIGRlZmluZWQuIEkgc2hvdWxkIGxvb2sgaW4gYHNldF9tZW1vcnkuY2Agb3IgY2hlY2sgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ByX2ZtdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQ0NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvbnN0cnVjdGluZyB0aGUgV2FybmluZyBNZXNzYWdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgd2FybmluZyBpcyBvcmlnaW5hdGluZywgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUuIEZpcnN0LCBJJiMzOTttIGNoZWNraW5nIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgdGhpbmtpbmcgdGhhdCYjMzk7cyBhIGxpa2VseSBzcG90IGZvciBtZW1vcnktcmVsYXRlZCB3YXJuaW5ncy4gQW5kLCBub3BlLCBubyBgcHJfZm10KGZtdClgIG1hY3JvIGRlZmluZWQgdGhlcmUuIFJpZ2h0LCBzbywgaW4gKnRoaXMqIGNvbnRleHQsIGBwcl9mbXQoZm10KWAgaXMganVzdCByZXNvbHZpbmcgdG8gYGZtdGAuIFNpbXBsZSBlbm91Z2guCgpUaGVuIEkgc2VlIGBwcl93YXJuX29uY2UoMSwgLi4uKWAuIEV4cGFuZGluZyB0aGF0LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBtYWNyb3Mgd29yaywgbGVhZHMgbWUgdG8gYHByaW50a19vbmNlKEtFUk5fV0FSTklORyAxLCAuLi4pYC4gQWgsIGBwcmludGtfb25jZWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gV2hlcmUgaXMgKnRoYXQqIGRlZmluZWQ/IEkgbmVlZCB0byBjaGVjayBgaW5jbHVkZS9saW51eC9wcmludGsuaGAuIEdvdHRhIHNlZSB0aGUgZXhhY3QgZGVmaW5pdGlvbiBvZiBgcHJpbnRrX29uY2VgIHRvIGZ1bGx5IGdyYXNwIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8ga25vdyBob3cgdGhlICYjMzQ7b25jZSYjMzQ7IGFzcGVjdCBpcyBpbXBsZW1lbnRlZCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvZiB0aGUgd2FybmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBwcmludGtfb25jZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3ByaW50ay5oPTQwNz1zdHJ1Y3QgcGlfZW50cnkge1xuLS1cbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjQ4LSNpZmRlZiBDT05GSUdfUFJJTlRLXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oOjY0OTojZGVmaW5lIHByaW50a19vbmNlKGZtdCwgLi4uKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wcmludGsuaC02NTAtXHRET19PTkNFX0xJVEUocHJpbnRrLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxuaW5jbHVkZS9saW51eC9wcmludGsuaC02NTMtI2Vsc2VcbmluY2x1ZGUvbGludXgvcHJpbnRrLmg6NjU0OiNkZWZpbmUgcHJpbnRrX29uY2UoZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY1NS1cdG5vX3ByaW50ayhmbXQsICMjX19WQV9BUkdTX18pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyOTc1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgTG9nZ2luZyBJc3N1ZSoqCgpBbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjaGVjayBvdXQgdGhpcyBgRE9fT05DRV9MSVRFYCBtYWNyby4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGggYHByaW50a2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZyBpbXBvcnRhbnQuIGBET19PTkNFX0xJVEUocHJpbnRrLCBLRVJOX1dBUk5JTkcgMSwgLi4uKWAuLi53YWl0IGEgc2Vjb25kLiBUaGF0IGBLRVJOX1dBUk5JTkcgMWAgbG9va3Mgd3JvbmcuIEluIHN0YW5kYXJkIEMgc3ludGF4LCB0aGF0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYSBzeW50YXggZXJyb3IgdW5sZXNzIHNvbWV0aGluZyBmdW5reSBpcyBoYXBwZW5pbmcgd2l0aCBob3cgYEtFUk5fV0FSTklOR2AgaXMgZGVmaW5lZC4gU29tZXRoaW5nIGlzIG1ha2luZyBtZSB0aGluayB0aGF0IGl0IGlzIG5vdCBiZWluZyBwcm9wZXJseSBwcmVmaXhlZC4KCk9rYXksIGxldCYjMzk7cyBwYXVzZSBhbmQgaW52ZXN0aWdhdGUgYEtFUk5fV0FSTklOR2AgdG8gc2VlIHdoYXQgaXMgZ29pbmcgb24uIEkga25vdyB0aGlzIGlzIGdvaW5nIHRvIGJlIGluIGFuIGluY2x1ZGUgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgaW5jbHVkZS9saW51eC9rZXJuX2xldmVscy5oYCB0byBzZWUgZXhhY3RseSBob3cgdGhhdCBpcyBkZWZpbmVkIGFuZCB3aGF0IGl0IGlzIG1lYW50IHRvIHJlcHJlc2VudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S0VSTl9XQVJOSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rZXJuX2xldmVscy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2Vybl9sZXZlbHMuaC0xMS0jZGVmaW5lIEtFUk5fRVJSXHRLRVJOX1NPSCBcJiMzNDszXCYjMzQ7XHQvKiBlcnJvciBjb25kaXRpb25zICovXG5pbmNsdWRlL2xpbnV4L2tlcm5fbGV2ZWxzLmg6MTI6I2RlZmluZSBLRVJOX1dBUk5JTkdcdEtFUk5fU09IIFwmIzM0OzRcJiMzNDtcdC8qIHdhcm5pbmcgY29uZGl0aW9ucyAqL1xuaW5jbHVkZS9saW51eC9rZXJuX2xldmVscy5oLTEzLSNkZWZpbmUgS0VSTl9OT1RJQ0VcdEtFUk5fU09IIFwmIzM0OzVcJiMzNDtcdC8qIG5vcm1hbCBidXQgc2lnbmlmaWNhbnQgY29uZGl0aW9uICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDA3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyBgS0VSTl9XQVJOSU5HYCBpcyBkZWZpbmVkIGFzIGAmIzM0O1wwMDEmIzM0OyAmIzM0OzQmIzM0O2AuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcmVkIGZsYWcuIGBLRVJOX1dBUk5JTkcgMWAgZXhwYW5kcyB0byBgJiMzNDtcMDAxJiMzNDsgJiMzNDs0JiMzNDsgMWAsIHdoaWNoIGlzIG9idmlvdXNseSBhIEMgY29tcGlsZXIgc3ludGF4IGVycm9yLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgc3VzcGljaW9uIOKAkyB0aGUgcGF0Y2ggYXV0aG9yIGVpdGhlciBkaWRuJiMzOTt0IHRlc3QgdGhpcyBwcm9wZXJseSwgb3IgYSBidWcgd2FzIGludHJvZHVjZWQhIFRoaXMgaXMgYSBnb29kIHNpZ24sIGFuZCBpdCBtZWFucyB3ZSBuZWVkIHRvIGRpZyBkZWVwZXIuCgpUaGUgY2hhbmdlcyBhcmUgd2l0aGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgd2hpY2gsIGFzIEkga25vdywgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtIChDaGFuZ2UgUGFnZSBBdHRyaWJ1dGVzLCBvciBDUEEpLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBicmVhayBpdCBkb3duOgoKMS4gICoqQ29yZSBTdWJzeXN0ZW06KiogYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGlzIGRlZmluaXRlbHkgYSBjb3JlIHN1YnN5c3RlbSwgZGVhbGluZyBkaXJlY3RseSB3aXRoIHg4NiBtZW1vcnkgbWFuYWdlbWVudC4gQ2hlY2suCjIuICAqKlJlYWNoYWJsZToqKiBZZXMsIENQQSBpcyByZWFjaGFibGUgdGhyb3VnaCBhIG11bHRpdHVkZSBvZiBzeXNjYWxscyBhbmQga2VybmVsIG9wZXJhdGlvbnMgb24gYW1kNjQgc3lzdGVtcy4gVGhpbmdzIGxpa2UgQlBGIEpJVCwgbW9kdWxlIGxvYWRpbmcvdW5sb2FkaW5nLCB0cmFjZXBvaW50cy9rcHJvYmVzLCBhbmQgdGhlIGBzZXRfbWVtb3J5XypgIGNhbGxlcnMsIGFsbCBjYW4gcG90ZW50aWFsbHkgdHJpZ2dlciBpc3N1ZXMuIENoZWNrLgozLiAgKipEZWZlbnNpdmUgQ2hlY2tzOioqIFRoZSBwYXRjaCBtb2RpZmllcyBkZWZlbnNpdmUgY2hlY2tzIGFuZCBXXlggdmlvbGF0aW9uIHZlcmlmaWNhdGlvbiBsb2dpYyBpbiBgdmVyaWZ5X3J3eCgpYC4gQ2hlY2suCgpDb25zaWRlcmluZyB0aGUgY3JpdGVyaWEgZnJvbSB0aGUgaW5zdHJ1Y3Rpb25zIChTZWN0aW9uIDMpLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgYSBzdHJvbmcgY2FuZGlkYXRlOgoqICAgTWVtb3J5IG1hbmFnZW1lbnQgbW9kaWZpY2F0aW9ucyBhcmUgYSBnby4KKiAgIFRoZSBtb2RpZmljYXRpb24gaXMgYWx0ZXJpbmcgZGVmZW5zaXZlIGNoZWNrcyBpbiByZWFjaGFibGUgcGF0aHMuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRpdmVseSBgdHJ1ZWAuCgpOb3cgbGV0JiMzOTtzIGRldGVybWluZSB0aGUgRm9jdXNTeW1ib2xzLgoKSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIHN5bWJvbHMgdG8gZm9jdXMgb24gZHVyaW5nIGZ1enppbmcuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBmdW5jdGlvbnMgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIHRoYXQgYXJlIGNhbGxlZCBvciBpbnZvbHZlZC4gSXQgc2VlbXMgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGlzIHRoZSByaWdodCBwbGFjZSB0byBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHNldF9tZW1vcnlfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxOTQ9aW50IF9zZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIwNi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjIwNzppbnQgc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIwOC17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjMyPWludCBfc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNDctXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyNDg6aW50IHNldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNDkte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjI3MT1pbnQgX3NldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjc3LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjc4OmludCBzZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjc5LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzMjk9RVhQT1JUX1NZTUJPTF9HUEwoY2xlYXJfbWNlX25vc3BlYyk7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzMxLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzMyOmludCBzZXRfbWVtb3J5X3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzMte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzOS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM0MDppbnQgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0MS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzQ3LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQ4OmludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzQ5LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNTItXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNTM6aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzU0LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjMtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNjQ6aW50IHNldF9tZW1vcnlfcncodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjUte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2OC1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2OTppbnQgc2V0X21lbW9yeV9ucCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3MC17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzczLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzc0OmludCBzZXRfbWVtb3J5X25wX25vYWxpYXModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNzUte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4MC1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM4MTppbnQgc2V0X21lbW9yeV9wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzgyLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODUtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzODY6aW50IHNldF9tZW1vcnlfNGsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODcte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5Mi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM5MzppbnQgc2V0X21lbW9yeV9ub25nbG9iYWwodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTQte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5OC1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM5OTppbnQgc2V0X21lbW9yeV9nbG9iYWwodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDAte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjQ5NT1zdGF0aWMgaW50IF9fc2V0X21lbW9yeV9lbmNfZGVjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLCBib29sIGVuYylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MTAtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MTE6aW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTEyLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1MTU9RVhQT1JUX1NZTUJPTF9HUEwoc2V0X21lbW9yeV9lbmNyeXB0ZWQpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTE2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTE3OmludCBzZXRfbWVtb3J5X2RlY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUxOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTA3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsIFNpdGVzIG9mIGB2ZXJpZnlfcnd4YCoqCgpPa2F5LCBzbyBgdmVyaWZ5X3J3eGAgaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLCB3aGljaCBpcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gIEkgaW1tZWRpYXRlbHkgbm90ZSBpdCYjMzk7cyBkZWZpbmVkIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2Ugd2l0aGluIHRoYXQgZmlsZS4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBpbmxpbmUgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IGNhbGxlZCBhIGZldyB0aW1lcyBpbiBzdHJhdGVnaWNhbGx5IHBsYWNlZCBzcG90cy4gTXkgaW1tZWRpYXRlIHByaW9yaXR5IGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHZlcmlmeV9yd3hgIGdldHMgaW52b2tlZC4gVGhhdCB3aWxsIGluZm9ybSBpdHMgcHVycG9zZS4gSSYjMzk7bGwgZm9jdXMgbXkgc2VhcmNoIG9uIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIG51bWJlcnMgMTA2NyBhbmQgMTg4Mi4gSSBleHBlY3QgdG8gc2VlIHRoZSBjYWxscyB0aGVyZSwgd2hpY2ggc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIHJvbGUgb2YgYHZlcmlmeV9yd3hgIGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2MDpcdFx0LypcbjEwNjE6XHRcdCAqIENoZWNrIHdoZXRoZXIgdGhlIHJlcXVlc3RlZCBwZ3Byb3QgaXMgY29uZmxpY3Rpbmcgd2l0aCBhIHN0YXRpY1xuMTA2MjpcdFx0ICogcHJvdGVjdGlvbiByZXF1aXJlbWVudCBpbiB0aGUgbGFyZ2UgcGFnZS5cbjEwNjM6XHRcdCAqL1xuMTA2NDpcdFx0bmV3X3Byb3QgPSBzdGF0aWNfcHJvdGVjdGlvbnMocmVxX3Byb3QsIGxwYWRkciwgb2xkX3BmbiwgbnVtcGFnZXMsXG4xMDY1Olx0XHRcdFx0XHQgICAgICBwc2l6ZSwgQ1BBX0RFVEVDVCk7XG4xMDY2Olx0XG4xMDY3Olx0XHRuZXdfcHJvdCA9IHZlcmlmeV9yd3gob2xkX3Byb3QsIG5ld19wcm90LCBscGFkZHIsIG9sZF9wZm4sIG51bXBhZ2VzLFxuMTA2ODpcdFx0XHRcdCAgICAgIG54LCBydyk7XG4xMDY5Olx0XG4xMDcwOlx0XHQvKlxuMTA3MTpcdFx0ICogSWYgdGhlcmUgaXMgYSBjb25mbGljdCwgc3BsaXQgdGhlIGxhcmdlIHBhZ2UuXG4xMDcyOlx0XHQgKlxuMTA3MzpcdFx0ICogVGhlcmUgdXNlZCB0byBiZSBhIDRrIHdpc2UgZXZhbHVhdGlvbiB0cnlpbmcgcmVhbGx5IGhhcmQgdG9cbjEwNzQ6XHRcdCAqIHByZXNlcnZlIHRoZSBsYXJnZSBwYWdlcywgYnV0IGV4cGVyaW1lbnRhdGlvbiBoYXMgc2hvd24sIHRoYXQgdGhpc1xuMTA3NTpcdFx0ICogZG9lcyBub3QgaGVscCBhdCBhbGwuIFRoZXJlIG1pZ2h0IGJlIGNvcm5lciBjYXNlcyB3aGljaCB3b3VsZFxuMTA3NjpcdFx0ICogcHJlc2VydmUgb25lIGxhcmdlIHBhZ2Ugb2NjYXNpb25hbGx5LCBidXQgaXQmIzM5O3MgcmVhbGx5IG5vdCB3b3J0aCB0aGVcbjEwNzc6XHRcdCAqIGV4dHJhIGNvZGUgYW5kIGN5Y2xlcyBmb3IgdGhlIGNvbW1vbiBjYXNlLlxuMTA3ODpcdFx0ICovXG4xMDc5Olx0XHRpZiAocGdwcm90X3ZhbChyZXFfcHJvdCkgIT0gcGdwcm90X3ZhbChuZXdfcHJvdCkpXG4xMDgwOlx0XHRcdHJldHVybiAxO1xuMTA4MTpcdFxuMTA4MjpcdFx0LyogQWxsIGNoZWNrcyBwYXNzZWQuIFVwZGF0ZSB0aGUgbGFyZ2UgcGFnZSBtYXBwaW5nLiAqL1xuMTA4MzpcdFx0bmV3X3B0ZSA9IHBmbl9wdGUob2xkX3BmbiwgbmV3X3Byb3QpO1xuMTA4NDpcdFx0X19zZXRfcG1kX3B0ZShrcHRlLCBhZGRyZXNzLCBuZXdfcHRlKTtcbjEwODU6XHRcdGNwYS1cdTAwM2VmbGFncyB8PSBDUEFfRkxVU0hUTEI7XG4xMDg2Olx0XHRjcGFfaW5jX2xwX3ByZXNlcnZlZChsZXZlbCk7XG4xMDg3Olx0XHRyZXR1cm4gMDtcbjEwODg6XHR9XG4xMDg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzM0CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gTWVtb3J5IEF0dHJpYnV0ZSBUYWJsZSAoUEFUKSBCZWhhdmlvcioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBzaGVuYW5pZ2FucywgYW5kIHRoZSBQQVQgaXMgcHJvYmFibHkgaW52b2x2ZWQuIE15IGluaXRpYWwgaHVuY2ggaXMgdG8gdGFrZSBhIGxvb2sgYXQgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCBzcGVjaWZpY2FsbHkgbGluZSAxODgyLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBzZXQgbWVtb3J5IG9wZXJhdGlvbiByZWxhdGVkIHRvIHRoZSBQQVQgdGhhdCBJIHdhbnQgdG8gaW52ZXN0aWdhdGUsIGxpa2VseSBpbnZvbHZpbmcgaG93IG1lbW9yeSBhdHRyaWJ1dGVzIGFyZSBiZWluZyBzZXQuIEdpdmVuIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBQQVQgYW5kIGl0cyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIGNhY2hpbmcsIHNvbWV0aGluZyBvbiB0aGlzIGxpbmUgd2lsbCBwcm9iYWJseSBnaXZlIHNvbWUgZ29vZCBjbHVlcyBvbiB3aGF0IG5lZWRzIGxvb2tpbmcgYXQuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB1cGRhdGluZyB0aGUgTVRSUiBvciBQQVQgZW50cmllcy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gY2hlY2tpbmcgdGhpcyBwYXJ0aWN1bGFyIHNwb3QgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODcwOlx0XHRcdHBncHJvdF90IG9sZF9wcm90ID0gcHRlX3BncHJvdChvbGRfcHRlKTtcbjE4NzE6XHRcdFx0cGdwcm90X3QgbmV3X3Byb3QgPSBwdGVfcGdwcm90KG9sZF9wdGUpO1xuMTg3MjpcdFx0XHR1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ob2xkX3B0ZSk7XG4xODczOlx0XG4xODc0Olx0XHRcdHBncHJvdF92YWwobmV3X3Byb3QpIFx1MDAyNj0gfnBncHJvdF92YWwoY3BhLVx1MDAzZW1hc2tfY2xyKTtcbjE4NzU6XHRcdFx0cGdwcm90X3ZhbChuZXdfcHJvdCkgfD0gcGdwcm90X3ZhbChjcGEtXHUwMDNlbWFza19zZXQpO1xuMTg3NjpcdFxuMTg3NzpcdFx0XHRjcGFfaW5jXzRrX2luc3RhbGwoKTtcbjE4Nzg6XHRcdFx0LyogSGFuZCBpbiBscHNpemUgPSAwIHRvIGVuZm9yY2UgdGhlIHByb3RlY3Rpb24gbWVjaGFuaXNtICovXG4xODc5Olx0XHRcdG5ld19wcm90ID0gc3RhdGljX3Byb3RlY3Rpb25zKG5ld19wcm90LCBhZGRyZXNzLCBwZm4sIDEsIDAsXG4xODgwOlx0XHRcdFx0XHRcdCAgICAgIENQQV9QUk9URUNUKTtcbjE4ODE6XHRcbjE4ODI6XHRcdFx0bmV3X3Byb3QgPSB2ZXJpZnlfcnd4KG9sZF9wcm90LCBuZXdfcHJvdCwgYWRkcmVzcywgcGZuLCAxLFxuMTg4MzpcdFx0XHRcdFx0ICAgICAgbngsIHJ3KTtcbjE4ODQ6XHRcbjE4ODU6XHRcdFx0bmV3X3Byb3QgPSBwZ3Byb3RfY2xlYXJfcHJvdG5vbmVfYml0cyhuZXdfcHJvdCk7XG4xODg2Olx0XG4xODg3Olx0XHRcdC8qXG4xODg4Olx0XHRcdCAqIFdlIG5lZWQgdG8ga2VlcCB0aGUgcGZuIGZyb20gdGhlIGV4aXN0aW5nIFBURSxcbjE4ODk6XHRcdFx0ICogYWZ0ZXIgYWxsIHdlJiMzOTtyZSBvbmx5IGdvaW5nIHRvIGNoYW5nZSBpdHMgYXR0cmlidXRlc1xuMTg5MDpcdFx0XHQgKiBub3QgdGhlIG1lbW9yeSBpdCBwb2ludHMgdG9cbjE4OTE6XHRcdFx0ICovXG4xODkyOlx0XHRcdG5ld19wdGUgPSBwZm5fcHRlKHBmbiwgbmV3X3Byb3QpO1xuMTg5MzpcdFx0XHRjcGEtXHUwMDNlcGZuID0gcGZuO1xuMTg5NDpcdFx0XHQvKlxuMTg5NTpcdFx0XHQgKiBEbyB3ZSByZWFsbHkgY2hhbmdlIGFueXRoaW5nID9cbjE4OTY6XHRcdFx0ICovXG4xODk3Olx0XHRcdGlmIChwdGVfdmFsKG9sZF9wdGUpICE9IHB0ZV92YWwobmV3X3B0ZSkpIHtcbjE4OTg6XHRcdFx0XHRzZXRfcHRlX2F0b21pYyhrcHRlLCBuZXdfcHRlKTtcbjE4OTk6XHRcdFx0XHRjcGEtXHUwMDNlZmxhZ3MgfD0gQ1BBX0ZMVVNIVExCO1xuMTkwMDpcdFx0XHR9XG4xOTAxOlx0XHRcdGNwYS1cdTAwM2VudW1wYWdlcyA9IDE7XG4xOTAyOlx0XHRcdHJldHVybiAwO1xuMTkwMzpcdFx0fVxuMTkwNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU3OAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gdGhlIFBhZ2UgQXR0cmlidXRlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gYHZlcmlmeV9yd3goKWAgcG9wcyB1cCBpbiB0d28ga2V5IHBsYWNlczogYF9fc2hvdWxkX3NwbGl0X2xhcmdlX3BhZ2VgIGFuZCBgX19jaGFuZ2VfcGFnZV9hdHRyYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVycGxheSBoZXJlLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZ3VhcmRpbmcgYWdhaW5zdCBzb21ldGhpbmcsIGxpa2VseSBhIGJhZCBwYWdlIHN0YXRlLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyAqdHJpZ2dlcmluZyogYF9fY2hhbmdlX3BhZ2VfYXR0cmAuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IHNlZW1zIHRvIGJlIHRoZSBwbGFjZSB3aGVyZSBwZXJtaXNzaW9ucyBhcmUgYWN0dWFsbHkgZ2V0dGluZyBtb2RpZmllZC4gSSBzaG91bGQgZXhhbWluZSB0aGUgY2FsbCBncmFwaCB0byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgYWxsIG9mIHRoZSB1c2UgY2FzZXMuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBleHBvc2UgdGhlIGNvbnRleHRzIGluIHdoaWNoIHRoZXNlIGF0dHJpYnV0ZXMgYXJlIGJlaW5nIGNoYW5nZWQsIGFuZCB0aGVyZWZvcmUsIHBvdGVudGlhbGx5IHdoZXJlIGB2ZXJpZnlfcnd4KClgIGlzIHByb3RlY3Rpbmcgc29tZXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2NoYW5nZV9wYWdlX2F0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MTgwNT1zdGF0aWMgaW50IF9fY3BhX3Byb2Nlc3NfZmF1bHQoc3RydWN0IGNwYV9kYXRhICpjcGEsIHVuc2lnbmVkIGxvbmcgdmFkZHIsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODQ5LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxODUwOnN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgcHJpbWFyeSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTg1MS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xOTI3LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxOTI4OnN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTkyOS1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE5MzM9c3RhdGljIGludCBjcGFfcHJvY2Vzc19hbGlhcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5NjMtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjE5NjQ6XHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmFsaWFzX2NwYSwgMCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5NjUtXHRcdGlmIChyZXQpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xOTk3LVx0XHQgKi9cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTk5ODpcdFx0X19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2YWxpYXNfY3BhLCAwKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTk5OS1cdH1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMDQtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIwMDU6c3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMDYte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjA1My1cdFx0XHRndWFyZChzcGlubG9jaykoXHUwMDI2Y3BhX2xvY2spO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDU0Olx0XHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cihjcGEsIHByaW1hcnkpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMDU1LVx0XHR9IGVsc2Uge1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDU2Olx0XHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cihjcGEsIHByaW1hcnkpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMDU3LVx0XHR9XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMDgzPXN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxMzgtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIxMzk6XHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZjcGEsIDEpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTQwLVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjQwOT1zdGF0aWMgaW50IF9fc2V0X21lbW9yeV9lbmNfcGd0YWJsZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgYm9vbCBlbmMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDM4LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDM5Olx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQ0MC1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI2MzY9c3RhdGljIGludCBfX3NldF9wYWdlc19wKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsIHVuc2lnbmVkIGludCBjcGFfZmxhZ3MpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjUxLVx0ICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2NTI6XHRyZXR1cm4gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY1My19XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjU1PXN0YXRpYyBpbnQgX19zZXRfcGFnZXNfbnAoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgdW5zaWduZWQgaW50IGNwYV9mbGFncylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NzAtXHQgKi9cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjY3MTpcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZjcGEsIDEpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjcyLX1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI3NDY9aW50IF9faW5pdCBrZXJuZWxfbWFwX3BhZ2VzX2luX3BnZChwZ2RfdCAqcGdkLCB1NjQgcGZuLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNzcwLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNzcxOlx0cmV0dmFsID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjc3Mi1cdF9fZmx1c2hfdGxiX2FsbCgpO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9Mjc4Mz1pbnQgX19pbml0IGtlcm5lbF91bm1hcF9wYWdlc19pbl9wZ2QocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjgwNS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjgwNjpcdHJldHZhbCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI4MDctXHRfX2ZsdXNoX3RsYl9hbGwoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk0MTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBzZXRfbWVtb3J5LmMgTW9kdWxlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYHZlcmlmeV9yd3hgLCBhbmQgSSBzZWUgaXQmIzM5O3MgYSBzdGF0aWMgaW5saW5lIHdpdGhpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIEdpdmVuIHRoYXQsIEkgd2FudCB0byBtYXAgb3V0IHRoZSByZWxldmFudCBzeW1ib2xzIHdpdGhpbiB0aGF0IGZpbGUgYW5kIGRldGVybWluZSB3aGljaCBvbmVzIGFyZSBleHBvcnRlZCAob3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMpIHRoYXQgY2FsbCBvciBpbmNsdWRlIGB2ZXJpZnlfcnd4YC4KClNvLCBmcm9tIHRoZSBsb29rcyBvZiBpdCB0aGUgcmVsZXZhbnQgc3ltYm9scyBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgYXJlOiBgX19jaGFuZ2VfcGFnZV9hdHRyYCwgYF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfbnhgLCBgc2V0X21lbW9yeV9yb3hgLCBgc2V0X21lbW9yeV91Y2AsIGBzZXRfbWVtb3J5X3djYCwgYHNldF9tZW1vcnlfd2JgLCBgc2V0X21lbW9yeV9ucGAsIGBzZXRfbWVtb3J5X3BgLCBgc2V0X21lbW9yeV80a2AsIGBzZXRfbWVtb3J5X2VuY3J5cHRlZGAsIGFuZCBgc2V0X21lbW9yeV9kZWNyeXB0ZWRgLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhvc2UgYXJlIGFjdHVhbGx5IGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIG9yIGZ1bmN0aW9ucyB0aGF0IGluY2x1ZGUgYHZlcmlmeV9yd3hgLiBNeSBpbW1lZGlhdGUgY2FuZGlkYXRlcyBhcmU6IGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfbnhgLCBgc2V0X21lbW9yeV9yb3hgLCBgc2V0X21lbW9yeV91Y2AsIGBzZXRfbWVtb3J5X3diYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGFuZCBgX19jaGFuZ2VfcGFnZV9hdHRyYC4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIG90aGVyIHNldHRpbmdzIHRoYXQgaW1wYWN0IGl0cyBpbmNsdXNpb24gb3IgYmVoYXZpb3IuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBgYXJjaC94ODYvbW0vTWFrZWZpbGVgIG9yIGBhcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGVgIHRvIGRvIHRoaXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9tZW1vcnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9pbml0LmMtMTEtXG5hcmNoL3g4Ni9tbS9pbml0LmM6MTI6I2luY2x1ZGUgXHUwMDNjYXNtL3NldF9tZW1vcnkuaFx1MDAzZVxuYXJjaC94ODYvbW0vaW5pdC5jLTEzLSNpbmNsdWRlIFx1MDAzY2FzbS9jcHVfZGV2aWNlX2lkLmhcdTAwM2Vcbi0tXG5hcmNoL3g4Ni9tbS9pbml0LmM9ODk3PXZvaWQgZnJlZV9pbml0X3BhZ2VzKGNvbnN0IGNoYXIgKndoYXQsIHVuc2lnbmVkIGxvbmcgYmVnaW4sIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmFyY2gveDg2L21tL2luaXQuYy05MjUtXHRcdGttZW1sZWFrX2ZyZWVfcGFydCgodm9pZCAqKWJlZ2luLCBlbmQgLSBiZWdpbik7XG5hcmNoL3g4Ni9tbS9pbml0LmM6OTI2Olx0XHRzZXRfbWVtb3J5X25wKGJlZ2luLCAoZW5kIC0gYmVnaW4pIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbmFyY2gveDg2L21tL2luaXQuYy05MjctXHR9IGVsc2Uge1xuLS1cbmFyY2gveDg2L21tL2luaXQuYy05MzItXHRcdCAqL1xuYXJjaC94ODYvbW0vaW5pdC5jOjkzMzpcdFx0c2V0X21lbW9yeV9ueChiZWdpbiwgKGVuZCAtIGJlZ2luKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5hcmNoL3g4Ni9tbS9pbml0LmM6OTM0Olx0XHRzZXRfbWVtb3J5X3J3KGJlZ2luLCAoZW5kIC0gYmVnaW4pIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbmFyY2gveDg2L21tL2luaXQuYy05MzUtXG4tLVxuYXJjaC94ODYvbW0vaW5pdC5jPTk0Nj12b2lkIGZyZWVfa2VybmVsX2ltYWdlX3BhZ2VzKGNvbnN0IGNoYXIgKndoYXQsIHZvaWQgKmJlZ2luLCB2b2lkICplbmQpXG4tLVxuYXJjaC94ODYvbW0vaW5pdC5jLTk2OS1cdGlmIChJU19FTkFCTEVEKENPTkZJR19YODZfNjQpIFx1MDAyNlx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1BUSSkpXG5hcmNoL3g4Ni9tbS9pbml0LmM6OTcwOlx0XHRzZXRfbWVtb3J5X25wX25vYWxpYXMoYmVnaW5fdWwsIGxlbl9wYWdlcyk7XG5hcmNoL3g4Ni9tbS9pbml0LmMtOTcxLX1cbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNDgtI2luY2x1ZGUgXHUwMDNjYXNtL3NldHVwLmhcdTAwM2VcbmFyY2gveDg2L21tL2luaXRfMzIuYzo0OTojaW5jbHVkZSBcdTAwM2Nhc20vc2V0X21lbW9yeS5oXHUwMDNlXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNTAtI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2VfdHlwZXMuaFx1MDAzZVxuLS1cbmFyY2gveDg2L21tL2luaXRfMzIuYz03MjM9c3RhdGljIHZvaWQgbWFya19ueGRhdGFfbngodm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzM2LVx0XHRwcmludGsoS0VSTl9JTkZPIFwmIzM0O05YLXByb3RlY3RpbmcgdGhlIGtlcm5lbCBkYXRhOiAlbHVrXFxuXCYjMzQ7LCBzaXplIFx1MDAzZVx1MDAzZSAxMCk7XG5hcmNoL3g4Ni9tbS9pbml0XzMyLmM6NzM3Olx0c2V0X21lbW9yeV9ueChzdGFydCwgc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzM4LX1cbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtNTEtI2luY2x1ZGUgXHUwMDNjYXNtL251bWEuaFx1MDAzZVxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjUyOiNpbmNsdWRlIFx1MDAzY2FzbS9zZXRfbWVtb3J5LmhcdTAwM2VcbmFyY2gveDg2L21tL2luaXRfNjQuYy01My0jaW5jbHVkZSBcdTAwM2Nhc20vaW5pdC5oXHUwMDNlXG4tLVxuYXJjaC94ODYvbW0vaW5pdF82NC5jPTEzNTk9dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzY5LVx0ICAgICAgIChlbmQgLSBzdGFydCkgXHUwMDNlXHUwMDNlIDEwKTtcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxMzcwOlx0c2V0X21lbW9yeV9ybyhzdGFydCwgKGVuZCAtIHN0YXJ0KSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM3MS1cbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM4Ni1cdGFsbF9lbmQgPSByb3VuZHVwKCh1bnNpZ25lZCBsb25nKV9icmtfZW5kLCBQTURfU0laRSk7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM4NzpcdHNldF9tZW1vcnlfbngodGV4dF9lbmQsIChhbGxfZW5kIC0gdGV4dF9lbmQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzg4LVxuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzkyLVx0cHJpbnRrKEtFUk5fSU5GTyBcJiMzNDtUZXN0aW5nIENQQTogdW5kbyAlbHgtJWx4XFxuXCYjMzQ7LCBzdGFydCwgZW5kKTtcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxMzkzOlx0c2V0X21lbW9yeV9ydyhzdGFydCwgKGVuZC1zdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzOTQtXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM5NS1cdHByaW50ayhLRVJOX0lORk8gXCYjMzQ7VGVzdGluZyBDUEE6IGFnYWluXFxuXCYjMzQ7KTtcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxMzk2Olx0c2V0X21lbW9yeV9ybyhzdGFydCwgKGVuZC1zdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzOTctI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTE0MTUtLyogQWRqdXN0YWJsZSBtZW1vcnkgYmxvY2sgc2l6ZSAqL1xuYXJjaC94ODYvbW0vaW5pdF82NC5jOjE0MTY6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2V0X21lbW9yeV9ibG9ja19zaXplO1xuYXJjaC94ODYvbW0vaW5pdF82NC5jOjE0MTc6aW50IF9faW5pdCBzZXRfbWVtb3J5X2Jsb2NrX3NpemVfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTE0MTgte1xuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYy0xNDIzLVxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjE0MjQ6XHRzZXRfbWVtb3J5X2Jsb2NrX3NpemUgPSBzaXplO1xuYXJjaC94ODYvbW0vaW5pdF82NC5jLTE0MjUtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM9MTQyOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBwcm9iZV9tZW1vcnlfYmxvY2tfc2l6ZSh2b2lkKVxuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYy0xNDMzLVx0LyogSWYgbWVtb3J5IGJsb2NrIHNpemUgaGFzIGJlZW4gc2V0LCB0aGVuIHVzZSBpdCAqL1xuYXJjaC94ODYvbW0vaW5pdF82NC5jOjE0MzQ6XHRieiA9IHNldF9tZW1vcnlfYmxvY2tfc2l6ZTtcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xNDM1LVx0aWYgKGJ6KVxuLS1cbmFyY2gveDg2L21tL2lvcmVtYXAuYy0yMi1cbmFyY2gveDg2L21tL2lvcmVtYXAuYzoyMzojaW5jbHVkZSBcdTAwM2Nhc20vc2V0X21lbW9yeS5oXHUwMDNlXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtMjQtI2luY2x1ZGUgXHUwMDNjYXNtL2U4MjAvYXBpLmhcdTAwM2Vcbi0tXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM9NDU9aW50IGlvcmVtYXBfY2hhbmdlX2F0dHIodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBzaXplLFxuLS1cbmFyY2gveDg2L21tL2lvcmVtYXAuYy01My1cdGRlZmF1bHQ6XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NTQ6XHRcdGVyciA9IF9zZXRfbWVtb3J5X3VjKHZhZGRyLCBucnBhZ2VzKTtcbmFyY2gveDg2L21tL2lvcmVtYXAuYy01NS1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNTYtXHRjYXNlIF9QQUdFX0NBQ0hFX01PREVfV0M6XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NTc6XHRcdGVyciA9IF9zZXRfbWVtb3J5X3djKHZhZGRyLCBucnBhZ2VzKTtcbmFyY2gveDg2L21tL2lvcmVtYXAuYy01OC1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNTktXHRjYXNlIF9QQUdFX0NBQ0hFX01PREVfV1Q6XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NjA6XHRcdGVyciA9IF9zZXRfbWVtb3J5X3d0KHZhZGRyLCBucnBhZ2VzKTtcbmFyY2gveDg2L21tL2lvcmVtYXAuYy02MS1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNjItXHRjYXNlIF9QQUdFX0NBQ0hFX01PREVfV0I6XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NjM6XHRcdGVyciA9IF9zZXRfbWVtb3J5X3diKHZhZGRyLCBucnBhZ2VzKTtcbmFyY2gveDg2L21tL2lvcmVtYXAuYy02NC1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMjYtI2luY2x1ZGUgXHUwMDNjYXNtL2Jvb3RwYXJhbS5oXHUwMDNlXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzoyNzojaW5jbHVkZSBcdTAwM2Nhc20vc2V0X21lbW9yeS5oXHUwMDNlXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0yOC0jaW5jbHVkZSBcdTAwM2Nhc20vY2FjaGVmbHVzaC5oXHUwMDNlXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM9NTc9c3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzbnBfbWVtY3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgc3osXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNjYtXHRcdCAqL1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM6Njc6XHRcdGVhcmx5X3NucF9zZXRfbWVtb3J5X3NoYXJlZCgodW5zaWduZWQgbG9uZylfX3ZhKHBhZGRyKSwgcGFkZHIsIG5wYWdlcyk7XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy02OC1cbi0tXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy03MS1cdFx0LyogUmVzdG9yZSB0aGUgcGFnZSBzdGF0ZSBhZnRlciB0aGUgbWVtY3B5LiAqL1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM6NzI6XHRcdGVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUoKHVuc2lnbmVkIGxvbmcpX192YShwYWRkciksIHBhZGRyLCBucGFnZXMpO1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNzMtXHR9IGVsc2Uge1xuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jPTI4Nj1zdGF0aWMgaW50IGFtZF9lbmNfc3RhdHVzX2NoYW5nZV9wcmVwYXJlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBucGFnZXMsIGJvb2wgZW5jKVxuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTI5Mi1cdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9HVUVTVF9TRVZfU05QKSBcdTAwMjZcdTAwMjYgIWVuYylcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjI5MzpcdFx0c25wX3NldF9tZW1vcnlfc2hhcmVkKHZhZGRyLCBucGFnZXMpO1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMjk0LVxuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jPTI5OT1zdGF0aWMgaW50IGFtZF9lbmNfc3RhdHVzX2NoYW5nZV9maW5pc2godW5zaWduZWQgbG9uZyB2YWRkciwgaW50IG5wYWdlcywgYm9vbCBlbmMpXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzA1LVx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NFVl9TTlApIFx1MDAyNlx1MDAyNiBlbmMpXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzozMDY6XHRcdHNucF9zZXRfbWVtb3J5X3ByaXZhdGUodmFkZHIsIG5wYWdlcyk7XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zMDctXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM9MzU4PXN0YXRpYyB2b2lkIF9faW5pdCBfX3NldF9jbHJfcHRlX2VuYyhwdGVfdCAqa3B0ZSwgaW50IGxldmVsLCBib29sIGVuYylcbi0tXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zNzgtXHRcdCAqL1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM6Mzc5Olx0XHRlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQoKHVuc2lnbmVkIGxvbmcpX192YShkLnBhKSwgZC5wYSwgMSk7XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zODAtXHR9XG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzg4LVx0aWYgKGVuYylcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjM4OTpcdFx0ZWFybHlfc25wX3NldF9tZW1vcnlfcHJpdmF0ZSgodW5zaWduZWQgbG9uZylfX3ZhKGQucGEpLCBkLnBhLCAxKTtcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTM5MC19XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zOTEtXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzozOTI6c3RhdGljIGludCBfX2luaXQgZWFybHlfc2V0X21lbW9yeV9lbmNfZGVjKHVuc2lnbmVkIGxvbmcgdmFkZHIsXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zOTMtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgYm9vbCBlbmMpXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNDYxLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM6NDYyOmludCBfX2luaXQgZWFybHlfc2V0X21lbW9yeV9kZWNyeXB0ZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBzaXplKVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNDYzLXtcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjQ2NDpcdHJldHVybiBlYXJseV9zZXRfbWVtb3J5X2VuY19kZWModmFkZHIsIHNpemUsIGZhbHNlKTtcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTQ2NS19XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy00NjYtXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzo0Njc6aW50IF9faW5pdCBlYXJseV9zZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy00Njgte1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM6NDY5Olx0cmV0dXJuIGVhcmx5X3NldF9tZW1vcnlfZW5jX2RlYyh2YWRkciwgc2l6ZSwgdHJ1ZSk7XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy00NzAtfVxuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jPTU0Mz12b2lkIF9faW5pdCBtZW1fZW5jcnlwdF9mcmVlX2RlY3J5cHRlZF9tZW0odm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy01NjAtXHRpZiAoc21lX21lX21hc2spIHtcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjU2MTpcdFx0ciA9IHNldF9tZW1vcnlfZW5jcnlwdGVkKHZhZGRyLCBucGFnZXMpO1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNTYyLVx0XHRpZiAocikge1xuLS1cbmFyY2gveDg2L21tL3BhdC9NYWtlZmlsZS0yLVxuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlOjM6b2JqLXlcdFx0XHRcdDo9IHNldF9tZW1vcnkubyBtZW10eXBlLm9cbmFyY2gveDg2L21tL3BhdC9NYWtlZmlsZS00LVxuLS1cbmFyY2gveDg2L21tL3BhdC9tZW10eXBlLmM9NDkyPXN0YXRpYyB1NjQgc2FuaXRpemVfcGh5cyh1NjQgYWRkcmVzcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvbWVtdHlwZS5jLTQ5Ni1cdCAqIGZvciBhIFwmIzM0O2RlY295XCYjMzQ7IHZpcnR1YWwgYWRkcmVzcyAoYml0IDYzIGNsZWFyKSBwYXNzZWQgdG9cbmFyY2gveDg2L21tL3BhdC9tZW10eXBlLmM6NDk3Olx0ICogc2V0X21lbW9yeV9YKCkuIF9fcGEoKSBvbiBhIFwmIzM0O2RlY295XCYjMzQ7IGFkZHJlc3MgcmVzdWx0cyBpbiBhXG5hcmNoL3g4Ni9tbS9wYXQvbWVtdHlwZS5jLTQ5OC1cdCAqIHBoeXNpY2FsIGFkZHJlc3Mgd2l0aCBiaXQgNjMgc2V0LlxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjItI2luY2x1ZGUgXHUwMDNjbGludXgvY2NfcGxhdGZvcm0uaFx1MDAzZVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzojaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQtI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVnaW9uLmhcdTAwM2Vcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI3ND1zdGF0aWMgYm9vbCBfX2NwYV9wZm5faW5faGlnaG1hcCh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI4Ni0gKiBVQyB0byBhdm9pZCBzcGVjdWxhdGl2ZSBhY2Nlc3MgbG9nZ2luZyBhbm90aGVyIGVycm9yLiBCdXQgcGFzc2luZyB0aGVcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6Mjg3OiAqIGFkZHJlc3Mgb2YgdGhlIDE6MSBtYXBwaW5nIHRvIHNldF9tZW1vcnlfdWMoKSBpcyBhIGZpbmUgd2F5IHRvIGVuY291cmFnZSBhXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI4OC0gKiBzcGVjdWxhdGl2ZSBhY2Nlc3MuIFNvIHdlIGNoZWF0IGFuZCBmbGlwIHRoZSB0b3AgYml0IG9mIHRoZSBhZGRyZXNzLiBUaGlzXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMTg3PXN0YXRpYyBpbmxpbmUgaW50IGNwYV9jbGVhcl9wYWdlc19hcnJheShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTkzLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTk0OmludCBfc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE5NS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTk4LVx0ICogSWYgeW91IHJlYWxseSBuZWVkIHN0cm9uZyBVQyB1c2UgaW9yZW1hcF91YygpLCBidXQgbm90ZVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTk5Olx0ICogdGhhdCB5b3UgY2Fubm90IG92ZXJyaWRlIElPIGFyZWFzIHdpdGggc2V0X21lbW9yeV8qKCkgYXNcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIwMC1cdCAqIHRoZXNlIGhlbHBlcnMgY2Fubm90IHdvcmsgd2l0aCBJTyBtZW1vcnkuXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjA2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjA3OmludCBzZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjA4LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMTgtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyMTk6XHRyZXQgPSBfc2V0X21lbW9yeV91YyhhZGRyLCBudW1wYWdlcyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMjAtXHRpZiAocmV0KVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIyOS19XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyMzA6RVhQT1JUX1NZTUJPTChzZXRfbWVtb3J5X3VjKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIzMS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjIzMjppbnQgX3NldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMzMte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI0Ny1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI0ODppbnQgc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI0OS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjU2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjU3Olx0cmV0ID0gX3NldF9tZW1vcnlfd2MoYWRkciwgbnVtcGFnZXMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjU4LVx0aWYgKHJldClcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNjItfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjYzOkVYUE9SVF9TWU1CT0woc2V0X21lbW9yeV93Yyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNjQtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyNjU6aW50IF9zZXRfbWVtb3J5X3d0KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjY2LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNzAtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyNzE6aW50IF9zZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjcyLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNzctXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyNzg6aW50IHNldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNzkte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI4MS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI4MjpcdHJldCA9IF9zZXRfbWVtb3J5X3diKGFkZHIsIG51bXBhZ2VzKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI4My1cdGlmIChyZXQpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjg4LX1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI4OTpFWFBPUlRfU1lNQk9MKHNldF9tZW1vcnlfd2IpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjkwLVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjI5Mz1pbnQgc2V0X21jZV9ub3NwZWModW5zaWduZWQgbG9uZyBwZm4pXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzAyLVx0ICogV2Ugd291bGQgbGlrZSB0byBqdXN0IGNhbGw6XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzMDM6XHQgKiAgICAgIHNldF9tZW1vcnlfWFgoKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKHBmbiksIDEpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzA0LVx0ICogYnV0IGRvaW5nIHRoYXQgd291bGQgcmFkaWNhbGx5IGluY3JlYXNlIHRoZSBvZGRzIG9mIGFcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMDktXHQgKiB0aGF0IGxvb2tzIGp1c3QgbGlrZSB0aGUgb25lIHdlIHdhbnQsIGJ1dCBoYXMgYml0IDYzIGZsaXBwZWQuXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzMTA6XHQgKiBUaGlzIHJlbGllcyBvbiBzZXRfbWVtb3J5X1hYKCkgcHJvcGVybHkgc2FuaXRpemluZyBhbnkgX19wYSgpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMTEtXHQgKiByZXN1bHRzIHdpdGggX19QSFlTSUNBTF9NQVNLIG9yIFBURV9QRk5fTUFTSy5cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMTQtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzMTU6XHRyYyA9IHNldF9tZW1vcnlfbnAoZGVjb3lfYWRkciwgMSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMTYtXHRpZiAocmMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzIzPWludCBjbGVhcl9tY2Vfbm9zcGVjKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMyNi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMyNzpcdHJldHVybiBzZXRfbWVtb3J5X3AoYWRkciwgMSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMjgtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzI5PUVYUE9SVF9TWU1CT0xfR1BMKGNsZWFyX21jZV9ub3NwZWMpO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMzMjppbnQgc2V0X21lbW9yeV94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzMzLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzktXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNDA6aW50IHNldF9tZW1vcnlfbngodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDEte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0Ny1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM0ODppbnQgc2V0X21lbW9yeV9ybyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0OS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzUyLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzUzOmludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM1NC17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzYzLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzY0OmludCBzZXRfbWVtb3J5X3J3KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzY1LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjgtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNjk6aW50IHNldF9tZW1vcnlfbnAodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNzAte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3My1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM3NDppbnQgc2V0X21lbW9yeV9ucF9ub2FsaWFzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzc1LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODAtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzODE6aW50IHNldF9tZW1vcnlfcCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4Mi17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg1LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzg2OmludCBzZXRfbWVtb3J5XzRrKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg3LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTItXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzOTM6aW50IHNldF9tZW1vcnlfbm9uZ2xvYmFsKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzk0LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTgtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzOTk6aW50IHNldF9tZW1vcnlfZ2xvYmFsKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDAwLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDUtLypcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQwNjogKiBfX3NldF9tZW1vcnlfZW5jX3BndGFibGUoKSBpcyB1c2VkIGZvciB0aGUgaHlwZXJ2aXNvcnMgdGhhdCBnZXRcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQwNy0gKiBpbmZvcm1lZCBhYm91dCBcJiMzNDtlbmNyeXB0aW9uXCYjMzQ7IHN0YXR1cyB2aWEgcGFnZSB0YWJsZXMuXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDgtICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI0MDk6c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX3BndGFibGUodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDEwLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI0NzM9c3RhdGljIERFQ0xBUkVfUldTRU0obWVtX2VuY19sb2NrKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0ODAtICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI0ODE6Ym9vbCBzZXRfbWVtb3J5X2VuY19zdG9wX2NvbnZlcnNpb24odm9pZClcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQ4Mi17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDk0LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDk1OnN0YXRpYyBpbnQgX19zZXRfbWVtb3J5X2VuY19kZWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDk2LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MDItXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MDM6XHRcdHJldCA9IF9fc2V0X21lbW9yeV9lbmNfcGd0YWJsZShhZGRyLCBudW1wYWdlcywgZW5jKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUwNC1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MTAtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MTE6aW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTEyLXtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUxMzpcdHJldHVybiBfX3NldF9tZW1vcnlfZW5jX2RlYyhhZGRyLCBudW1wYWdlcywgdHJ1ZSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MTQtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTE1OkVYUE9SVF9TWU1CT0xfR1BMKHNldF9tZW1vcnlfZW5jcnlwdGVkKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUxNi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUxNzppbnQgc2V0X21lbW9yeV9kZWNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MTgte1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTE5Olx0cmV0dXJuIF9fc2V0X21lbW9yeV9lbmNfZGVjKGFkZHIsIG51bXBhZ2VzLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MjAtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTIxOkVYUE9SVF9TWU1CT0xfR1BMKHNldF9tZW1vcnlfZGVjcnlwdGVkKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyMi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUyMz1pbnQgc2V0X3BhZ2VzX3VjKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTI2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTI3Olx0cmV0dXJuIHNldF9tZW1vcnlfdWMoYWRkciwgbnVtcGFnZXMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTI4LX1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1ODk9aW50IHNldF9wYWdlc193YihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjU5Mi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjU5MzpcdHJldHVybiBzZXRfbWVtb3J5X3diKGFkZHIsIG51bXBhZ2VzKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjU5NC19XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjIyPWludCBzZXRfcGFnZXNfcm8oc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MjUtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2MjY6XHRyZXR1cm4gc2V0X21lbW9yeV9ybyhhZGRyLCBudW1wYWdlcyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MjctfVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjYyOT1pbnQgc2V0X3BhZ2VzX3J3KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjMyLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjMzOlx0cmV0dXJuIHNldF9tZW1vcnlfcncoYWRkciwgbnVtcGFnZXMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjM0LX1cbi0tXG5hcmNoL3g4Ni9tbS9wdGkuYy00MC0jaW5jbHVkZSBcdTAwM2Nhc20vc2VjdGlvbnMuaFx1MDAzZVxuYXJjaC94ODYvbW0vcHRpLmM6NDE6I2luY2x1ZGUgXHUwMDNjYXNtL3NldF9tZW1vcnkuaFx1MDAzZVxuYXJjaC94ODYvbW0vcHRpLmMtNDItI2luY2x1ZGUgXHUwMDNjYXNtL2J1Z3MuaFx1MDAzZVxuLS1cbmFyY2gveDg2L21tL3B0aS5jPTU3MT1zdGF0aWMgdm9pZCBwdGlfY2xvbmVfa2VybmVsX3RleHQodm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9wdGkuYy02MDAtXHQvKiBTZXQgdGhlIGdsb2JhbCBiaXQgZm9yIG5vcm1hbCBub24tX19pbml0IGtlcm5lbCB0ZXh0OiAqL1xuYXJjaC94ODYvbW0vcHRpLmM6NjAxOlx0c2V0X21lbW9yeV9nbG9iYWwoc3RhcnQsIChlbmRfZ2xvYmFsIC0gc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbmFyY2gveDg2L21tL3B0aS5jLTYwMi19XG4tLVxuYXJjaC94ODYvbW0vcHRpLmM9NjA0PXN0YXRpYyB2b2lkIHB0aV9zZXRfa2VybmVsX2ltYWdlX25vbmdsb2JhbCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL3B0aS5jLTYxOS1cdCAqL1xuYXJjaC94ODYvbW0vcHRpLmM6NjIwOlx0c2V0X21lbW9yeV9ub25nbG9iYWwoc3RhcnQsIChlbmQgLSBzdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuYXJjaC94ODYvbW0vcHRpLmMtNjIxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg0MDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSB4ODYgTWVtb3J5IFByb3RlY3Rpb24gQ29kZSoqCgpPa2F5LCBzbyBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgaXMgKmFsd2F5cyogY29tcGlsZWQgaW50byB0aGUgeDg2IGtlcm5lbDsgdGhhdCYjMzk7cyBnb29kIHRvIGtub3cg4oCTIGl0JiMzOTtzIGZ1bmRhbWVudGFsLiBUaGUgYE1ha2VmaWxlYCBjb25maXJtcyB0aGlzIChgb2JqLXkgOj0gc2V0X21lbW9yeS5vIG1lbXR5cGUub2ApLiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGl0cyBiZWhhdmlvdXIgaXMgdGllZCB0byBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHNlZSBpZiBgU1RSSUNUX0tFUk5FTF9SV1hgIG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIENvbnRyb2wtRmxvdyBBdHRlbnVhdGlvbiAoQ1BBKSwgbGlrZSB0aGUgYENQQWAgbWFjcm8sIGhhcyBhbnkgaW5mbHVlbmNlIG9uIGl0cyBvcGVyYXRpb24uIEEgcXVpY2sgaW5zcGVjdGlvbiBvZiBgYXJjaC94ODYvS2NvbmZpZ2Agc2hvdWxkIHJldmVhbCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIHdoZXRoZXIgSSBuZWVkIHRvIGNvbnNpZGVyIHRob3NlIGluIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTVFJJQ1RfS0VSTkVMX1JXWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMTA3LVx0c2VsZWN0IEFSQ0hfSEFTX1NFVF9ESVJFQ1RfTUFQXG5hcmNoL3g4Ni9LY29uZmlnOjEwODpcdHNlbGVjdCBBUkNIX0hBU19TVFJJQ1RfS0VSTkVMX1JXWFxuYXJjaC94ODYvS2NvbmZpZy0xMDktXHRzZWxlY3QgQVJDSF9IQVNfU1RSSUNUX01PRFVMRV9SV1hcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYz0xNzI9c3RhdGljIHZvaWQgaXRzX2ZpbmlfY29yZSh2b2lkKVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTczLXtcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjE3NDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWCkpXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xNzUtXHRcdGl0c19wYWdlc19wcm90ZWN0KFx1MDAyNml0c19wYWdlcyk7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz02NzE9c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2ZXJpZnlfcnd4KHBncHJvdF90IG9sZCwgcGdwcm90X3QgbmV3LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNzAzLVx0ICogZmFsc2UgcG9zaXRpdmUuXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjcwNDpcdCAqIE9uY2UgZGVidWdfY2hlY2t3eCgpIGJlY29tZXMgbWFuZGF0b3J5IGZvciBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTcwNS1cdCAqIHRoZSB3YXJuaW5nIGNhbiBiZSByZW1vdmVkIGNvbXBsZXRlbHkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MDY0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbm5lciBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYFNUUklDVF9LRVJORUxfUldYYCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byB0aGUgZGVlcCBlbmQsIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSB3aGVyZSBgU1RSSUNUX0tFUk5FTF9SV1hgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEkgc3VzcGVjdCBpdCYjMzk7cyBlaXRoZXIgaW4gdGhlIGdlbmVyYWwgaW5pdGlhbGl6YXRpb24gY29uZmlnLCBgaW5pdC9LY29uZmlnYCwgb3IgcGVyaGFwcyBhIG1vcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZpbGUsIGxpa2UgYGFyY2gvS2NvbmZpZ2AuIEl0JiMzOTtzIGNyaXRpY2FsIHRvIGtub3cgKmV4YWN0bHkqIHdoZXJlIHRoaXMgY29uZmlnIG9wdGlvbiBpcyBkZWZpbmVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBob3cgaXQmIzM5O3MgaGFuZGxlZCBkdXJpbmcgYnVpbGQgYW5kIGNvbmZpZ3VyYXRpb24gdGltZS4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiB0byBwcm9wZXJseSBhc3Nlc3MgaXRzIGltcGFjdCBhbmQgaG93IEkgY2FuLCBpZiBuZWNlc3NhcnksIGN1c3RvbWl6ZSBvciBvdmVycmlkZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aG9zZSBLY29uZmlnIGZpbGVzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1RSSUNUX0tFUk5FTF9SV1gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTE1OTU9Y29uZmlnIEFSQ0hfSEFTX1NUUklDVF9LRVJORUxfUldYXG4tLVxuYXJjaC9LY29uZmlnLTE1OTctXG5hcmNoL0tjb25maWc6MTU5ODpjb25maWcgU1RSSUNUX0tFUk5FTF9SV1hcbmFyY2gvS2NvbmZpZy0xNTk5LVx0Ym9vbCBcJiMzNDtNYWtlIGtlcm5lbCB0ZXh0IGFuZCByb2RhdGEgcmVhZC1vbmx5XCYjMzQ7IGlmIEFSQ0hfT1BUSU9OQUxfS0VSTkVMX1JXWFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTM4NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIG15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBob3VzZWQgaW4gYGFyY2gvS2NvbmZpZ2AuIEkmIzM5O20gcmVhc29uYWJseSBzdXJlIG9mIHRoYXQgZGlyZWN0b3J5LCBpdCYjMzk7cyB3aGVyZSB0aGUgYXJjaGl0ZWN0dXJhbC1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyB1c3VhbGx5IGxpdmUuIEkmIzM5O2xsIGZvY3VzIG15IHNlYXJjaCBhcm91bmQgbGluZSAxNTk4LiBObyBuZWVkIHRvIGdldCBkaXN0cmFjdGVkIGJ5IGEgd2lkZXIgc2VhcmNoIHdoZW4gSSBoYXZlIGEgZ29vZCBpZGVhIHdoZXJlIHRvIHN0YXJ0IGRpZ2dpbmcuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBicmV3aW5nIGluIHRoYXQgcGFydGljdWxhciBhcmVhIG9mIHRoZSBjb25maWcgZmlsZS4gVGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU5NTpcdGNvbmZpZyBBUkNIX0hBU19TVFJJQ1RfS0VSTkVMX1JXWFxuMTU5NjpcdFx0ZGVmX2Jvb2wgblxuMTU5NzpcdFxuMTU5ODpcdGNvbmZpZyBTVFJJQ1RfS0VSTkVMX1JXWFxuMTU5OTpcdFx0Ym9vbCBcJiMzNDtNYWtlIGtlcm5lbCB0ZXh0IGFuZCByb2RhdGEgcmVhZC1vbmx5XCYjMzQ7IGlmIEFSQ0hfT1BUSU9OQUxfS0VSTkVMX1JXWFxuMTYwMDpcdFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19TVFJJQ1RfS0VSTkVMX1JXWFxuMTYwMTpcdFx0ZGVmYXVsdCAhQVJDSF9PUFRJT05BTF9LRVJORUxfUldYIHx8IEFSQ0hfT1BUSU9OQUxfS0VSTkVMX1JXWF9ERUZBVUxUXG4xNjAyOlx0XHRoZWxwXG4xNjAzOlx0XHQgIElmIHRoaXMgaXMgc2V0LCBrZXJuZWwgdGV4dCBhbmQgcm9kYXRhIG1lbW9yeSB3aWxsIGJlIG1hZGUgcmVhZC1vbmx5LFxuMTYwNDpcdFx0ICBhbmQgbm9uLXRleHQgbWVtb3J5IHdpbGwgYmUgbWFkZSBub24tZXhlY3V0YWJsZS4gVGhpcyBwcm92aWRlc1xuMTYwNTpcdFx0ICBwcm90ZWN0aW9uIGFnYWluc3QgY2VydGFpbiBzZWN1cml0eSBleHBsb2l0cyAoZS5nLiBleGVjdXRpbmcgdGhlIGhlYXBcbjE2MDY6XHRcdCAgb3IgbW9kaWZ5aW5nIHRleHQpXG4xNjA3Olx0XG4xNjA4Olx0XHQgIFRoZXNlIGZlYXR1cmVzIGFyZSBjb25zaWRlcmVkIHN0YW5kYXJkIHNlY3VyaXR5IHByYWN0aWNlIHRoZXNlIGRheXMuXG4xNjA5Olx0XHQgIFlvdSBzaG91bGQgc2F5IFkgaGVyZSBpbiBhbG1vc3QgYWxsIGNhc2VzLlxuMTYxMDpcdFxuMTYxMTpcdGNvbmZpZyBBUkNIX0hBU19TVFJJQ1RfTU9EVUxFX1JXWFxuMTYxMjpcdFx0ZGVmX2Jvb2wgblxuMTYxMzpcdFxuMTYxNDpcdGNvbmZpZyBTVFJJQ1RfTU9EVUxFX1JXWFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTkxMgoJCQkJCQkJb3V0cHV0OiAyMTAKCQkJCQkJCXRob3VnaHRzOiAxMDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFdeWCBWZXJpZmljYXRpb24gTG9naWMgaW4geDg2IE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIGNvbmZpcm1lZCB0aGF0IGBTVFJJQ1RfS0VSTkVMX1JXWGAgZGVmYXVsdHMgdG8gYHlgLCBzbyB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4gVGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBpcyBjcnVjaWFsOiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBFbmFibGVDb25maWdzYDogYFsmIzM0O1NUUklDVF9LRVJORUxfUldYJiMzNDtdYC4KCk5vdywgbGV0JiMzOTtzIGhvbmUgaW4gb24gdGhlIGNvcmUgb2YgdGhlIG1hdHRlci4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjYXJlZnVsbHkgc2VsZWN0ZWQgdG8gYXZvaWQgdGhlIG5vaXNlIG9mIHViaXF1aXRvdXMgZnVuY3Rpb25zIGxpa2UgYHZmcmVlYCBvciBga21hbGxvY2AuIEluc3RlYWQsIEkmIzM5O20gY29uY2VudHJhdGluZyBvbiB0aGUgc3BlY2lmaWMgZW50cnkgcG9pbnRzIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLCBgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLCBgX19jaGFuZ2VfcGFnZV9hdHRyYCwgYF9fc2hvdWxkX3NwbGl0X2xhcmdlX3BhZ2VgLCBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfcm94YCwgYHNldF9tZW1vcnlfeGAsIGFuZCBgc2V0X21lbW9yeV9ueGAuIFRoZXNlIGFyZSBhbGwgcmVsZXZhbnQgZnVuY3Rpb25zIGluIHRoZSBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgZmlsZS4KClRoZSBnaXQgZGlmZiBjb25maXJtcyB0aGUgY2hhbmdlcy4gV2UmIzM5O3JlIG1vZGlmeWluZyB0aGUgV15YIHZlcmlmaWNhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGluIHRoZSBgdmVyaWZ5X3J3eGAgZnVuY3Rpb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY29uZGl0aW9uYWwgd2FybmluZyByZWxhdGVkIHRvIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBhbmQgcm9kYXRhIHByb3RlY3Rpb24uIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCBwcm92aWRlcyBhIG1lY2hhbmlzbSB0byBoYW5kbGUgcG90ZW50aWFsIGZhbHNlIHBvc2l0aXZlcywgcGFydGljdWxhcmx5IGJlZm9yZSB0aGUgYGRlYnVnX2NoZWNrd3goKWAgYmVjb21lcyBtYW5kYXRvcnkuCgpUaGUgc3Vic3lzdGVtIGlzIGNsZWFybHkgeDg2IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIENoYW5nZSBQYWdlIEF0dHJpYnV0ZXMgKENQQSkuIFRoZSByZWFjaGFiaWxpdHkgaXMgd2VsbC1kZWZpbmVkOiB0aGlzIGNvZGUgcGF0aCBpcyBmdWxseSByZWFjaGFibGUgb24geDg2XzY0IHdoZW5ldmVyIHBhZ2UgcHJvdGVjdGlvbiBhdHRyaWJ1dGVzIGFyZSBtb2RpZmllZCwgd2hpY2ggaGFwcGVucyBmcmVxdWVudGx5IChtb2R1bGVzLCBCUEYgSklULCBrcHJvYmVzL2Z0cmFjZSwgZGlyZWN0IG1hcCBtYW5pcHVsYXRpb24pLiBUaGlzIG1ha2VzIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhcmUgYXBwcm9wcmlhdGUuIFRoZSBwYXRjaCBtb2RpZmllcyBXXlggdmVyaWZpY2F0aW9uLCBhbmQgdGhpcyBtYWtlcyBpdCBhIHN1aXRhYmxlIGFyZWEgZm9yIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVFJJQ1RfS0VSTkVMX1JXWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fY2hhbmdlX3BhZ2VfYXR0ciYjMzQ7LAogICAgJiMzNDtfX3Nob3VsZF9zcGxpdF9sYXJnZV9wYWdlJiMzNDssCiAgICAmIzM0O2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NsciYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3JvJiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfcncmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9yb3gmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ueCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdeWCBwZXJtaXNzaW9uIHZlcmlmaWNhdGlvbiBsb2dpYyAodmVyaWZ5X3J3eCkgd2l0aGluIHg4NiBDaGFuZ2UgUGFnZSBBdHRyaWJ1dGVzIChDUEEpIGluIGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBleGVjdXRlZCB3aGVuZXZlciBrZXJuZWwgcGFnZSBwcm90ZWN0aW9ucyBhcmUgYWRqdXN0ZWQgKHN1Y2ggYXMgdmlhIEJQRiBKSVQsIGZ0cmFjZSwgbW9kdWxlIGxvYWRpbmcvdW5sb2FkaW5nLCBvciBkcml2ZXIgbWVtb3J5IGF0dHJpYnV0ZSBjaGFuZ2VzKS4gSXQgaW50cm9kdWNlcyBuZXcgY29uZGl0aW9uYWwgd2FybmluZyBiZWhhdmlvciB3aGVuIGtlcm5lbF9zZXRfdG9fcmVhZG9ubHkgaXMgZmFsc2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUUklDVF9LRVJORUxfUldYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19jaGFuZ2VfcGFnZV9hdHRyJiMzNDssCiAgICAmIzM0O19fc2hvdWxkX3NwbGl0X2xhcmdlX3BhZ2UmIzM0OywKICAgICYjMzQ7Y2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyJiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfcm8mIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ydyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3JveCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X254JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfeCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV15YIHBlcm1pc3Npb24gdmVyaWZpY2F0aW9uIGxvZ2ljICh2ZXJpZnlfcnd4KSB3aXRoaW4geDg2IENoYW5nZSBQYWdlIEF0dHJpYnV0ZXMgKENQQSkgaW4gYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGV4ZWN1dGVkIHdoZW5ldmVyIGtlcm5lbCBwYWdlIHByb3RlY3Rpb25zIGFyZSBhZGp1c3RlZCAoc3VjaCBhcyB2aWEgQlBGIEpJVCwgZnRyYWNlLCBtb2R1bGUgbG9hZGluZy91bmxvYWRpbmcsIG9yIGRyaXZlciBtZW1vcnkgYXR0cmlidXRlIGNoYW5nZXMpLiBJdCBpbnRyb2R1Y2VzIG5ldyBjb25kaXRpb25hbCB3YXJuaW5nIGJlaGF2aW9yIHdoZW4ga2VybmVsX3NldF90b19yZWFkb25seSBpcyBmYWxzZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2ZXJpZnlfcnd4KClgIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCB0byBsb2cgYSB3YXJuaW5nIHZpYSBgcHJfd2Fybl9vbmNlYCBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSBmdWxsIGBXQVJOX09OQ0VgIHdoZW4gYSBXXlggdmlvbGF0aW9uIGlzIGRldGVjdGVkIGJlZm9yZSBrZXJuZWwgdGV4dCBoYXMgYmVlbiBtYXJrZWQgcmVhZC1vbmx5IChga2VybmVsX3NldF90b19yZWFkb25seWAgaXMgZmFsc2UpLiBcblxuVGhpcyBjaGFuZ2Ugb25seSB0b3VjaGVzIGxvZ2dpbmcgYW5kIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBhbiBleGlzdGluZyBnbG9iYWwgYm9vbGVhbiBmbGFnIGFuZCBzY2FsYXIgcGFnZS10YWJsZSBwcm90ZWN0aW9uIHZhbHVlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZGQ2ZDRlZWRhYWY0MzJmN2ZiYTM3YzJlZmM4OGI4NDU5YWY4MDIwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTI6Mzc6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwppbmRleCBiMzA2MDAwMGRhOGQxLi5hNGY3ZmU2OWU2OTIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKQEAgLTY5Nyw2ICYjNDM7Njk3LDIxIEBAIHN0YXRpYyBpbmxpbmUgcGdwcm90X3QgdmVyaWZ5X3J3eChwZ3Byb3RfdCBvbGQsIHBncHJvdF90IG5ldywgdW5zaWduZWQgbG9uZyBzdGFyCiAJCXJldHVybiBuZXc7CiAKIAllbmQgPSBzdGFydCAmIzQzOyBucGcgKiBQQUdFX1NJWkUgLSAxOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUga2VybmVsIHRleHQgaXMgc3RpbGwgUldYLCBnZW50bHkgY29tcGxhaW4sIHRoaXMgY291bGQgYmUgYQomIzQzOwkgKiBmYWxzZSBwb3NpdGl2ZS4KJiM0MzsJICogT25jZSBkZWJ1Z19jaGVja3d4KCkgYmVjb21lcyBtYW5kYXRvcnkgZm9yIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWCwKJiM0MzsJICogdGhlIHdhcm5pbmcgY2FuIGJlIHJlbW92ZWQgY29tcGxldGVseS4KJiM0MzsJICovCiYjNDM7CWlmICgha2VybmVsX3NldF90b19yZWFkb25seSkgewomIzQzOwkJcHJfd2Fybl9vbmNlKDEsICYjMzQ7Q1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLSZndDsgJTAxNmxseCByYW5nZTogMHglMDE2bHggLSAweCUwMTZseCBQRk4gJWx4XG4mIzM0OywKJiM0MzsJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksCiYjNDM7CQkgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChuZXcpLAomIzQzOwkJICBzdGFydCwgZW5kLCBwZm4pOwomIzQzOwkJcmV0dXJuIG5ldzsKJiM0MzsJfQomIzQzOwogCVdBUk5fT05DRSgxLCAmIzM0O0NQQSBkZXRlY3RlZCBXXlggdmlvbGF0aW9uOiAlMDE2bGx4IC0mZ3Q7ICUwMTZsbHggcmFuZ2U6IDB4JTAxNmx4IC0gMHglMDE2bHggUEZOICVseFxuJiMzNDssCiAJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksCiAJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzM2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNjQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIE5lZWQgZm9yIEtNU0FOIEZ1enppbmcgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGRlYWwuIEkmIzM5O20gYmVpbmcgYXNrZWQgdG8gZmlndXJlIG91dCB3aGV0aGVyIGEgcGF0Y2ggaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIHdhcnJhbnRzIEtNU0FOIGZ1enppbmcsIG9yIGlmIEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBnb29kIGVub3VnaC4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4KCkZpcnN0LCB0aGUgcmlzayBhbmFseXNpcy4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgcmVxdWVzdDogaXQmIzM5O3MgYSBkZWZlbnNpdmUgc2VjdXJpdHkgZW5naW5lZXJpbmcgcXVlc3Rpb24gd2l0aGluIExpbnV4IGtlcm5lbCBRQSB0cmlhZ2UuIFRoZSBzZXZlcml0eSBpc24mIzM5O3QgY3JpdGljYWw7IHdlJiMzOTtyZSBqdXN0IG1ha2luZyBzdXJlIG91ciBiYXNlcyBhcmUgY292ZXJlZC4gU28sIG15IGFjdGlvbiBpcyB0byBwcm92aWRlIGEgY29tcGxldGUgZXZhbHVhdGlvbi4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBhcHBlYXJzIHRvIGJlIGFkZGluZyBhIHdhcm5pbmcgcmVsYXRlZCB0byBXXlggdmlvbGF0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCBjaGVja3MgaWYgY29kZSBpcyBiZWluZyBtYWRlIHdyaXRhYmxlIGFmdGVyIGJlaW5nIHJlYWQtb25seSBpbiB0aGUga2VybmVsIHRleHQuIFRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgY2hlY2sgaGVyZTogSWYgdGhlIGtlcm5lbCBpc24mIzM5O3QgY29uZmlndXJlZCBmb3Igc3RyaWN0IHJlYWQtb25seSB0ZXh0LCBhIHdhcm5pbmcgaXMgcHJpbnRlZC4gT3RoZXJ3aXNlLCBgV0FSTl9PTkNFYCBpcyB1c2VkLiBUaGlzIGlzIGNsZWFybHkgcmVsYXRlZCB0byBwcm90ZWN0aW5nIGFnYWluc3QgY29kZSBpbmplY3Rpb24gdnVsbmVyYWJpbGl0aWVzLgoKSSYjMzk7bGwgbmVlZCB0byBnbyBkZWVwZXIgdGhhbiBqdXN0IGdsYW5jaW5nIGF0IHRoZSBkaWZmLiBJJiMzOTtsbCB1c2UgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgdGhlIGJyb2FkZXIgY29udGV4dCB3aXRoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIGBzZXRfbWVtb3J5LmNgIGNvZGUgaXMgZG9pbmcgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYSBjb25jZXJuIGluIHRoZSBwYXRjaGVkIGNvZGUuIE9uY2UgSSBnZXQgdGhlIHdpZGVyIHBpY3R1cmUsIEkmIzM5O2xsIGJlIGluIGEgYmV0dGVyIHBvc2l0aW9uIHRvIGRldGVybWluZSBpZiBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeSwgb3IgaWYgc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBhZGVxdWF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2OTA6XHRcdFx0cmV0dXJuIG5ldztcbiA2OTE6XHRcbiA2OTI6XHRcdGlmICgocGdwcm90X3ZhbChuZXcpIFx1MDAyNiAoX1BBR0VfUlcgfCBfUEFHRV9OWCkpICE9IF9QQUdFX1JXKVxuIDY5MzpcdFx0XHRyZXR1cm4gbmV3O1xuIDY5NDpcdFxuIDY5NTpcdFx0LyogTm9uLWxlYWYgdHJhbnNsYXRpb24gZW50cmllcyBjYW4gZGlzYWJsZSB3cml0aW5nIG9yIGV4ZWN1dGlvbi4gKi9cbiA2OTY6XHRcdGlmICghcncgfHwgbngpXG4gNjk3Olx0XHRcdHJldHVybiBuZXc7XG4gNjk4Olx0XG4gNjk5Olx0XHRlbmQgPSBzdGFydCAmIzQzOyBucGcgKiBQQUdFX1NJWkUgLSAxO1xuIDcwMDpcdFxuIDcwMTpcdFx0LypcbiA3MDI6XHRcdCAqIElmIHRoZSBrZXJuZWwgdGV4dCBpcyBzdGlsbCBSV1gsIGdlbnRseSBjb21wbGFpbiwgdGhpcyBjb3VsZCBiZSBhXG4gNzAzOlx0XHQgKiBmYWxzZSBwb3NpdGl2ZS5cbiA3MDQ6XHRcdCAqIE9uY2UgZGVidWdfY2hlY2t3eCgpIGJlY29tZXMgbWFuZGF0b3J5IGZvciBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gsXG4gNzA1Olx0XHQgKiB0aGUgd2FybmluZyBjYW4gYmUgcmVtb3ZlZCBjb21wbGV0ZWx5LlxuIDcwNjpcdFx0ICovXG4gNzA3Olx0XHRpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpIHtcbiA3MDg6XHRcdFx0cHJfd2Fybl9vbmNlKDEsIFwmIzM0O0NQQSBkZXRlY3RlZCBXXlggdmlvbGF0aW9uOiAlMDE2bGx4IC1cdTAwM2UgJTAxNmxseCByYW5nZTogMHglMDE2bHggLSAweCUwMTZseCBQRk4gJWx4XFxuXCYjMzQ7LFxuIDcwOTpcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChvbGQpLFxuIDcxMDpcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChuZXcpLFxuIDcxMTpcdFx0XHQgIHN0YXJ0LCBlbmQsIHBmbik7XG4gNzEyOlx0XHRcdHJldHVybiBuZXc7XG4gNzEzOlx0XHR9XG4gNzE0Olx0XG4gNzE1Olx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7Q1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXG5cJiMzNDssXG4gNzE2Olx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksXG4gNzE3Olx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXG4gNzE4Olx0XHRcdCAgc3RhcnQsIGVuZCwgcGZuKTtcbiA3MTk6XHRcbiA3MjA6XHRcdC8qXG4gNzIxOlx0XHQgKiBGb3Igbm93LCBhbGxvdyBhbGwgcGVybWlzc2lvbiBjaGFuZ2UgYXR0ZW1wdHMgYnkgcmV0dXJuaW5nIHRoZVxuIDcyMjpcdFx0ICogYXR0ZW1wdGVkIHBlcm1pc3Npb25zLiAgVGhpcyBjYW4gJiMzOTtyZXR1cm4gb2xkJiMzOTsgdG8gYWN0aXZlbHlcbiA3MjM6XHRcdCAqIHJlZnVzZSB0aGUgcGVybWlzc2lvbiBjaGFuZ2UgYXQgYSBsYXRlciB0aW1lLlxuIDcyNDpcdFx0ICovXG4gNzI1Olx0XHRyZXR1cm4gbmV3O1xuIDcyNjpcdH1cbiA3Mjc6XHRcbiA3Mjg6XHQvKlxuIDcyOTpcdCAqIExvb2t1cCB0aGUgcGFnZSB0YWJsZSBlbnRyeSBmb3IgYSB2aXJ0dWFsIGFkZHJlc3MgaW4gYSBzcGVjaWZpYyBwZ2QuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNzIKCQkJCQkJCW91dHB1dDogMTgxCgkJCQkJCQl0aG91Z2h0czogNTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBwcl93YXJuX29uY2VgIHVzYWdlIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUg4oCTIHRoZSBmaXJzdCBhcmd1bWVudCBsb29rcyBzdXNwaWNpb3VzLiBJcyBpdCBhIHR5cG8gb3IgYSBtYWNybz8gSW4gYW55IGNhc2UsIGl0JiMzOTtzIG5vdCB0aGUgc3RhbmRhcmQgcGF0dGVybiwgc28gSSYjMzk7bSBmaWxpbmcgdGhhdCBhd2F5IGZvciBub3cuIE15IGltbWVkaWF0ZSBmb2N1cywgaG93ZXZlciwgaXMgb24gd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyByaXNrcyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGFueXRoaW5nIEtNU0FOIHdvdWxkIGZsYWcuCgpUaGUgcGF0Y2ggbW9kaWZpZXMgYHZlcmlmeV9yd3goKWAgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBSaWdodCwgc28gSSByYW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OgoKKiAgICoqQWxsb2NhdGlvbj8qKiBOb3BlLCBubyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb24gdGhhdCBjb3VsZCBiZSB1bmluaXRpYWxpemVkLgoqICAgKipVc2VyIHNwYWNlIGNvcHk/KiogTm90IGF0IGFsbC4KKiAgICoqVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHM/KiogTm8sIHRoZSBhcmd1bWVudHMgdG8gYHZlcmlmeV9yd3goKWAg4oCTIGBvbGRgLCBgbmV3YCwgYHN0YXJ0YCwgYGVuZGAsIGBwZm5gLCBga2VybmVsX3NldF90b19yZWFkb25seWAg4oCTIGFyZSBhbGwgc2NhbGFyIHZhbHVlcywgYm9vbGVhbnMsIG9yIGBwZ3Byb3RfdGAgcGFzc2VkIGJ5IHZhbHVlLiBUaGlzIGlzIGEgY2xlYW4gYmlsbCBvZiBoZWFsdGguCiogICAqKkJ1ZmZlciBtYW5pcHVsYXRpb24gb3IgYm91bmRzIGNoZWNrcz8qKiBOb3RoaW5nIGhlcmUuCiogICAqKktlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzPyoqIE5vLgoKR2l2ZW4gYWxsIG9mIHRoYXQsIGl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkICYjMzQ7TmVlZHNLTVNBTiA9IGZhbHNlLiYjMzQ7CgpOb3csIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgcmVhc29uaW5nIGZvciB0aGUgcmVjb3JkLiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgYSBgV0FSTl9PTkNFYCB0byBhIGBwcl93YXJuX29uY2VgIGluIGB2ZXJpZnlfcnd4KClgLiBUaGUgY2hhbmdlIG9ubHkgZG93bmdyYWRlcyB0aGUgd2FybmluZyBpZiBga2VybmVsX3NldF90b19yZWFkb25seWAgaXMgZmFsc2UgZHVyaW5nIGVhcmx5IGJvb3QsIHdoZW4gdGhlIGtlcm5lbCB0ZXh0IHBlcm1pc3Npb25zIGFyZSBzdGlsbCBSV1guIEl0JiMzOTtzIGVzc2VudGlhbGx5IGp1c3QgYSBjb25kaXRpb25hbCBsb2dnaW5nIGNoYW5nZS4gVGhlIGNvZGUgaXMgb25seSB3b3JraW5nIHdpdGggc2NhbGFyIHZhcmlhYmxlcyDigJMgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzLCBubyB3cml0ZXMgb3IgY29waWVzIHRvIHVzZXJzcGFjZSwgbm8gY2hhbmdlcyB0byBidWZmZXIgbGVuZ3RocyBvciBjYWxjdWxhdGlvbnMuIEFsbCB0aGUgaW5mb3JtYXRpb24gZm9yIEtNU0FOIHRvIGFuYWx5emUgaXMgc2NhbGFyIGFuZCBwYXNzZWQgYnkgdmFsdWUuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBhYnNvbHV0ZWx5IGRvZXMgbm90IGludHJvZHVjZSBhbnkgS01TQU4tcmVsZXZhbnQgaXNzdWVzIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHZlcmlmeV9yd3goKWAgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIHRvIGxvZyBhIHdhcm5pbmcgdmlhIGBwcl93YXJuX29uY2VgIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIGZ1bGwgYFdBUk5fT05DRWAgd2hlbiBhIFdeWCB2aW9sYXRpb24gaXMgZGV0ZWN0ZWQgYmVmb3JlIGtlcm5lbCB0ZXh0IGhhcyBiZWVuIG1hcmtlZCByZWFkLW9ubHkgKGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBpcyBmYWxzZSkuIFxuXG5UaGlzIGNoYW5nZSBvbmx5IHRvdWNoZXMgbG9nZ2luZyBhbmQgY29udHJvbCBmbG93IGJhc2VkIG9uIGFuIGV4aXN0aW5nIGdsb2JhbCBib29sZWFuIGZsYWcgYW5kIHNjYWxhciBwYWdlLXRhYmxlIHByb3RlY3Rpb24gdmFsdWVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgdG91Y2ggdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZywgYW5kIGRvZXMgbm90IGV4cG9zZSBhbnkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2ZXJpZnlfcnd4KClgIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCB0byBsb2cgYSB3YXJuaW5nIHZpYSBgcHJfd2Fybl9vbmNlYCBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSBmdWxsIGBXQVJOX09OQ0VgIHdoZW4gYSBXXlggdmlvbGF0aW9uIGlzIGRldGVjdGVkIGJlZm9yZSBrZXJuZWwgdGV4dCBoYXMgYmVlbiBtYXJrZWQgcmVhZC1vbmx5IChga2VybmVsX3NldF90b19yZWFkb25seWAgaXMgZmFsc2UpLiBcblxuVGhpcyBjaGFuZ2Ugb25seSB0b3VjaGVzIGxvZ2dpbmcgYW5kIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBhbiBleGlzdGluZyBnbG9iYWwgYm9vbGVhbiBmbGFnIGFuZCBzY2FsYXIgcGFnZS10YWJsZSBwcm90ZWN0aW9uIHZhbHVlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM3OjQ0LjEwMjU0ODQ4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzYwODM4NzA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVFJJQ1RfS0VSTkVMX1JXWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fY2hhbmdlX3BhZ2VfYXR0clwiLFxuICAgIFwiX19zaG91bGRfc3BsaXRfbGFyZ2VfcGFnZVwiLFxuICAgIFwiY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyXCIsXG4gICAgXCJzZXRfbWVtb3J5X3JvXCIsXG4gICAgXCJzZXRfbWVtb3J5X3J3XCIsXG4gICAgXCJzZXRfbWVtb3J5X3JveFwiLFxuICAgIFwic2V0X21lbW9yeV9ueFwiLFxuICAgIFwic2V0X21lbW9yeV94XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdmVyaWZ5X3J3eCgpYCBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgdG8gbG9nIGEgd2FybmluZyB2aWEgYHByX3dhcm5fb25jZWAgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgZnVsbCBgV0FSTl9PTkNFYCB3aGVuIGEgV15YIHZpb2xhdGlvbiBpcyBkZXRlY3RlZCBiZWZvcmUga2VybmVsIHRleHQgaGFzIGJlZW4gbWFya2VkIHJlYWQtb25seSAoYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIGlzIGZhbHNlKS4gXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSB0b3VjaGVzIGxvZ2dpbmcgYW5kIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBhbiBleGlzdGluZyBnbG9iYWwgYm9vbGVhbiBmbGFnIGFuZCBzY2FsYXIgcGFnZS10YWJsZSBwcm90ZWN0aW9uIHZhbHVlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdeWCBwZXJtaXNzaW9uIHZlcmlmaWNhdGlvbiBsb2dpYyAodmVyaWZ5X3J3eCkgd2l0aGluIHg4NiBDaGFuZ2UgUGFnZSBBdHRyaWJ1dGVzIChDUEEpIGluIGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBleGVjdXRlZCB3aGVuZXZlciBrZXJuZWwgcGFnZSBwcm90ZWN0aW9ucyBhcmUgYWRqdXN0ZWQgKHN1Y2ggYXMgdmlhIEJQRiBKSVQsIGZ0cmFjZSwgbW9kdWxlIGxvYWRpbmcvdW5sb2FkaW5nLCBvciBkcml2ZXIgbWVtb3J5IGF0dHJpYnV0ZSBjaGFuZ2VzKS4gSXQgaW50cm9kdWNlcyBuZXcgY29uZGl0aW9uYWwgd2FybmluZyBiZWhhdmlvciB3aGVuIGtlcm5lbF9zZXRfdG9fcmVhZG9ubHkgaXMgZmFsc2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM3OjQ0LjEwMjU1MzM2M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI3NDYyNzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmRkNmQ0ZWVkYWFmNDMyZjdmYmEzN2MyZWZjODhiODQ1OWFmODAyMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAxMjozNzo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbmluZGV4IGIzMDYwMDAwZGE4ZDEuLmE0ZjdmZTY5ZTY5MjIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbisrKyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG5AQCAtNjk3LDYgKzY5NywyMSBAQCBzdGF0aWMgaW5saW5lIHBncHJvdF90IHZlcmlmeV9yd3gocGdwcm90X3Qgb2xkLCBwZ3Byb3RfdCBuZXcsIHVuc2lnbmVkIGxvbmcgc3RhclxcbiBcXHRcXHRyZXR1cm4gbmV3O1xcbiBcXG4gXFx0ZW5kID0gc3RhcnQgKyBucGcgKiBQQUdFX1NJWkUgLSAxO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIGtlcm5lbCB0ZXh0IGlzIHN0aWxsIFJXWCwgZ2VudGx5IGNvbXBsYWluLCB0aGlzIGNvdWxkIGJlIGFcXG4rXFx0ICogZmFsc2UgcG9zaXRpdmUuXFxuK1xcdCAqIE9uY2UgZGVidWdfY2hlY2t3eCgpIGJlY29tZXMgbWFuZGF0b3J5IGZvciBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gsXFxuK1xcdCAqIHRoZSB3YXJuaW5nIGNhbiBiZSByZW1vdmVkIGNvbXBsZXRlbHkuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpIHtcXG4rXFx0XFx0cHJfd2Fybl9vbmNlKDEsIFxcXCJDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXFx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXFxcblxcXCIsXFxuK1xcdFxcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksXFxuK1xcdFxcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXFxuK1xcdFxcdCAgc3RhcnQsIGVuZCwgcGZuKTtcXG4rXFx0XFx0cmV0dXJuIG5ldztcXG4rXFx0fVxcbitcXG4gXFx0V0FSTl9PTkNFKDEsIFxcXCJDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXFx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXFxcblxcXCIsXFxuIFxcdFxcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksXFxuIFxcdFxcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM3OjQ0LjYzMDc1MzQ0NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA4MzI4NTMwNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNUUklDVF9LRVJORUxfUldYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19jaGFuZ2VfcGFnZV9hdHRyXCIsXG4gICAgXCJfX3Nob3VsZF9zcGxpdF9sYXJnZV9wYWdlXCIsXG4gICAgXCJjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJcIixcbiAgICBcInNldF9tZW1vcnlfcm9cIixcbiAgICBcInNldF9tZW1vcnlfcndcIixcbiAgICBcInNldF9tZW1vcnlfcm94XCIsXG4gICAgXCJzZXRfbWVtb3J5X254XCIsXG4gICAgXCJzZXRfbWVtb3J5X3hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV15YIHBlcm1pc3Npb24gdmVyaWZpY2F0aW9uIGxvZ2ljICh2ZXJpZnlfcnd4KSB3aXRoaW4geDg2IENoYW5nZSBQYWdlIEF0dHJpYnV0ZXMgKENQQSkgaW4gYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGV4ZWN1dGVkIHdoZW5ldmVyIGtlcm5lbCBwYWdlIHByb3RlY3Rpb25zIGFyZSBhZGp1c3RlZCAoc3VjaCBhcyB2aWEgQlBGIEpJVCwgZnRyYWNlLCBtb2R1bGUgbG9hZGluZy91bmxvYWRpbmcsIG9yIGRyaXZlciBtZW1vcnkgYXR0cmlidXRlIGNoYW5nZXMpLiBJdCBpbnRyb2R1Y2VzIG5ldyBjb25kaXRpb25hbCB3YXJuaW5nIGJlaGF2aW9yIHdoZW4ga2VybmVsX3NldF90b19yZWFkb25seSBpcyBmYWxzZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZGQ2ZDRlZWRhYWY0MzJmN2ZiYTM3YzJlZmM4OGI4NDU5YWY4MDIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTI6Mzc6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuaW5kZXggYjMwNjAwMDBkYThkMS4uYTRmN2ZlNjllNjkyMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbisrKyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC02OTcsNiArNjk3LDIxIEBAIHN0YXRpYyBpbmxpbmUgcGdwcm90X3QgdmVyaWZ5X3J3eChwZ3Byb3RfdCBvbGQsIHBncHJvdF90IG5ldywgdW5zaWduZWQgbG9uZyBzdGFyXG4gXHRcdHJldHVybiBuZXc7XG4gXG4gXHRlbmQgPSBzdGFydCArIG5wZyAqIFBBR0VfU0laRSAtIDE7XG4rXG4rXHQvKlxuK1x0ICogSWYgdGhlIGtlcm5lbCB0ZXh0IGlzIHN0aWxsIFJXWCwgZ2VudGx5IGNvbXBsYWluLCB0aGlzIGNvdWxkIGJlIGFcbitcdCAqIGZhbHNlIHBvc2l0aXZlLlxuK1x0ICogT25jZSBkZWJ1Z19jaGVja3d4KCkgYmVjb21lcyBtYW5kYXRvcnkgZm9yIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWCxcbitcdCAqIHRoZSB3YXJuaW5nIGNhbiBiZSByZW1vdmVkIGNvbXBsZXRlbHkuXG4rXHQgKi9cbitcdGlmICgha2VybmVsX3NldF90b19yZWFkb25seSkge1xuK1x0XHRwcl93YXJuX29uY2UoMSwgXCJDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXHUwMDNlICUwMTZsbHggcmFuZ2U6IDB4JTAxNmx4IC0gMHglMDE2bHggUEZOICVseFxcblwiLFxuK1x0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChvbGQpLFxuK1x0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChuZXcpLFxuK1x0XHQgIHN0YXJ0LCBlbmQsIHBmbik7XG4rXHRcdHJldHVybiBuZXc7XG4rXHR9XG4rXG4gXHRXQVJOX09OQ0UoMSwgXCJDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXHUwMDNlICUwMTZsbHggcmFuZ2U6IDB4JTAxNmx4IC0gMHglMDE2bHggUEZOICVseFxcblwiLFxuIFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChvbGQpLFxuIFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChuZXcpLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzc6NDQuNjMwNzU1MDQ0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc2NTYxMDI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGFuZCBBc3NvY2lhdGVkIFRvb2xzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBwYXRjaCBpdHNlbGYsIG9mIGNvdXJzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB3aGF0J3MgY2hhbmdlZCBhbmQgdGhlbiBwdXQgdGhhdCBpbnRvIGNvbnRleHQuIFRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGlzIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGNvZGUsIHdoaWNoIGluIHRoaXMgY2FzZSBzZWVtcyB0byBiZSB3aXRoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBJIHdpbGwgdGhlbiBnbyBhaGVhZCBhbmQgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBvbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBpbnNwZWN0aW5nIHRoaXMgZmlsZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCdzIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyNCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzc6NDkuMzk2MzY3NDM0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjgwOlxcdFxcdCAqIGRldGVjdGlvbiBhbmQgZW5mb3JjZW1lbnQgdGhlcmUuXFxuIDY4MTpcXHRcXHQgKi9cXG4gNjgyOlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19YODZfMzIpKVxcbiA2ODM6XFx0XFx0XFx0cmV0dXJuIG5ldztcXG4gNjg0OlxcdFxcbiA2ODU6XFx0XFx0LyogT25seSB2ZXJpZnkgd2hlbiBOWCBpcyBzdXBwb3J0ZWQ6ICovXFxuIDY4NjpcXHRcXHRpZiAoIShfX3N1cHBvcnRlZF9wdGVfbWFzayBcXHUwMDI2IF9QQUdFX05YKSlcXG4gNjg3OlxcdFxcdFxcdHJldHVybiBuZXc7XFxuIDY4ODpcXHRcXG4gNjg5OlxcdFxcdGlmICghKChwZ3Byb3RfdmFsKG9sZCkgXiBwZ3Byb3RfdmFsKG5ldykpIFxcdTAwMjYgKF9QQUdFX1JXIHwgX1BBR0VfTlgpKSlcXG4gNjkwOlxcdFxcdFxcdHJldHVybiBuZXc7XFxuIDY5MTpcXHRcXG4gNjkyOlxcdFxcdGlmICgocGdwcm90X3ZhbChuZXcpIFxcdTAwMjYgKF9QQUdFX1JXIHwgX1BBR0VfTlgpKSAhPSBfUEFHRV9SVylcXG4gNjkzOlxcdFxcdFxcdHJldHVybiBuZXc7XFxuIDY5NDpcXHRcXG4gNjk1OlxcdFxcdC8qIE5vbi1sZWFmIHRyYW5zbGF0aW9uIGVudHJpZXMgY2FuIGRpc2FibGUgd3JpdGluZyBvciBleGVjdXRpb24uICovXFxuIDY5NjpcXHRcXHRpZiAoIXJ3IHx8IG54KVxcbiA2OTc6XFx0XFx0XFx0cmV0dXJuIG5ldztcXG4gNjk4OlxcdFxcbiA2OTk6XFx0XFx0ZW5kID0gc3RhcnQgKyBucGcgKiBQQUdFX1NJWkUgLSAxO1xcbiA3MDA6XFx0XFxuIDcwMTpcXHRcXHQvKlxcbiA3MDI6XFx0XFx0ICogSWYgdGhlIGtlcm5lbCB0ZXh0IGlzIHN0aWxsIFJXWCwgZ2VudGx5IGNvbXBsYWluLCB0aGlzIGNvdWxkIGJlIGFcXG4gNzAzOlxcdFxcdCAqIGZhbHNlIHBvc2l0aXZlLlxcbiA3MDQ6XFx0XFx0ICogT25jZSBkZWJ1Z19jaGVja3d4KCkgYmVjb21lcyBtYW5kYXRvcnkgZm9yIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWCxcXG4gNzA1OlxcdFxcdCAqIHRoZSB3YXJuaW5nIGNhbiBiZSByZW1vdmVkIGNvbXBsZXRlbHkuXFxuIDcwNjpcXHRcXHQgKi9cXG4gNzA3OlxcdFxcdGlmICgha2VybmVsX3NldF90b19yZWFkb25seSkge1xcbiA3MDg6XFx0XFx0XFx0cHJfd2Fybl9vbmNlKDEsIFxcXCJDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXFx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXFxcblxcXCIsXFxuIDcwOTpcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChvbGQpLFxcbiA3MTA6XFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwobmV3KSxcXG4gNzExOlxcdFxcdFxcdCAgc3RhcnQsIGVuZCwgcGZuKTtcXG4gNzEyOlxcdFxcdFxcdHJldHVybiBuZXc7XFxuIDcxMzpcXHRcXHR9XFxuIDcxNDpcXHRcXG4gNzE1OlxcdFxcdFdBUk5fT05DRSgxLCBcXFwiQ1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVxcdTAwM2UgJTAxNmxseCByYW5nZTogMHglMDE2bHggLSAweCUwMTZseCBQRk4gJWx4XFxcXG5cXFwiLFxcbiA3MTY6XFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwob2xkKSxcXG4gNzE3OlxcdFxcdFxcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXFxuIDcxODpcXHRcXHRcXHQgIHN0YXJ0LCBlbmQsIHBmbik7XFxuIDcxOTpcXHRcXG4gNzIwOlxcdFxcdC8qXFxuIDcyMTpcXHRcXHQgKiBGb3Igbm93LCBhbGxvdyBhbGwgcGVybWlzc2lvbiBjaGFuZ2UgYXR0ZW1wdHMgYnkgcmV0dXJuaW5nIHRoZVxcbiA3MjI6XFx0XFx0ICogYXR0ZW1wdGVkIHBlcm1pc3Npb25zLiAgVGhpcyBjYW4gJ3JldHVybiBvbGQnIHRvIGFjdGl2ZWx5XFxuIDcyMzpcXHRcXHQgKiByZWZ1c2UgdGhlIHBlcm1pc3Npb24gY2hhbmdlIGF0IGEgbGF0ZXIgdGltZS5cXG4gNzI0OlxcdFxcdCAqL1xcbiA3MjU6XFx0XFx0cmV0dXJuIG5ldztcXG4gNzI2OlxcdH1cXG4gNzI3OlxcdFxcbiA3Mjg6XFx0LypcXG4gNzI5OlxcdCAqIExvb2t1cCB0aGUgcGFnZSB0YWJsZSBlbnRyeSBmb3IgYSB2aXJ0dWFsIGFkZHJlc3MgaW4gYSBzcGVjaWZpYyBwZ2QuXFxuIDczMDpcXHQgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBlbnRyeSAob3IgTlVMTCBpZiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QpLFxcbiA3MzE6XFx0ICogdGhlIGxldmVsIG9mIHRoZSBlbnRyeSwgYW5kIHRoZSBlZmZlY3RpdmUgTlggYW5kIFJXIGJpdHMgb2YgYWxsXFxuIDczMjpcXHQgKiBwYWdlIHRhYmxlIGxldmVscy5cXG4gNzMzOlxcdCAqL1xcbiA3MzQ6XFx0cHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gNzM1OlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50ICpsZXZlbCwgYm9vbCAqbngsIGJvb2wgKnJ3KVxcbiA3MzY6XFx0e1xcbiA3Mzc6XFx0XFx0cDRkX3QgKnA0ZDtcXG4gNzM4OlxcdFxcdHB1ZF90ICpwdWQ7XFxuIDczOTpcXHRcXHRwbWRfdCAqcG1kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozNzo0OS4zOTY1NjIzOTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjQ4OTA2Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHZlcmlmeV9yd3hgIFVzYWdlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBgdmVyaWZ5X3J3eGAgZnVuY3Rpb24gYW5kIGhvdyBpdCdzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGlzIGNvZGViYXNlLiBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbmZsdWVuY2UsIEknbSBnb2luZyB0byByZWFjaCBmb3IgdGhlIHRyaWVkIGFuZCB0cnVlIGBncmVwYCBjb21tYW5kLiBTcGVjaWZpY2FsbHksIEknbGwgc2VhcmNoIGZvciBgdmVyaWZ5X3J3eGAgdG8gaWRlbnRpZnkgZXZlcnkgaW5zdGFuY2Ugd2hlcmUgaXQncyBpbnZva2VkLiBUaGlzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBhbmQgcmV2ZWFsIHRoZSBhcmVhcyBvZiB0aGUgY29kZSB0aGF0IGRlcGVuZCBvbiBpdHMgZnVuY3Rpb25hbGl0eS4gVGhpcyBxdWljayBzY2FuIHdpbGwgc2V0IHRoZSBzdGFnZSBmb3IgYSBkZWVwZXIgZGl2ZSwgYWxsb3dpbmcgbWUgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNzgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM3OjUyLjY0NTQ3MjI1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY4MjYyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXJpZnlfcnd4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz02MjM9c3RhdGljIGlubGluZSBwZ3Byb3RfdCBzdGF0aWNfcHJvdGVjdGlvbnMocGdwcm90X3QgcHJvdCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNjcwLSAqL1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NjcxOnN0YXRpYyBpbmxpbmUgcGdwcm90X3QgdmVyaWZ5X3J3eChwZ3Byb3RfdCBvbGQsIHBncHJvdF90IG5ldywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTY3Mi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5wZyxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9OTQzPXN0YXRpYyBpbnQgX19zaG91bGRfc3BsaXRfbGFyZ2VfcGFnZShwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xMDY2LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTA2NzpcXHRuZXdfcHJvdCA9IHZlcmlmeV9yd3gob2xkX3Byb3QsIG5ld19wcm90LCBscGFkZHIsIG9sZF9wZm4sIG51bXBhZ2VzLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTA2OC1cXHRcXHRcXHQgICAgICBueCwgcncpO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0xODUwPXN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgcHJpbWFyeSlcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTg4MS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjE4ODI6XFx0XFx0bmV3X3Byb3QgPSB2ZXJpZnlfcnd4KG9sZF9wcm90LCBuZXdfcHJvdCwgYWRkcmVzcywgcGZuLCAxLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTg4My1cXHRcXHRcXHRcXHQgICAgICBueCwgcncpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozNzo1Mi42OTExNjA2MzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODk0NDU3MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS2VybmVsIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBoZXJlLlwiIFRoZSBnb2FsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhcnRpY3VsYXIgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGB2ZXJpZnlfcnd4YCBhbmQgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGRvZXMsIGFuZCBob3cgdGhleSByZWxhdGUuIEdpdmVuIHRoYXQgdGhlIGdvYWwgaXMgdG8gZnVsbHkgYW5hbHl6ZSB0aGUgY29kZSwgaXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgd2l0aCBga2VybmVsX3NldF90b19yZWFkb25seWAuIExldCdzIHNlYXJjaCBmb3IgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIHRoYXQgZnVuY3Rpb24gZmlyc3QuIEEgZ29vZCBzb2xpZCBkZWZpbml0aW9uIHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCBmb3VuZGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGludGVudCBvZiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA0NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM3OjU2LjU4NTYyNDQ2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk0MzMwMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtlcm5lbF9zZXRfdG9fcmVhZG9ubHlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wYXJpc2MvbW0vaW5pdC5jPTExMj1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdG1lbSh2b2lkKVxcbi0tXFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTM0MC1cXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM6MzQxOnN0YXRpYyBib29sIGtlcm5lbF9zZXRfdG9fcmVhZG9ubHk7XFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTM0Mi1cXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM9MzQzPXN0YXRpYyB2b2lkIF9fcmVmIG1hcF9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3ZhZGRyLFxcbi0tXFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTQwMy1cXHRcXHRcXHRcXHRcXHRwcm90ID0gUEFHRV9LRVJORUw7XFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jOjQwNDpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KSB7XFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTQwNS1cXHRcXHRcXHRcXHRcXHQvKiBzdGlsbCBpbml0aWFsaXppbmcsIGFsbG93IHdyaXRpbmcgdG8gUk8gbWVtb3J5ICovXFxuLS1cXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM9NDg5PXZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcXG4tLVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYy00OTYtXFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jOjQ5NzpcXHRrZXJuZWxfc2V0X3RvX3JlYWRvbmx5ID0gdHJ1ZTtcXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtNDk4LVxcdG1hcF9wYWdlcyhzdGFydCwgX19wYShzdGFydCksIGVuZCAtIHN0YXJ0LCBQQUdFX0tFUk5FTCwgMCk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg9OTI9Ym9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtOTMtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjk0OmV4dGVybiBpbnQga2VybmVsX3NldF90b19yZWFkb25seTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtOTUtXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmM9NjkyPXZvaWQgX19pbml0IG1lbV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzIwLVxcbmFyY2gveDg2L21tL2luaXRfMzIuYzo3MjE6aW50IGtlcm5lbF9zZXRfdG9fcmVhZG9ubHkgX19yZWFkX21vc3RseTtcXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzIyLVxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF8zMi5jPTc0MD12b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzQ4LVxcbmFyY2gveDg2L21tL2luaXRfMzIuYzo3NDk6XFx0a2VybmVsX3NldF90b19yZWFkb25seSA9IDE7XFxuYXJjaC94ODYvbW0vaW5pdF8zMi5jLTc1MC1cXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYz0xMzQzPXZvaWQgX19pbml0IG1lbV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM1Ni1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM1NzppbnQga2VybmVsX3NldF90b19yZWFkb25seTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM1OC1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM9MTM1OT12b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM3MS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM3MjpcXHRrZXJuZWxfc2V0X3RvX3JlYWRvbmx5ID0gMTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM3My1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NTA3PXN0YXRpYyBwZ3Byb3R2YWxfdCBwcm90ZWN0X3BjaV9iaW9zKHVuc2lnbmVkIGxvbmcgc3BmbiwgdW5zaWduZWQgbG9uZyBlcGZuKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy01MTUtICogYWxpYXNlcy4gIFRoaXMgYWxzbyBpbmNsdWRlcyBfX3JvX2FmdGVyX2luaXQsIHNvIGRvIG5vdCBlbmZvcmNlIHVudGlsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo1MTY6ICoga2VybmVsX3NldF90b19yZWFkb25seSBpcyB0cnVlLlxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTE3LSAqL1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NTE4PXN0YXRpYyBwZ3Byb3R2YWxfdCBwcm90ZWN0X3JvZGF0YSh1bnNpZ25lZCBsb25nIHNwZm4sIHVuc2lnbmVkIGxvbmcgZXBmbilcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTI3LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NTI4OlxcdGlmIChrZXJuZWxfc2V0X3RvX3JlYWRvbmx5IFxcdTAwMjZcXHUwMDI2IG92ZXJsYXBzKHNwZm4sIGVwZm4sIHNwZm5fcm8sIGVwZm5fcm8pKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTI5LVxcdFxcdHJldHVybiBfUEFHRV9SVztcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NTQxPXN0YXRpYyBwZ3Byb3R2YWxfdCBwcm90ZWN0X2tlcm5lbF90ZXh0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy01NTItLypcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjU1MzogKiBPbmNlIHRoZSBrZXJuZWwgbWFwcyB0aGUgdGV4dCBhcyBSTyAoa2VybmVsX3NldF90b19yZWFkb25seSBpcyBzZXQpLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTU0LSAqIGtlcm5lbCB0ZXh0IG1hcHBpbmdzIGZvciB0aGUgbGFyZ2UgcGFnZSBhbGlnbmVkIHRleHQsIHJvZGF0YSBzZWN0aW9uc1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz01NjE9c3RhdGljIHBncHJvdHZhbF90IHByb3RlY3Rfa2VybmVsX3RleHRfcm8odW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTY3LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NTY4OlxcdGlmICgha2VybmVsX3NldF90b19yZWFkb25seSB8fCAhb3ZlcmxhcHMoc3RhcnQsIGVuZCwgdF9zdGFydCwgdF9lbmQpKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTY5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz02NzE9c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2ZXJpZnlfcnd4KHBncHJvdF90IG9sZCwgcGdwcm90X3QgbmV3LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03MDYtXFx0ICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo3MDc6XFx0aWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KSB7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03MDgtXFx0XFx0cHJfd2Fybl9vbmNlKDEsIFxcXCJDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXFx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM3OjU4LjY3OTk2MjMxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NjkzMjM2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFkLU9ubHkgRGF0YSBNYXJraW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgbWFya19yb2RhdGFfcm8oKWAgZ2V0cyBpbnZva2VkIGR1cmluZyB0aGUga2VybmVsJ3MgYm9vdCBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBmdW5jdGlvbnMgYG1hcmtfcmVhZG9ubHkoKWAgb3IgZGlyZWN0bHkgYXMgYG1hcmtfcm9kYXRhX3JvKClgLiBUaGUgY3J1Y2lhbCBwaWVjZSBoZXJlIGlzIHRoYXQgd2hlbiB0aGlzIGZ1bmN0aW9uIGV4ZWN1dGVzIGR1cmluZyBib290LCB0aGUgdmFyaWFibGUgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIGdldHMgc2V0IHRvIGEgdmFsdWUgb2YgMS5cblxuVGhlIGludGVyZXN0aW5nIHRoaW5nIGlzIHRoYXQgYWZ0ZXIgdGhlIGJvb3Qgc2VxdWVuY2UgY29tcGxldGVzLCBkdXJpbmcgdGhlIHN0YW5kYXJkIHJ1bnRpbWUgb2YgdGhlIGtlcm5lbCwgYW5kIGV2ZW4gZHVyaW5nIGZ1enppbmcgZWZmb3J0cywgdGhpcyBga2VybmVsX3NldF90b19yZWFkb25seWAgdmFyaWFibGUgKmFsd2F5cyogcmV0YWlucyBpdHMgdmFsdWUgb2YgMS5cblxuQnV0LCB3YWl0IGEgc2Vjb25kLi4uIHRoaXMgZmVlbHMgbGlrZSBpdCBtaWdodCBiZSBhbiBvdmVyc2ltcGxpZmljYXRpb24uIElzIGl0IHRydWx5IHRoZSBjYXNlIHRoYXQgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIGlzICpuZXZlciogemVybyBhZnRlciB0aGUgaW5pdGlhbCBib290PyBJIG5lZWQgdG8gY2xhcmlmeSBpZiB0aGVyZSdzIGEgdHJhbnNpZW50IHBlcmlvZCBkdXJpbmcgdGhlIHZlcnkgZWFybHkgc3RhZ2VzIG9mIHRoZSBib290IHByb2Nlc3Mgd2hlcmUgdGhpcyB2YXJpYWJsZSBtaWdodCBiZSAwLCBiZWZvcmUgYmVpbmcgaW5pdGlhbGl6ZWQgdG8gMS4gVGhpcyBjb3VsZCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIHZlcmlmeSB3aGVuIGBtYXJrX3JvZGF0YV9ybygpYCBpcyBhY3R1YWxseSBjYWxsZWQgaW4gdGhlIGJvb3Qgc2VxdWVuY2UuIExldCdzIGRvIGEgcXVpY2sgZ3JlcCBzZWFyY2ggdG8gY29uZmlybSB0aGUgY2FsbCBzaXRlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgdmFyaWF0aW9ucyBpbiB0aGUgY2FsbCBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg2OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozODowMS40NDkyODgwNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzAyMDYxNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFya19yb2RhdGFfcm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vbW0vaW5pdC5jPTM5Mj1zdGF0aWMgdm9pZCBmaXhfa2Vybm1lbV9wZXJtcyh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbW0vaW5pdC5jLTM5Ni1cXG5hcmNoL2FybS9tbS9pbml0LmM6Mzk3OnN0YXRpYyBpbnQgX19tYXJrX3JvZGF0YV9ybyh2b2lkICp1bnVzZWQpXFxuYXJjaC9hcm0vbW0vaW5pdC5jLTM5OC17XFxuLS1cXG5hcmNoL2FybS9tbS9pbml0LmMtNDAyLVxcbmFyY2gvYXJtL21tL2luaXQuYzo0MDM6dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxcbmFyY2gvYXJtL21tL2luaXQuYy00MDQte1xcbmFyY2gvYXJtL21tL2luaXQuYzo0MDU6XFx0c3RvcF9tYWNoaW5lKF9fbWFya19yb2RhdGFfcm8sIE5VTEwsIE5VTEwpO1xcbmFyY2gvYXJtL21tL2luaXQuYy00MDYtXFx0YXJtX2RlYnVnX2NoZWNrd3goKTtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vbW11LmM9MTE4MD1zdGF0aWMgdm9pZCBfX2luaXQgbWFwX21lbSh2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0xMjUzLVxcbmFyY2gvYXJtNjQvbW0vbW11LmM6MTI1NDp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0xMjU1LXtcXG4tLVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYz00NTE9dm9pZCBmcmVlX2luaXRtZW0odm9pZClcXG4tLVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYy00ODgtI2lmZGVmIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWFxcbmFyY2gvcGFyaXNjL21tL2luaXQuYzo0ODk6dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYy00OTAte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLmg9MTUyPXN0YXRpYyBpbmxpbmUgaW50IGhhc2hfX3A0ZF9iYWQocDRkX3QgcDRkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLmgtMTU2LSNpZmRlZiBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1hcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaDoxNTc6ZXh0ZXJuIHZvaWQgaGFzaF9fbWFya19yb2RhdGFfcm8odm9pZCk7XFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLmgtMTU4LWV4dGVybiB2b2lkIGhhc2hfX21hcmtfaW5pdG1lbV9ueCh2b2lkKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaC0xNDEtI2lmZGVmIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWFxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaDoxNDI6ZXh0ZXJuIHZvaWQgcmFkaXhfX21hcmtfcm9kYXRhX3JvKHZvaWQpO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaC0xNDMtZXh0ZXJuIHZvaWQgcmFkaXhfX21hcmtfaW5pdG1lbV9ueCh2b2lkKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3MzMi9tbXUuYz0xOTY9aW50IG1tdV9tYXJrX2luaXRtZW1fbngodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3MzMi9tbXUuYy0yMzUtXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczMyL21tdS5jOjIzNjppbnQgbW11X21hcmtfcm9kYXRhX3JvKHZvaWQpXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczMyL21tdS5jLTIzNy17XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmM9NTI0PXN0YXRpYyBib29sIGhhc2hfX2NoYW5nZV9tZW1vcnlfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmMtNTY0LVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuYzo1NjU6dm9pZCBoYXNoX19tYXJrX3JvZGF0YV9ybyh2b2lkKVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuYy01NjYte1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYz0xODg9c3RhdGljIHZvaWQgcmFkaXhfX2NoYW5nZV9tZW1vcnlfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jLTIzMC1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jOjIzMTp2b2lkIHJhZGl4X19tYXJrX3JvZGF0YV9ybyh2b2lkKVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmMtMjMyLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9tbXVfZGVjbC5oPTE2Mz1pbnQgbW11X21hcmtfaW5pdG1lbV9ueCh2b2lkKTtcXG5hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaDoxNjQ6aW50IG1tdV9tYXJrX3JvZGF0YV9ybyh2b2lkKTtcXG5hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaC0xNjUtI2Vsc2VcXG5hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaD0xNjY9c3RhdGljIGlubGluZSBpbnQgbW11X21hcmtfaW5pdG1lbV9ueCh2b2lkKSB7IHJldHVybiAwOyB9XFxuYXJjaC9wb3dlcnBjL21tL21tdV9kZWNsLmg6MTY3OnN0YXRpYyBpbmxpbmUgaW50IG1tdV9tYXJrX3JvZGF0YV9ybyh2b2lkKSB7IHJldHVybiAwOyB9XFxuYXJjaC9wb3dlcnBjL21tL21tdV9kZWNsLmgtMTY4LSNlbmRpZlxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC84eHguYz0xNzE9aW50IG1tdV9tYXJrX2luaXRtZW1fbngodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvOHh4LmMtMTg4LSNpZmRlZiBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1hcXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoLzh4eC5jOjE4OTppbnQgbW11X21hcmtfcm9kYXRhX3JvKHZvaWQpXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC84eHguYy0xOTAte1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9lNTAwLmM9MjY2PXZvaWQgX19pbml0IGFkanVzdF90b3RhbF9sb3dtZW0odm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvZTUwMC5jLTI4Ny0jaWZkZWYgQ09ORklHX1NUUklDVF9LRVJORUxfUldYXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9lNTAwLmM6Mjg4OmludCBtbXVfbWFya19yb2RhdGFfcm8odm9pZClcXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL2U1MDAuYy0yODkte1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9lNTAwLmM9MzAxPWludCBtbXVfbWFya19pbml0bWVtX254KHZvaWQpXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9lNTAwLmMtMzAyLXtcXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL2U1MDAuYzozMDM6XFx0LyogRXZlcnl0aGluZyBpcyBkb25lIGluIG1tdV9tYXJrX3JvZGF0YV9ybygpICovXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9lNTAwLmMtMzA0LVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYz0xNDU9dm9pZCBtYXJrX2luaXRtZW1fbngodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMtMTUzLSNpZmRlZiBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1hcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jOjE1NDpzdGF0aWMgaW50IF9fbWFya19yb2RhdGFfcm8odm9pZClcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jLTE1NS17XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jLTE2MS1cXHRpZiAodl9ibG9ja19tYXBwZWQoKHVuc2lnbmVkIGxvbmcpX3N0ZXh0ICsgMSkpXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYzoxNjI6XFx0XFx0cmV0dXJuIG1tdV9tYXJrX3JvZGF0YV9ybygpO1xcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMtMTYzLVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYy0xNzQtXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYzoxNzU6dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMtMTc2LXtcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jOjE3NzpcXHRpbnQgZXJyID0gX19tYXJrX3JvZGF0YV9ybygpO1xcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMtMTc4LVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYz0xMjY9c3RydWN0IHBhZ2UgKnBtZF9wYWdlKHBtZF90IHBtZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMtMTQxLSNpZmRlZiBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1hcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jOjE0Mjp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYy0xNDMte1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYy0xNDktXFx0aWYgKHJhZGl4X2VuYWJsZWQoKSlcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jOjE1MDpcXHRcXHRyYWRpeF9fbWFya19yb2RhdGFfcm8oKTtcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jLTE1MS1cXHRlbHNlXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYzoxNTI6XFx0XFx0aGFzaF9fbWFya19yb2RhdGFfcm8oKTtcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jLTE1My19XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2luaXQuYz03MzI9c3RhdGljIF9fbWVtaW5pdCBwZ3Byb3RfdCBwZ3Byb3RfZnJvbV92YSh1aW50cHRyX3QgdmEpXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2luaXQuYy03NDAtXFx0ICogd3JpdHRlbi5cXG5hcmNoL3Jpc2N2L21tL2luaXQuYzo3NDE6XFx0ICogQW5kIHJvZGF0YSBzZWN0aW9uIGlzIG1hcmtlZCByZWFkb25seSBpbiBtYXJrX3JvZGF0YV9yby5cXG5hcmNoL3Jpc2N2L21tL2luaXQuYy03NDItXFx0ICovXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2luaXQuYy03NDgtXFxuYXJjaC9yaXNjdi9tbS9pbml0LmM6NzQ5OnZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcXG5hcmNoL3Jpc2N2L21tL2luaXQuYy03NTAte1xcbi0tXFxuYXJjaC9zMzkwL21tL2luaXQuYz0xMDE9dm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9tbS9pbml0LmMtMTA2LVxcbmFyY2gvczM5MC9tbS9pbml0LmM6MTA3OnZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTEwOC17XFxuLS1cXG5hcmNoL3VtL2tlcm5lbC9tZW0uYz0xMzE9REVDTEFSRV9WTV9HRVRfUEFHRV9QUk9UXFxuYXJjaC91bS9rZXJuZWwvbWVtLmMtMTMyLVxcbmFyY2gvdW0va2VybmVsL21lbS5jOjEzMzp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXFxuYXJjaC91bS9rZXJuZWwvbWVtLmMtMTM0LXtcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfMzIuYz03MjM9c3RhdGljIHZvaWQgbWFya19ueGRhdGFfbngodm9pZClcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfMzIuYy03MzktXFxuYXJjaC94ODYvbW0vaW5pdF8zMi5jOjc0MDp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXFxuYXJjaC94ODYvbW0vaW5pdF8zMi5jLTc0MS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM9MTM1Nz1pbnQga2VybmVsX3NldF90b19yZWFkb25seTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM1OC1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM1OTp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzNjAte1xcbi0tXFxuaW5jbHVkZS9saW51eC9jYWNoZS5oLTU1LSAqIF9fcm9fYWZ0ZXJfaW5pdCBpcyB1c2VkIHRvIG1hcmsgdGhpbmdzIHRoYXQgYXJlIHJlYWQtb25seSBhZnRlciBpbml0IChpLmUuXFxuaW5jbHVkZS9saW51eC9jYWNoZS5oOjU2OiAqIGFmdGVyIG1hcmtfcm9kYXRhX3JvKCkgaGFzIGJlZW4gY2FsbGVkKS4gVGhlc2UgYXJlIGVmZmVjdGl2ZWx5IHJlYWQtb25seSxcXG5pbmNsdWRlL2xpbnV4L2NhY2hlLmgtNTctICogYnV0IG1heSBnZXQgd3JpdHRlbiB0byBkdXJpbmcgaW5pdCwgc28gY2FuJ3QgbGl2ZSBpbiAucm9kYXRhICh2aWEgXFxcImNvbnN0XFxcIikuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2luaXQuaD0xNjU9ZXh0ZXJuIGJvb2wgcm9kYXRhX2VuYWJsZWQ7XFxuaW5jbHVkZS9saW51eC9pbml0Lmg6MTY2OnZvaWQgbWFya19yb2RhdGFfcm8odm9pZCk7XFxuaW5jbHVkZS9saW51eC9pbml0LmgtMTY3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9yb2RhdGFfdGVzdC5oLTItLypcXG5pbmNsdWRlL2xpbnV4L3JvZGF0YV90ZXN0Lmg6MzogKiByb2RhdGFfdGVzdC5oOiBmdW5jdGlvbmFsIHRlc3QgZm9yIG1hcmtfcm9kYXRhX3JvIGZ1bmN0aW9uXFxuaW5jbHVkZS9saW51eC9yb2RhdGFfdGVzdC5oLTQtICpcXG4tLVxcbmluaXQvbWFpbi5jPTE1MjE9c3RhdGljIHZvaWQgbWFya19yZWFkb25seSh2b2lkKVxcbi0tXFxuaW5pdC9tYWluLmMtMTUzMS1cXHRcXHRqdW1wX2xhYmVsX2luaXRfcm8oKTtcXG5pbml0L21haW4uYzoxNTMyOlxcdFxcdG1hcmtfcm9kYXRhX3JvKCk7XFxuaW5pdC9tYWluLmMtMTUzMy1cXHRcXHRkZWJ1Z19jaGVja3d4KCk7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zMDg4PXN0YXRpYyBub2lubGluZSBpbnQgZG9faW5pdF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzE4OC1cXHQgKiBtYXBwaW5ncyB3aGljaCB3b24ndCBiZSBjbGVhbmVkIHVwIHVudGlsIGRvX2ZyZWVfaW5pdCgpIHJ1bnMuICBBbnlcXG5rZXJuZWwvbW9kdWxlL21haW4uYzozMTg5OlxcdCAqIGNvZGUgc3VjaCBhcyBtYXJrX3JvZGF0YV9ybygpIHdoaWNoIGRlcGVuZHMgb24gdGhvc2UgbWFwcGluZ3MgdG9cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zMTkwLVxcdCAqIGJlIGNsZWFuZWQgdXAgbmVlZHMgdG8gc3luYyB3aXRoIHRoZSBxdWV1ZWQgd29yayBieSBpbnZva2luZ1xcbi0tXFxubW0vcm9kYXRhX3Rlc3QuYy0yLS8qXFxubW0vcm9kYXRhX3Rlc3QuYzozOiAqIHJvZGF0YV90ZXN0LmM6IGZ1bmN0aW9uYWwgdGVzdCBmb3IgbWFya19yb2RhdGFfcm8gZnVuY3Rpb25cXG5tbS9yb2RhdGFfdGVzdC5jLTQtICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzg6MDMuNTc5NTAxODIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2OTMyMTc1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB3aGF0IEknbSBsb29raW5nIGF0LCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBtYXJrX3JlYWRvbmx5YCBEdXJpbmcgS2VybmVsIEJvb3QqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVuIGFuZCB3aGVyZSBgbWFya19yZWFkb25seWAgaXMgYmVpbmcgY2FsbGVkLCB3aGljaCwgYXMgSSByZWNhbGwsIGxpa2VseSBwZXJ0YWlucyB0byBtZW1vcnkgcmVnaW9ucy4gVGhlIGhpbnQgaXMgaW4gYGluaXQvbWFpbi5jYCwgYW5kIG1vcmUgc3BlY2lmaWNhbGx5LCBpdCdzIHRyaWdnZXJlZCBkdXJpbmcgYm9vdCwgcmlnaHQgYXJvdW5kIHRoZSB0aW1lIHRoZSBrZXJuZWwgaXMgaW5pdGlhbGl6aW5nLCBiZWZvcmUgaXQgaGFuZHMgY29udHJvbCBvdmVyIHRvIHRoZSBpbml0IHByb2Nlc3MgYW5kIHN0YXJ0cyBmcmVlaW5nIG1lbW9yeSBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBpbml0aWFsIGJvb3Qgc2VxdWVuY2UuIFRoYXQgbmFycm93cyBpdCBkb3duIGNvbnNpZGVyYWJseS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgaW5pdC9tYWluLmNgIG5vdyBhbmQgem9vbSBpbiBhcm91bmQgbGluZSAxNTIxLCB0byBmaW5kIHRoZSBleGFjdCBjb250ZXh0IG9mIHRoYXQgY2FsbCBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucyBhcmUgYmVpbmcgbWFkZSByZWFkLW9ubHkgYXQgdGhhdCBzdGFnZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUga2VybmVsIGlzIHNldHRpbmcgdXAgbWVtb3J5IHByb3RlY3Rpb24gZWFybHkgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTg5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzg6MDcuMjcyNzIzMTgxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTE1OlxcdFxcdFxcdHByX3dhcm4oXFxcIkludmFsaWQgb3B0aW9uIHN0cmluZyBmb3Igcm9kYXRhOiAnJXMnXFxcXG5cXFwiLCBzdHIpO1xcbjE1MTY6XFx0XFx0cmV0dXJuIDA7XFxuMTUxNzpcXHR9XFxuMTUxODpcXHRlYXJseV9wYXJhbShcXFwicm9kYXRhXFxcIiwgc2V0X2RlYnVnX3JvZGF0YSk7XFxuMTUxOTpcXHQjZW5kaWZcXG4xNTIwOlxcdFxcbjE1MjE6XFx0c3RhdGljIHZvaWQgbWFya19yZWFkb25seSh2b2lkKVxcbjE1MjI6XFx0e1xcbjE1MjM6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NUUklDVF9LRVJORUxfUldYKSBcXHUwMDI2XFx1MDAyNiByb2RhdGFfZW5hYmxlZCkge1xcbjE1MjQ6XFx0XFx0XFx0LypcXG4xNTI1OlxcdFxcdFxcdCAqIGxvYWRfbW9kdWxlKCkgcmVzdWx0cyBpbiBXK1ggbWFwcGluZ3MsIHdoaWNoIGFyZSBjbGVhbmVkXFxuMTUyNjpcXHRcXHRcXHQgKiB1cCB3aXRoIGluaXRfZnJlZV93cS4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgcXVldWVkIHdvcmsgaXNcXG4xNTI3OlxcdFxcdFxcdCAqIGZsdXNoZWQgc28gdGhhdCB3ZSBkb24ndCBoaXQgZmFsc2UgcG9zaXRpdmVzIGxvb2tpbmcgZm9yXFxuMTUyODpcXHRcXHRcXHQgKiBpbnNlY3VyZSBwYWdlcyB3aGljaCBhcmUgVytYLlxcbjE1Mjk6XFx0XFx0XFx0ICovXFxuMTUzMDpcXHRcXHRcXHRmbHVzaF9tb2R1bGVfaW5pdF9mcmVlX3dvcmsoKTtcXG4xNTMxOlxcdFxcdFxcdGp1bXBfbGFiZWxfaW5pdF9ybygpO1xcbjE1MzI6XFx0XFx0XFx0bWFya19yb2RhdGFfcm8oKTtcXG4xNTMzOlxcdFxcdFxcdGRlYnVnX2NoZWNrd3goKTtcXG4xNTM0OlxcdFxcdFxcdHJvZGF0YV90ZXN0KCk7XFxuMTUzNTpcXHRcXHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX1NUUklDVF9LRVJORUxfUldYKSkge1xcbjE1MzY6XFx0XFx0XFx0cHJfaW5mbyhcXFwiS2VybmVsIG1lbW9yeSBwcm90ZWN0aW9uIGRpc2FibGVkLlxcXFxuXFxcIik7XFxuMTUzNzpcXHRcXHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX1NUUklDVF9LRVJORUxfUldYKSkge1xcbjE1Mzg6XFx0XFx0XFx0cHJfd2FybihcXFwiS2VybmVsIG1lbW9yeSBwcm90ZWN0aW9uIG5vdCBzZWxlY3RlZCBieSBrZXJuZWwgY29uZmlnLlxcXFxuXFxcIik7XFxuMTUzOTpcXHRcXHR9IGVsc2Uge1xcbjE1NDA6XFx0XFx0XFx0cHJfd2FybihcXFwiVGhpcyBhcmNoaXRlY3R1cmUgZG9lcyBub3QgaGF2ZSBrZXJuZWwgbWVtb3J5IHByb3RlY3Rpb24uXFxcXG5cXFwiKTtcXG4xNTQxOlxcdFxcdH1cXG4xNTQyOlxcdH1cXG4xNTQzOlxcdFxcbjE1NDQ6XFx0dm9pZCBfX3dlYWsgZnJlZV9pbml0bWVtKHZvaWQpXFxuMTU0NTpcXHR7XFxuMTU0NjpcXHRcXHRmcmVlX2luaXRtZW1fZGVmYXVsdChQT0lTT05fRlJFRV9JTklUTUVNKTtcXG4xNTQ3OlxcdH1cXG4xNTQ4OlxcdFxcbjE1NDk6XFx0c3RhdGljIGludCBfX3JlZiBrZXJuZWxfaW5pdCh2b2lkICp1bnVzZWQpXFxuMTU1MDpcXHR7XFxuMTU1MTpcXHRcXHRpbnQgcmV0O1xcbjE1NTI6XFx0XFxuMTU1MzpcXHRcXHRpbml0X3VzZXJzcGFjZV9mcygpO1xcbjE1NTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM4OjA3LjI3Mjg0MjA4MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTA5MDI0NDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgV15YIFZpb2xhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHZlcmlmeV9yd3hgIGZ1bmN0aW9uIGFuZCBhIHBvdGVudGlhbCBXcml0ZSBYT1IgRXhlY3V0ZSAoV15YKSB2aW9sYXRpb24uIFRoZSBjcnV4IG9mIHRoZSBpc3N1ZSBzZWVtcyB0byBiZSB0aWVkIHRvIHRoZSBga2VybmVsX3NldF90b19yZWFkb25seWAgZmxhZywgd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgcmVhZC1vbmx5IGRhdGEgc2VjdGlvbnMgaGF2ZSBiZWVuIHByb3Blcmx5IG1hcmtlZCBhcyBzdWNoLiBJJ20gd29uZGVyaW5nIHdoYXQgaGFwcGVucyBpbiBhIGZldyBzcGVjaWZpYyBzY2VuYXJpb3MuXG5cbkZpcnN0LCBsZXQncyBleHBsb3JlIHdoYXQgb2NjdXJzIHdoZW4gYCFyb2RhdGFfZW5hYmxlZGAsIHdoaWNoIGVzc2VudGlhbGx5IG1lYW5zIHRoZSBrZXJuZWwgaXMgYm9vdGVkIHdpdGggYHJvZGF0YT1vZmZgIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZW4gYG1hcmtfcm9kYXRhX3JvKClgIGlzIG5ldmVyIGludm9rZWQuIENvbnNlcXVlbnRseSwgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIHJlbWFpbnMgMC4gVGhpcyBsYWNrIG9mIHNldHRpbmcgdGhlIGZsYWcgY291bGQgYmUgdGhlIHJvb3QgY2F1c2UuXG5cbk5vdywgd2hhdCBpZiB0aGVyZSdzIGEgc2l0dWF0aW9uIHdoZXJlIGVhcmx5IGJvb3QgY29kZSwgdXNpbmcgYHNldF9tZW1vcnlfKmAgY2FsbHMsIG1vZGlmaWVzIG1lbW9yeSByZWdpb25zICpiZWZvcmUqIGBtYXJrX3JvZGF0YV9ybygpYCBpcyBldmVuIGNhbGxlZD8gVGhpcyBjb3VsZCBhbHNvIGxlYWQgdG8gc2ltaWxhciBwcm9ibGVtcy4gSSBuZWVkIHRvIGtlZXAgdGhhdCB0aW1pbmcgaW4gbWluZC5cblxuSSdtIHNlZWluZyB0aGF0IGB2ZXJpZnlfcnd4YCBpcyBmaXJpbmcgYFdBUk5fT05DRWAgZHVyaW5nIGJvb3QsIGluZGljYXRpbmcgYSBwb3RlbnRpYWwgV15YIGlzc3VlLiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSB3YXJuaW5nIGxvZ2ljIHRvIGluY2x1ZGUgdGhlIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBjaGVjay4gVGhlIGlkZWEgaXMsIGlmIHRoZSBmbGFnICppc24ndCogc2V0LCB3ZSBlbWl0IGEgc3BlY2lmaWMgd2FybmluZywgYW5kIG90aGVyd2lzZSBpc3N1ZSB0aGUgZ2VuZXJhbCBXXlggd2FybmluZy5cblxuV2FpdCBhIHNlY29uZCwgYmVmb3JlIEkgZGlnIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGNvbnN1bHQgYGdpdCBsb2dgIG9yIHRoZSBjb21taXQgaGlzdG9yeSBhcm91bmQgYHZlcmlmeV9yd3hgLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2XigJR3aGF0IHByb2JsZW1zIGl0IHdhcyBpbnRlbmRlZCB0byBzb2x2ZSBhbmQgd2hhdCBhc3N1bXB0aW9ucyB3ZXJlIG1hZGXigJR3aWxsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCBJJ20gZGVhbGluZyB3aXRoLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozODoxNi4xODE4Njg2MTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjQxNDY3ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmVyaWZ5X3J3eFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTYyMz1zdGF0aWMgaW5saW5lIHBncHJvdF90IHN0YXRpY19wcm90ZWN0aW9ucyhwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy02NzAtICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo2NzE6c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2ZXJpZnlfcnd4KHBncHJvdF90IG9sZCwgcGdwcm90X3QgbmV3LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNjcyLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnBnLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz05NDM9c3RhdGljIGludCBfX3Nob3VsZF9zcGxpdF9sYXJnZV9wYWdlKHB0ZV90ICprcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTEwNjYtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxMDY3OlxcdG5ld19wcm90ID0gdmVyaWZ5X3J3eChvbGRfcHJvdCwgbmV3X3Byb3QsIGxwYWRkciwgb2xkX3BmbiwgbnVtcGFnZXMsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xMDY4LVxcdFxcdFxcdCAgICAgIG54LCBydyk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE4NTA9c3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODgxLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTg4MjpcXHRcXHRuZXdfcHJvdCA9IHZlcmlmeV9yd3gob2xkX3Byb3QsIG5ld19wcm90LCBhZGRyZXNzLCBwZm4sIDEsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODgzLVxcdFxcdFxcdFxcdCAgICAgIG54LCBydyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM4OjE4LjEwNjAyMDA0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODM1MjM0Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjpcblxuKipBbmFseXppbmcgYHZlcmlmeV9yd3hgIGFuZCBDb250ZXh0KipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gdGhlIGB2ZXJpZnlfcnd4YCBmdW5jdGlvbiwgd2hpY2ggaW1wbGllcyBzb21lIGtpbmQgb2YgbWVtb3J5IGFjY2VzcyB2YWxpZGF0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byByZWFkLXdyaXRlLWV4ZWN1dGUgcGVybWlzc2lvbnMuIFRoZSBmYWN0IHRoYXQgaXQncyBuZXN0bGVkIHdpdGhpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgaW1tZWRpYXRlbHkgbmFycm93cyB0aGUgc2NvcGUuIFRoaXMgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBtZW1vcnkgbWFuYWdlbWVudCwgcG90ZW50aWFsbHkgaW5jbHVkaW5nIFBhZ2UgQXR0cmlidXRlIFRhYmxlIChQQVQpIG1hbmlwdWxhdGlvbiwgYW5kIHBhcnRpY3VsYXJseSwgdGhlIHNldHRpbmcgb2YgbWVtb3J5IGF0dHJpYnV0ZXMuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhIGZvciBzZWN1cml0eSBhbmQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBob3cgaXQncyBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3csIHRoZSB0eXBlcyBvZiB2YWxpZGF0aW9ucyBkb25lIGFuZCBob3cgcGVybWlzc2lvbnMgYXJlIGVuZm9yY2VkLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMsIHJldHVybiB2YWx1ZXMsIGFuZCBhbnkgc2lkZSBlZmZlY3RzIGl0IG1heSBoYXZlLCBzdWNoIGFzIGVycm9yIHJlcG9ydGluZyBvciBjaGFuZ2VzIHRvIGRhdGEgc3RydWN0dXJlcy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIHVzZWQgYW5kIHRoZWlyIHNpemVzLCBhcyB0aGVzZSBjYW4gdGVsbCBhIGxvdCBhYm91dCB0aGUgaW50ZW5kZWQgdXNhZ2UgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoaXMgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozODoyMC45NDEyNTY0OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0XFxuIDY2MTpcXHRcXHRyZXMgPSBwcm90ZWN0X3JvZGF0YShwZm4sIHBmbiArIG5wZyAtIDEpO1xcbiA2NjI6XFx0XFx0Y2hlY2tfY29uZmxpY3Qod2Fybmx2bCwgcHJvdCwgcmVzLCBzdGFydCwgZW5kLCBwZm4sIFxcXCJSb2RhdGEgUk9cXFwiKTtcXG4gNjYzOlxcdFxcdGZvcmJpZGRlbiB8PSByZXM7XFxuIDY2NDpcXHRcXG4gNjY1OlxcdFxcdHJldHVybiBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIFxcdTAwMjYgfmZvcmJpZGRlbik7XFxuIDY2NjpcXHR9XFxuIDY2NzpcXHRcXG4gNjY4OlxcdC8qXFxuIDY2OTpcXHQgKiBWYWxpZGF0ZSBzdHJpY3QgV15YIHNlbWFudGljcy5cXG4gNjcwOlxcdCAqL1xcbiA2NzE6XFx0c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2ZXJpZnlfcnd4KHBncHJvdF90IG9sZCwgcGdwcm90X3QgbmV3LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiA2NzI6XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucGcsXFxuIDY3MzpcXHRcXHRcXHRcXHRcXHQgIGJvb2wgbngsIGJvb2wgcncpXFxuIDY3NDpcXHR7XFxuIDY3NTpcXHRcXHR1bnNpZ25lZCBsb25nIGVuZDtcXG4gNjc2OlxcdFxcbiA2Nzc6XFx0XFx0LypcXG4gNjc4OlxcdFxcdCAqIDMyLWJpdCBoYXMgc29tZSB1bmZpeGFibGUgVytYIGlzc3VlcywgbGlrZSBFRkkgY29kZVxcbiA2Nzk6XFx0XFx0ICogYW5kIHdyaXRlYWJsZSBkYXRhIGJlaW5nIGluIHRoZSBzYW1lIHBhZ2UuICBEaXNhYmxlXFxuIDY4MDpcXHRcXHQgKiBkZXRlY3Rpb24gYW5kIGVuZm9yY2VtZW50IHRoZXJlLlxcbiA2ODE6XFx0XFx0ICovXFxuIDY4MjpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWDg2XzMyKSlcXG4gNjgzOlxcdFxcdFxcdHJldHVybiBuZXc7XFxuIDY4NDpcXHRcXG4gNjg1OlxcdFxcdC8qIE9ubHkgdmVyaWZ5IHdoZW4gTlggaXMgc3VwcG9ydGVkOiAqL1xcbiA2ODY6XFx0XFx0aWYgKCEoX19zdXBwb3J0ZWRfcHRlX21hc2sgXFx1MDAyNiBfUEFHRV9OWCkpXFxuIDY4NzpcXHRcXHRcXHRyZXR1cm4gbmV3O1xcbiA2ODg6XFx0XFxuIDY4OTpcXHRcXHRpZiAoISgocGdwcm90X3ZhbChvbGQpIF4gcGdwcm90X3ZhbChuZXcpKSBcXHUwMDI2IChfUEFHRV9SVyB8IF9QQUdFX05YKSkpXFxuIDY5MDpcXHRcXHRcXHRyZXR1cm4gbmV3O1xcbiA2OTE6XFx0XFxuIDY5MjpcXHRcXHRpZiAoKHBncHJvdF92YWwobmV3KSBcXHUwMDI2IChfUEFHRV9SVyB8IF9QQUdFX05YKSkgIT0gX1BBR0VfUlcpXFxuIDY5MzpcXHRcXHRcXHRyZXR1cm4gbmV3O1xcbiA2OTQ6XFx0XFxuIDY5NTpcXHRcXHQvKiBOb24tbGVhZiB0cmFuc2xhdGlvbiBlbnRyaWVzIGNhbiBkaXNhYmxlIHdyaXRpbmcgb3IgZXhlY3V0aW9uLiAqL1xcbiA2OTY6XFx0XFx0aWYgKCFydyB8fCBueClcXG4gNjk3OlxcdFxcdFxcdHJldHVybiBuZXc7XFxuIDY5ODpcXHRcXG4gNjk5OlxcdFxcdGVuZCA9IHN0YXJ0ICsgbnBnICogUEFHRV9TSVpFIC0gMTtcXG4gNzAwOlxcdFxcbiA3MDE6XFx0XFx0LypcXG4gNzAyOlxcdFxcdCAqIElmIHRoZSBrZXJuZWwgdGV4dCBpcyBzdGlsbCBSV1gsIGdlbnRseSBjb21wbGFpbiwgdGhpcyBjb3VsZCBiZSBhXFxuIDcwMzpcXHRcXHQgKiBmYWxzZSBwb3NpdGl2ZS5cXG4gNzA0OlxcdFxcdCAqIE9uY2UgZGVidWdfY2hlY2t3eCgpIGJlY29tZXMgbWFuZGF0b3J5IGZvciBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gsXFxuIDcwNTpcXHRcXHQgKiB0aGUgd2FybmluZyBjYW4gYmUgcmVtb3ZlZCBjb21wbGV0ZWx5LlxcbiA3MDY6XFx0XFx0ICovXFxuIDcwNzpcXHRcXHRpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpIHtcXG4gNzA4OlxcdFxcdFxcdHByX3dhcm5fb25jZSgxLCBcXFwiQ1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVxcdTAwM2UgJTAxNmxseCByYW5nZTogMHglMDE2bHggLSAweCUwMTZseCBQRk4gJWx4XFxcXG5cXFwiLFxcbiA3MDk6XFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwob2xkKSxcXG4gNzEwOlxcdFxcdFxcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXFxuIDcxMTpcXHRcXHRcXHQgIHN0YXJ0LCBlbmQsIHBmbik7XFxuIDcxMjpcXHRcXHRcXHRyZXR1cm4gbmV3O1xcbiA3MTM6XFx0XFx0fVxcbiA3MTQ6XFx0XFxuIDcxNTpcXHRcXHRXQVJOX09OQ0UoMSwgXFxcIkNQQSBkZXRlY3RlZCBXXlggdmlvbGF0aW9uOiAlMDE2bGx4IC1cXHUwMDNlICUwMTZsbHggcmFuZ2U6IDB4JTAxNmx4IC0gMHglMDE2bHggUEZOICVseFxcXFxuXFxcIixcXG4gNzE2OlxcdFxcdFxcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksXFxuIDcxNzpcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChuZXcpLFxcbiA3MTg6XFx0XFx0XFx0ICBzdGFydCwgZW5kLCBwZm4pO1xcbiA3MTk6XFx0XFxuIDcyMDpcXHRcXHQvKlxcbiA3MjE6XFx0XFx0ICogRm9yIG5vdywgYWxsb3cgYWxsIHBlcm1pc3Npb24gY2hhbmdlIGF0dGVtcHRzIGJ5IHJldHVybmluZyB0aGVcXG4gNzIyOlxcdFxcdCAqIGF0dGVtcHRlZCBwZXJtaXNzaW9ucy4gIFRoaXMgY2FuICdyZXR1cm4gb2xkJyB0byBhY3RpdmVseVxcbiA3MjM6XFx0XFx0ICogcmVmdXNlIHRoZSBwZXJtaXNzaW9uIGNoYW5nZSBhdCBhIGxhdGVyIHRpbWUuXFxuIDcyNDpcXHRcXHQgKi9cXG4gNzI1OlxcdFxcdHJldHVybiBuZXc7XFxuIDcyNjpcXHR9XFxuIDcyNzpcXHRcXG4gNzI4OlxcdC8qXFxuIDcyOTpcXHQgKiBMb29rdXAgdGhlIHBhZ2UgdGFibGUgZW50cnkgZm9yIGEgdmlydHVhbCBhZGRyZXNzIGluIGEgc3BlY2lmaWMgcGdkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozODoyMC45NDE0Njc0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3OTI4MjUzODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRXZhbHVhdGlvbiBmb3IgdGhlIENQQSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCB3YXJyYW50cyBmdXp6aW5nLiBUaGlzIGlzIGEgY29yZSBzdWJzeXN0ZW0gcmVsYXRlZCB0byB4ODYgTWVtb3J5IE1hbmFnZW1lbnQgYW5kIENoYW5nZSBQYWdlIEF0dHJpYnV0ZXMgKENQQSksIHNvIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ2l2ZSBpdCBhIGNsb3NlIGxvb2suXG5cbkZpcnN0LCB0aGUgY29yZSB0cmlhZ2UgcGhpbG9zb3BoeSBuZWVkcyB0byBiZSBjb25zaWRlcmVkLiAgVGhlIHByaW1hcnkgZ29hbCBvZiBmdXp6aW5nIGlzIHRvIHVuZWFydGggY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIG5ld2x5IGV4cG9zZWQgYnVncywgcGFydGljdWxhcmx5IHRob3NlIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLiBUaGUga2V5IGhlcmUgaXMgKnJlYWNoYWJpbGl0eSog4oCTIGNhbiB0aGUgY29kZSBhY3R1YWxseSBleGVjdXRlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgb3IgdmlhIGVtdWxhdGVkIGRldmljZXM/IFRoZSBkb2N1bWVudGF0aW9uIHN0cmVzc2VzIG5vdCB0cnVzdGluZyBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgb3IgcmVmYWN0b3JpbmcgY2xhaW1zIGJsaW5kbHksIGFuZCB0aGF0IG5ldy9tb2RpZmllZCBhc3NlcnRpb25zICptdXN0KiBiZSBmdXp6ZWQgaWYgdGhleSdyZSBpbiByZWFjaGFibGUgY29kZS4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvci5cblxuTm93IGxldCdzIGNvbnNpZGVyIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhlIHBhdGNoIHdvdWxkIGJlIGlnbm9yZWQgaWYgdGhlIGNvZGUgbW9kaWZpZWQgaXMgKnN0cmljdGx5KiBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSwgZGVjb3JhdGl2ZSBsb2dnaW5nLCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsIG9yIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4gIFRoYXQgbGFzdCBwb2ludCDigJMgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIOKAkyBpcyBpbXBvcnRhbnQuIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3Mgb25seSB1c2VkIGR1cmluZyBob3QtdW5wbHVnLCBvciBjb2RlIHNwZWNpZmljIHRvIG90aGVyIGFyY2hpdGVjdHVyZXMgYXJlIG91dC5cblxuVGhlbiwgdGhlcmUgYXJlIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYS4gV2UgKmRlZmluaXRlbHkqIHdhbnQgdG8gZnV6eiBpZiB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBUaGlzIGluY2x1ZGVzIGFueSBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBsb2NraW5nLCBCUEYsIHRoZSBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLiBSZWZhY3RvcmluZyByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsZ29yaXRobSBmbG93cyBpcyBhbHNvIGEgdHJpZ2dlci4gRmluYWxseSwgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgdGhlIGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzICptYW5kYXRlcyogZnV6emluZy5cblxuTm93LCBsZXQncyBhbmFseXplIHRoZSBwYXRjaCBpdHNlbGYuIFRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhbiBgaWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KWAgY29uZGl0aW9uIHdpdGhpbiB0aGUgYHZlcmlmeV9yd3goKWAgZnVuY3Rpb24uIFRoaXMgYWZmZWN0cyBob3cgdGhlIFwiV15YIHZpb2xhdGlvblwiIGlzIGhhbmRsZWQuICBQcmV2aW91c2x5LCBgV0FSTl9PTkNFYCB3YXMgYWx3YXlzIHRyaWdnZXJlZC4gTm93LCBpZiBga2VybmVsX3NldF90b19yZWFkb25seWAgaXMgZmFsc2UsIGl0IGxvZ3MgYSBgcHJfd2Fybl9vbmNlYCBtZXNzYWdlLiBUaGUga2V5IGlzIHdoZW4gaXMgdGhpcyBga2VybmVsX3NldF90b19yZWFkb25seWAgZmxhZyBmYWxzZT9cblxuQWgsIHJpZ2h0IOKAkyBga2VybmVsX3NldF90b19yZWFkb25seWAgaXMgemVybyAqZHVyaW5nIGJvb3QqLCAqYmVmb3JlKiBgbWFya19yb2RhdGFfcm8oKWAgaXMgY2FsbGVkLiBUaGlzIGlzIGltcG9ydGFudDogaXQncyBhbHNvIHplcm8gd2hlbiB0aGUga2VybmVsIGlzIGJvb3RlZCB3aXRoIGByb2RhdGE9b2ZmYC4gU3l6a2FsbGVyIG1pZ2h0IGJvb3Qgd2l0aCBgcm9kYXRhPW9mZmAsIHdoaWNoIG1lYW5zIHRoaXMgbmV3IGJyYW5jaCBjb3VsZCBiZSBmcmVxdWVudGx5IHRha2VuIGR1cmluZyBmdXp6aW5nLiBDUEEgKENoYW5nZSBQYWdlIEF0dHJpYnV0ZSkgaXMgY2FsbGVkIGF0IHJ1bnRpbWUgd2hlbiBtb2R1bGVzIGFyZSBsb2FkZWQvdW5sb2FkZWQsIEJQRiBKSVQgYWxsb2NhdGVzL2ZyZWVzIGV4ZWN1dGFibGUgbWVtb3J5LCBhbmQgc2V0X21lbW9yeV9yby9ydy94L254L3VjL3diIGlzIGNhbGxlZCB2aWEgdmFyaW91cyBkcml2ZXJzIGFuZCBzdWJzeXN0ZW1zLiBUaGlzIHN1Z2dlc3RzIHRoZSBjb2RlIGlzICphYnNvbHV0ZWx5KiByZWFjaGFibGUuXG5cblRvIGJlIGNlcnRhaW4sIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdobyBjYWxscyBDUEEgZnVuY3Rpb25zIGF0IHJ1bnRpbWUuIEkgbmVlZCB0byBncmVwIHRoZSBrZXJuZWwgZm9yIGNhbGxlcnMgb2YgYGNoYW5nZV9wYWdlX2F0dHJgIG9yIGBzZXRfbWVtb3J5X2AgdG8gY29uZmlybSByZWFjaGFiaWxpdHkuXG5cbkJhc2VkIG9uIHRoaXMsIG15IHByZWxpbWluYXJ5IGV2YWx1YXRpb24gaXMgKnllcyosIHRoaXMgcGF0Y2ggKmRvZXMqIHdhcnJhbnQgZnV6emluZy4gIFRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIG5ldyBjb2RlIHBhdGggdGhhdCdzIGxpa2VseSByZWFjaGFibGUsIGVzcGVjaWFsbHkgd2l0aCBgcm9kYXRhPW9mZmAsIGFuZCBpbnZvbHZlcyBhIHBvdGVudGlhbGx5IGltcG9ydGFudCBjaGFuZ2UgaW4gYmVoYXZpb3IuIFRoaXMgZGVmaW5pdGVseSBoYXMgdGhlIHBvdGVudGlhbCB0byBleHBvc2UgbGF0ZW50IGJ1Z3Mgb3IgdHJpZ2dlciBuZXcgYXNzZXJ0aW9ucywgc28gSSB3b3VsZCBmbGFnIHRoaXMgZm9yIHRoZSBmdXp6aW5nIHF1ZXVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA4MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozODoyOC44Njk3MjMyMzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NTY3Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9tZW1vcnlfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc2MSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuYXJjaC94ODYvYm9vdC9zdGFydHVwL2V4cG9ydHMuaD02PVBST1ZJREUoZWFybHlfc2V0X3BhZ2VzX3N0YXRlXFx0XFx0PSBfX3BpX2Vhcmx5X3NldF9wYWdlc19zdGF0ZSk7XFxuYXJjaC94ODYvYm9vdC9zdGFydHVwL2V4cG9ydHMuaDo3OlBST1ZJREUoZWFybHlfc25wX3NldF9tZW1vcnlfcHJpdmF0ZVxcdD0gX19waV9lYXJseV9zbnBfc2V0X21lbW9yeV9wcml2YXRlKTtcXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvZXhwb3J0cy5oOjg6UFJPVklERShlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWRcXHQ9IF9fcGlfZWFybHlfc25wX3NldF9tZW1vcnlfc2hhcmVkKTtcXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvZXhwb3J0cy5oLTktUFJPVklERShnZXRfaHZfZmVhdHVyZXNcXHRcXHRcXHQ9IF9fcGlfZ2V0X2h2X2ZlYXR1cmVzKTtcXG4tLVxcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9tYXBfa2VybmVsLmM9MzM9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHNtZV9wb3N0cHJvY2Vzc19zdGFydHVwKHN0cnVjdCBib290X3BhcmFtcyAqYnAsXFxuLS1cXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvbWFwX2tlcm5lbC5jLTU5LVxcdFxcdFxcdCAqIG1hcHBpbmcgKGtlcm5lbCAudGV4dCkuIFBWQUxJREFURSwgYnkgd2F5IG9mXFxuYXJjaC94ODYvYm9vdC9zdGFydHVwL21hcF9rZXJuZWwuYzo2MDpcXHRcXHRcXHQgKiBlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQoKSwgcmVxdWlyZXMgYSB2YWxpZCB2aXJ0dWFsXFxuYXJjaC94ODYvYm9vdC9zdGFydHVwL21hcF9rZXJuZWwuYy02MS1cXHRcXHRcXHQgKiBhZGRyZXNzIGJ1dCB0aGUga2VybmVsIGlzIGN1cnJlbnRseSBydW5uaW5nIG9mZiBvZiB0aGUgaWRlbnRpdHlcXG4tLVxcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9tYXBfa2VybmVsLmMtNjMtXFx0XFx0XFx0ICovXFxuYXJjaC94ODYvYm9vdC9zdGFydHVwL21hcF9rZXJuZWwuYzo2NDpcXHRcXHRcXHRlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQocGFkZHIsIHBhZGRyLCBQVFJTX1BFUl9QTUQpO1xcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9tYXBfa2VybmVsLmMtNjUtXFxuLS1cXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc2V2LXN0YXJ0dXAuYz00OT1lYXJseV9zZXRfcGFnZXNfc3RhdGUodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkcixcXG4tLVxcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9zZXYtc3RhcnR1cC5jLTY2LVxcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9zZXYtc3RhcnR1cC5jOjY3OnZvaWQgX19pbml0IGVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkcixcXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc2V2LXN0YXJ0dXAuYy02OC1cXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBucGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc2V2LXN0YXJ0dXAuYy05MS1cXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc2V2LXN0YXJ0dXAuYzo5Mjp2b2lkIF9faW5pdCBlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkcixcXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc2V2LXN0YXJ0dXAuYy05My1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5wYWdlcylcXG4tLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYz0zODc9c3RhdGljIHZvaWQgc2V0X3BhZ2VzX3N0YXRlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLCBpbnQgb3ApXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNDA1LVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYzo0MDY6dm9pZCBzbnBfc2V0X21lbW9yeV9zaGFyZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBucGFnZXMpXFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTQwNy17XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNDEzLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYzo0MTQ6dm9pZCBzbnBfc2V0X21lbW9yeV9wcml2YXRlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy00MTUte1xcbi0tXFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jPTU0ND1zdGF0aWMgdm9pZCB1bnNoYXJlX2FsbF9tZW1vcnkodm9pZClcXG4tLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy01ODUtXFx0XFx0XFx0c2V0X3B0ZV9lbmMocHRlLCBsZXZlbCwgKHZvaWQgKilhZGRyKTtcXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6NTg2OlxcdFxcdFxcdHNucF9zZXRfbWVtb3J5X3ByaXZhdGUoYWRkciwgbnBhZ2VzKTtcXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNTg3LVxcdFxcdH1cXG4tLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy02MDMtXFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKV9fc3RhcnRfYnNzX2RlY3J5cHRlZDtcXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6NjA0OlxcdHNucF9zZXRfbWVtb3J5X3ByaXZhdGUoYWRkciwgbnBhZ2VzKTtcXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNjA1LVxcbi0tXFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jPTYxMD12b2lkIHNucF9rZXhlY19iZWdpbih2b2lkKVxcbi0tXFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTYyMy1cXHQgKi9cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6NjI0OlxcdGlmICghc2V0X21lbW9yeV9lbmNfc3RvcF9jb252ZXJzaW9uKCkpXFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTYyNS1cXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gc3RvcCBzaGFyZWRcXHUwMDNjLVxcdTAwM2Vwcml2YXRlIGNvbnZlcnNpb25zXFxcXG5cXFwiKTtcXG4tLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYz02ODc9dm9pZCBzbnBfa2V4ZWNfZmluaXNoKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNzIxLVxcdFxcdHNldF9wdGVfZW5jKHB0ZSwgbGV2ZWwsICh2b2lkICopYWRkcik7XFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jOjcyMjpcXHRcXHRzbnBfc2V0X21lbW9yeV9wcml2YXRlKGFkZHIsIChzaXplIC8gUEFHRV9TSVpFKSk7XFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTcyMy1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM9MTIwOD1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9naGNiKGludCBjcHUpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtMTIxNC1cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6MTIxNTpcXHRlcnIgPSBlYXJseV9zZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZylcXHUwMDI2ZGF0YS1cXHUwMDNlZ2hjYl9wYWdlLFxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy0xMjE2LVxcdFxcdFxcdFxcdFxcdCBzaXplb2YoZGF0YS1cXHUwMDNlZ2hjYl9wYWdlKSk7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM9MTQ3Mz1zdGF0aWMgdm9pZCBmcmVlX3NoYXJlZF9wYWdlcyh2b2lkICpidWYsIHNpemVfdCBzeilcXG4tLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy0xNDgwLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYzoxNDgxOlxcdHJldCA9IHNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKWJ1ZiwgbnBhZ2VzKTtcXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtMTQ4Mi1cXHRpZiAocmV0KSB7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM9MTQ5MD1zdGF0aWMgdm9pZCAqYWxsb2Nfc2hhcmVkX3BhZ2VzKHNpemVfdCBzeilcXG4tLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy0xNDk5LVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYzoxNTAwOlxcdHJldCA9IHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKSwgbnBhZ2VzKTtcXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtMTUwMS1cXHRpZiAocmV0KSB7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xMDEwPXN0YXRpYyB2b2lkIHRkeF9rZXhlY19iZWdpbih2b2lkKVxcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTAyMC1cXHQgKi9cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMDIxOlxcdGlmICghc2V0X21lbW9yeV9lbmNfc3RvcF9jb252ZXJzaW9uKCkpXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTAyMi1cXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gc3RvcCBzaGFyZWRcXHUwMDNjLVxcdTAwM2Vwcml2YXRlIGNvbnZlcnNpb25zXFxcXG5cXFwiKTtcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmM9MTE4PXN0YXRpYyBpbnQgaHZfY3B1X2luaXQodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtMTU4LVxcdFxcdFxcdGlmICgqaHZwIFxcdTAwMjZcXHUwMDI2ICFtc19oeXBlcnYucGFyYXZpc29yX3ByZXNlbnQgXFx1MDAyNlxcdTAwMjYgaHZfaXNvbGF0aW9uX3R5cGVfc25wKCkpIHtcXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jOjE1OTpcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0Uoc2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpKCpodnApLCAxKSk7XFxuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYy0xNjAtXFx0XFx0XFx0XFx0bWVtc2V0KCpodnAsIDAsIFBBR0VfU0laRSk7XFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM9NjE3PXN0YXRpYyB2b2lkIGh2X3Z0b21fa2V4ZWNfYmVnaW4odm9pZClcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy02MjctXFx0ICovXFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjYyODpcXHRpZiAoIXNldF9tZW1vcnlfZW5jX3N0b3BfY29udmVyc2lvbigpKVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy02MjktXFx0XFx0cHJfd2FybihcXFwiRmFpbGVkIHRvIHN0b3Agc2hhcmVkXFx1MDAzYy1cXHUwMDNlcHJpdmF0ZSBjb252ZXJzaW9uc1xcXFxuXFxcIik7XFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM9Njc3PXN0YXRpYyBpbnQgaHZfbWFya19ncGFfdmlzaWJpbGl0eSh1MTYgY291bnQsIGNvbnN0IHU2NCBwZm5bXSxcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy03MzctICogV2hlbiB0cmFuc2l0aW9uaW5nIG1lbW9yeSBiZXR3ZWVuIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGVkLCB0aGUgY2FsbGVyXFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjczODogKiBvZiBzZXRfbWVtb3J5X2VuY3J5cHRlZCgpIG9yIHNldF9tZW1vcnlfZGVjcnlwdGVkKCkgaXMgcmVzcG9uc2libGUgZm9yXFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTczOS0gKiBlbnN1cmluZyB0aGF0IHRoZSBtZW1vcnkgaXNuJ3QgaW4gdXNlIGFuZCBpc24ndCByZWZlcmVuY2VkIHdoaWxlIHRoZVxcbi0tXFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jPTc1Nj1zdGF0aWMgaW50IGh2X3Z0b21fY2xlYXJfcHJlc2VudCh1bnNpZ25lZCBsb25nIGtidWZmZXIsIGludCBwYWdlY291bnQsIGJvb2wgZW5jKVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy03NTcte1xcbmFyY2gveDg2L2h5cGVydi9pdm0uYzo3NTg6XFx0cmV0dXJuIHNldF9tZW1vcnlfbnAoa2J1ZmZlciwgcGFnZWNvdW50KTtcXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmMtNzU5LX1cXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYz03Njk9c3RhdGljIGludCBodl92dG9tX3NldF9ob3N0X3Zpc2liaWxpdHkodW5zaWduZWQgbG9uZyBrYnVmZmVyLCBpbnQgcGFnZWNvdW50LCBib29sIGVuYylcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy03ODEtXFx0XFx0cmV0ID0gLUVOT01FTTtcXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM6NzgyOlxcdFxcdGdvdG8gZXJyX3NldF9tZW1vcnlfcDtcXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmMtNzgzLVxcdH1cXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy04MDgtXFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjgwOTplcnJfc2V0X21lbW9yeV9wOlxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy04MTAtXFx0LypcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy04MTUtXFx0ICovXFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjgxNjpcXHRlcnIgPSBzZXRfbWVtb3J5X3Aoa2J1ZmZlciwgcGFnZWNvdW50KTtcXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmMtODE3LVxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgIXJldClcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oPTIzOD1zdGF0aWMgaW5saW5lIHUzMiBlZmk2NF9jb252ZXJ0X3N0YXR1cyhlZmlfc3RhdHVzX3Qgc3RhdHVzKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmgtMjk4LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oOjI5OTojZGVmaW5lIF9fZWZpNjRfYXJnbWFwX3NldF9tZW1vcnlfc3BhY2VfYXR0cmlidXRlcyhwaHlzLCBzaXplLCBmbGFncykgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oLTMwMC1cXHQoX19lZmk2NF9zcGxpdChwaHlzKSwgX19lZmk2NF9zcGxpdChzaXplKSwgX19lZmk2NF9zcGxpdChmbGFncykpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaC0zMTYtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmg6MzE3OiNkZWZpbmUgX19lZmk2NF9hcmdtYXBfc2V0X21lbW9yeV9hdHRyaWJ1dGVzKHByb3RvY29sLCBwaHlzLCBzaXplLCBmbGFncykgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oLTMxOC1cXHQoKHByb3RvY29sKSwgX19lZmk2NF9zcGxpdChwaHlzKSwgX19lZmk2NF9zcGxpdChzaXplKSwgX19lZmk2NF9zcGxpdChmbGFncykpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZmVuY2UuaD0yMj1zdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9rZmVuY2VfaW5pdF9wb29sKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZmVuY2UuaC0zMy1cXHRcXHRpZiAobGV2ZWwgIT0gUEdfTEVWRUxfNEspXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va2ZlbmNlLmg6MzQ6XFx0XFx0XFx0c2V0X21lbW9yeV80ayhhZGRyLCAxKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZmVuY2UuaC0zNS1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1fZW5jcnlwdC5oPTUxPXZvaWQgc21lX2VuYWJsZShzdHJ1Y3QgYm9vdF9wYXJhbXMgKmJwKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1fZW5jcnlwdC5oLTUyLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21lbV9lbmNyeXB0Lmg6NTM6aW50IF9faW5pdCBlYXJseV9zZXRfbWVtb3J5X2RlY3J5cHRlZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21lbV9lbmNyeXB0Lmg6NTQ6aW50IF9faW5pdCBlYXJseV9zZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21lbV9lbmNyeXB0LmgtNTUtdm9pZCBfX2luaXQgZWFybHlfc2V0X21lbV9lbmNfZGVjX2h5cGVyY2FsbCh1bnNpZ25lZCBsb25nIHZhZGRyLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbWVtX2VuY3J5cHQuaD04OT1zdGF0aWMgaW5saW5lIGludCBfX2luaXRcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1fZW5jcnlwdC5oOjkwOmVhcmx5X3NldF9tZW1vcnlfZGVjcnlwdGVkKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkgeyByZXR1cm4gMDsgfVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21lbV9lbmNyeXB0LmgtOTEtc3RhdGljIGlubGluZSBpbnQgX19pbml0XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbWVtX2VuY3J5cHQuaDo5MjplYXJseV9zZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpIHsgcmV0dXJuIDA7IH1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1fZW5jcnlwdC5oLTkzLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXRcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC04LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo5OiNkZWZpbmUgc2V0X21lbW9yeV9yb3ggc2V0X21lbW9yeV9yb3hcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6MTA6aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtMTEtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTEyLS8qXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjEzOiAqIFRoZSBzZXRfbWVtb3J5XyogQVBJIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB2YXJpb3VzIGF0dHJpYnV0ZXMgb2YgYSB2aXJ0dWFsXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTE0LSAqIGFkZHJlc3MgcmFuZ2UuIFRoZSBhdHRyaWJ1dGVzIGluY2x1ZGU6XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtNDAtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQxOmludCBfc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQyOmludCBfc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQzOmludCBfc2V0X21lbW9yeV93dCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQ0OmludCBfc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQ1OmludCBzZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NDY6aW50IHNldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo0NzppbnQgc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQ4OmludCBzZXRfbWVtb3J5X25wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NDk6aW50IHNldF9tZW1vcnlfcCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjUwOmludCBzZXRfbWVtb3J5XzRrKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtNTEtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjUyOmJvb2wgc2V0X21lbW9yeV9lbmNfc3RvcF9jb252ZXJzaW9uKHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo1MzppbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo1NDppbnQgc2V0X21lbW9yeV9kZWNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC01NS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NTY6aW50IHNldF9tZW1vcnlfbnBfbm9hbGlhcyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjU3OmludCBzZXRfbWVtb3J5X25vbmdsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjU4OmludCBzZXRfbWVtb3J5X2dsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTU5LVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oPTYyPWludCBzZXRfcGFnZXNfYXJyYXlfd2Ioc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IGFkZHJpbmFycmF5KTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC02OC0gKiBtZW1vcnkgdGhhdCB0aGUgc3RydWN0IHBhZ2UgcmVwcmVzZW50cywgYW5kIGludGVybmFsbHkganVzdFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo2OTogKiBjYWxsIHRoZSBzZXRfbWVtb3J5XyogZnVuY3Rpb24uIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjcwOiAqIHNldF9tZW1vcnlfKiBmdW5jdGlvbiBmb3IgbW9yZSBkZXRhaWxzIG9uIGNvbnZlbnRpb25zLlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC03MS0gKlxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTc5LSAqIGdldCBhIHN0cnVjdCBwYWdlKiB0aGF0IHRoZSBvbGQgQVBJIHJlcXVpcmVkLlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo4MDogKiBUbyBjb252ZXJ0IHRoZXNlIGNhc2VzLCB1c2Ugc2V0X21lbW9yeV8qKCkgb24gdGhlIG9yaWdpbmFsXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTgxLSAqIHZpcnR1YWwgYWRkcmVzcywgZG8gbm90IHVzZSB0aGVzZSBmdW5jdGlvbnMuXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD01MDU9dm9pZCBzbnBfcmVnaXN0ZXJfZ2hjYl9lYXJseSh1bnNpZ25lZCBsb25nIHBhZGRyKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo1MDY6dm9pZCBlYXJseV9zbnBfc2V0X21lbW9yeV9wcml2YXRlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgcGFkZHIsXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNTA3LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjUwODp2b2lkIGVhcmx5X3NucF9zZXRfbWVtb3J5X3NoYXJlZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHBhZGRyLFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTUwOS1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjUxMDp2b2lkIHNucF9zZXRfbWVtb3J5X3NoYXJlZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NTExOnZvaWQgc25wX3NldF9tZW1vcnlfcHJpdmF0ZSh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNTEyLXZvaWQgc25wX3NldF93YWtldXBfc2Vjb25kYXJ5X2NwdSh2b2lkKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oPTYxMj1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjEzOmVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyBucGFnZXMpIHsgfVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTYxNC1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjE1OmVhcmx5X3NucF9zZXRfbWVtb3J5X3NoYXJlZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHBhZGRyLCB1bnNpZ25lZCBsb25nIG5wYWdlcykgeyB9XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjE2OnN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0X21lbW9yeV9zaGFyZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBucGFnZXMpIHsgfVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjYxNzpzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldF9tZW1vcnlfcHJpdmF0ZSh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIG5wYWdlcykgeyB9XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjE4LXN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0X3dha2V1cF9zZWNvbmRhcnlfY3B1KHZvaWQpIHsgfVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdmdhLmgtMjQtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FNRF9NRU1fRU5DUllQVCkpXFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3ZnYS5oOjI1OlxcdFxcdHNldF9tZW1vcnlfZGVjcnlwdGVkKHN0YXJ0LCAocykgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3ZnYS5oLTI2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jPTIxOD1zdGF0aWMgdm9pZCAqaXRzX2FsbG9jKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yMzItXFx0aWYgKHBhZ2VzID09IFxcdTAwMjZpdHNfcGFnZXMpXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MjMzOlxcdFxcdHNldF9tZW1vcnlfeCgodW5zaWduZWQgbG9uZylwYWdlLCAxKTtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yMzQtXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYW1kX2dhcnRfNjQuYz02MTk9c3RhdGljIF9faW5pdCBpbnQgaW5pdF9hbWRfZ2F0dChzdHJ1Y3QgYWdwX2tlcm5faW5mbyAqaW5mbylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hbWRfZ2FydF82NC5jLTY1NC1cXHRcXHRwYW5pYyhcXFwiQ2Fubm90IGFsbG9jYXRlIEdBVFQgdGFibGVcXFwiKTtcXG5hcmNoL3g4Ni9rZXJuZWwvYW1kX2dhcnRfNjQuYzo2NTU6XFx0aWYgKHNldF9tZW1vcnlfdWMoKHVuc2lnbmVkIGxvbmcpZ2F0dCwgZ2F0dF9zaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpKVxcbmFyY2gveDg2L2tlcm5lbC9hbWRfZ2FydF82NC5jLTY1Ni1cXHRcXHRwYW5pYyhcXFwiQ291bGQgbm90IHNldCBHQVJUIFBURXMgdG8gdW5jYWNoZWFibGUgcGFnZXNcXFwiKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hbWRfZ2FydF82NC5jPTcxND1pbnQgX19pbml0IGdhcnRfaW9tbXVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2FtZF9nYXJ0XzY0LmMtNzgxLVxcdCAqL1xcbmFyY2gveDg2L2tlcm5lbC9hbWRfZ2FydF82NC5jOjc4MjpcXHRzZXRfbWVtb3J5X25wKCh1bnNpZ25lZCBsb25nKV9fdmEoaW9tbXVfYnVzX2Jhc2UpLFxcbmFyY2gveDg2L2tlcm5lbC9hbWRfZ2FydF82NC5jLTc4My1cXHRcXHRcXHRcXHRpb21tdV9zaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYz01NTk9c3RhdGljIF9faW5pdCB2b2lkIHNldF9ibG9ja19zaXplKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jLTU2NC1cXHRcXHQvKiBhZGp1c3QgZm9yIGZmcyByZXR1cm4gb2YgMS4uNjQgKi9cXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jOjU2NTpcXHRcXHRzZXRfbWVtb3J5X2Jsb2NrX3NpemVfb3JkZXIob3JkZXIgLSAxKTtcXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jLTU2Ni1cXHRcXHRwcl9pbmZvKFxcXCJVVjogbWVtX2Jsb2NrX3NpemUgc2V0IHRvIDB4JWx4XFxcXG5cXFwiLCBtZW1fYmxvY2tfc2l6ZSk7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jLTU2OS1cXHRcXHRwcl9lcnIoXFxcIlVWOiBtZW1fYmxvY2tfc2l6ZSBlcnJvciB3aXRoIDB4JWx4XFxcXG5cXFwiLCBtZW1fYmxvY2tfc2l6ZSk7XFxuYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYzo1NzA6XFx0XFx0c2V0X21lbW9yeV9ibG9ja19zaXplX29yZGVyKDMxKTtcXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jLTU3MS1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jPTI1ODg9dm9pZCBfX2luaXQgYXJjaF9jcHVfZmluYWxpemVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYy0yNjYzLVxcdFxcdGlmICghZGlyZWN0X2dicGFnZXMpXFxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYzoyNjY0OlxcdFxcdFxcdHNldF9tZW1vcnlfNGsoKHVuc2lnbmVkIGxvbmcpX192YSgwKSwgMSk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYy0yNjY1LVxcdH0gZWxzZSB7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM9MzA5PWNyZWF0ZV90cmFtcG9saW5lKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGludCAqdHJhbXBfc2l6ZSlcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00MjctXFxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jOjQyODpcXHRzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZyl0cmFtcG9saW5lLCBucGFnZXMpO1xcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00MjktXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXRyYW1wb2xpbmU7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM9NDM1PXZvaWQgc2V0X2Z0cmFjZV9vcHNfcm8odm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00NTYtXFx0XFx0bnBhZ2VzID0gRElWX1JPVU5EX1VQKHNpemUsIFBBR0VfU0laRSk7XFxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jOjQ1NzpcXHRcXHRzZXRfbWVtb3J5X3JvKCh1bnNpZ25lZCBsb25nKW9wcy1cXHUwMDNldHJhbXBvbGluZSwgbnBhZ2VzKTtcXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMtNDU4LVxcdH0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX29wKG9wcyk7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvaWR0LmM9Mjk0PXZvaWQgX19pbml0IGlkdF9zZXR1cF9hcGljX2FuZF9pcnFfZ2F0ZXModm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9pZHQuYy0zMjEtXFx0LyogTWFrZSB0aGUgSURUIHRhYmxlIHJlYWQgb25seSAqL1xcbmFyY2gveDg2L2tlcm5lbC9pZHQuYzozMjI6XFx0c2V0X21lbW9yeV9ybygodW5zaWduZWQgbG9uZylcXHUwMDI2aWR0X3RhYmxlLCAxKTtcXG5hcmNoL3g4Ni9rZXJuZWwvaWR0LmMtMzIzLVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bS5jPTQzMj1zdGF0aWMgaW5saW5lIF9faW5pdCB2b2lkIF9fc2V0X3BlcmNwdV9kZWNyeXB0ZWQodm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIHNpemUpXFxuYXJjaC94ODYva2VybmVsL2t2bS5jLTQzMy17XFxuYXJjaC94ODYva2VybmVsL2t2bS5jOjQzNDpcXHRlYXJseV9zZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZykgcHRyLCBzaXplKTtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtNDM1LX1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTIyNT1zdGF0aWMgdm9pZCBfX2luaXQga3ZtY2xvY2tfaW5pdF9tZW0odm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTI1MC1cXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfTUVNX0VOQ1JZUFQpKSB7XFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM6MjUxOlxcdFxcdHIgPSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZykgaHZjbG9ja19tZW0sXFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMjUyLVxcdFxcdFxcdFxcdFxcdCAxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMjU1LVxcdFxcdFxcdGh2Y2xvY2tfbWVtID0gTlVMTDtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzoyNTY6XFx0XFx0XFx0cHJfd2FybihcXFwia3ZtY2xvY2s6IHNldF9tZW1vcnlfZGVjcnlwdGVkKCkgZmFpbGVkLiBEaXNhYmxpbmdcXFxcblxcXCIpO1xcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTI1Ny1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jPTEzNT1pbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlKHN0cnVjdCBraW1hZ2UgKmltYWdlKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYy0xMzgtXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYzoxMzk6XFx0c2V0X21lbW9yeV94KCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhpbWFnZS1cXHUwMDNlY29udHJvbF9jb2RlX3BhZ2UpLCAxKTtcXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jLTE0MC1cXHRlcnJvciA9IG1hY2hpbmVfa2V4ZWNfYWxsb2NfcGFnZV90YWJsZXMoaW1hZ2UpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYz0xNTE9dm9pZCBtYWNoaW5lX2tleGVjX2NsZWFudXAoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYy0xNTIte1xcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmM6MTUzOlxcdHNldF9tZW1vcnlfbngoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKGltYWdlLVxcdTAwM2Vjb250cm9sX2NvZGVfcGFnZSksIDEpO1xcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMtMTU0LVxcdG1hY2hpbmVfa2V4ZWNfZnJlZV9wYWdlX3RhYmxlcyhpbWFnZSk7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jPTM0Mz1pbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlKHN0cnVjdCBraW1hZ2UgKmltYWdlKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy0zNjQtXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYzozNjU6XFx0c2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpY29udHJvbF9wYWdlLCAxKTtcXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTM2Ni1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM9MzcwPXZvaWQgbWFjaGluZV9rZXhlY19jbGVhbnVwKHN0cnVjdCBraW1hZ2UgKmltYWdlKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy0zNzMtXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYzozNzQ6XFx0c2V0X21lbW9yeV9ueCgodW5zaWduZWQgbG9uZyljb250cm9sX3BhZ2UsIDEpO1xcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM6Mzc1OlxcdHNldF9tZW1vcnlfcncoKHVuc2lnbmVkIGxvbmcpY29udHJvbF9wYWdlLCAxKTtcXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTM3Ni1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM9NjQ4PXN0YXRpYyB2b2lkIGtleGVjX21hcmtfZG1fY3J5cHRfa2V5cyhib29sIHByb3RlY3QpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTY1Ny1cXHRcXHRpZiAocHJvdGVjdClcXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jOjY1ODpcXHRcXHRcXHRzZXRfbWVtb3J5X25wKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChzdGFydF9wYWRkciksIG5yX3BhZ2VzKTtcXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTY1OS1cXHRcXHRlbHNlXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYzo2NjA6XFx0XFx0XFx0c2V0X21lbW9yeV9wKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChzdGFydF9wYWRkciksIG5yX3BhZ2VzKTtcXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTY2MS1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jPTY4Nj1pbnQgYXJjaF9rZXhlY19wb3N0X2FsbG9jX3BhZ2VzKHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgcGFnZXMsIGdmcF90IGdmcClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMtNjk1LVxcdCAqL1xcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM6Njk2OlxcdHJldHVybiBzZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZyl2YWRkciwgcGFnZXMpO1xcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMtNjk3LX1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM9Njk5PXZvaWQgYXJjaF9rZXhlY19wcmVfZnJlZV9wYWdlcyh2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IHBhZ2VzKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy03MDctXFx0ICovXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYzo3MDg6XFx0c2V0X21lbW9yeV9lbmNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIHBhZ2VzKTtcXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTcwOS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYz0yOTEwPWludCBrdm1fYWxsb2NfYXBpY19hY2Nlc3NfcGFnZShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0yOTE5LVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jOjI5MjA6XFx0aHZhID0gX194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVCxcXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0yOTIxLVxcdFxcdFxcdFxcdCAgICAgIEFQSUNfREVGQVVMVF9QSFlTX0JBU0UsIFBBR0VfU0laRSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYz0yOTMxPXZvaWQga3ZtX2luaGliaXRfYXBpY19hY2Nlc3NfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0yOTQyLVxcdGlmIChrdm0tXFx1MDAzZWFyY2guYXBpY19hY2Nlc3NfbWVtc2xvdF9lbmFibGVkKSB7XFxuYXJjaC94ODYva3ZtL2xhcGljLmM6Mjk0MzpcXHRcXHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULCAwLCAwKTtcXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0yOTQ0LVxcdFxcdC8qXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY4MDE9c3RhdGljIHZvaWQgZnJlZV9tbXVfcGFnZXMoc3RydWN0IGt2bV9tbXUgKm1tdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjgwMy1cXHRpZiAoIXRkcF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IG1tdS1cXHUwMDNlcGFlX3Jvb3QpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2ODA0OlxcdFxcdHNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKW1tdS1cXHUwMDNlcGFlX3Jvb3QsIDEpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjgwNS1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpbW11LVxcdTAwM2VwYWVfcm9vdCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY4MTA9c3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGt2bV9wYWdld2FsayAqdylcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjg1NC1cXHRpZiAoIXRkcF9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Njg1NTpcXHRcXHRzZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZyltbXUtXFx1MDAzZXBhZV9yb290LCAxKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4NTYtXFx0ZWxzZVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz04MTEzPXN0YXRpYyB2b2lkIGh1Z2VwYWdlX3NldF9taXhlZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgxMTgtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo4MTE5OmJvb2wga3ZtX2FyY2hfcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy04MTIwLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9ODE4Mj1zdGF0aWMgYm9vbCBodWdlcGFnZV9oYXNfYXR0cnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy04MTk4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODE5OTpib29sIGt2bV9hcmNoX3Bvc3Rfc2V0X21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgyMDAtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NDAyOT1zdGF0aWMgaW50IGluaXRfcm1vZGVfaWRlbnRpdHlfbWFwKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDA0NC1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjQwNDU6XFx0dWFkZHIgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00MDQ2LVxcdFxcdFxcdFxcdFxcdElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1QsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTUyNzY9aW50IHZteF9zZXRfdHNzX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgYWRkcilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTI4My1cXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTI4NDpcXHRyZXQgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIFRTU19QUklWQVRFX01FTVNMT1QsIGFkZHIsXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01Mjg1LVxcdFxcdFxcdFxcdCAgICAgIFBBR0VfU0laRSAqIDMpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTk4NDM9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxNi0vKipcXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkxNzogKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbjogU2V0dXAgS1ZNIGludGVybmFsIG1lbW9yeSBzbG90XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MTgtICpcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05OTM3LSAqL1xcbmFyY2gveDg2L2t2bS94ODYuYzo5OTM4OnZvaWQgX191c2VyICogX194ODZfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgaWQsIGdwYV90IGdwYSxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkzOS1cXHRcXHRcXHRcXHQgICAgICB1MzIgc2l6ZSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05OTg5LX1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTk5MDpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoX194ODZfc2V0X21lbW9yeV9yZWdpb24pO1xcbmFyY2gveDg2L2t2bS94ODYuYy05OTkxLVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMDE0PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjItXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjM6XFx0XFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjQtXFx0XFx0XFx0XFx0XFx0MCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDI1OlxcdFxcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgSURFTlRJVFlfUEFHRVRBQkxFX1BSSVZBVEVfTUVNU0xPVCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjYtXFx0XFx0XFx0XFx0XFx0MCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDI3OlxcdFxcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgVFNTX1BSSVZBVEVfTUVNU0xPVCwgMCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDI4LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMDA5Mz1zdGF0aWMgaW50IGt2bV9hbGxvY19tZW1zbG90X21ldGFkYXRhKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDEwMC1cXHQgKiBDbGVhciBvdXQgdGhlIHByZXZpb3VzIGFycmF5IHBvaW50ZXJzIGZvciB0aGUgS1ZNX01SX01PVkUgY2FzZS4gIFRoZVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDEwMTpcXHQgKiBvbGQgYXJyYXlzIHdpbGwgYmUgZnJlZWQgYnkga3ZtX3NldF9tZW1vcnlfcmVnaW9uKCkgaWYgaW5zdGFsbGluZ1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMDEwMi1cXHQgKiB0aGUgbmV3IG1lbXNsb3QgaXMgc3VjY2Vzc2Z1bC5cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuaD01MjY9aW50IGt2bV9nZXRfbnJfcGVuZGluZ19ubWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5oLTUyNy1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg6NTI4OnZvaWQgX191c2VyICpfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxcbmFyY2gveDg2L2t2bS94ODYuaC01MjktXFx0XFx0XFx0XFx0ICAgICB1MzIgc2l6ZSk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0LmM9ODk3PXZvaWQgZnJlZV9pbml0X3BhZ2VzKGNvbnN0IGNoYXIgKndoYXQsIHVuc2lnbmVkIGxvbmcgYmVnaW4sIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdC5jLTkyNS1cXHRcXHRrbWVtbGVha19mcmVlX3BhcnQoKHZvaWQgKiliZWdpbiwgZW5kIC0gYmVnaW4pO1xcbmFyY2gveDg2L21tL2luaXQuYzo5MjY6XFx0XFx0c2V0X21lbW9yeV9ucChiZWdpbiwgKGVuZCAtIGJlZ2luKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5hcmNoL3g4Ni9tbS9pbml0LmMtOTI3LVxcdH0gZWxzZSB7XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0LmMtOTMyLVxcdFxcdCAqL1xcbmFyY2gveDg2L21tL2luaXQuYzo5MzM6XFx0XFx0c2V0X21lbW9yeV9ueChiZWdpbiwgKGVuZCAtIGJlZ2luKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5hcmNoL3g4Ni9tbS9pbml0LmM6OTM0OlxcdFxcdHNldF9tZW1vcnlfcncoYmVnaW4sIChlbmQgLSBiZWdpbikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuYXJjaC94ODYvbW0vaW5pdC5jLTkzNS1cXG4tLVxcbmFyY2gveDg2L21tL2luaXQuYz05NDY9dm9pZCBmcmVlX2tlcm5lbF9pbWFnZV9wYWdlcyhjb25zdCBjaGFyICp3aGF0LCB2b2lkICpiZWdpbiwgdm9pZCAqZW5kKVxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdC5jLTk2OS1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWDg2XzY0KSBcXHUwMDI2XFx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1BUSSkpXFxuYXJjaC94ODYvbW0vaW5pdC5jOjk3MDpcXHRcXHRzZXRfbWVtb3J5X25wX25vYWxpYXMoYmVnaW5fdWwsIGxlbl9wYWdlcyk7XFxuYXJjaC94ODYvbW0vaW5pdC5jLTk3MS19XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmM9NzIzPXN0YXRpYyB2b2lkIG1hcmtfbnhkYXRhX254KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzM2LVxcdFxcdHByaW50ayhLRVJOX0lORk8gXFxcIk5YLXByb3RlY3RpbmcgdGhlIGtlcm5lbCBkYXRhOiAlbHVrXFxcXG5cXFwiLCBzaXplIFxcdTAwM2VcXHUwMDNlIDEwKTtcXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmM6NzM3OlxcdHNldF9tZW1vcnlfbngoc3RhcnQsIHNpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuYXJjaC94ODYvbW0vaW5pdF8zMi5jLTczOC19XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM9MTM1OT12b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM2OS1cXHQgICAgICAgKGVuZCAtIHN0YXJ0KSBcXHUwMDNlXFx1MDAzZSAxMCk7XFxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjEzNzA6XFx0c2V0X21lbW9yeV9ybyhzdGFydCwgKGVuZCAtIHN0YXJ0KSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM3MS1cXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzg2LVxcdGFsbF9lbmQgPSByb3VuZHVwKCh1bnNpZ25lZCBsb25nKV9icmtfZW5kLCBQTURfU0laRSk7XFxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjEzODc6XFx0c2V0X21lbW9yeV9ueCh0ZXh0X2VuZCwgKGFsbF9lbmQgLSB0ZXh0X2VuZCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzODgtXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM5Mi1cXHRwcmludGsoS0VSTl9JTkZPIFxcXCJUZXN0aW5nIENQQTogdW5kbyAlbHgtJWx4XFxcXG5cXFwiLCBzdGFydCwgZW5kKTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM5MzpcXHRzZXRfbWVtb3J5X3J3KHN0YXJ0LCAoZW5kLXN0YXJ0KSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM5NC1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM5NS1cXHRwcmludGsoS0VSTl9JTkZPIFxcXCJUZXN0aW5nIENQQTogYWdhaW5cXFxcblxcXCIpO1xcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxMzk2OlxcdHNldF9tZW1vcnlfcm8oc3RhcnQsIChlbmQtc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzk3LSNlbmRpZlxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTE0MTUtLyogQWRqdXN0YWJsZSBtZW1vcnkgYmxvY2sgc2l6ZSAqL1xcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxNDE2OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNldF9tZW1vcnlfYmxvY2tfc2l6ZTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTQxNzppbnQgX19pbml0IHNldF9tZW1vcnlfYmxvY2tfc2l6ZV9vcmRlcih1bnNpZ25lZCBpbnQgb3JkZXIpXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTE0MTgte1xcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTE0MjMtXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjE0MjQ6XFx0c2V0X21lbW9yeV9ibG9ja19zaXplID0gc2l6ZTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQyNS1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYz0xNDI4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHByb2JlX21lbW9yeV9ibG9ja19zaXplKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQzMy1cXHQvKiBJZiBtZW1vcnkgYmxvY2sgc2l6ZSBoYXMgYmVlbiBzZXQsIHRoZW4gdXNlIGl0ICovXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjE0MzQ6XFx0YnogPSBzZXRfbWVtb3J5X2Jsb2NrX3NpemU7XFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTE0MzUtXFx0aWYgKGJ6KVxcbi0tXFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jPTQ1PWludCBpb3JlbWFwX2NoYW5nZV9hdHRyKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4tLVxcbmFyY2gveDg2L21tL2lvcmVtYXAuYy01My1cXHRkZWZhdWx0OlxcbmFyY2gveDg2L21tL2lvcmVtYXAuYzo1NDpcXHRcXHRlcnIgPSBfc2V0X21lbW9yeV91Yyh2YWRkciwgbnJwYWdlcyk7XFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jLTU1LVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L21tL2lvcmVtYXAuYy01Ni1cXHRjYXNlIF9QQUdFX0NBQ0hFX01PREVfV0M6XFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jOjU3OlxcdFxcdGVyciA9IF9zZXRfbWVtb3J5X3djKHZhZGRyLCBucnBhZ2VzKTtcXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNTgtXFx0XFx0YnJlYWs7XFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jLTU5LVxcdGNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9XVDpcXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NjA6XFx0XFx0ZXJyID0gX3NldF9tZW1vcnlfd3QodmFkZHIsIG5ycGFnZXMpO1xcbmFyY2gveDg2L21tL2lvcmVtYXAuYy02MS1cXHRcXHRicmVhaztcXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNjItXFx0Y2FzZSBfUEFHRV9DQUNIRV9NT0RFX1dCOlxcbmFyY2gveDg2L21tL2lvcmVtYXAuYzo2MzpcXHRcXHRlcnIgPSBfc2V0X21lbW9yeV93Yih2YWRkciwgbnJwYWdlcyk7XFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jLTY0LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM9NTc9c3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzbnBfbWVtY3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgc3osXFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy02Ni1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzo2NzpcXHRcXHRlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQoKHVuc2lnbmVkIGxvbmcpX192YShwYWRkciksIHBhZGRyLCBucGFnZXMpO1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTY4LVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNzEtXFx0XFx0LyogUmVzdG9yZSB0aGUgcGFnZSBzdGF0ZSBhZnRlciB0aGUgbWVtY3B5LiAqL1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjcyOlxcdFxcdGVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUoKHVuc2lnbmVkIGxvbmcpX192YShwYWRkciksIHBhZGRyLCBucGFnZXMpO1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTczLVxcdH0gZWxzZSB7XFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYz0yODY9c3RhdGljIGludCBhbWRfZW5jX3N0YXR1c19jaGFuZ2VfcHJlcGFyZSh1bnNpZ25lZCBsb25nIHZhZGRyLCBpbnQgbnBhZ2VzLCBib29sIGVuYylcXG4tLVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTI5Mi1cXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfU0VWX1NOUCkgXFx1MDAyNlxcdTAwMjYgIWVuYylcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzoyOTM6XFx0XFx0c25wX3NldF9tZW1vcnlfc2hhcmVkKHZhZGRyLCBucGFnZXMpO1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTI5NC1cXG4tLVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jPTI5OT1zdGF0aWMgaW50IGFtZF9lbmNfc3RhdHVzX2NoYW5nZV9maW5pc2godW5zaWduZWQgbG9uZyB2YWRkciwgaW50IG5wYWdlcywgYm9vbCBlbmMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zMDUtXFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NFVl9TTlApIFxcdTAwMjZcXHUwMDI2IGVuYylcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzozMDY6XFx0XFx0c25wX3NldF9tZW1vcnlfcHJpdmF0ZSh2YWRkciwgbnBhZ2VzKTtcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zMDctXFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYz0zNTg9c3RhdGljIHZvaWQgX19pbml0IF9fc2V0X2Nscl9wdGVfZW5jKHB0ZV90ICprcHRlLCBpbnQgbGV2ZWwsIGJvb2wgZW5jKVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzc4LVxcdFxcdCAqL1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjM3OTpcXHRcXHRlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQoKHVuc2lnbmVkIGxvbmcpX192YShkLnBhKSwgZC5wYSwgMSk7XFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzgwLVxcdH1cXG4tLVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTM4OC1cXHRpZiAoZW5jKVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozODoyOC45MzkyOTU5MDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI5NTI3Nzc5MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFdeWCBWaW9sYXRpb24gRGV0ZWN0aW9uIGluIHNldF9tZW1vcnkuYyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGBzZXRfbWVtb3J5LmNgIGZpbGUgYW5kLCBzcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbnMgbGlrZSBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYW5kIG90aGVycy4gV2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9ucyBjYWxsZWQ/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlaXIgdXNhZ2UuXG5cbkkgcmVjYWxsIEJQRiBKSVQsIGZ0cmFjZSwgdGhlIG1vZHVsZSBsb2FkZXIg4oCTIHRoZXkgYWxsIG1hbmlwdWxhdGUgbWVtb3J5IHBlcm1pc3Npb25zLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSByZWxldmFudCBmdW5jdGlvbnM6IGBtb2R1bGVfZW5hYmxlX3JvKClgLCBgbW9kdWxlX2VuYWJsZV9ueCgpYCwgYGJwZl9qaXRfYmluYXJ5X2xvY2tfcm8oKWAsIGFuZCBgYnBmX3Byb2dfbG9ja19ybygpYC4gS3Byb2JlcyBhbHNvIGNvbWUgdG8gbWluZCB3aXRoIGBhbGxvY19pbnNuX3BhZ2UoKWAgYW5kIGl0cyBpbXBsaWNhdGlvbnMgb24gc2V0dGluZyByZWFkLW9ubHkvcmVhZC13cml0ZSBwZXJtaXNzaW9ucy4gTGV0J3Mgbm90IGZvcmdldCBgL2Rldi9tZW1gIGFuZCBgaW9yZW1hcGAgd2hpY2ggY291bGQgYmUgcmVsZXZhbnQgdG9vLiBJIG5lZWQgdG8ga2VlcCB0aGVzZSBpbiBtaW5kIGFzIHBvdGVudGlhbCBjYWxsIHNpdGVzLlxuXG5Ob3csIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIHBhdGNoIGl0c2VsZiwgSSBzaG91bGQgZXhhbWluZSB0aGUgYGdpdCBzaG93YCBvdXRwdXQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gTGV0J3Mgc2VlLi4uIHRoZSBjb2RlIGludHJvZHVjZXMgYSB3YXJuaW5nIGFib3V0IFdeWCB2aW9sYXRpb25zIHdpdGhpbiB0aGUgYHZlcmlmeV9yd3hgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYSBgcHJfd2Fybl9vbmNlYCBjYWxsLlxuXG5JIGNhcmVmdWxseSBleGFtaW5lIHRoZSBgdmVyaWZ5X3J3eGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGNoZWNrIGZvciBjaGFuZ2VzIHRoYXQgY291bGQgdmlvbGF0ZSB0aGUgV3JpdGUgWE9SIEV4ZWN1dGUgKFdeWCkgcHJpbmNpcGxlLiBJdCBoYXMgc29tZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gdGhlIGFyY2hpdGVjdHVyZSAoMzItYml0IHNwZWNpZmljYWxseSkgYW5kIE5YIHN1cHBvcnQuIEkgY2FuIHNlZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgV15YIGNoZWNrLCBsb29raW5nIGF0IHRoZSBvbGQgYW5kIG5ldyBwYWdlIHByb3RlY3Rpb24gZmxhZ3MuXG5cbkFoYSEgTm93IEkgc2VlIGEgY3J1Y2lhbCBkZXRhaWw6IHRoZXJlIGFyZSB0d28gYHByX3dhcm5fb25jZWAgY2FsbHMgaW4gdGhlIGNvZGUuIE9uZSBpcyBjb25kaXRpb25hbCBvbiBgIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIGFuZCB0aGUgb3RoZXIgaXMgdW5jb25kaXRpb25hbC4gTXkgYXR0ZW50aW9uIGlzIG5vdyBkcmF3biB0byB0aGUgZmlyc3QgYXJndW1lbnQgb2YgYHByX3dhcm5fb25jZWAuIElzIGl0IGEgY29uZGl0aW9uLCBvciBpcyBpdCBwYXJ0IG9mIHRoZSBmb3JtYXQgc3RyaW5nPyBUaGF0J3MgYSBjbGFzc2ljIGdvdGNoYSEgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB3aGF0IHRoYXQgZmlyc3QgYXJndW1lbnQgaXMgZG9pbmcuIExldCdzIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBwcl93YXJuX29uY2VgISBJIG5lZWQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgbG9nZ2luZyBiZWhhdmlvciBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM0MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzg6NDEuODkyMDc3NDU3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE5Nzc2MTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgcHJfd2Fybl9vbmNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvY2VwaC9jZXBoX2RlYnVnLmgtNTktXFx0XFx0Y2xpZW50LVxcdTAwM2Vtb25jLmF1dGgtXFx1MDAzZWdsb2JhbF9pZCwgIyNfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2NlcGgvY2VwaF9kZWJ1Zy5oOjYwOiNkZWZpbmUgcHJfd2Fybl9vbmNlX2NsaWVudChjbGllbnQsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2NlcGgvY2VwaF9kZWJ1Zy5oLTYxLVxcdHByX3dhcm5fb25jZShcXFwiWyVwVSAlbGx1XTogXFxcIiBmbXQsIFxcdTAwMjZjbGllbnQtXFx1MDAzZWZzaWQsXFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9wcmludGsuaD00MDc9c3RydWN0IHBpX2VudHJ5IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjY3LVxcdHByaW50a19vbmNlKEtFUk5fRVJSIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmg6NjY4OiNkZWZpbmUgcHJfd2Fybl9vbmNlKGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY2OS1cXHRwcmludGtfb25jZShLRVJOX1dBUk5JTkcgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmg9NDE3PWV4dGVybiB1MzIgc3RyaW5nX3RvX2F2X3Blcm0oc3RydWN0IHBvbGljeWRiICpwLCB1MTYgdGNsYXNzLCBjb25zdCBjaGFyICpuYW1lKTtcXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmgtNDE4LVxcbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuaDo0MTk6I2RlZmluZSBwcl93YXJuX29uY2VfcG9saWN5bG9hZChwb2xpY3ksIGZtdCwgLi4uKSAgICBcXFxcXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5oLTQyMC1cXHRkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2N1c3RvbS5oPTEyPWV4dGVybiB1bnNpZ25lZCBsb25nIGRhY19tbWFwX21pbl9hZGRyO1xcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9jdXN0b20uaC0yMy0gKi9cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2N1c3RvbS5oOjI0OiNkZWZpbmUgcHJfd2Fybl9vbmNlIHByX2VyclxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvY3VzdG9tLmgtMjUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM4OjQzLjgxMTg2MDM3OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDAwODczNTg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQnVnIERpc2NvdmVyeTogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgaGVhZCBhcyBJIGFuYWx5emUgdGhpczogSSdtIHN0YXJpbmcgYXQgdGhpcyBgcHJfd2Fybl9vbmNlKDEsIFwiQ1BBIGRldGVjdGVkLi4uXCIpYCBhbmQgc29tZXRoaW5nIGluc3RhbnRseSBzY3JlYW1zIFwid3JvbmchXCIgVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBjbGVhcmx5IGluZGljYXRlcyB0aGUgZmlyc3QgcGFyYW1ldGVyIHNob3VsZCBiZSB0aGUgZm9ybWF0IHN0cmluZywgbm90IGEgbnVtZXJpY2FsIHZhbHVlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXYWl0LCBgcHJfd2Fybl9vbmNlKGZtdCwgLi4uKWAgdGFrZXMgYGZtdGAgZmlyc3QhXCIsIHRoZW4gSSBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIGBXQVJOX09OQ0UoY29uZGl0aW9uLCBmbXQsIC4uLilgIHdoaWNoIHRha2VzIHRoZSAqY29uZGl0aW9uKiBmaXJzdC4gSXQncyBsaWtlIGRlamEgdnUuXG5cbkluIHRoaXMgc3BlY2lmaWMgcGF0Y2gsIGl0J3MgY2FsbGluZyBgcHJfd2Fybl9vbmNlKDEsIFwiQ1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVx1MDAzZSAuLi5cIiwgLi4uKWAgYW5kIHRoZSBmaXJzdCBhcmd1bWVudCAqaXMqIGp1c3QgdGhlIG51bWJlciBgMWAgd2hpY2ggaXMgYmVpbmcgaW50ZXJwcmV0ZWQgYXMgYSBwb2ludGVyLCBzcGVjaWZpY2FsbHkgYChjb25zdCBjaGFyICopMWAsIG9yLCBlc3NlbnRpYWxseSwgTlVMTCBwbHVzIG9uZSEgVGhpcyBpcyB3aGVuIHRoZSBhbGFybSBiZWxscyBnbyBvZmYuXG5cbldoZW4gYHByX3dhcm5fb25jZSgxLCAuLi4pYCBpcyBpbnZva2VkLCBgZm10YCBpcyBiZWluZyBzZXQgdG8gYChjaGFyICopMWAuIFRoYXQgbWVhbnMsIHVsdGltYXRlbHksIHdlJ3JlIHRyeWluZyB0byBkZXJlZmVyZW5jZSB0aGUgYWRkcmVzcyBgMHgwMDAwMDAwMWAhIFRoaXMgaXMgZ29pbmcgdG8gY2F1c2UgYSBrZXJuZWwgb29wcywgYSBwYWdlIGZhdWx0LCBiZWNhdXNlIGl0J3MgYWNjZXNzaW5nIGFuIGludmFsaWQgbWVtb3J5IGxvY2F0aW9uISBIT0xZIENPVywgdGhhdCdzIGEgc2VyaW91cyBidWchIFRoZSBhdXRob3IgYXBwZWFycyB0byBoYXZlIGNvcGllZCBgV0FSTl9PTkNFKDEsIFwiLi4uXCIpYCBhbmQgc2ltcGx5IGNoYW5nZWQgYFdBUk5fT05DRWAgdG8gYHByX3dhcm5fb25jZWAsIHdpdGhvdXQgcmVtb3ZpbmcgdGhlIGNvbmRpdGlvbmFsIGAxYCEgVGhleSdyZSBwYXNzaW5nIGAxYCBhcyBhIGZvcm1hdCBzdHJpbmcgd2hlbiBpdCBzaG91bGQgYmUgYFwiQ1BBIGRldGVjdGVkLi4uXCJgLlxuXG5Fc3NlbnRpYWxseSwgaWYgYCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBhbmQgYHZlcmlmeV9yd3hgIGRldGVjdHMgYSBXXlggdmlvbGF0aW9uLCBjYWxsaW5nIGBwcl93YXJuX29uY2UoMSwgLi4uKWAgcGFzc2VzIGludGVnZXIgMSBhcyBwb2ludGVyIHRvIGZvcm1hdCBzdHJpbmcgaW50byBgcHJpbnRrX29uY2VgIC1cdTAwM2UgYHZwcmludGtfc3RvcmVgIC1cdTAwM2UgcGFnZSBmYXVsdCEgVGhpcyBpcyBnb2luZyB0byBjcmFzaCB0aGUga2VybmVsIGluIHRoZSB3b3JzdCB3YXkuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgcmVhY2hhYmxlIHRoaXMgYWN0dWFsbHkgaXMuIFdoZW4gZG9lcyBgdmVyaWZ5X3J3eGAgZ2V0IGNhbGxlZCB3aGVuIGAha2VybmVsX3NldF90b19yZWFkb25seWA/IFRoZSBwb3NzaWJpbGl0aWVzIEkgY2FuIHNlZSBhcmU6XG5cbjEuICBFYXJseSBib290IGJlZm9yZSBgbWFya19yb2RhdGFfcm8oKWAgaXMgY2FsbGVkLlxuMi4gIFdoZW4gYm9vdGluZyB3aXRoIGByb2RhdGE9b2ZmYCBvciBpZiBgQ09ORklHX1NUUklDVF9LRVJORUxfUldYYCBpcyBkaXNhYmxlZC4gSW4gdGhhdCBjYXNlLCBga2VybmVsX3NldF90b19yZWFkb25seWAgd291bGQgcmVtYWluIDAuXG5cbklmIGByb2RhdGE9b2ZmYCwgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIHN0YXlzIDAgZm9yIHRoZSBlbnRpcmUgbGlmZXRpbWUgb2YgdGhlIHN5c3RlbSFcblxuQXQgcnVudGltZSwgYW55IEJQRiBwcm9ncmFtIGxvYWQsIG1vZHVsZSBsb2FkLCBmdHJhY2UgdHJhbXBvbGluZSBjcmVhdGlvbiwga3Byb2JlLCBvciBhbnkgdXNlci10cmlnZ2VyZWQgc3lzY2FsbCB0aGF0IGNoYW5nZXMgcGFnZSBwZXJtaXNzaW9ucyBjYW4gY2FsbCBgdmVyaWZ5X3J3eCgpYC4gSWYgYSBXXlggY2hhbmdlIGlzIGRldGVjdGVkIGJ5IGB2ZXJpZnlfcnd4KClgIChlLmcuIHNldHRpbmcgUlcgb24gYW4gZXhlY3V0YWJsZSBwYWdlIG9yIFggb24gYSB3cml0YWJsZSBwYWdlKSwgYCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBpcyB0cnVlIGFuZCBpdCBleGVjdXRlcyBgcHJfd2Fybl9vbmNlKDEsIC4uLilgIHdoaWNoIGNyYXNoZXMgdGhlIGtlcm5lbCBiZWNhdXNlIHRoZSBmb3JtYXQgc3RyaW5nIGlzIHJlYWxseSBgKGNoYXIgKikweDFgIVxuXG5MZXQgbWUgbWFrZSBzdXJlIHRoaXMgY2hlY2tzIG91dC4gV2hhdCBkb2VzIGBwcl93YXJuX29uY2VgIGFjdHVhbGx5IGV4cGFuZCB0bz8gSSBuZWVkIHRvIGNoZWNrIGBpbmNsdWRlL2xpbnV4L3ByaW50ay5oYDpcblxuYGBgY1xuI2RlZmluZSBwcl93YXJuX29uY2UoZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5cdHByaW50a19vbmNlKEtFUk5fV0FSTklORyBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXylcbmBgYFxuXG5XYWl0LCBgcHJfZm10KDEpYCBiZWNvbWVzIGAxYC4gVGhlbiBgcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HIDEsIC4uLilgLi4uIGRvZXMgdGhpcyBldmVuIGNvbXBpbGU/IGBLRVJOX1dBUk5JTkdgIGJlY29tZXMgYFwiXFwwMDFcIiBcIjRcImAgd2hpY2ggY29tcGlsZXMgYXMgc3RyaW5nIGNvbmNhdGVuYXRpb24uIEJ1dCBgS0VSTl9XQVJOSU5HIDFgIGF0dGVtcHRzIHRvIGNvbmNhdGVuYXRlIHN0cmluZyB3aXRoIGludGVnZXIsIHdoaWNoIGlzIHVuZGVmaW5lZCBiZWhhdmlvciEgV2h5IGRpZCBpdCBjb21waWxlPyBJIG5lZWQgdG8gZXhhbWluZSBob3cgYHByX2ZtdGAgaXMgZGVmaW5lZC4gSSBzaG91bGQgbG9vayBpbiBgc2V0X21lbW9yeS5jYCBvciBjaGVjayBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjkyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM4OjUzLjgyMDU5ODgyOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzNDAzNzMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByX2ZtdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozODo1My44NzQ5NDgzNjJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3MjEwMjUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvbnN0cnVjdGluZyB0aGUgV2FybmluZyBNZXNzYWdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIHdhcm5pbmcgaXMgb3JpZ2luYXRpbmcsIHNvIEknbSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUuIEZpcnN0LCBJJ20gY2hlY2tpbmcgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCB0aGlua2luZyB0aGF0J3MgYSBsaWtlbHkgc3BvdCBmb3IgbWVtb3J5LXJlbGF0ZWQgd2FybmluZ3MuIEFuZCwgbm9wZSwgbm8gYHByX2ZtdChmbXQpYCBtYWNybyBkZWZpbmVkIHRoZXJlLiBSaWdodCwgc28sIGluICp0aGlzKiBjb250ZXh0LCBgcHJfZm10KGZtdClgIGlzIGp1c3QgcmVzb2x2aW5nIHRvIGBmbXRgLiBTaW1wbGUgZW5vdWdoLlxuXG5UaGVuIEkgc2VlIGBwcl93YXJuX29uY2UoMSwgLi4uKWAuIEV4cGFuZGluZyB0aGF0LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBtYWNyb3Mgd29yaywgbGVhZHMgbWUgdG8gYHByaW50a19vbmNlKEtFUk5fV0FSTklORyAxLCAuLi4pYC4gQWgsIGBwcmludGtfb25jZWAuIFRoYXQncyB0aGUga2V5LiBXaGVyZSBpcyAqdGhhdCogZGVmaW5lZD8gSSBuZWVkIHRvIGNoZWNrIGBpbmNsdWRlL2xpbnV4L3ByaW50ay5oYC4gR290dGEgc2VlIHRoZSBleGFjdCBkZWZpbml0aW9uIG9mIGBwcmludGtfb25jZWAgdG8gZnVsbHkgZ3Jhc3Agd2hhdCdzIGhhcHBlbmluZy4gSSBuZWVkIHRvIGtub3cgaG93IHRoZSBcIm9uY2VcIiBhc3BlY3QgaXMgaW1wbGVtZW50ZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igb2YgdGhlIHdhcm5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDQ3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM4OjU2LjI0NzA1NDE1MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNDQyNjI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIHByaW50a19vbmNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcHJpbnRrLmg9NDA3PXN0cnVjdCBwaV9lbnRyeSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY0OC0jaWZkZWYgQ09ORklHX1BSSU5US1xcbmluY2x1ZGUvbGludXgvcHJpbnRrLmg6NjQ5OiNkZWZpbmUgcHJpbnRrX29uY2UoZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjUwLVxcdERPX09OQ0VfTElURShwcmludGssIGZtdCwgIyNfX1ZBX0FSR1NfXylcXG4tLVxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjUzLSNlbHNlXFxuaW5jbHVkZS9saW51eC9wcmludGsuaDo2NTQ6I2RlZmluZSBwcmludGtfb25jZShmbXQsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wcmludGsuaC02NTUtXFx0bm9fcHJpbnRrKGZtdCwgIyNfX1ZBX0FSR1NfXylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzg6NTcuODgxNDg1NzQ1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDg4NDMwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIGEgS2VybmVsIExvZ2dpbmcgSXNzdWUqKlxuXG5BbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjaGVjayBvdXQgdGhpcyBgRE9fT05DRV9MSVRFYCBtYWNyby4gSXQgbG9va3MgbGlrZSBpdCdzIGJlaW5nIHVzZWQgd2l0aCBgcHJpbnRrYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3Mgc29tZXRoaW5nIGltcG9ydGFudC4gYERPX09OQ0VfTElURShwcmludGssIEtFUk5fV0FSTklORyAxLCAuLi4pYC4uLndhaXQgYSBzZWNvbmQuIFRoYXQgYEtFUk5fV0FSTklORyAxYCBsb29rcyB3cm9uZy4gSW4gc3RhbmRhcmQgQyBzeW50YXgsIHRoYXQncyBhbG1vc3QgY2VydGFpbmx5IGEgc3ludGF4IGVycm9yIHVubGVzcyBzb21ldGhpbmcgZnVua3kgaXMgaGFwcGVuaW5nIHdpdGggaG93IGBLRVJOX1dBUk5JTkdgIGlzIGRlZmluZWQuIFNvbWV0aGluZyBpcyBtYWtpbmcgbWUgdGhpbmsgdGhhdCBpdCBpcyBub3QgYmVpbmcgcHJvcGVybHkgcHJlZml4ZWQuXG5cbk9rYXksIGxldCdzIHBhdXNlIGFuZCBpbnZlc3RpZ2F0ZSBgS0VSTl9XQVJOSU5HYCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbi4gSSBrbm93IHRoaXMgaXMgZ29pbmcgdG8gYmUgaW4gYW4gaW5jbHVkZSBmaWxlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGluY2x1ZGUvbGludXgva2Vybl9sZXZlbHMuaGAgdG8gc2VlIGV4YWN0bHkgaG93IHRoYXQgaXMgZGVmaW5lZCBhbmQgd2hhdCBpdCBpcyBtZWFudCB0byByZXByZXNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyOTc1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MDAuMjkwMzMyMTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzQ1Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktFUk5fV0FSTklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2tlcm5fbGV2ZWxzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rZXJuX2xldmVscy5oLTExLSNkZWZpbmUgS0VSTl9FUlJcXHRLRVJOX1NPSCBcXFwiM1xcXCJcXHQvKiBlcnJvciBjb25kaXRpb25zICovXFxuaW5jbHVkZS9saW51eC9rZXJuX2xldmVscy5oOjEyOiNkZWZpbmUgS0VSTl9XQVJOSU5HXFx0S0VSTl9TT0ggXFxcIjRcXFwiXFx0Lyogd2FybmluZyBjb25kaXRpb25zICovXFxuaW5jbHVkZS9saW51eC9rZXJuX2xldmVscy5oLTEzLSNkZWZpbmUgS0VSTl9OT1RJQ0VcXHRLRVJOX1NPSCBcXFwiNVxcXCJcXHQvKiBub3JtYWwgYnV0IHNpZ25pZmljYW50IGNvbmRpdGlvbiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozOTowMC4zMzk2ODQxMjhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUxNTk1MjcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyBgS0VSTl9XQVJOSU5HYCBpcyBkZWZpbmVkIGFzIGBcIlxcMDAxXCIgXCI0XCJgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnLiBgS0VSTl9XQVJOSU5HIDFgIGV4cGFuZHMgdG8gYFwiXFwwMDFcIiBcIjRcIiAxYCwgd2hpY2ggaXMgb2J2aW91c2x5IGEgQyBjb21waWxlciBzeW50YXggZXJyb3IuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBzdXNwaWNpb24g4oCTIHRoZSBwYXRjaCBhdXRob3IgZWl0aGVyIGRpZG4ndCB0ZXN0IHRoaXMgcHJvcGVybHksIG9yIGEgYnVnIHdhcyBpbnRyb2R1Y2VkISBUaGlzIGlzIGEgZ29vZCBzaWduLCBhbmQgaXQgbWVhbnMgd2UgbmVlZCB0byBkaWcgZGVlcGVyLlxuXG5UaGUgY2hhbmdlcyBhcmUgd2l0aGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgd2hpY2gsIGFzIEkga25vdywgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtIChDaGFuZ2UgUGFnZSBBdHRyaWJ1dGVzLCBvciBDUEEpLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuMS4gICoqQ29yZSBTdWJzeXN0ZW06KiogYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGlzIGRlZmluaXRlbHkgYSBjb3JlIHN1YnN5c3RlbSwgZGVhbGluZyBkaXJlY3RseSB3aXRoIHg4NiBtZW1vcnkgbWFuYWdlbWVudC4gQ2hlY2suXG4yLiAgKipSZWFjaGFibGU6KiogWWVzLCBDUEEgaXMgcmVhY2hhYmxlIHRocm91Z2ggYSBtdWx0aXR1ZGUgb2Ygc3lzY2FsbHMgYW5kIGtlcm5lbCBvcGVyYXRpb25zIG9uIGFtZDY0IHN5c3RlbXMuIFRoaW5ncyBsaWtlIEJQRiBKSVQsIG1vZHVsZSBsb2FkaW5nL3VubG9hZGluZywgdHJhY2Vwb2ludHMva3Byb2JlcywgYW5kIHRoZSBgc2V0X21lbW9yeV8qYCBjYWxsZXJzLCBhbGwgY2FuIHBvdGVudGlhbGx5IHRyaWdnZXIgaXNzdWVzLiBDaGVjay5cbjMuICAqKkRlZmVuc2l2ZSBDaGVja3M6KiogVGhlIHBhdGNoIG1vZGlmaWVzIGRlZmVuc2l2ZSBjaGVja3MgYW5kIFdeWCB2aW9sYXRpb24gdmVyaWZpY2F0aW9uIGxvZ2ljIGluIGB2ZXJpZnlfcnd4KClgLiBDaGVjay5cblxuQ29uc2lkZXJpbmcgdGhlIGNyaXRlcmlhIGZyb20gdGhlIGluc3RydWN0aW9ucyAoU2VjdGlvbiAzKSwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGEgc3Ryb25nIGNhbmRpZGF0ZTpcbiogICBNZW1vcnkgbWFuYWdlbWVudCBtb2RpZmljYXRpb25zIGFyZSBhIGdvLlxuKiAgIFRoZSBtb2RpZmljYXRpb24gaXMgYWx0ZXJpbmcgZGVmZW5zaXZlIGNoZWNrcyBpbiByZWFjaGFibGUgcGF0aHMuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGl2ZWx5IGB0cnVlYC5cblxuTm93IGxldCdzIGRldGVybWluZSB0aGUgRm9jdXNTeW1ib2xzLlxuXG5JIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggc3ltYm9scyB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZy4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgZnVuY3Rpb25zIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCB0aGF0IGFyZSBjYWxsZWQgb3IgaW52b2x2ZWQuIEl0IHNlZW1zIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0MDcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MDQuODU1NjM5NDY1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYzOTE0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHNldF9tZW1vcnlfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMTk0PWludCBfc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIwNi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyMDc6aW50IHNldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjA4LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjIzMj1pbnQgX3NldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNDctXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjQ4OmludCBzZXRfbWVtb3J5X3djKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI0OS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIyNzE9aW50IF9zZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjc3LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI3ODppbnQgc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNzkte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzI5PUVYUE9SVF9TWU1CT0xfR1BMKGNsZWFyX21jZV9ub3NwZWMpO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzMxLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMzMjppbnQgc2V0X21lbW9yeV94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMy17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzktXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQwOmludCBzZXRfbWVtb3J5X254KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0MS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDctXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQ4OmludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0OS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNTItXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzUzOmludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNTQte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzYzLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2NDppbnQgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjUte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzY4LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2OTppbnQgc2V0X21lbW9yeV9ucCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNzAte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzczLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM3NDppbnQgc2V0X21lbW9yeV9ucF9ub2FsaWFzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3NS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODAtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzgxOmludCBzZXRfbWVtb3J5X3AodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzgyLXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4NS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzODY6aW50IHNldF9tZW1vcnlfNGsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg3LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5Mi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzOTM6aW50IHNldF9tZW1vcnlfbm9uZ2xvYmFsKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5NC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTgtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzk5OmludCBzZXRfbWVtb3J5X2dsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDAte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNDk1PXN0YXRpYyBpbnQgX19zZXRfbWVtb3J5X2VuY19kZWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTEwLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUxMTppbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTEyLXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUxNT1FWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X2VuY3J5cHRlZCk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTE2LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUxNzppbnQgc2V0X21lbW9yeV9kZWNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTE4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MDQuOTAxMjgzMDNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5NTgwODI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIFNpdGVzIG9mIGB2ZXJpZnlfcnd4YCoqXG5cbk9rYXksIHNvIGB2ZXJpZnlfcnd4YCBpcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24sIHdoaWNoIGlzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiAgSSBpbW1lZGlhdGVseSBub3RlIGl0J3MgZGVmaW5lZCBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHVzYWdlIHdpdGhpbiB0aGF0IGZpbGUuIFRoZSBmYWN0IHRoYXQgaXQncyBpbmxpbmUgc3VnZ2VzdHMgaXQncyBsaWtlbHkgY2FsbGVkIGEgZmV3IHRpbWVzIGluIHN0cmF0ZWdpY2FsbHkgcGxhY2VkIHNwb3RzLiBNeSBpbW1lZGlhdGUgcHJpb3JpdHkgaXMgdG8gdW5kZXJzdGFuZCB3aGVyZSBgdmVyaWZ5X3J3eGAgZ2V0cyBpbnZva2VkLiBUaGF0IHdpbGwgaW5mb3JtIGl0cyBwdXJwb3NlLiBJJ2xsIGZvY3VzIG15IHNlYXJjaCBvbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSBudW1iZXJzIDEwNjcgYW5kIDE4ODIuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY2FsbHMgdGhlcmUsIHdoaWNoIHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSByb2xlIG9mIGB2ZXJpZnlfcnd4YCBpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTkwNywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjA3LjE5NzA5Mzg3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDYwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDYwOlxcdFxcdC8qXFxuMTA2MTpcXHRcXHQgKiBDaGVjayB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQgcGdwcm90IGlzIGNvbmZsaWN0aW5nIHdpdGggYSBzdGF0aWNcXG4xMDYyOlxcdFxcdCAqIHByb3RlY3Rpb24gcmVxdWlyZW1lbnQgaW4gdGhlIGxhcmdlIHBhZ2UuXFxuMTA2MzpcXHRcXHQgKi9cXG4xMDY0OlxcdFxcdG5ld19wcm90ID0gc3RhdGljX3Byb3RlY3Rpb25zKHJlcV9wcm90LCBscGFkZHIsIG9sZF9wZm4sIG51bXBhZ2VzLFxcbjEwNjU6XFx0XFx0XFx0XFx0XFx0ICAgICAgcHNpemUsIENQQV9ERVRFQ1QpO1xcbjEwNjY6XFx0XFxuMTA2NzpcXHRcXHRuZXdfcHJvdCA9IHZlcmlmeV9yd3gob2xkX3Byb3QsIG5ld19wcm90LCBscGFkZHIsIG9sZF9wZm4sIG51bXBhZ2VzLFxcbjEwNjg6XFx0XFx0XFx0XFx0ICAgICAgbngsIHJ3KTtcXG4xMDY5OlxcdFxcbjEwNzA6XFx0XFx0LypcXG4xMDcxOlxcdFxcdCAqIElmIHRoZXJlIGlzIGEgY29uZmxpY3QsIHNwbGl0IHRoZSBsYXJnZSBwYWdlLlxcbjEwNzI6XFx0XFx0ICpcXG4xMDczOlxcdFxcdCAqIFRoZXJlIHVzZWQgdG8gYmUgYSA0ayB3aXNlIGV2YWx1YXRpb24gdHJ5aW5nIHJlYWxseSBoYXJkIHRvXFxuMTA3NDpcXHRcXHQgKiBwcmVzZXJ2ZSB0aGUgbGFyZ2UgcGFnZXMsIGJ1dCBleHBlcmltZW50YXRpb24gaGFzIHNob3duLCB0aGF0IHRoaXNcXG4xMDc1OlxcdFxcdCAqIGRvZXMgbm90IGhlbHAgYXQgYWxsLiBUaGVyZSBtaWdodCBiZSBjb3JuZXIgY2FzZXMgd2hpY2ggd291bGRcXG4xMDc2OlxcdFxcdCAqIHByZXNlcnZlIG9uZSBsYXJnZSBwYWdlIG9jY2FzaW9uYWxseSwgYnV0IGl0J3MgcmVhbGx5IG5vdCB3b3J0aCB0aGVcXG4xMDc3OlxcdFxcdCAqIGV4dHJhIGNvZGUgYW5kIGN5Y2xlcyBmb3IgdGhlIGNvbW1vbiBjYXNlLlxcbjEwNzg6XFx0XFx0ICovXFxuMTA3OTpcXHRcXHRpZiAocGdwcm90X3ZhbChyZXFfcHJvdCkgIT0gcGdwcm90X3ZhbChuZXdfcHJvdCkpXFxuMTA4MDpcXHRcXHRcXHRyZXR1cm4gMTtcXG4xMDgxOlxcdFxcbjEwODI6XFx0XFx0LyogQWxsIGNoZWNrcyBwYXNzZWQuIFVwZGF0ZSB0aGUgbGFyZ2UgcGFnZSBtYXBwaW5nLiAqL1xcbjEwODM6XFx0XFx0bmV3X3B0ZSA9IHBmbl9wdGUob2xkX3BmbiwgbmV3X3Byb3QpO1xcbjEwODQ6XFx0XFx0X19zZXRfcG1kX3B0ZShrcHRlLCBhZGRyZXNzLCBuZXdfcHRlKTtcXG4xMDg1OlxcdFxcdGNwYS1cXHUwMDNlZmxhZ3MgfD0gQ1BBX0ZMVVNIVExCO1xcbjEwODY6XFx0XFx0Y3BhX2luY19scF9wcmVzZXJ2ZWQobGV2ZWwpO1xcbjEwODc6XFx0XFx0cmV0dXJuIDA7XFxuMTA4ODpcXHR9XFxuMTA4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MDcuMTk3MjM5MzM1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3Mjc0MDMxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIE1lbW9yeSBBdHRyaWJ1dGUgVGFibGUgKFBBVCkgQmVoYXZpb3IqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IHNoZW5hbmlnYW5zLCBhbmQgdGhlIFBBVCBpcyBwcm9iYWJseSBpbnZvbHZlZC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0byB0YWtlIGEgbG9vayBhdCBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBsaW5lIDE4ODIuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGVyZSdzIGEgc3BlY2lmaWMgc2V0IG1lbW9yeSBvcGVyYXRpb24gcmVsYXRlZCB0byB0aGUgUEFUIHRoYXQgSSB3YW50IHRvIGludmVzdGlnYXRlLCBsaWtlbHkgaW52b2x2aW5nIGhvdyBtZW1vcnkgYXR0cmlidXRlcyBhcmUgYmVpbmcgc2V0LiBHaXZlbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgUEFUIGFuZCBpdHMgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBjYWNoaW5nLCBzb21ldGhpbmcgb24gdGhpcyBsaW5lIHdpbGwgcHJvYmFibHkgZ2l2ZSBzb21lIGdvb2QgY2x1ZXMgb24gd2hhdCBuZWVkcyBsb29raW5nIGF0LiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiB1cGRhdGluZyB0aGUgTVRSUiBvciBQQVQgZW50cmllcy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gY2hlY2tpbmcgdGhpcyBwYXJ0aWN1bGFyIHNwb3QgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY3MzQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjA4LjkyNDY0NDk4OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODcwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODcwOlxcdFxcdFxcdHBncHJvdF90IG9sZF9wcm90ID0gcHRlX3BncHJvdChvbGRfcHRlKTtcXG4xODcxOlxcdFxcdFxcdHBncHJvdF90IG5ld19wcm90ID0gcHRlX3BncHJvdChvbGRfcHRlKTtcXG4xODcyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihvbGRfcHRlKTtcXG4xODczOlxcdFxcbjE4NzQ6XFx0XFx0XFx0cGdwcm90X3ZhbChuZXdfcHJvdCkgXFx1MDAyNj0gfnBncHJvdF92YWwoY3BhLVxcdTAwM2VtYXNrX2Nscik7XFxuMTg3NTpcXHRcXHRcXHRwZ3Byb3RfdmFsKG5ld19wcm90KSB8PSBwZ3Byb3RfdmFsKGNwYS1cXHUwMDNlbWFza19zZXQpO1xcbjE4NzY6XFx0XFxuMTg3NzpcXHRcXHRcXHRjcGFfaW5jXzRrX2luc3RhbGwoKTtcXG4xODc4OlxcdFxcdFxcdC8qIEhhbmQgaW4gbHBzaXplID0gMCB0byBlbmZvcmNlIHRoZSBwcm90ZWN0aW9uIG1lY2hhbmlzbSAqL1xcbjE4Nzk6XFx0XFx0XFx0bmV3X3Byb3QgPSBzdGF0aWNfcHJvdGVjdGlvbnMobmV3X3Byb3QsIGFkZHJlc3MsIHBmbiwgMSwgMCxcXG4xODgwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIENQQV9QUk9URUNUKTtcXG4xODgxOlxcdFxcbjE4ODI6XFx0XFx0XFx0bmV3X3Byb3QgPSB2ZXJpZnlfcnd4KG9sZF9wcm90LCBuZXdfcHJvdCwgYWRkcmVzcywgcGZuLCAxLFxcbjE4ODM6XFx0XFx0XFx0XFx0XFx0ICAgICAgbngsIHJ3KTtcXG4xODg0OlxcdFxcbjE4ODU6XFx0XFx0XFx0bmV3X3Byb3QgPSBwZ3Byb3RfY2xlYXJfcHJvdG5vbmVfYml0cyhuZXdfcHJvdCk7XFxuMTg4NjpcXHRcXG4xODg3OlxcdFxcdFxcdC8qXFxuMTg4ODpcXHRcXHRcXHQgKiBXZSBuZWVkIHRvIGtlZXAgdGhlIHBmbiBmcm9tIHRoZSBleGlzdGluZyBQVEUsXFxuMTg4OTpcXHRcXHRcXHQgKiBhZnRlciBhbGwgd2UncmUgb25seSBnb2luZyB0byBjaGFuZ2UgaXRzIGF0dHJpYnV0ZXNcXG4xODkwOlxcdFxcdFxcdCAqIG5vdCB0aGUgbWVtb3J5IGl0IHBvaW50cyB0b1xcbjE4OTE6XFx0XFx0XFx0ICovXFxuMTg5MjpcXHRcXHRcXHRuZXdfcHRlID0gcGZuX3B0ZShwZm4sIG5ld19wcm90KTtcXG4xODkzOlxcdFxcdFxcdGNwYS1cXHUwMDNlcGZuID0gcGZuO1xcbjE4OTQ6XFx0XFx0XFx0LypcXG4xODk1OlxcdFxcdFxcdCAqIERvIHdlIHJlYWxseSBjaGFuZ2UgYW55dGhpbmcgP1xcbjE4OTY6XFx0XFx0XFx0ICovXFxuMTg5NzpcXHRcXHRcXHRpZiAocHRlX3ZhbChvbGRfcHRlKSAhPSBwdGVfdmFsKG5ld19wdGUpKSB7XFxuMTg5ODpcXHRcXHRcXHRcXHRzZXRfcHRlX2F0b21pYyhrcHRlLCBuZXdfcHRlKTtcXG4xODk5OlxcdFxcdFxcdFxcdGNwYS1cXHUwMDNlZmxhZ3MgfD0gQ1BBX0ZMVVNIVExCO1xcbjE5MDA6XFx0XFx0XFx0fVxcbjE5MDE6XFx0XFx0XFx0Y3BhLVxcdTAwM2VudW1wYWdlcyA9IDE7XFxuMTkwMjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xOTAzOlxcdFxcdH1cXG4xOTA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozOTowOC45MjQ3ODIxOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDU5MTMxMjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBQYWdlIEF0dHJpYnV0ZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gYHZlcmlmeV9yd3goKWAgcG9wcyB1cCBpbiB0d28ga2V5IHBsYWNlczogYF9fc2hvdWxkX3NwbGl0X2xhcmdlX3BhZ2VgIGFuZCBgX19jaGFuZ2VfcGFnZV9hdHRyYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVycGxheSBoZXJlLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QuIEl0IGxvb2tzIGxpa2UgaXQncyBndWFyZGluZyBhZ2FpbnN0IHNvbWV0aGluZywgbGlrZWx5IGEgYmFkIHBhZ2Ugc3RhdGUuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqdHJpZ2dlcmluZyogYF9fY2hhbmdlX3BhZ2VfYXR0cmAuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IHNlZW1zIHRvIGJlIHRoZSBwbGFjZSB3aGVyZSBwZXJtaXNzaW9ucyBhcmUgYWN0dWFsbHkgZ2V0dGluZyBtb2RpZmllZC4gSSBzaG91bGQgZXhhbWluZSB0aGUgY2FsbCBncmFwaCB0byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgYWxsIG9mIHRoZSB1c2UgY2FzZXMuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBleHBvc2UgdGhlIGNvbnRleHRzIGluIHdoaWNoIHRoZXNlIGF0dHJpYnV0ZXMgYXJlIGJlaW5nIGNoYW5nZWQsIGFuZCB0aGVyZWZvcmUsIHBvdGVudGlhbGx5IHdoZXJlIGB2ZXJpZnlfcnd4KClgIGlzIHByb3RlY3Rpbmcgc29tZXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzU3OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MTAuOTgzOTE1MzE2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUzNTM0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2NoYW5nZV9wYWdlX2F0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE4MDU9c3RhdGljIGludCBfX2NwYV9wcm9jZXNzX2ZhdWx0KHN0cnVjdCBjcGFfZGF0YSAqY3BhLCB1bnNpZ25lZCBsb25nIHZhZGRyLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODQ5LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTg1MDpzdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODUxLXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTkyNy1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjE5Mjg6c3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTkyOS1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MTkzMz1zdGF0aWMgaW50IGNwYV9wcm9jZXNzX2FsaWFzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xOTYzLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTk2NDpcXHRcXHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2YWxpYXNfY3BhLCAwKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5NjUtXFx0XFx0aWYgKHJldClcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTk5Ny1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjE5OTg6XFx0XFx0X19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmFsaWFzX2NwYSwgMCk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xOTk5LVxcdH1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjAwNC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIwMDU6c3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMDA2LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjA1My1cXHRcXHRcXHRndWFyZChzcGlubG9jaykoXFx1MDAyNmNwYV9sb2NrKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIwNTQ6XFx0XFx0XFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyKGNwYSwgcHJpbWFyeSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMDU1LVxcdFxcdH0gZWxzZSB7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDU2OlxcdFxcdFxcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cihjcGEsIHByaW1hcnkpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjA1Ny1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIwODM9c3RhdGljIGludCBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTM4LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjEzOTpcXHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxNDAtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI0MDk9c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX3BndGFibGUodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDM4LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQzOTpcXHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0NDAtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI2MzY9c3RhdGljIGludCBfX3NldF9wYWdlc19wKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsIHVuc2lnbmVkIGludCBjcGFfZmxhZ3MpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NTEtXFx0ICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjUyOlxcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NTMtfVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjU1PXN0YXRpYyBpbnQgX19zZXRfcGFnZXNfbnAoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgdW5zaWduZWQgaW50IGNwYV9mbGFncylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY3MC1cXHQgKi9cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2NzE6XFx0cmV0dXJuIF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZjcGEsIDEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY3Mi19XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI3NDY9aW50IF9faW5pdCBrZXJuZWxfbWFwX3BhZ2VzX2luX3BnZChwZ2RfdCAqcGdkLCB1NjQgcGZuLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI3NzAtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNzcxOlxcdHJldHZhbCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZjcGEsIDEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjc3Mi1cXHRfX2ZsdXNoX3RsYl9hbGwoKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9Mjc4Mz1pbnQgX19pbml0IGtlcm5lbF91bm1hcF9wYWdlc19pbl9wZ2QocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yODA1LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjgwNjpcXHRyZXR2YWwgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI4MDctXFx0X19mbHVzaF90bGJfYWxsKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjExLjAzMDQ1Njc0MVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODg2NzAyODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgc2V0X21lbW9yeS5jIE1vZHVsZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgdmVyaWZ5X3J3eGAsIGFuZCBJIHNlZSBpdCdzIGEgc3RhdGljIGlubGluZSB3aXRoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBHaXZlbiB0aGF0LCBJIHdhbnQgdG8gbWFwIG91dCB0aGUgcmVsZXZhbnQgc3ltYm9scyB3aXRoaW4gdGhhdCBmaWxlIGFuZCBkZXRlcm1pbmUgd2hpY2ggb25lcyBhcmUgZXhwb3J0ZWQgKG9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zKSB0aGF0IGNhbGwgb3IgaW5jbHVkZSBgdmVyaWZ5X3J3eGAuXG5cblNvLCBmcm9tIHRoZSBsb29rcyBvZiBpdCB0aGUgcmVsZXZhbnQgc3ltYm9scyBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgYXJlOiBgX19jaGFuZ2VfcGFnZV9hdHRyYCwgYF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfbnhgLCBgc2V0X21lbW9yeV9yb3hgLCBgc2V0X21lbW9yeV91Y2AsIGBzZXRfbWVtb3J5X3djYCwgYHNldF9tZW1vcnlfd2JgLCBgc2V0X21lbW9yeV9ucGAsIGBzZXRfbWVtb3J5X3BgLCBgc2V0X21lbW9yeV80a2AsIGBzZXRfbWVtb3J5X2VuY3J5cHRlZGAsIGFuZCBgc2V0X21lbW9yeV9kZWNyeXB0ZWRgLlxuXG5Ob3csIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRob3NlIGFyZSBhY3R1YWxseSBleHBvcnRlZCBvciBub24tc3RhdGljIGZ1bmN0aW9ucyBvciBmdW5jdGlvbnMgdGhhdCBpbmNsdWRlIGB2ZXJpZnlfcnd4YC4gTXkgaW1tZWRpYXRlIGNhbmRpZGF0ZXMgYXJlOiBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5X254YCwgYHNldF9tZW1vcnlfcm94YCwgYHNldF9tZW1vcnlfdWNgLCBgc2V0X21lbW9yeV93YmAsIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLCBhbmQgYF9fY2hhbmdlX3BhZ2VfYXR0cmAuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCB0byBzZWUgaWYgdGhlcmUncyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3Igb3RoZXIgc2V0dGluZ3MgdGhhdCBpbXBhY3QgaXRzIGluY2x1c2lvbiBvciBiZWhhdmlvci4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgYGFyY2gveDg2L21tL01ha2VmaWxlYCBvciBgYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlYCB0byBkbyB0aGlzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTQxNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozOToxNC45MTcxNjIxNThaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjQ3MzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9tZW1vcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vaW5pdC5jLTExLVxcbmFyY2gveDg2L21tL2luaXQuYzoxMjojaW5jbHVkZSBcXHUwMDNjYXNtL3NldF9tZW1vcnkuaFxcdTAwM2VcXG5hcmNoL3g4Ni9tbS9pbml0LmMtMTMtI2luY2x1ZGUgXFx1MDAzY2FzbS9jcHVfZGV2aWNlX2lkLmhcXHUwMDNlXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0LmM9ODk3PXZvaWQgZnJlZV9pbml0X3BhZ2VzKGNvbnN0IGNoYXIgKndoYXQsIHVuc2lnbmVkIGxvbmcgYmVnaW4sIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdC5jLTkyNS1cXHRcXHRrbWVtbGVha19mcmVlX3BhcnQoKHZvaWQgKiliZWdpbiwgZW5kIC0gYmVnaW4pO1xcbmFyY2gveDg2L21tL2luaXQuYzo5MjY6XFx0XFx0c2V0X21lbW9yeV9ucChiZWdpbiwgKGVuZCAtIGJlZ2luKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5hcmNoL3g4Ni9tbS9pbml0LmMtOTI3LVxcdH0gZWxzZSB7XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0LmMtOTMyLVxcdFxcdCAqL1xcbmFyY2gveDg2L21tL2luaXQuYzo5MzM6XFx0XFx0c2V0X21lbW9yeV9ueChiZWdpbiwgKGVuZCAtIGJlZ2luKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5hcmNoL3g4Ni9tbS9pbml0LmM6OTM0OlxcdFxcdHNldF9tZW1vcnlfcncoYmVnaW4sIChlbmQgLSBiZWdpbikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuYXJjaC94ODYvbW0vaW5pdC5jLTkzNS1cXG4tLVxcbmFyY2gveDg2L21tL2luaXQuYz05NDY9dm9pZCBmcmVlX2tlcm5lbF9pbWFnZV9wYWdlcyhjb25zdCBjaGFyICp3aGF0LCB2b2lkICpiZWdpbiwgdm9pZCAqZW5kKVxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdC5jLTk2OS1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWDg2XzY0KSBcXHUwMDI2XFx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1BUSSkpXFxuYXJjaC94ODYvbW0vaW5pdC5jOjk3MDpcXHRcXHRzZXRfbWVtb3J5X25wX25vYWxpYXMoYmVnaW5fdWwsIGxlbl9wYWdlcyk7XFxuYXJjaC94ODYvbW0vaW5pdC5jLTk3MS19XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNDgtI2luY2x1ZGUgXFx1MDAzY2FzbS9zZXR1cC5oXFx1MDAzZVxcbmFyY2gveDg2L21tL2luaXRfMzIuYzo0OTojaW5jbHVkZSBcXHUwMDNjYXNtL3NldF9tZW1vcnkuaFxcdTAwM2VcXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNTAtI2luY2x1ZGUgXFx1MDAzY2FzbS9wYWdlX3R5cGVzLmhcXHUwMDNlXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmM9NzIzPXN0YXRpYyB2b2lkIG1hcmtfbnhkYXRhX254KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzM2LVxcdFxcdHByaW50ayhLRVJOX0lORk8gXFxcIk5YLXByb3RlY3RpbmcgdGhlIGtlcm5lbCBkYXRhOiAlbHVrXFxcXG5cXFwiLCBzaXplIFxcdTAwM2VcXHUwMDNlIDEwKTtcXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmM6NzM3OlxcdHNldF9tZW1vcnlfbngoc3RhcnQsIHNpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuYXJjaC94ODYvbW0vaW5pdF8zMi5jLTczOC19XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtNTEtI2luY2x1ZGUgXFx1MDAzY2FzbS9udW1hLmhcXHUwMDNlXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjUyOiNpbmNsdWRlIFxcdTAwM2Nhc20vc2V0X21lbW9yeS5oXFx1MDAzZVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy01My0jaW5jbHVkZSBcXHUwMDNjYXNtL2luaXQuaFxcdTAwM2VcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYz0xMzU5PXZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzY5LVxcdCAgICAgICAoZW5kIC0gc3RhcnQpIFxcdTAwM2VcXHUwMDNlIDEwKTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM3MDpcXHRzZXRfbWVtb3J5X3JvKHN0YXJ0LCAoZW5kIC0gc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzcxLVxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzODYtXFx0YWxsX2VuZCA9IHJvdW5kdXAoKHVuc2lnbmVkIGxvbmcpX2Jya19lbmQsIFBNRF9TSVpFKTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM4NzpcXHRzZXRfbWVtb3J5X254KHRleHRfZW5kLCAoYWxsX2VuZCAtIHRleHRfZW5kKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM4OC1cXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzkyLVxcdHByaW50ayhLRVJOX0lORk8gXFxcIlRlc3RpbmcgQ1BBOiB1bmRvICVseC0lbHhcXFxcblxcXCIsIHN0YXJ0LCBlbmQpO1xcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxMzkzOlxcdHNldF9tZW1vcnlfcncoc3RhcnQsIChlbmQtc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzk0LVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzk1LVxcdHByaW50ayhLRVJOX0lORk8gXFxcIlRlc3RpbmcgQ1BBOiBhZ2FpblxcXFxuXFxcIik7XFxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjEzOTY6XFx0c2V0X21lbW9yeV9ybyhzdGFydCwgKGVuZC1zdGFydCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzOTctI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQxNS0vKiBBZGp1c3RhYmxlIG1lbW9yeSBibG9jayBzaXplICovXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjE0MTY6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2V0X21lbW9yeV9ibG9ja19zaXplO1xcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxNDE3OmludCBfX2luaXQgc2V0X21lbW9yeV9ibG9ja19zaXplX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQxOC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQyMy1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTQyNDpcXHRzZXRfbWVtb3J5X2Jsb2NrX3NpemUgPSBzaXplO1xcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xNDI1LVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jPTE0Mjg9c3RhdGljIHVuc2lnbmVkIGxvbmcgcHJvYmVfbWVtb3J5X2Jsb2NrX3NpemUodm9pZClcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xNDMzLVxcdC8qIElmIG1lbW9yeSBibG9jayBzaXplIGhhcyBiZWVuIHNldCwgdGhlbiB1c2UgaXQgKi9cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTQzNDpcXHRieiA9IHNldF9tZW1vcnlfYmxvY2tfc2l6ZTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQzNS1cXHRpZiAoYnopXFxuLS1cXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtMjItXFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jOjIzOiNpbmNsdWRlIFxcdTAwM2Nhc20vc2V0X21lbW9yeS5oXFx1MDAzZVxcbmFyY2gveDg2L21tL2lvcmVtYXAuYy0yNC0jaW5jbHVkZSBcXHUwMDNjYXNtL2U4MjAvYXBpLmhcXHUwMDNlXFxuLS1cXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM9NDU9aW50IGlvcmVtYXBfY2hhbmdlX2F0dHIodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBzaXplLFxcbi0tXFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jLTUzLVxcdGRlZmF1bHQ6XFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jOjU0OlxcdFxcdGVyciA9IF9zZXRfbWVtb3J5X3VjKHZhZGRyLCBucnBhZ2VzKTtcXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNTUtXFx0XFx0YnJlYWs7XFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jLTU2LVxcdGNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9XQzpcXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NTc6XFx0XFx0ZXJyID0gX3NldF9tZW1vcnlfd2ModmFkZHIsIG5ycGFnZXMpO1xcbmFyY2gveDg2L21tL2lvcmVtYXAuYy01OC1cXHRcXHRicmVhaztcXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNTktXFx0Y2FzZSBfUEFHRV9DQUNIRV9NT0RFX1dUOlxcbmFyY2gveDg2L21tL2lvcmVtYXAuYzo2MDpcXHRcXHRlcnIgPSBfc2V0X21lbW9yeV93dCh2YWRkciwgbnJwYWdlcyk7XFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jLTYxLVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L21tL2lvcmVtYXAuYy02Mi1cXHRjYXNlIF9QQUdFX0NBQ0hFX01PREVfV0I6XFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jOjYzOlxcdFxcdGVyciA9IF9zZXRfbWVtb3J5X3diKHZhZGRyLCBucnBhZ2VzKTtcXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNjQtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0yNi0jaW5jbHVkZSBcXHUwMDNjYXNtL2Jvb3RwYXJhbS5oXFx1MDAzZVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjI3OiNpbmNsdWRlIFxcdTAwM2Nhc20vc2V0X21lbW9yeS5oXFx1MDAzZVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTI4LSNpbmNsdWRlIFxcdTAwM2Nhc20vY2FjaGVmbHVzaC5oXFx1MDAzZVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM9NTc9c3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzbnBfbWVtY3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgc3osXFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy02Ni1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzo2NzpcXHRcXHRlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQoKHVuc2lnbmVkIGxvbmcpX192YShwYWRkciksIHBhZGRyLCBucGFnZXMpO1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTY4LVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNzEtXFx0XFx0LyogUmVzdG9yZSB0aGUgcGFnZSBzdGF0ZSBhZnRlciB0aGUgbWVtY3B5LiAqL1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjcyOlxcdFxcdGVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUoKHVuc2lnbmVkIGxvbmcpX192YShwYWRkciksIHBhZGRyLCBucGFnZXMpO1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTczLVxcdH0gZWxzZSB7XFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYz0yODY9c3RhdGljIGludCBhbWRfZW5jX3N0YXR1c19jaGFuZ2VfcHJlcGFyZSh1bnNpZ25lZCBsb25nIHZhZGRyLCBpbnQgbnBhZ2VzLCBib29sIGVuYylcXG4tLVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTI5Mi1cXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfU0VWX1NOUCkgXFx1MDAyNlxcdTAwMjYgIWVuYylcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzoyOTM6XFx0XFx0c25wX3NldF9tZW1vcnlfc2hhcmVkKHZhZGRyLCBucGFnZXMpO1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTI5NC1cXG4tLVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jPTI5OT1zdGF0aWMgaW50IGFtZF9lbmNfc3RhdHVzX2NoYW5nZV9maW5pc2godW5zaWduZWQgbG9uZyB2YWRkciwgaW50IG5wYWdlcywgYm9vbCBlbmMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zMDUtXFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NFVl9TTlApIFxcdTAwMjZcXHUwMDI2IGVuYylcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzozMDY6XFx0XFx0c25wX3NldF9tZW1vcnlfcHJpdmF0ZSh2YWRkciwgbnBhZ2VzKTtcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zMDctXFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYz0zNTg9c3RhdGljIHZvaWQgX19pbml0IF9fc2V0X2Nscl9wdGVfZW5jKHB0ZV90ICprcHRlLCBpbnQgbGV2ZWwsIGJvb2wgZW5jKVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzc4LVxcdFxcdCAqL1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjM3OTpcXHRcXHRlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQoKHVuc2lnbmVkIGxvbmcpX192YShkLnBhKSwgZC5wYSwgMSk7XFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzgwLVxcdH1cXG4tLVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTM4OC1cXHRpZiAoZW5jKVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjM4OTpcXHRcXHRlYXJseV9zbnBfc2V0X21lbW9yeV9wcml2YXRlKCh1bnNpZ25lZCBsb25nKV9fdmEoZC5wYSksIGQucGEsIDEpO1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTM5MC19XFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzkxLVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjM5MjpzdGF0aWMgaW50IF9faW5pdCBlYXJseV9zZXRfbWVtb3J5X2VuY19kZWModW5zaWduZWQgbG9uZyB2YWRkcixcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zOTMtXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzaXplLCBib29sIGVuYylcXG4tLVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTQ2MS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzo0NjI6aW50IF9faW5pdCBlYXJseV9zZXRfbWVtb3J5X2RlY3J5cHRlZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNDYzLXtcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzo0NjQ6XFx0cmV0dXJuIGVhcmx5X3NldF9tZW1vcnlfZW5jX2RlYyh2YWRkciwgc2l6ZSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTQ2NS19XFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNDY2LVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjQ2NzppbnQgX19pbml0IGVhcmx5X3NldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy00Njgte1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjQ2OTpcXHRyZXR1cm4gZWFybHlfc2V0X21lbW9yeV9lbmNfZGVjKHZhZGRyLCBzaXplLCB0cnVlKTtcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy00NzAtfVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM9NTQzPXZvaWQgX19pbml0IG1lbV9lbmNyeXB0X2ZyZWVfZGVjcnlwdGVkX21lbSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNTYwLVxcdGlmIChzbWVfbWVfbWFzaykge1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjU2MTpcXHRcXHRyID0gc2V0X21lbW9yeV9lbmNyeXB0ZWQodmFkZHIsIG5wYWdlcyk7XFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNTYyLVxcdFxcdGlmIChyKSB7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGUtMi1cXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGU6MzpvYmoteVxcdFxcdFxcdFxcdDo9IHNldF9tZW1vcnkubyBtZW10eXBlLm9cXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGUtNC1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9tZW10eXBlLmM9NDkyPXN0YXRpYyB1NjQgc2FuaXRpemVfcGh5cyh1NjQgYWRkcmVzcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9tZW10eXBlLmMtNDk2LVxcdCAqIGZvciBhIFxcXCJkZWNveVxcXCIgdmlydHVhbCBhZGRyZXNzIChiaXQgNjMgY2xlYXIpIHBhc3NlZCB0b1xcbmFyY2gveDg2L21tL3BhdC9tZW10eXBlLmM6NDk3OlxcdCAqIHNldF9tZW1vcnlfWCgpLiBfX3BhKCkgb24gYSBcXFwiZGVjb3lcXFwiIGFkZHJlc3MgcmVzdWx0cyBpbiBhXFxuYXJjaC94ODYvbW0vcGF0L21lbXR5cGUuYy00OTgtXFx0ICogcGh5c2ljYWwgYWRkcmVzcyB3aXRoIGJpdCA2MyBzZXQuXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jY19wbGF0Zm9ybS5oXFx1MDAzZVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFxcdTAwM2VcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1yZWdpb24uaFxcdTAwM2VcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9Mjc0PXN0YXRpYyBib29sIF9fY3BhX3Bmbl9pbl9oaWdobWFwKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yODYtICogVUMgdG8gYXZvaWQgc3BlY3VsYXRpdmUgYWNjZXNzIGxvZ2dpbmcgYW5vdGhlciBlcnJvci4gQnV0IHBhc3NpbmcgdGhlXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyODc6ICogYWRkcmVzcyBvZiB0aGUgMToxIG1hcHBpbmcgdG8gc2V0X21lbW9yeV91YygpIGlzIGEgZmluZSB3YXkgdG8gZW5jb3VyYWdlIGFcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI4OC0gKiBzcGVjdWxhdGl2ZSBhY2Nlc3MuIFNvIHdlIGNoZWF0IGFuZCBmbGlwIHRoZSB0b3AgYml0IG9mIHRoZSBhZGRyZXNzLiBUaGlzXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxODc9c3RhdGljIGlubGluZSBpbnQgY3BhX2NsZWFyX3BhZ2VzX2FycmF5KHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcyxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE5My1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIxOTQ6aW50IF9zZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE5NS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxOTgtXFx0ICogSWYgeW91IHJlYWxseSBuZWVkIHN0cm9uZyBVQyB1c2UgaW9yZW1hcF91YygpLCBidXQgbm90ZVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjE5OTpcXHQgKiB0aGF0IHlvdSBjYW5ub3Qgb3ZlcnJpZGUgSU8gYXJlYXMgd2l0aCBzZXRfbWVtb3J5XyooKSBhc1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIwMC1cXHQgKiB0aGVzZSBoZWxwZXJzIGNhbm5vdCB3b3JrIHdpdGggSU8gbWVtb3J5Llxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjA2LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjIwNzppbnQgc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMDgte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjE4LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjIxOTpcXHRyZXQgPSBfc2V0X21lbW9yeV91YyhhZGRyLCBudW1wYWdlcyk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjIwLVxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMjktfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjIzMDpFWFBPUlRfU1lNQk9MKHNldF9tZW1vcnlfdWMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIzMS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyMzI6aW50IF9zZXRfbWVtb3J5X3djKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIzMy17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNDctXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjQ4OmludCBzZXRfbWVtb3J5X3djKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI0OS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNTYtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjU3OlxcdHJldCA9IF9zZXRfbWVtb3J5X3djKGFkZHIsIG51bXBhZ2VzKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNTgtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI2Mi19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjYzOkVYUE9SVF9TWU1CT0woc2V0X21lbW9yeV93Yyk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjY0LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI2NTppbnQgX3NldF9tZW1vcnlfd3QodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjY2LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI3MC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyNzE6aW50IF9zZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI3Mi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNzctXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjc4OmludCBzZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI3OS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyODEtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjgyOlxcdHJldCA9IF9zZXRfbWVtb3J5X3diKGFkZHIsIG51bXBhZ2VzKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyODMtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI4OC19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjg5OkVYUE9SVF9TWU1CT0woc2V0X21lbW9yeV93Yik7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjkwLVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjkzPWludCBzZXRfbWNlX25vc3BlYyh1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMwMi1cXHQgKiBXZSB3b3VsZCBsaWtlIHRvIGp1c3QgY2FsbDpcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzMDM6XFx0ICogICAgICBzZXRfbWVtb3J5X1hYKCh1bnNpZ25lZCBsb25nKXBmbl90b19rYWRkcihwZm4pLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMDQtXFx0ICogYnV0IGRvaW5nIHRoYXQgd291bGQgcmFkaWNhbGx5IGluY3JlYXNlIHRoZSBvZGRzIG9mIGFcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMwOS1cXHQgKiB0aGF0IGxvb2tzIGp1c3QgbGlrZSB0aGUgb25lIHdlIHdhbnQsIGJ1dCBoYXMgYml0IDYzIGZsaXBwZWQuXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzEwOlxcdCAqIFRoaXMgcmVsaWVzIG9uIHNldF9tZW1vcnlfWFgoKSBwcm9wZXJseSBzYW5pdGl6aW5nIGFueSBfX3BhKClcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMTEtXFx0ICogcmVzdWx0cyB3aXRoIF9fUEhZU0lDQUxfTUFTSyBvciBQVEVfUEZOX01BU0suXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMTQtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzE1OlxcdHJjID0gc2V0X21lbW9yeV9ucChkZWNveV9hZGRyLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMTYtXFx0aWYgKHJjKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzIzPWludCBjbGVhcl9tY2Vfbm9zcGVjKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzI2LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMyNzpcXHRyZXR1cm4gc2V0X21lbW9yeV9wKGFkZHIsIDEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMyOC19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzI5PUVYUE9SVF9TWU1CT0xfR1BMKGNsZWFyX21jZV9ub3NwZWMpO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzMxLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMzMjppbnQgc2V0X21lbW9yeV94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMy17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzktXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQwOmludCBzZXRfbWVtb3J5X254KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0MS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDctXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQ4OmludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0OS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNTItXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzUzOmludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNTQte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzYzLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2NDppbnQgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjUte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzY4LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2OTppbnQgc2V0X21lbW9yeV9ucCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNzAte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzczLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM3NDppbnQgc2V0X21lbW9yeV9ucF9ub2FsaWFzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3NS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODAtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzgxOmludCBzZXRfbWVtb3J5X3AodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzgyLXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4NS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzODY6aW50IHNldF9tZW1vcnlfNGsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg3LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5Mi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzOTM6aW50IHNldF9tZW1vcnlfbm9uZ2xvYmFsKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5NC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTgtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzk5OmludCBzZXRfbWVtb3J5X2dsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDAte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDA1LS8qXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDA2OiAqIF9fc2V0X21lbW9yeV9lbmNfcGd0YWJsZSgpIGlzIHVzZWQgZm9yIHRoZSBoeXBlcnZpc29ycyB0aGF0IGdldFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQwNy0gKiBpbmZvcm1lZCBhYm91dCBcXFwiZW5jcnlwdGlvblxcXCIgc3RhdHVzIHZpYSBwYWdlIHRhYmxlcy5cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDgtICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDA5OnN0YXRpYyBpbnQgX19zZXRfbWVtb3J5X2VuY19wZ3RhYmxlKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLCBib29sIGVuYylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MTAte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNDczPXN0YXRpYyBERUNMQVJFX1JXU0VNKG1lbV9lbmNfbG9jayk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0ODAtICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDgxOmJvb2wgc2V0X21lbW9yeV9lbmNfc3RvcF9jb252ZXJzaW9uKHZvaWQpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDgyLXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQ5NC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI0OTU6c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX2RlYyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgYm9vbCBlbmMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDk2LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUwMi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MDM6XFx0XFx0cmV0ID0gX19zZXRfbWVtb3J5X2VuY19wZ3RhYmxlKGFkZHIsIG51bXBhZ2VzLCBlbmMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUwNC1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUxMC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MTE6aW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUxMi17XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTEzOlxcdHJldHVybiBfX3NldF9tZW1vcnlfZW5jX2RlYyhhZGRyLCBudW1wYWdlcywgdHJ1ZSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTE0LX1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MTU6RVhQT1JUX1NZTUJPTF9HUEwoc2V0X21lbW9yeV9lbmNyeXB0ZWQpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUxNi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MTc6aW50IHNldF9tZW1vcnlfZGVjcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUxOC17XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTE5OlxcdHJldHVybiBfX3NldF9tZW1vcnlfZW5jX2RlYyhhZGRyLCBudW1wYWdlcywgZmFsc2UpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyMC19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTIxOkVYUE9SVF9TWU1CT0xfR1BMKHNldF9tZW1vcnlfZGVjcnlwdGVkKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MjItXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNTIzPWludCBzZXRfcGFnZXNfdWMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyNi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1Mjc6XFx0cmV0dXJuIHNldF9tZW1vcnlfdWMoYWRkciwgbnVtcGFnZXMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyOC19XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1ODk9aW50IHNldF9wYWdlc193YihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTkyLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjU5MzpcXHRyZXR1cm4gc2V0X21lbW9yeV93YihhZGRyLCBudW1wYWdlcyk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTk0LX1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjYyMj1pbnQgc2V0X3BhZ2VzX3JvKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MjUtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjI2OlxcdHJldHVybiBzZXRfbWVtb3J5X3JvKGFkZHIsIG51bXBhZ2VzKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MjctfVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjI5PWludCBzZXRfcGFnZXNfcncoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjYzMi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2MzM6XFx0cmV0dXJuIHNldF9tZW1vcnlfcncoYWRkciwgbnVtcGFnZXMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjYzNC19XFxuLS1cXG5hcmNoL3g4Ni9tbS9wdGkuYy00MC0jaW5jbHVkZSBcXHUwMDNjYXNtL3NlY3Rpb25zLmhcXHUwMDNlXFxuYXJjaC94ODYvbW0vcHRpLmM6NDE6I2luY2x1ZGUgXFx1MDAzY2FzbS9zZXRfbWVtb3J5LmhcXHUwMDNlXFxuYXJjaC94ODYvbW0vcHRpLmMtNDItI2luY2x1ZGUgXFx1MDAzY2FzbS9idWdzLmhcXHUwMDNlXFxuLS1cXG5hcmNoL3g4Ni9tbS9wdGkuYz01NzE9c3RhdGljIHZvaWQgcHRpX2Nsb25lX2tlcm5lbF90ZXh0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wdGkuYy02MDAtXFx0LyogU2V0IHRoZSBnbG9iYWwgYml0IGZvciBub3JtYWwgbm9uLV9faW5pdCBrZXJuZWwgdGV4dDogKi9cXG5hcmNoL3g4Ni9tbS9wdGkuYzo2MDE6XFx0c2V0X21lbW9yeV9nbG9iYWwoc3RhcnQsIChlbmRfZ2xvYmFsIC0gc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbmFyY2gveDg2L21tL3B0aS5jLTYwMi19XFxuLS1cXG5hcmNoL3g4Ni9tbS9wdGkuYz02MDQ9c3RhdGljIHZvaWQgcHRpX3NldF9rZXJuZWxfaW1hZ2Vfbm9uZ2xvYmFsKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wdGkuYy02MTktXFx0ICovXFxuYXJjaC94ODYvbW0vcHRpLmM6NjIwOlxcdHNldF9tZW1vcnlfbm9uZ2xvYmFsKHN0YXJ0LCAoZW5kIC0gc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbmFyY2gveDg2L21tL3B0aS5jLTYyMS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjE0Ljk2NDQxODk5NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDU3NTg2OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIHg4NiBNZW1vcnkgUHJvdGVjdGlvbiBDb2RlKipcblxuT2theSwgc28gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGlzICphbHdheXMqIGNvbXBpbGVkIGludG8gdGhlIHg4NiBrZXJuZWw7IHRoYXQncyBnb29kIHRvIGtub3cg4oCTIGl0J3MgZnVuZGFtZW50YWwuIFRoZSBgTWFrZWZpbGVgIGNvbmZpcm1zIHRoaXMgKGBvYmoteSA6PSBzZXRfbWVtb3J5Lm8gbWVtdHlwZS5vYCkuIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgaXRzIGJlaGF2aW91ciBpcyB0aWVkIHRvIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gc2VlIGlmIGBTVFJJQ1RfS0VSTkVMX1JXWGAgb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gQ29udHJvbC1GbG93IEF0dGVudWF0aW9uIChDUEEpLCBsaWtlIHRoZSBgQ1BBYCBtYWNybywgaGFzIGFueSBpbmZsdWVuY2Ugb24gaXRzIG9wZXJhdGlvbi4gQSBxdWljayBpbnNwZWN0aW9uIG9mIGBhcmNoL3g4Ni9LY29uZmlnYCBzaG91bGQgcmV2ZWFsIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhbmQgd2hldGhlciBJIG5lZWQgdG8gY29uc2lkZXIgdGhvc2UgaW4gbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NDA1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MTguMDIyMDA4MDU4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzAwOTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTVFJJQ1RfS0VSTkVMX1JXWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTA3LVxcdHNlbGVjdCBBUkNIX0hBU19TRVRfRElSRUNUX01BUFxcbmFyY2gveDg2L0tjb25maWc6MTA4OlxcdHNlbGVjdCBBUkNIX0hBU19TVFJJQ1RfS0VSTkVMX1JXWFxcbmFyY2gveDg2L0tjb25maWctMTA5LVxcdHNlbGVjdCBBUkNIX0hBU19TVFJJQ1RfTU9EVUxFX1JXWFxcbi0tXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9MTcyPXN0YXRpYyB2b2lkIGl0c19maW5pX2NvcmUodm9pZClcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xNzMte1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjE3NDpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gpKVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTE3NS1cXHRcXHRpdHNfcGFnZXNfcHJvdGVjdChcXHUwMDI2aXRzX3BhZ2VzKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NjcxPXN0YXRpYyBpbmxpbmUgcGdwcm90X3QgdmVyaWZ5X3J3eChwZ3Byb3RfdCBvbGQsIHBncHJvdF90IG5ldywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNzAzLVxcdCAqIGZhbHNlIHBvc2l0aXZlLlxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NzA0OlxcdCAqIE9uY2UgZGVidWdfY2hlY2t3eCgpIGJlY29tZXMgbWFuZGF0b3J5IGZvciBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03MDUtXFx0ICogdGhlIHdhcm5pbmcgY2FuIGJlIHJlbW92ZWQgY29tcGxldGVseS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MTguMDg5MDIyMjcyWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3OTE1OTkyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYFNUUklDVF9LRVJORUxfUldYYCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBkZWVwIGVuZCwgbGV0J3MganVzdCBxdWlja2x5IGNvbmZpcm0gd2hlcmUgYFNUUklDVF9LRVJORUxfUldYYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEkgc3VzcGVjdCBpdCdzIGVpdGhlciBpbiB0aGUgZ2VuZXJhbCBpbml0aWFsaXphdGlvbiBjb25maWcsIGBpbml0L0tjb25maWdgLCBvciBwZXJoYXBzIGEgbW9yZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZSwgbGlrZSBgYXJjaC9LY29uZmlnYC4gSXQncyBjcml0aWNhbCB0byBrbm93ICpleGFjdGx5KiB3aGVyZSB0aGlzIGNvbmZpZyBvcHRpb24gaXMgZGVmaW5lZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaG93IGl0J3MgaGFuZGxlZCBkdXJpbmcgYnVpbGQgYW5kIGNvbmZpZ3VyYXRpb24gdGltZS4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiB0byBwcm9wZXJseSBhc3Nlc3MgaXRzIGltcGFjdCBhbmQgaG93IEkgY2FuLCBpZiBuZWNlc3NhcnksIGN1c3RvbWl6ZSBvciBvdmVycmlkZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aG9zZSBLY29uZmlnIGZpbGVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTA2NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjIwLjg4MDYyMzk2OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NDc3NTE5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1RSSUNUX0tFUk5FTF9SV1hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTE1OTU9Y29uZmlnIEFSQ0hfSEFTX1NUUklDVF9LRVJORUxfUldYXFxuLS1cXG5hcmNoL0tjb25maWctMTU5Ny1cXG5hcmNoL0tjb25maWc6MTU5ODpjb25maWcgU1RSSUNUX0tFUk5FTF9SV1hcXG5hcmNoL0tjb25maWctMTU5OS1cXHRib29sIFxcXCJNYWtlIGtlcm5lbCB0ZXh0IGFuZCByb2RhdGEgcmVhZC1vbmx5XFxcIiBpZiBBUkNIX09QVElPTkFMX0tFUk5FTF9SV1hcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MjIuNTc1NDA3MTAxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODUyNjM1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgbXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgaXQncyBsaWtlbHkgaG91c2VkIGluIGBhcmNoL0tjb25maWdgLiBJJ20gcmVhc29uYWJseSBzdXJlIG9mIHRoYXQgZGlyZWN0b3J5LCBpdCdzIHdoZXJlIHRoZSBhcmNoaXRlY3R1cmFsLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHVzdWFsbHkgbGl2ZS4gSSdsbCBmb2N1cyBteSBzZWFyY2ggYXJvdW5kIGxpbmUgMTU5OC4gTm8gbmVlZCB0byBnZXQgZGlzdHJhY3RlZCBieSBhIHdpZGVyIHNlYXJjaCB3aGVuIEkgaGF2ZSBhIGdvb2QgaWRlYSB3aGVyZSB0byBzdGFydCBkaWdnaW5nLiBMZXQncyBzZWUgd2hhdCdzIGJyZXdpbmcgaW4gdGhhdCBwYXJ0aWN1bGFyIGFyZWEgb2YgdGhlIGNvbmZpZyBmaWxlLiBUaW1lIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5Mzg2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MjQuNDYwNjcyODY4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjcwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTU5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU5NTpcXHRjb25maWcgQVJDSF9IQVNfU1RSSUNUX0tFUk5FTF9SV1hcXG4xNTk2OlxcdFxcdGRlZl9ib29sIG5cXG4xNTk3OlxcdFxcbjE1OTg6XFx0Y29uZmlnIFNUUklDVF9LRVJORUxfUldYXFxuMTU5OTpcXHRcXHRib29sIFxcXCJNYWtlIGtlcm5lbCB0ZXh0IGFuZCByb2RhdGEgcmVhZC1vbmx5XFxcIiBpZiBBUkNIX09QVElPTkFMX0tFUk5FTF9SV1hcXG4xNjAwOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9IQVNfU1RSSUNUX0tFUk5FTF9SV1hcXG4xNjAxOlxcdFxcdGRlZmF1bHQgIUFSQ0hfT1BUSU9OQUxfS0VSTkVMX1JXWCB8fCBBUkNIX09QVElPTkFMX0tFUk5FTF9SV1hfREVGQVVMVFxcbjE2MDI6XFx0XFx0aGVscFxcbjE2MDM6XFx0XFx0ICBJZiB0aGlzIGlzIHNldCwga2VybmVsIHRleHQgYW5kIHJvZGF0YSBtZW1vcnkgd2lsbCBiZSBtYWRlIHJlYWQtb25seSxcXG4xNjA0OlxcdFxcdCAgYW5kIG5vbi10ZXh0IG1lbW9yeSB3aWxsIGJlIG1hZGUgbm9uLWV4ZWN1dGFibGUuIFRoaXMgcHJvdmlkZXNcXG4xNjA1OlxcdFxcdCAgcHJvdGVjdGlvbiBhZ2FpbnN0IGNlcnRhaW4gc2VjdXJpdHkgZXhwbG9pdHMgKGUuZy4gZXhlY3V0aW5nIHRoZSBoZWFwXFxuMTYwNjpcXHRcXHQgIG9yIG1vZGlmeWluZyB0ZXh0KVxcbjE2MDc6XFx0XFxuMTYwODpcXHRcXHQgIFRoZXNlIGZlYXR1cmVzIGFyZSBjb25zaWRlcmVkIHN0YW5kYXJkIHNlY3VyaXR5IHByYWN0aWNlIHRoZXNlIGRheXMuXFxuMTYwOTpcXHRcXHQgIFlvdSBzaG91bGQgc2F5IFkgaGVyZSBpbiBhbG1vc3QgYWxsIGNhc2VzLlxcbjE2MTA6XFx0XFxuMTYxMTpcXHRjb25maWcgQVJDSF9IQVNfU1RSSUNUX01PRFVMRV9SV1hcXG4xNjEyOlxcdFxcdGRlZl9ib29sIG5cXG4xNjEzOlxcdFxcbjE2MTQ6XFx0Y29uZmlnIFNUUklDVF9NT0RVTEVfUldYXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjI0LjQ2MTE2NjAwOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NDI0ODcxNzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFdeWCBWZXJpZmljYXRpb24gTG9naWMgaW4geDg2IE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgU1RSSUNUX0tFUk5FTF9SV1hgIGRlZmF1bHRzIHRvIGB5YCwgc28gd2UncmUgZ29vZCB0aGVyZS4gVGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBpcyBjcnVjaWFsOiB3ZSdyZSBkZWFsaW5nIHdpdGggYEVuYWJsZUNvbmZpZ3NgOiBgW1wiU1RSSUNUX0tFUk5FTF9SV1hcIl1gLlxuXG5Ob3csIGxldCdzIGhvbmUgaW4gb24gdGhlIGNvcmUgb2YgdGhlIG1hdHRlci4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjYXJlZnVsbHkgc2VsZWN0ZWQgdG8gYXZvaWQgdGhlIG5vaXNlIG9mIHViaXF1aXRvdXMgZnVuY3Rpb25zIGxpa2UgYHZmcmVlYCBvciBga21hbGxvY2AuIEluc3RlYWQsIEknbSBjb25jZW50cmF0aW5nIG9uIHRoZSBzcGVjaWZpYyBlbnRyeSBwb2ludHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCwgYF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCwgYF9fY2hhbmdlX3BhZ2VfYXR0cmAsIGBfX3Nob3VsZF9zcGxpdF9sYXJnZV9wYWdlYCwgYHNldF9tZW1vcnlfcm9gLCBgc2V0X21lbW9yeV9yd2AsIGBzZXRfbWVtb3J5X3JveGAsIGBzZXRfbWVtb3J5X3hgLCBhbmQgYHNldF9tZW1vcnlfbnhgLiBUaGVzZSBhcmUgYWxsIHJlbGV2YW50IGZ1bmN0aW9ucyBpbiB0aGUgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGZpbGUuXG5cblRoZSBnaXQgZGlmZiBjb25maXJtcyB0aGUgY2hhbmdlcy4gV2UncmUgbW9kaWZ5aW5nIHRoZSBXXlggdmVyaWZpY2F0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGB2ZXJpZnlfcnd4YCBmdW5jdGlvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjb25kaXRpb25hbCB3YXJuaW5nIHJlbGF0ZWQgdG8gYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIGFuZCByb2RhdGEgcHJvdGVjdGlvbi4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IHByb3ZpZGVzIGEgbWVjaGFuaXNtIHRvIGhhbmRsZSBwb3RlbnRpYWwgZmFsc2UgcG9zaXRpdmVzLCBwYXJ0aWN1bGFybHkgYmVmb3JlIHRoZSBgZGVidWdfY2hlY2t3eCgpYCBiZWNvbWVzIG1hbmRhdG9yeS5cblxuVGhlIHN1YnN5c3RlbSBpcyBjbGVhcmx5IHg4NiBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBDaGFuZ2UgUGFnZSBBdHRyaWJ1dGVzIChDUEEpLiBUaGUgcmVhY2hhYmlsaXR5IGlzIHdlbGwtZGVmaW5lZDogdGhpcyBjb2RlIHBhdGggaXMgZnVsbHkgcmVhY2hhYmxlIG9uIHg4Nl82NCB3aGVuZXZlciBwYWdlIHByb3RlY3Rpb24gYXR0cmlidXRlcyBhcmUgbW9kaWZpZWQsIHdoaWNoIGhhcHBlbnMgZnJlcXVlbnRseSAobW9kdWxlcywgQlBGIEpJVCwga3Byb2Jlcy9mdHJhY2UsIGRpcmVjdCBtYXAgbWFuaXB1bGF0aW9uKS4gVGhpcyBtYWtlcyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhcmUgYXBwcm9wcmlhdGUuIFRoZSBwYXRjaCBtb2RpZmllcyBXXlggdmVyaWZpY2F0aW9uLCBhbmQgdGhpcyBtYWtlcyBpdCBhIHN1aXRhYmxlIGFyZWEgZm9yIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTEyLCJPdXRwdXRUb2tlbnMiOjIxMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozOTozMi44ODYwNDAxNzVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzI0MDY4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1RSSUNUX0tFUk5FTF9SV1hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2NoYW5nZV9wYWdlX2F0dHJcIixcbiAgICBcIl9fc2hvdWxkX3NwbGl0X2xhcmdlX3BhZ2VcIixcbiAgICBcImNoYW5nZV9wYWdlX2F0dHJfc2V0X2NsclwiLFxuICAgIFwic2V0X21lbW9yeV9yb1wiLFxuICAgIFwic2V0X21lbW9yeV9yd1wiLFxuICAgIFwic2V0X21lbW9yeV9yb3hcIixcbiAgICBcInNldF9tZW1vcnlfbnhcIixcbiAgICBcInNldF9tZW1vcnlfeFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXXlggcGVybWlzc2lvbiB2ZXJpZmljYXRpb24gbG9naWMgKHZlcmlmeV9yd3gpIHdpdGhpbiB4ODYgQ2hhbmdlIFBhZ2UgQXR0cmlidXRlcyAoQ1BBKSBpbiBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhlY3V0ZWQgd2hlbmV2ZXIga2VybmVsIHBhZ2UgcHJvdGVjdGlvbnMgYXJlIGFkanVzdGVkIChzdWNoIGFzIHZpYSBCUEYgSklULCBmdHJhY2UsIG1vZHVsZSBsb2FkaW5nL3VubG9hZGluZywgb3IgZHJpdmVyIG1lbW9yeSBhdHRyaWJ1dGUgY2hhbmdlcykuIEl0IGludHJvZHVjZXMgbmV3IGNvbmRpdGlvbmFsIHdhcm5pbmcgYmVoYXZpb3Igd2hlbiBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5IGlzIGZhbHNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNUUklDVF9LRVJORUxfUldYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19jaGFuZ2VfcGFnZV9hdHRyXCIsXG4gICAgXCJfX3Nob3VsZF9zcGxpdF9sYXJnZV9wYWdlXCIsXG4gICAgXCJjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJcIixcbiAgICBcInNldF9tZW1vcnlfcm9cIixcbiAgICBcInNldF9tZW1vcnlfcndcIixcbiAgICBcInNldF9tZW1vcnlfcm94XCIsXG4gICAgXCJzZXRfbWVtb3J5X254XCIsXG4gICAgXCJzZXRfbWVtb3J5X3hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV15YIHBlcm1pc3Npb24gdmVyaWZpY2F0aW9uIGxvZ2ljICh2ZXJpZnlfcnd4KSB3aXRoaW4geDg2IENoYW5nZSBQYWdlIEF0dHJpYnV0ZXMgKENQQSkgaW4gYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGV4ZWN1dGVkIHdoZW5ldmVyIGtlcm5lbCBwYWdlIHByb3RlY3Rpb25zIGFyZSBhZGp1c3RlZCAoc3VjaCBhcyB2aWEgQlBGIEpJVCwgZnRyYWNlLCBtb2R1bGUgbG9hZGluZy91bmxvYWRpbmcsIG9yIGRyaXZlciBtZW1vcnkgYXR0cmlidXRlIGNoYW5nZXMpLiBJdCBpbnRyb2R1Y2VzIG5ldyBjb25kaXRpb25hbCB3YXJuaW5nIGJlaGF2aW9yIHdoZW4ga2VybmVsX3NldF90b19yZWFkb25seSBpcyBmYWxzZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MzIuOTU5Mjg4MDI2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc1MTYzNzA4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjMyLjk1OTc0NTU3NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0NzUxMTc0NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdmVyaWZ5X3J3eCgpYCBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgdG8gbG9nIGEgd2FybmluZyB2aWEgYHByX3dhcm5fb25jZWAgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgZnVsbCBgV0FSTl9PTkNFYCB3aGVuIGEgV15YIHZpb2xhdGlvbiBpcyBkZXRlY3RlZCBiZWZvcmUga2VybmVsIHRleHQgaGFzIGJlZW4gbWFya2VkIHJlYWQtb25seSAoYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIGlzIGZhbHNlKS4gXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSB0b3VjaGVzIGxvZ2dpbmcgYW5kIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBhbiBleGlzdGluZyBnbG9iYWwgYm9vbGVhbiBmbGFnIGFuZCBzY2FsYXIgcGFnZS10YWJsZSBwcm90ZWN0aW9uIHZhbHVlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmRkNmQ0ZWVkYWFmNDMyZjdmYmEzN2MyZWZjODhiODQ1OWFmODAyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjM3OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGIzMDYwMDAwZGE4ZDEuLmE0ZjdmZTY5ZTY5MjIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5AQCAtNjk3LDYgKzY5NywyMSBAQCBzdGF0aWMgaW5saW5lIHBncHJvdF90IHZlcmlmeV9yd3gocGdwcm90X3Qgb2xkLCBwZ3Byb3RfdCBuZXcsIHVuc2lnbmVkIGxvbmcgc3RhclxuIFx0XHRyZXR1cm4gbmV3O1xuIFxuIFx0ZW5kID0gc3RhcnQgKyBucGcgKiBQQUdFX1NJWkUgLSAxO1xuK1xuK1x0LypcbitcdCAqIElmIHRoZSBrZXJuZWwgdGV4dCBpcyBzdGlsbCBSV1gsIGdlbnRseSBjb21wbGFpbiwgdGhpcyBjb3VsZCBiZSBhXG4rXHQgKiBmYWxzZSBwb3NpdGl2ZS5cbitcdCAqIE9uY2UgZGVidWdfY2hlY2t3eCgpIGJlY29tZXMgbWFuZGF0b3J5IGZvciBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gsXG4rXHQgKiB0aGUgd2FybmluZyBjYW4gYmUgcmVtb3ZlZCBjb21wbGV0ZWx5LlxuK1x0ICovXG4rXHRpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpIHtcbitcdFx0cHJfd2Fybl9vbmNlKDEsIFwiQ1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXG5cIixcbitcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwob2xkKSxcbitcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwobmV3KSxcbitcdFx0ICBzdGFydCwgZW5kLCBwZm4pO1xuK1x0XHRyZXR1cm4gbmV3O1xuK1x0fVxuK1xuIFx0V0FSTl9PTkNFKDEsIFwiQ1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXG5cIixcbiBcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwob2xkKSxcbiBcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwobmV3KSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjMyLjk1OTc0NjM5NloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTkzOTY2NDI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIHRoZSBOZWVkIGZvciBLTVNBTiBGdXp6aW5nIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCoqXG5cbk9rYXksIGhlcmUncyB0aGUgZGVhbC4gSSdtIGJlaW5nIGFza2VkIHRvIGZpZ3VyZSBvdXQgd2hldGhlciBhIHBhdGNoIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCB3YXJyYW50cyBLTVNBTiBmdXp6aW5nLCBvciBpZiBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGRldGVjdG9ycyBhcmUgZ29vZCBlbm91Z2guIExldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS5cblxuRmlyc3QsIHRoZSByaXNrIGFuYWx5c2lzLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCByZXF1ZXN0OiBpdCdzIGEgZGVmZW5zaXZlIHNlY3VyaXR5IGVuZ2luZWVyaW5nIHF1ZXN0aW9uIHdpdGhpbiBMaW51eCBrZXJuZWwgUUEgdHJpYWdlLiBUaGUgc2V2ZXJpdHkgaXNuJ3QgY3JpdGljYWw7IHdlJ3JlIGp1c3QgbWFraW5nIHN1cmUgb3VyIGJhc2VzIGFyZSBjb3ZlcmVkLiBTbywgbXkgYWN0aW9uIGlzIHRvIHByb3ZpZGUgYSBjb21wbGV0ZSBldmFsdWF0aW9uLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBhcHBlYXJzIHRvIGJlIGFkZGluZyBhIHdhcm5pbmcgcmVsYXRlZCB0byBXXlggdmlvbGF0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCBjaGVja3MgaWYgY29kZSBpcyBiZWluZyBtYWRlIHdyaXRhYmxlIGFmdGVyIGJlaW5nIHJlYWQtb25seSBpbiB0aGUga2VybmVsIHRleHQuIFRoZXJlJ3MgYSBjb25kaXRpb25hbCBjaGVjayBoZXJlOiBJZiB0aGUga2VybmVsIGlzbid0IGNvbmZpZ3VyZWQgZm9yIHN0cmljdCByZWFkLW9ubHkgdGV4dCwgYSB3YXJuaW5nIGlzIHByaW50ZWQuIE90aGVyd2lzZSwgYFdBUk5fT05DRWAgaXMgdXNlZC4gVGhpcyBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gcHJvdGVjdGluZyBhZ2FpbnN0IGNvZGUgaW5qZWN0aW9uIHZ1bG5lcmFiaWxpdGllcy5cblxuSSdsbCBuZWVkIHRvIGdvIGRlZXBlciB0aGFuIGp1c3QgZ2xhbmNpbmcgYXQgdGhlIGRpZmYuIEknbGwgdXNlIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IHRoZSBicm9hZGVyIGNvbnRleHQgd2l0aGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhpcyBgc2V0X21lbW9yeS5jYCBjb2RlIGlzIGRvaW5nIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGEgY29uY2VybiBpbiB0aGUgcGF0Y2hlZCBjb2RlLiBPbmNlIEkgZ2V0IHRoZSB3aWRlciBwaWN0dXJlLCBJJ2xsIGJlIGluIGEgYmV0dGVyIHBvc2l0aW9uIHRvIGRldGVybWluZSBpZiBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeSwgb3IgaWYgc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBhZGVxdWF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjQ4Ljg5OTQxMzYxNloiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0XFx0XFx0cmV0dXJuIG5ldztcXG4gNjkxOlxcdFxcbiA2OTI6XFx0XFx0aWYgKChwZ3Byb3RfdmFsKG5ldykgXFx1MDAyNiAoX1BBR0VfUlcgfCBfUEFHRV9OWCkpICE9IF9QQUdFX1JXKVxcbiA2OTM6XFx0XFx0XFx0cmV0dXJuIG5ldztcXG4gNjk0OlxcdFxcbiA2OTU6XFx0XFx0LyogTm9uLWxlYWYgdHJhbnNsYXRpb24gZW50cmllcyBjYW4gZGlzYWJsZSB3cml0aW5nIG9yIGV4ZWN1dGlvbi4gKi9cXG4gNjk2OlxcdFxcdGlmICghcncgfHwgbngpXFxuIDY5NzpcXHRcXHRcXHRyZXR1cm4gbmV3O1xcbiA2OTg6XFx0XFxuIDY5OTpcXHRcXHRlbmQgPSBzdGFydCArIG5wZyAqIFBBR0VfU0laRSAtIDE7XFxuIDcwMDpcXHRcXG4gNzAxOlxcdFxcdC8qXFxuIDcwMjpcXHRcXHQgKiBJZiB0aGUga2VybmVsIHRleHQgaXMgc3RpbGwgUldYLCBnZW50bHkgY29tcGxhaW4sIHRoaXMgY291bGQgYmUgYVxcbiA3MDM6XFx0XFx0ICogZmFsc2UgcG9zaXRpdmUuXFxuIDcwNDpcXHRcXHQgKiBPbmNlIGRlYnVnX2NoZWNrd3goKSBiZWNvbWVzIG1hbmRhdG9yeSBmb3IgQ09ORklHX1NUUklDVF9LRVJORUxfUldYLFxcbiA3MDU6XFx0XFx0ICogdGhlIHdhcm5pbmcgY2FuIGJlIHJlbW92ZWQgY29tcGxldGVseS5cXG4gNzA2OlxcdFxcdCAqL1xcbiA3MDc6XFx0XFx0aWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KSB7XFxuIDcwODpcXHRcXHRcXHRwcl93YXJuX29uY2UoMSwgXFxcIkNQQSBkZXRlY3RlZCBXXlggdmlvbGF0aW9uOiAlMDE2bGx4IC1cXHUwMDNlICUwMTZsbHggcmFuZ2U6IDB4JTAxNmx4IC0gMHglMDE2bHggUEZOICVseFxcXFxuXFxcIixcXG4gNzA5OlxcdFxcdFxcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksXFxuIDcxMDpcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChuZXcpLFxcbiA3MTE6XFx0XFx0XFx0ICBzdGFydCwgZW5kLCBwZm4pO1xcbiA3MTI6XFx0XFx0XFx0cmV0dXJuIG5ldztcXG4gNzEzOlxcdFxcdH1cXG4gNzE0OlxcdFxcbiA3MTU6XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXFx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXFxcblxcXCIsXFxuIDcxNjpcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChvbGQpLFxcbiA3MTc6XFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwobmV3KSxcXG4gNzE4OlxcdFxcdFxcdCAgc3RhcnQsIGVuZCwgcGZuKTtcXG4gNzE5OlxcdFxcbiA3MjA6XFx0XFx0LypcXG4gNzIxOlxcdFxcdCAqIEZvciBub3csIGFsbG93IGFsbCBwZXJtaXNzaW9uIGNoYW5nZSBhdHRlbXB0cyBieSByZXR1cm5pbmcgdGhlXFxuIDcyMjpcXHRcXHQgKiBhdHRlbXB0ZWQgcGVybWlzc2lvbnMuICBUaGlzIGNhbiAncmV0dXJuIG9sZCcgdG8gYWN0aXZlbHlcXG4gNzIzOlxcdFxcdCAqIHJlZnVzZSB0aGUgcGVybWlzc2lvbiBjaGFuZ2UgYXQgYSBsYXRlciB0aW1lLlxcbiA3MjQ6XFx0XFx0ICovXFxuIDcyNTpcXHRcXHRyZXR1cm4gbmV3O1xcbiA3MjY6XFx0fVxcbiA3Mjc6XFx0XFxuIDcyODpcXHQvKlxcbiA3Mjk6XFx0ICogTG9va3VwIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGZvciBhIHZpcnR1YWwgYWRkcmVzcyBpbiBhIHNwZWNpZmljIHBnZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6NDguODk5NTQ5NDY3WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4MTEzNDg5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQW5hbHlzaXMgb2YgdGhlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBwcl93YXJuX29uY2VgIHVzYWdlIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUg4oCTIHRoZSBmaXJzdCBhcmd1bWVudCBsb29rcyBzdXNwaWNpb3VzLiBJcyBpdCBhIHR5cG8gb3IgYSBtYWNybz8gSW4gYW55IGNhc2UsIGl0J3Mgbm90IHRoZSBzdGFuZGFyZCBwYXR0ZXJuLCBzbyBJJ20gZmlsaW5nIHRoYXQgYXdheSBmb3Igbm93LiBNeSBpbW1lZGlhdGUgZm9jdXMsIGhvd2V2ZXIsIGlzIG9uIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBhbnl0aGluZyBLTVNBTiB3b3VsZCBmbGFnLlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgYHZlcmlmeV9yd3goKWAgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBSaWdodCwgc28gSSByYW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OlxuXG4qICAgKipBbGxvY2F0aW9uPyoqIE5vcGUsIG5vIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbiB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuXG4qICAgKipVc2VyIHNwYWNlIGNvcHk/KiogTm90IGF0IGFsbC5cbiogICAqKlVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzPyoqIE5vLCB0aGUgYXJndW1lbnRzIHRvIGB2ZXJpZnlfcnd4KClgIOKAkyBgb2xkYCwgYG5ld2AsIGBzdGFydGAsIGBlbmRgLCBgcGZuYCwgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIOKAkyBhcmUgYWxsIHNjYWxhciB2YWx1ZXMsIGJvb2xlYW5zLCBvciBgcGdwcm90X3RgIHBhc3NlZCBieSB2YWx1ZS4gVGhpcyBpcyBhIGNsZWFuIGJpbGwgb2YgaGVhbHRoLlxuKiAgICoqQnVmZmVyIG1hbmlwdWxhdGlvbiBvciBib3VuZHMgY2hlY2tzPyoqIE5vdGhpbmcgaGVyZS5cbiogICAqKktlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzPyoqIE5vLlxuXG5HaXZlbiBhbGwgb2YgdGhhdCwgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBcIk5lZWRzS01TQU4gPSBmYWxzZS5cIlxuXG5Ob3csIGxldCdzIHNvbGlkaWZ5IHRoZSByZWFzb25pbmcgZm9yIHRoZSByZWNvcmQuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBhIGBXQVJOX09OQ0VgIHRvIGEgYHByX3dhcm5fb25jZWAgaW4gYHZlcmlmeV9yd3goKWAuIFRoZSBjaGFuZ2Ugb25seSBkb3duZ3JhZGVzIHRoZSB3YXJuaW5nIGlmIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBpcyBmYWxzZSBkdXJpbmcgZWFybHkgYm9vdCwgd2hlbiB0aGUga2VybmVsIHRleHQgcGVybWlzc2lvbnMgYXJlIHN0aWxsIFJXWC4gSXQncyBlc3NlbnRpYWxseSBqdXN0IGEgY29uZGl0aW9uYWwgbG9nZ2luZyBjaGFuZ2UuIFRoZSBjb2RlIGlzIG9ubHkgd29ya2luZyB3aXRoIHNjYWxhciB2YXJpYWJsZXMg4oCTIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcywgbm8gd3JpdGVzIG9yIGNvcGllcyB0byB1c2Vyc3BhY2UsIG5vIGNoYW5nZXMgdG8gYnVmZmVyIGxlbmd0aHMgb3IgY2FsY3VsYXRpb25zLiBBbGwgdGhlIGluZm9ybWF0aW9uIGZvciBLTVNBTiB0byBhbmFseXplIGlzIHNjYWxhciBhbmQgcGFzc2VkIGJ5IHZhbHVlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggYWJzb2x1dGVseSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IEtNU0FOLXJlbGV2YW50IGlzc3VlcyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzIsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6NTcuNzEwOTAyNzI3WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdmVyaWZ5X3J3eCgpYCBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgdG8gbG9nIGEgd2FybmluZyB2aWEgYHByX3dhcm5fb25jZWAgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgZnVsbCBgV0FSTl9PTkNFYCB3aGVuIGEgV15YIHZpb2xhdGlvbiBpcyBkZXRlY3RlZCBiZWZvcmUga2VybmVsIHRleHQgaGFzIGJlZW4gbWFya2VkIHJlYWQtb25seSAoYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIGlzIGZhbHNlKS4gXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSB0b3VjaGVzIGxvZ2dpbmcgYW5kIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBhbiBleGlzdGluZyBnbG9iYWwgYm9vbGVhbiBmbGFnIGFuZCBzY2FsYXIgcGFnZS10YWJsZSBwcm90ZWN0aW9uIHZhbHVlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHZlcmlmeV9yd3goKWAgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIHRvIGxvZyBhIHdhcm5pbmcgdmlhIGBwcl93YXJuX29uY2VgIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIGZ1bGwgYFdBUk5fT05DRWAgd2hlbiBhIFdeWCB2aW9sYXRpb24gaXMgZGV0ZWN0ZWQgYmVmb3JlIGtlcm5lbCB0ZXh0IGhhcyBiZWVuIG1hcmtlZCByZWFkLW9ubHkgKGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBpcyBmYWxzZSkuIFxcblxcblRoaXMgY2hhbmdlIG9ubHkgdG91Y2hlcyBsb2dnaW5nIGFuZCBjb250cm9sIGZsb3cgYmFzZWQgb24gYW4gZXhpc3RpbmcgZ2xvYmFsIGJvb2xlYW4gZmxhZyBhbmQgc2NhbGFyIHBhZ2UtdGFibGUgcHJvdGVjdGlvbiB2YWx1ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCB0b3VjaCB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgZG9lcyBub3QgZXhwb3NlIGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowpzgs9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 12:36:30 +0000 UTC FinishedAt: 2026-09-11 12:39:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STRICT_KERNEL_RWX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STRICT_KERNEL_RWX" ], "series_id": "28ec0797-ca6e-4150-9b75-cd4e2a6de68e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__change_page_attr", "__should_split_large_page", "change_page_attr_set_clr", "set_memory_ro", "set_memory_rw", "set_memory_rox", "set_memory_nx", "set_memory_x" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUUklDVF9LRVJORUxfUldYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19jaGFuZ2VfcGFnZV9hdHRyJiMzNDssCiAgICAmIzM0O19fc2hvdWxkX3NwbGl0X2xhcmdlX3BhZ2UmIzM0OywKICAgICYjMzQ7Y2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyJiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfcm8mIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ydyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3JveCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X254JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfeCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2ZXJpZnlfcnd4KClgIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCB0byBsb2cgYSB3YXJuaW5nIHZpYSBgcHJfd2Fybl9vbmNlYCBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSBmdWxsIGBXQVJOX09OQ0VgIHdoZW4gYSBXXlggdmlvbGF0aW9uIGlzIGRldGVjdGVkIGJlZm9yZSBrZXJuZWwgdGV4dCBoYXMgYmVlbiBtYXJrZWQgcmVhZC1vbmx5IChga2VybmVsX3NldF90b19yZWFkb25seWAgaXMgZmFsc2UpLiBcblxuVGhpcyBjaGFuZ2Ugb25seSB0b3VjaGVzIGxvZ2dpbmcgYW5kIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBhbiBleGlzdGluZyBnbG9iYWwgYm9vbGVhbiBmbGFnIGFuZCBzY2FsYXIgcGFnZS10YWJsZSBwcm90ZWN0aW9uIHZhbHVlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXXlggcGVybWlzc2lvbiB2ZXJpZmljYXRpb24gbG9naWMgKHZlcmlmeV9yd3gpIHdpdGhpbiB4ODYgQ2hhbmdlIFBhZ2UgQXR0cmlidXRlcyAoQ1BBKSBpbiBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhlY3V0ZWQgd2hlbmV2ZXIga2VybmVsIHBhZ2UgcHJvdGVjdGlvbnMgYXJlIGFkanVzdGVkIChzdWNoIGFzIHZpYSBCUEYgSklULCBmdHJhY2UsIG1vZHVsZSBsb2FkaW5nL3VubG9hZGluZywgb3IgZHJpdmVyIG1lbW9yeSBhdHRyaWJ1dGUgY2hhbmdlcykuIEl0IGludHJvZHVjZXMgbmV3IGNvbmRpdGlvbmFsIHdhcm5pbmcgYmVoYXZpb3Igd2hlbiBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5IGlzIGZhbHNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmRkNmQ0ZWVkYWFmNDMyZjdmYmEzN2MyZWZjODhiODQ1OWFmODAyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjM3OjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5pbmRleCBiMzA2MDAwMGRhOGQxLi5hNGY3ZmU2OWU2OTIyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuQEAgLTY5Nyw2ICYjNDM7Njk3LDIxIEBAIHN0YXRpYyBpbmxpbmUgcGdwcm90X3QgdmVyaWZ5X3J3eChwZ3Byb3RfdCBvbGQsIHBncHJvdF90IG5ldywgdW5zaWduZWQgbG9uZyBzdGFyXG4gXHRcdHJldHVybiBuZXc7XG4gXG4gXHRlbmQgPSBzdGFydCAmIzQzOyBucGcgKiBQQUdFX1NJWkUgLSAxO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBrZXJuZWwgdGV4dCBpcyBzdGlsbCBSV1gsIGdlbnRseSBjb21wbGFpbiwgdGhpcyBjb3VsZCBiZSBhXG4mIzQzO1x0ICogZmFsc2UgcG9zaXRpdmUuXG4mIzQzO1x0ICogT25jZSBkZWJ1Z19jaGVja3d4KCkgYmVjb21lcyBtYW5kYXRvcnkgZm9yIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWCxcbiYjNDM7XHQgKiB0aGUgd2FybmluZyBjYW4gYmUgcmVtb3ZlZCBjb21wbGV0ZWx5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICgha2VybmVsX3NldF90b19yZWFkb25seSkge1xuJiM0MztcdFx0cHJfd2Fybl9vbmNlKDEsIFwmIzM0O0NQQSBkZXRlY3RlZCBXXlggdmlvbGF0aW9uOiAlMDE2bGx4IC1cdTAwM2UgJTAxNmxseCByYW5nZTogMHglMDE2bHggLSAweCUwMTZseCBQRk4gJWx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwob2xkKSxcbiYjNDM7XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXG4mIzQzO1x0XHQgIHN0YXJ0LCBlbmQsIHBmbik7XG4mIzQzO1x0XHRyZXR1cm4gbmV3O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRXQVJOX09OQ0UoMSwgXCYjMzQ7Q1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXG5cJiMzNDssXG4gXHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksXG4gXHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1RSSUNUX0tFUk5FTF9SV1gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2NoYW5nZV9wYWdlX2F0dHImIzM0OywKICAgICYjMzQ7X19zaG91bGRfc3BsaXRfbGFyZ2VfcGFnZSYjMzQ7LAogICAgJiMzNDtjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHImIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ybyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3J3JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfcm94JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfbngmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV94JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXXlggcGVybWlzc2lvbiB2ZXJpZmljYXRpb24gbG9naWMgKHZlcmlmeV9yd3gpIHdpdGhpbiB4ODYgQ2hhbmdlIFBhZ2UgQXR0cmlidXRlcyAoQ1BBKSBpbiBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhlY3V0ZWQgd2hlbmV2ZXIga2VybmVsIHBhZ2UgcHJvdGVjdGlvbnMgYXJlIGFkanVzdGVkIChzdWNoIGFzIHZpYSBCUEYgSklULCBmdHJhY2UsIG1vZHVsZSBsb2FkaW5nL3VubG9hZGluZywgb3IgZHJpdmVyIG1lbW9yeSBhdHRyaWJ1dGUgY2hhbmdlcykuIEl0IGludHJvZHVjZXMgbmV3IGNvbmRpdGlvbmFsIHdhcm5pbmcgYmVoYXZpb3Igd2hlbiBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5IGlzIGZhbHNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmRkNmQ0ZWVkYWFmNDMyZjdmYmEzN2MyZWZjODhiODQ1OWFmODAyMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDEyOjM3OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKaW5kZXggYjMwNjAwMDBkYThkMS4uYTRmN2ZlNjllNjkyMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCkBAIC02OTcsNiAmIzQzOzY5NywyMSBAQCBzdGF0aWMgaW5saW5lIHBncHJvdF90IHZlcmlmeV9yd3gocGdwcm90X3Qgb2xkLCBwZ3Byb3RfdCBuZXcsIHVuc2lnbmVkIGxvbmcgc3RhcgogCQlyZXR1cm4gbmV3OwogCiAJZW5kID0gc3RhcnQgJiM0MzsgbnBnICogUEFHRV9TSVpFIC0gMTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIGtlcm5lbCB0ZXh0IGlzIHN0aWxsIFJXWCwgZ2VudGx5IGNvbXBsYWluLCB0aGlzIGNvdWxkIGJlIGEKJiM0MzsJICogZmFsc2UgcG9zaXRpdmUuCiYjNDM7CSAqIE9uY2UgZGVidWdfY2hlY2t3eCgpIGJlY29tZXMgbWFuZGF0b3J5IGZvciBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gsCiYjNDM7CSAqIHRoZSB3YXJuaW5nIGNhbiBiZSByZW1vdmVkIGNvbXBsZXRlbHkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpIHsKJiM0MzsJCXByX3dhcm5fb25jZSgxLCAmIzM0O0NQQSBkZXRlY3RlZCBXXlggdmlvbGF0aW9uOiAlMDE2bGx4IC0mZ3Q7ICUwMTZsbHggcmFuZ2U6IDB4JTAxNmx4IC0gMHglMDE2bHggUEZOICVseFxuJiMzNDssCiYjNDM7CQkgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChvbGQpLAomIzQzOwkJICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwobmV3KSwKJiM0MzsJCSAgc3RhcnQsIGVuZCwgcGZuKTsKJiM0MzsJCXJldHVybiBuZXc7CiYjNDM7CX0KJiM0MzsKIAlXQVJOX09OQ0UoMSwgJiMzNDtDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtJmd0OyAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcbiYjMzQ7LAogCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChvbGQpLAogCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChuZXcpLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTI0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBhbmQgQXNzb2NpYXRlZCBUb29scyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBwYXRjaCBpdHNlbGYsIG9mIGNvdXJzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHRoZW4gcHV0IHRoYXQgaW50byBjb250ZXh0LiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBpcyB0byBleGFtaW5lIHRoZSByZWxldmFudCBjb2RlLCB3aGljaCBpbiB0aGlzIGNhc2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gSSB3aWxsIHRoZW4gZ28gYWhlYWQgYW5kIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgb24gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgaW5zcGVjdGluZyB0aGlzIGZpbGUgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjgwOlx0XHQgKiBkZXRlY3Rpb24gYW5kIGVuZm9yY2VtZW50IHRoZXJlLlxuIDY4MTpcdFx0ICovXG4gNjgyOlx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWDg2XzMyKSlcbiA2ODM6XHRcdFx0cmV0dXJuIG5ldztcbiA2ODQ6XHRcbiA2ODU6XHRcdC8qIE9ubHkgdmVyaWZ5IHdoZW4gTlggaXMgc3VwcG9ydGVkOiAqL1xuIDY4NjpcdFx0aWYgKCEoX19zdXBwb3J0ZWRfcHRlX21hc2sgXHUwMDI2IF9QQUdFX05YKSlcbiA2ODc6XHRcdFx0cmV0dXJuIG5ldztcbiA2ODg6XHRcbiA2ODk6XHRcdGlmICghKChwZ3Byb3RfdmFsKG9sZCkgXiBwZ3Byb3RfdmFsKG5ldykpIFx1MDAyNiAoX1BBR0VfUlcgfCBfUEFHRV9OWCkpKVxuIDY5MDpcdFx0XHRyZXR1cm4gbmV3O1xuIDY5MTpcdFxuIDY5MjpcdFx0aWYgKChwZ3Byb3RfdmFsKG5ldykgXHUwMDI2IChfUEFHRV9SVyB8IF9QQUdFX05YKSkgIT0gX1BBR0VfUlcpXG4gNjkzOlx0XHRcdHJldHVybiBuZXc7XG4gNjk0Olx0XG4gNjk1Olx0XHQvKiBOb24tbGVhZiB0cmFuc2xhdGlvbiBlbnRyaWVzIGNhbiBkaXNhYmxlIHdyaXRpbmcgb3IgZXhlY3V0aW9uLiAqL1xuIDY5NjpcdFx0aWYgKCFydyB8fCBueClcbiA2OTc6XHRcdFx0cmV0dXJuIG5ldztcbiA2OTg6XHRcbiA2OTk6XHRcdGVuZCA9IHN0YXJ0ICYjNDM7IG5wZyAqIFBBR0VfU0laRSAtIDE7XG4gNzAwOlx0XG4gNzAxOlx0XHQvKlxuIDcwMjpcdFx0ICogSWYgdGhlIGtlcm5lbCB0ZXh0IGlzIHN0aWxsIFJXWCwgZ2VudGx5IGNvbXBsYWluLCB0aGlzIGNvdWxkIGJlIGFcbiA3MDM6XHRcdCAqIGZhbHNlIHBvc2l0aXZlLlxuIDcwNDpcdFx0ICogT25jZSBkZWJ1Z19jaGVja3d4KCkgYmVjb21lcyBtYW5kYXRvcnkgZm9yIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWCxcbiA3MDU6XHRcdCAqIHRoZSB3YXJuaW5nIGNhbiBiZSByZW1vdmVkIGNvbXBsZXRlbHkuXG4gNzA2Olx0XHQgKi9cbiA3MDc6XHRcdGlmICgha2VybmVsX3NldF90b19yZWFkb25seSkge1xuIDcwODpcdFx0XHRwcl93YXJuX29uY2UoMSwgXCYjMzQ7Q1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXG5cJiMzNDssXG4gNzA5Olx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksXG4gNzEwOlx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXG4gNzExOlx0XHRcdCAgc3RhcnQsIGVuZCwgcGZuKTtcbiA3MTI6XHRcdFx0cmV0dXJuIG5ldztcbiA3MTM6XHRcdH1cbiA3MTQ6XHRcbiA3MTU6XHRcdFdBUk5fT05DRSgxLCBcJiMzNDtDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXHUwMDNlICUwMTZsbHggcmFuZ2U6IDB4JTAxNmx4IC0gMHglMDE2bHggUEZOICVseFxcblwmIzM0OyxcbiA3MTY6XHRcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwob2xkKSxcbiA3MTc6XHRcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwobmV3KSxcbiA3MTg6XHRcdFx0ICBzdGFydCwgZW5kLCBwZm4pO1xuIDcxOTpcdFxuIDcyMDpcdFx0LypcbiA3MjE6XHRcdCAqIEZvciBub3csIGFsbG93IGFsbCBwZXJtaXNzaW9uIGNoYW5nZSBhdHRlbXB0cyBieSByZXR1cm5pbmcgdGhlXG4gNzIyOlx0XHQgKiBhdHRlbXB0ZWQgcGVybWlzc2lvbnMuICBUaGlzIGNhbiAmIzM5O3JldHVybiBvbGQmIzM5OyB0byBhY3RpdmVseVxuIDcyMzpcdFx0ICogcmVmdXNlIHRoZSBwZXJtaXNzaW9uIGNoYW5nZSBhdCBhIGxhdGVyIHRpbWUuXG4gNzI0Olx0XHQgKi9cbiA3MjU6XHRcdHJldHVybiBuZXc7XG4gNzI2Olx0fVxuIDcyNzpcdFxuIDcyODpcdC8qXG4gNzI5Olx0ICogTG9va3VwIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGZvciBhIHZpcnR1YWwgYWRkcmVzcyBpbiBhIHNwZWNpZmljIHBnZC5cbiA3MzA6XHQgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBlbnRyeSAob3IgTlVMTCBpZiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QpLFxuIDczMTpcdCAqIHRoZSBsZXZlbCBvZiB0aGUgZW50cnksIGFuZCB0aGUgZWZmZWN0aXZlIE5YIGFuZCBSVyBiaXRzIG9mIGFsbFxuIDczMjpcdCAqIHBhZ2UgdGFibGUgbGV2ZWxzLlxuIDczMzpcdCAqL1xuIDczNDpcdHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gNzM1Olx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCAqbGV2ZWwsIGJvb2wgKm54LCBib29sICpydylcbiA3MzY6XHR7XG4gNzM3Olx0XHRwNGRfdCAqcDRkO1xuIDczODpcdFx0cHVkX3QgKnB1ZDtcbiA3Mzk6XHRcdHBtZF90ICpwbWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM3OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgdmVyaWZ5X3J3eGAgVXNhZ2UqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBgdmVyaWZ5X3J3eGAgZnVuY3Rpb24gYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gVG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW5mbHVlbmNlLCBJJiMzOTttIGdvaW5nIHRvIHJlYWNoIGZvciB0aGUgdHJpZWQgYW5kIHRydWUgYGdyZXBgIGNvbW1hbmQuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgc2VhcmNoIGZvciBgdmVyaWZ5X3J3eGAgdG8gaWRlbnRpZnkgZXZlcnkgaW5zdGFuY2Ugd2hlcmUgaXQmIzM5O3MgaW52b2tlZC4gVGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgYW5kIHJldmVhbCB0aGUgYXJlYXMgb2YgdGhlIGNvZGUgdGhhdCBkZXBlbmQgb24gaXRzIGZ1bmN0aW9uYWxpdHkuIFRoaXMgcXVpY2sgc2NhbiB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIGEgZGVlcGVyIGRpdmUsIGFsbG93aW5nIG1lIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZlcmlmeV9yd3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NjIzPXN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgc3RhdGljX3Byb3RlY3Rpb25zKHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy02NzAtICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjY3MTpzdGF0aWMgaW5saW5lIHBncHJvdF90IHZlcmlmeV9yd3gocGdwcm90X3Qgb2xkLCBwZ3Byb3RfdCBuZXcsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTY3Mi1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnBnLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9OTQzPXN0YXRpYyBpbnQgX19zaG91bGRfc3BsaXRfbGFyZ2VfcGFnZShwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTA2Ni1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTA2NzpcdG5ld19wcm90ID0gdmVyaWZ5X3J3eChvbGRfcHJvdCwgbmV3X3Byb3QsIGxwYWRkciwgb2xkX3BmbiwgbnVtcGFnZXMsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTEwNjgtXHRcdFx0ICAgICAgbngsIHJ3KTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE4NTA9c3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTg4MS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTg4MjpcdFx0bmV3X3Byb3QgPSB2ZXJpZnlfcnd4KG9sZF9wcm90LCBuZXdfcHJvdCwgYWRkcmVzcywgcGZuLCAxLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODgzLVx0XHRcdFx0ICAgICAgbngsIHJ3KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQ1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEtlcm5lbCBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaGVyZS4mIzM0OyBUaGUgZ29hbCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBwYXJ0aWN1bGFyIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYHZlcmlmeV9yd3hgIGFuZCBga2VybmVsX3NldF90b19yZWFkb25seWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgZG9lcywgYW5kIGhvdyB0aGV5IHJlbGF0ZS4gR2l2ZW4gdGhhdCB0aGUgZ29hbCBpcyB0byBmdWxseSBhbmFseXplIHRoZSBjb2RlLCBpdCBtYWtlcyBzZW5zZSB0byBzdGFydCB3aXRoIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YC4gTGV0JiMzOTtzIHNlYXJjaCBmb3IgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIHRoYXQgZnVuY3Rpb24gZmlyc3QuIEEgZ29vZCBzb2xpZCBkZWZpbml0aW9uIHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCBmb3VuZGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGludGVudCBvZiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZXJuZWxfc2V0X3RvX3JlYWRvbmx5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcGFyaXNjL21tL2luaXQuYz0xMTI9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Jvb3RtZW0odm9pZClcbi0tXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtMzQwLVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jOjM0MTpzdGF0aWMgYm9vbCBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5O1xuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTM0Mi1cbmFyY2gvcGFyaXNjL21tL2luaXQuYz0zNDM9c3RhdGljIHZvaWQgX19yZWYgbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfdmFkZHIsXG4tLVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTQwMy1cdFx0XHRcdFx0cHJvdCA9IFBBR0VfS0VSTkVMO1xuYXJjaC9wYXJpc2MvbW0vaW5pdC5jOjQwNDpcdFx0XHRcdH0gZWxzZSBpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpIHtcbmFyY2gvcGFyaXNjL21tL2luaXQuYy00MDUtXHRcdFx0XHRcdC8qIHN0aWxsIGluaXRpYWxpemluZywgYWxsb3cgd3JpdGluZyB0byBSTyBtZW1vcnkgKi9cbi0tXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM9NDg5PXZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcbi0tXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtNDk2LVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jOjQ5NzpcdGtlcm5lbF9zZXRfdG9fcmVhZG9ubHkgPSB0cnVlO1xuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTQ5OC1cdG1hcF9wYWdlcyhzdGFydCwgX19wYShzdGFydCksIGVuZCAtIHN0YXJ0LCBQQUdFX0tFUk5FTCwgMCk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oPTkyPWJvb2wga2VybmVsX3BhZ2VfcHJlc2VudChzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtOTMtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6OTQ6ZXh0ZXJuIGludCBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5O1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTk1LVxuLS1cbmFyY2gveDg2L21tL2luaXRfMzIuYz02OTI9dm9pZCBfX2luaXQgbWVtX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzIwLVxuYXJjaC94ODYvbW0vaW5pdF8zMi5jOjcyMTppbnQga2VybmVsX3NldF90b19yZWFkb25seSBfX3JlYWRfbW9zdGx5O1xuYXJjaC94ODYvbW0vaW5pdF8zMi5jLTcyMi1cbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmM9NzQwPXZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzQ4LVxuYXJjaC94ODYvbW0vaW5pdF8zMi5jOjc0OTpcdGtlcm5lbF9zZXRfdG9fcmVhZG9ubHkgPSAxO1xuYXJjaC94ODYvbW0vaW5pdF8zMi5jLTc1MC1cbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM9MTM0Mz12b2lkIF9faW5pdCBtZW1faW5pdCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzU2LVxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjEzNTc6aW50IGtlcm5lbF9zZXRfdG9fcmVhZG9ubHk7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM1OC1cbmFyY2gveDg2L21tL2luaXRfNjQuYz0xMzU5PXZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM3MS1cbmFyY2gveDg2L21tL2luaXRfNjQuYzoxMzcyOlx0a2VybmVsX3NldF90b19yZWFkb25seSA9IDE7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM3My1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTUwNz1zdGF0aWMgcGdwcm90dmFsX3QgcHJvdGVjdF9wY2lfYmlvcyh1bnNpZ25lZCBsb25nIHNwZm4sIHVuc2lnbmVkIGxvbmcgZXBmbilcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTUxNS0gKiBhbGlhc2VzLiAgVGhpcyBhbHNvIGluY2x1ZGVzIF9fcm9fYWZ0ZXJfaW5pdCwgc28gZG8gbm90IGVuZm9yY2UgdW50aWxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NTE2OiAqIGtlcm5lbF9zZXRfdG9fcmVhZG9ubHkgaXMgdHJ1ZS5cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTE3LSAqL1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz01MTg9c3RhdGljIHBncHJvdHZhbF90IHByb3RlY3Rfcm9kYXRhKHVuc2lnbmVkIGxvbmcgc3BmbiwgdW5zaWduZWQgbG9uZyBlcGZuKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTI3LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo1Mjg6XHRpZiAoa2VybmVsX3NldF90b19yZWFkb25seSBcdTAwMjZcdTAwMjYgb3ZlcmxhcHMoc3BmbiwgZXBmbiwgc3Bmbl9ybywgZXBmbl9ybykpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTUyOS1cdFx0cmV0dXJuIF9QQUdFX1JXO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NTQxPXN0YXRpYyBwZ3Byb3R2YWxfdCBwcm90ZWN0X2tlcm5lbF90ZXh0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTUyLS8qXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjU1MzogKiBPbmNlIHRoZSBrZXJuZWwgbWFwcyB0aGUgdGV4dCBhcyBSTyAoa2VybmVsX3NldF90b19yZWFkb25seSBpcyBzZXQpLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy01NTQtICoga2VybmVsIHRleHQgbWFwcGluZ3MgZm9yIHRoZSBsYXJnZSBwYWdlIGFsaWduZWQgdGV4dCwgcm9kYXRhIHNlY3Rpb25zXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz01NjE9c3RhdGljIHBncHJvdHZhbF90IHByb3RlY3Rfa2VybmVsX3RleHRfcm8odW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTU2Ny1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NTY4Olx0aWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5IHx8ICFvdmVybGFwcyhzdGFydCwgZW5kLCB0X3N0YXJ0LCB0X2VuZCkpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTU2OS1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz02NzE9c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2ZXJpZnlfcnd4KHBncHJvdF90IG9sZCwgcGdwcm90X3QgbmV3LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNzA2LVx0ICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjcwNzpcdGlmICgha2VybmVsX3NldF90b19yZWFkb25seSkge1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03MDgtXHRcdHByX3dhcm5fb25jZSgxLCBcJiMzNDtDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXHUwMDNlICUwMTZsbHggcmFuZ2U6IDB4JTAxNmx4IC0gMHglMDE2bHggUEZOICVseFxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODY4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhZC1Pbmx5IERhdGEgTWFya2luZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgbWFya19yb2RhdGFfcm8oKWAgZ2V0cyBpbnZva2VkIGR1cmluZyB0aGUga2VybmVsJiMzOTtzIGJvb3QgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgZnVuY3Rpb25zIGBtYXJrX3JlYWRvbmx5KClgIG9yIGRpcmVjdGx5IGFzIGBtYXJrX3JvZGF0YV9ybygpYC4gVGhlIGNydWNpYWwgcGllY2UgaGVyZSBpcyB0aGF0IHdoZW4gdGhpcyBmdW5jdGlvbiBleGVjdXRlcyBkdXJpbmcgYm9vdCwgdGhlIHZhcmlhYmxlIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBnZXRzIHNldCB0byBhIHZhbHVlIG9mIDEuCgpUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCBhZnRlciB0aGUgYm9vdCBzZXF1ZW5jZSBjb21wbGV0ZXMsIGR1cmluZyB0aGUgc3RhbmRhcmQgcnVudGltZSBvZiB0aGUga2VybmVsLCBhbmQgZXZlbiBkdXJpbmcgZnV6emluZyBlZmZvcnRzLCB0aGlzIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCB2YXJpYWJsZSAqYWx3YXlzKiByZXRhaW5zIGl0cyB2YWx1ZSBvZiAxLgoKQnV0LCB3YWl0IGEgc2Vjb25kLi4uIHRoaXMgZmVlbHMgbGlrZSBpdCBtaWdodCBiZSBhbiBvdmVyc2ltcGxpZmljYXRpb24uIElzIGl0IHRydWx5IHRoZSBjYXNlIHRoYXQgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIGlzICpuZXZlciogemVybyBhZnRlciB0aGUgaW5pdGlhbCBib290PyBJIG5lZWQgdG8gY2xhcmlmeSBpZiB0aGVyZSYjMzk7cyBhIHRyYW5zaWVudCBwZXJpb2QgZHVyaW5nIHRoZSB2ZXJ5IGVhcmx5IHN0YWdlcyBvZiB0aGUgYm9vdCBwcm9jZXNzIHdoZXJlIHRoaXMgdmFyaWFibGUgbWlnaHQgYmUgMCwgYmVmb3JlIGJlaW5nIGluaXRpYWxpemVkIHRvIDEuIFRoaXMgY291bGQgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLgoKVGhlcmVmb3JlLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZW4gYG1hcmtfcm9kYXRhX3JvKClgIGlzIGFjdHVhbGx5IGNhbGxlZCBpbiB0aGUgYm9vdCBzZXF1ZW5jZS4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgZ3JlcCBzZWFyY2ggdG8gY29uZmlybSB0aGUgY2FsbCBzaXRlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgdmFyaWF0aW9ucyBpbiB0aGUgY2FsbCBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFya19yb2RhdGFfcm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vbW0vaW5pdC5jPTM5Mj1zdGF0aWMgdm9pZCBmaXhfa2Vybm1lbV9wZXJtcyh2b2lkKVxuLS1cbmFyY2gvYXJtL21tL2luaXQuYy0zOTYtXG5hcmNoL2FybS9tbS9pbml0LmM6Mzk3OnN0YXRpYyBpbnQgX19tYXJrX3JvZGF0YV9ybyh2b2lkICp1bnVzZWQpXG5hcmNoL2FybS9tbS9pbml0LmMtMzk4LXtcbi0tXG5hcmNoL2FybS9tbS9pbml0LmMtNDAyLVxuYXJjaC9hcm0vbW0vaW5pdC5jOjQwMzp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXG5hcmNoL2FybS9tbS9pbml0LmMtNDA0LXtcbmFyY2gvYXJtL21tL2luaXQuYzo0MDU6XHRzdG9wX21hY2hpbmUoX19tYXJrX3JvZGF0YV9ybywgTlVMTCwgTlVMTCk7XG5hcmNoL2FybS9tbS9pbml0LmMtNDA2LVx0YXJtX2RlYnVnX2NoZWNrd3goKTtcbi0tXG5hcmNoL2FybTY0L21tL21tdS5jPTExODA9c3RhdGljIHZvaWQgX19pbml0IG1hcF9tZW0odm9pZClcbi0tXG5hcmNoL2FybTY0L21tL21tdS5jLTEyNTMtXG5hcmNoL2FybTY0L21tL21tdS5jOjEyNTQ6dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxuYXJjaC9hcm02NC9tbS9tbXUuYy0xMjU1LXtcbi0tXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM9NDUxPXZvaWQgZnJlZV9pbml0bWVtKHZvaWQpXG4tLVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTQ4OC0jaWZkZWYgQ09ORklHX1NUUklDVF9LRVJORUxfUldYXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM6NDg5OnZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcbmFyY2gvcGFyaXNjL21tL2luaXQuYy00OTAte1xuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC5oPTE1Mj1zdGF0aWMgaW5saW5lIGludCBoYXNoX19wNGRfYmFkKHA0ZF90IHA0ZClcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaC0xNTYtI2lmZGVmIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLmg6MTU3OmV4dGVybiB2b2lkIGhhc2hfX21hcmtfcm9kYXRhX3JvKHZvaWQpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLmgtMTU4LWV4dGVybiB2b2lkIGhhc2hfX21hcmtfaW5pdG1lbV9ueCh2b2lkKTtcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4LmgtMTQxLSNpZmRlZiBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1hcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaDoxNDI6ZXh0ZXJuIHZvaWQgcmFkaXhfX21hcmtfcm9kYXRhX3JvKHZvaWQpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9yYWRpeC5oLTE0My1leHRlcm4gdm9pZCByYWRpeF9fbWFya19pbml0bWVtX254KHZvaWQpO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3MzMi9tbXUuYz0xOTY9aW50IG1tdV9tYXJrX2luaXRtZW1fbngodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzMzIvbW11LmMtMjM1LVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczMyL21tdS5jOjIzNjppbnQgbW11X21hcmtfcm9kYXRhX3JvKHZvaWQpXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzMzIvbW11LmMtMjM3LXtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmM9NTI0PXN0YXRpYyBib29sIGhhc2hfX2NoYW5nZV9tZW1vcnlfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jLTU2NC1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuYzo1NjU6dm9pZCBoYXNoX19tYXJrX3JvZGF0YV9ybyh2b2lkKVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jLTU2Ni17XG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYz0xODg9c3RhdGljIHZvaWQgcmFkaXhfX2NoYW5nZV9tZW1vcnlfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYy0yMzAtXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jOjIzMTp2b2lkIHJhZGl4X19tYXJrX3JvZGF0YV9ybyh2b2lkKVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYy0yMzIte1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9tbXVfZGVjbC5oPTE2Mz1pbnQgbW11X21hcmtfaW5pdG1lbV9ueCh2b2lkKTtcbmFyY2gvcG93ZXJwYy9tbS9tbXVfZGVjbC5oOjE2NDppbnQgbW11X21hcmtfcm9kYXRhX3JvKHZvaWQpO1xuYXJjaC9wb3dlcnBjL21tL21tdV9kZWNsLmgtMTY1LSNlbHNlXG5hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaD0xNjY9c3RhdGljIGlubGluZSBpbnQgbW11X21hcmtfaW5pdG1lbV9ueCh2b2lkKSB7IHJldHVybiAwOyB9XG5hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaDoxNjc6c3RhdGljIGlubGluZSBpbnQgbW11X21hcmtfcm9kYXRhX3JvKHZvaWQpIHsgcmV0dXJuIDA7IH1cbmFyY2gvcG93ZXJwYy9tbS9tbXVfZGVjbC5oLTE2OC0jZW5kaWZcbi0tXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoLzh4eC5jPTE3MT1pbnQgbW11X21hcmtfaW5pdG1lbV9ueCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvOHh4LmMtMTg4LSNpZmRlZiBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1hcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvOHh4LmM6MTg5OmludCBtbXVfbWFya19yb2RhdGFfcm8odm9pZClcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvOHh4LmMtMTkwLXtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL2U1MDAuYz0yNjY9dm9pZCBfX2luaXQgYWRqdXN0X3RvdGFsX2xvd21lbSh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvZTUwMC5jLTI4Ny0jaWZkZWYgQ09ORklHX1NUUklDVF9LRVJORUxfUldYXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL2U1MDAuYzoyODg6aW50IG1tdV9tYXJrX3JvZGF0YV9ybyh2b2lkKVxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9lNTAwLmMtMjg5LXtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL2U1MDAuYz0zMDE9aW50IG1tdV9tYXJrX2luaXRtZW1fbngodm9pZClcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvZTUwMC5jLTMwMi17XG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL2U1MDAuYzozMDM6XHQvKiBFdmVyeXRoaW5nIGlzIGRvbmUgaW4gbW11X21hcmtfcm9kYXRhX3JvKCkgKi9cbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvZTUwMC5jLTMwNC1cdHJldHVybiAwO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmM9MTQ1PXZvaWQgbWFya19pbml0bWVtX254KHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYy0xNTMtI2lmZGVmIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYzoxNTQ6c3RhdGljIGludCBfX21hcmtfcm9kYXRhX3JvKHZvaWQpXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jLTE1NS17XG4tLVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYy0xNjEtXHRpZiAodl9ibG9ja19tYXBwZWQoKHVuc2lnbmVkIGxvbmcpX3N0ZXh0ICYjNDM7IDEpKVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYzoxNjI6XHRcdHJldHVybiBtbXVfbWFya19yb2RhdGFfcm8oKTtcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMtMTYzLVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMtMTc0LVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYzoxNzU6dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYy0xNzYte1xuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYzoxNzc6XHRpbnQgZXJyID0gX19tYXJrX3JvZGF0YV9ybygpO1xuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYy0xNzgtXG4tLVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYz0xMjY9c3RydWN0IHBhZ2UgKnBtZF9wYWdlKHBtZF90IHBtZClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jLTE0MS0jaWZkZWYgQ09ORklHX1NUUklDVF9LRVJORUxfUldYXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jOjE0Mjp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jLTE0My17XG4tLVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYy0xNDktXHRpZiAocmFkaXhfZW5hYmxlZCgpKVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYzoxNTA6XHRcdHJhZGl4X19tYXJrX3JvZGF0YV9ybygpO1xuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYy0xNTEtXHRlbHNlXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jOjE1MjpcdFx0aGFzaF9fbWFya19yb2RhdGFfcm8oKTtcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMtMTUzLX1cbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYz03MzI9c3RhdGljIF9fbWVtaW5pdCBwZ3Byb3RfdCBwZ3Byb3RfZnJvbV92YSh1aW50cHRyX3QgdmEpXG4tLVxuYXJjaC9yaXNjdi9tbS9pbml0LmMtNzQwLVx0ICogd3JpdHRlbi5cbmFyY2gvcmlzY3YvbW0vaW5pdC5jOjc0MTpcdCAqIEFuZCByb2RhdGEgc2VjdGlvbiBpcyBtYXJrZWQgcmVhZG9ubHkgaW4gbWFya19yb2RhdGFfcm8uXG5hcmNoL3Jpc2N2L21tL2luaXQuYy03NDItXHQgKi9cbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYy03NDgtXG5hcmNoL3Jpc2N2L21tL2luaXQuYzo3NDk6dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxuYXJjaC9yaXNjdi9tbS9pbml0LmMtNzUwLXtcbi0tXG5hcmNoL3MzOTAvbW0vaW5pdC5jPTEwMT12b2lkIF9faW5pdCBwYWdpbmdfaW5pdCh2b2lkKVxuLS1cbmFyY2gvczM5MC9tbS9pbml0LmMtMTA2LVxuYXJjaC9zMzkwL21tL2luaXQuYzoxMDc6dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxuYXJjaC9zMzkwL21tL2luaXQuYy0xMDgte1xuLS1cbmFyY2gvdW0va2VybmVsL21lbS5jPTEzMT1ERUNMQVJFX1ZNX0dFVF9QQUdFX1BST1RcbmFyY2gvdW0va2VybmVsL21lbS5jLTEzMi1cbmFyY2gvdW0va2VybmVsL21lbS5jOjEzMzp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXG5hcmNoL3VtL2tlcm5lbC9tZW0uYy0xMzQte1xuLS1cbmFyY2gveDg2L21tL2luaXRfMzIuYz03MjM9c3RhdGljIHZvaWQgbWFya19ueGRhdGFfbngodm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzM5LVxuYXJjaC94ODYvbW0vaW5pdF8zMi5jOjc0MDp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzQxLXtcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM9MTM1Nz1pbnQga2VybmVsX3NldF90b19yZWFkb25seTtcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzU4LVxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjEzNTk6dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzNjAte1xuLS1cbmluY2x1ZGUvbGludXgvY2FjaGUuaC01NS0gKiBfX3JvX2FmdGVyX2luaXQgaXMgdXNlZCB0byBtYXJrIHRoaW5ncyB0aGF0IGFyZSByZWFkLW9ubHkgYWZ0ZXIgaW5pdCAoaS5lLlxuaW5jbHVkZS9saW51eC9jYWNoZS5oOjU2OiAqIGFmdGVyIG1hcmtfcm9kYXRhX3JvKCkgaGFzIGJlZW4gY2FsbGVkKS4gVGhlc2UgYXJlIGVmZmVjdGl2ZWx5IHJlYWQtb25seSxcbmluY2x1ZGUvbGludXgvY2FjaGUuaC01Ny0gKiBidXQgbWF5IGdldCB3cml0dGVuIHRvIGR1cmluZyBpbml0LCBzbyBjYW4mIzM5O3QgbGl2ZSBpbiAucm9kYXRhICh2aWEgXCYjMzQ7Y29uc3RcJiMzNDspLlxuLS1cbmluY2x1ZGUvbGludXgvaW5pdC5oPTE2NT1leHRlcm4gYm9vbCByb2RhdGFfZW5hYmxlZDtcbmluY2x1ZGUvbGludXgvaW5pdC5oOjE2Njp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpO1xuaW5jbHVkZS9saW51eC9pbml0LmgtMTY3LVxuLS1cbmluY2x1ZGUvbGludXgvcm9kYXRhX3Rlc3QuaC0yLS8qXG5pbmNsdWRlL2xpbnV4L3JvZGF0YV90ZXN0Lmg6MzogKiByb2RhdGFfdGVzdC5oOiBmdW5jdGlvbmFsIHRlc3QgZm9yIG1hcmtfcm9kYXRhX3JvIGZ1bmN0aW9uXG5pbmNsdWRlL2xpbnV4L3JvZGF0YV90ZXN0LmgtNC0gKlxuLS1cbmluaXQvbWFpbi5jPTE1MjE9c3RhdGljIHZvaWQgbWFya19yZWFkb25seSh2b2lkKVxuLS1cbmluaXQvbWFpbi5jLTE1MzEtXHRcdGp1bXBfbGFiZWxfaW5pdF9ybygpO1xuaW5pdC9tYWluLmM6MTUzMjpcdFx0bWFya19yb2RhdGFfcm8oKTtcbmluaXQvbWFpbi5jLTE1MzMtXHRcdGRlYnVnX2NoZWNrd3goKTtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zMDg4PXN0YXRpYyBub2lubGluZSBpbnQgZG9faW5pdF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMxODgtXHQgKiBtYXBwaW5ncyB3aGljaCB3b24mIzM5O3QgYmUgY2xlYW5lZCB1cCB1bnRpbCBkb19mcmVlX2luaXQoKSBydW5zLiAgQW55XG5rZXJuZWwvbW9kdWxlL21haW4uYzozMTg5Olx0ICogY29kZSBzdWNoIGFzIG1hcmtfcm9kYXRhX3JvKCkgd2hpY2ggZGVwZW5kcyBvbiB0aG9zZSBtYXBwaW5ncyB0b1xua2VybmVsL21vZHVsZS9tYWluLmMtMzE5MC1cdCAqIGJlIGNsZWFuZWQgdXAgbmVlZHMgdG8gc3luYyB3aXRoIHRoZSBxdWV1ZWQgd29yayBieSBpbnZva2luZ1xuLS1cbm1tL3JvZGF0YV90ZXN0LmMtMi0vKlxubW0vcm9kYXRhX3Rlc3QuYzozOiAqIHJvZGF0YV90ZXN0LmM6IGZ1bmN0aW9uYWwgdGVzdCBmb3IgbWFya19yb2RhdGFfcm8gZnVuY3Rpb25cbm1tL3JvZGF0YV90ZXN0LmMtNC0gKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU4OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBgbWFya19yZWFkb25seWAgRHVyaW5nIEtlcm5lbCBCb290KioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZW4gYW5kIHdoZXJlIGBtYXJrX3JlYWRvbmx5YCBpcyBiZWluZyBjYWxsZWQsIHdoaWNoLCBhcyBJIHJlY2FsbCwgbGlrZWx5IHBlcnRhaW5zIHRvIG1lbW9yeSByZWdpb25zLiBUaGUgaGludCBpcyBpbiBgaW5pdC9tYWluLmNgLCBhbmQgbW9yZSBzcGVjaWZpY2FsbHksIGl0JiMzOTtzIHRyaWdnZXJlZCBkdXJpbmcgYm9vdCwgcmlnaHQgYXJvdW5kIHRoZSB0aW1lIHRoZSBrZXJuZWwgaXMgaW5pdGlhbGl6aW5nLCBiZWZvcmUgaXQgaGFuZHMgY29udHJvbCBvdmVyIHRvIHRoZSBpbml0IHByb2Nlc3MgYW5kIHN0YXJ0cyBmcmVlaW5nIG1lbW9yeSBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBpbml0aWFsIGJvb3Qgc2VxdWVuY2UuIFRoYXQgbmFycm93cyBpdCBkb3duIGNvbnNpZGVyYWJseS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGluaXQvbWFpbi5jYCBub3cgYW5kIHpvb20gaW4gYXJvdW5kIGxpbmUgMTUyMSwgdG8gZmluZCB0aGUgZXhhY3QgY29udGV4dCBvZiB0aGF0IGNhbGwgYW5kIHRyeSB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgbWVtb3J5IHJlZ2lvbnMgYXJlIGJlaW5nIG1hZGUgcmVhZC1vbmx5IGF0IHRoYXQgc3RhZ2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIGtlcm5lbCBpcyBzZXR0aW5nIHVwIG1lbW9yeSBwcm90ZWN0aW9uIGVhcmx5IG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTE1Olx0XHRcdHByX3dhcm4oXCYjMzQ7SW52YWxpZCBvcHRpb24gc3RyaW5nIGZvciByb2RhdGE6ICYjMzk7JXMmIzM5O1xcblwmIzM0Oywgc3RyKTtcbjE1MTY6XHRcdHJldHVybiAwO1xuMTUxNzpcdH1cbjE1MTg6XHRlYXJseV9wYXJhbShcJiMzNDtyb2RhdGFcJiMzNDssIHNldF9kZWJ1Z19yb2RhdGEpO1xuMTUxOTpcdCNlbmRpZlxuMTUyMDpcdFxuMTUyMTpcdHN0YXRpYyB2b2lkIG1hcmtfcmVhZG9ubHkodm9pZClcbjE1MjI6XHR7XG4xNTIzOlx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gpIFx1MDAyNlx1MDAyNiByb2RhdGFfZW5hYmxlZCkge1xuMTUyNDpcdFx0XHQvKlxuMTUyNTpcdFx0XHQgKiBsb2FkX21vZHVsZSgpIHJlc3VsdHMgaW4gVyYjNDM7WCBtYXBwaW5ncywgd2hpY2ggYXJlIGNsZWFuZWRcbjE1MjY6XHRcdFx0ICogdXAgd2l0aCBpbml0X2ZyZWVfd3EuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBxdWV1ZWQgd29yayBpc1xuMTUyNzpcdFx0XHQgKiBmbHVzaGVkIHNvIHRoYXQgd2UgZG9uJiMzOTt0IGhpdCBmYWxzZSBwb3NpdGl2ZXMgbG9va2luZyBmb3JcbjE1Mjg6XHRcdFx0ICogaW5zZWN1cmUgcGFnZXMgd2hpY2ggYXJlIFcmIzQzO1guXG4xNTI5Olx0XHRcdCAqL1xuMTUzMDpcdFx0XHRmbHVzaF9tb2R1bGVfaW5pdF9mcmVlX3dvcmsoKTtcbjE1MzE6XHRcdFx0anVtcF9sYWJlbF9pbml0X3JvKCk7XG4xNTMyOlx0XHRcdG1hcmtfcm9kYXRhX3JvKCk7XG4xNTMzOlx0XHRcdGRlYnVnX2NoZWNrd3goKTtcbjE1MzQ6XHRcdFx0cm9kYXRhX3Rlc3QoKTtcbjE1MzU6XHRcdH0gZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gpKSB7XG4xNTM2Olx0XHRcdHByX2luZm8oXCYjMzQ7S2VybmVsIG1lbW9yeSBwcm90ZWN0aW9uIGRpc2FibGVkLlxcblwmIzM0Oyk7XG4xNTM3Olx0XHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX1NUUklDVF9LRVJORUxfUldYKSkge1xuMTUzODpcdFx0XHRwcl93YXJuKFwmIzM0O0tlcm5lbCBtZW1vcnkgcHJvdGVjdGlvbiBub3Qgc2VsZWN0ZWQgYnkga2VybmVsIGNvbmZpZy5cXG5cJiMzNDspO1xuMTUzOTpcdFx0fSBlbHNlIHtcbjE1NDA6XHRcdFx0cHJfd2FybihcJiMzNDtUaGlzIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBoYXZlIGtlcm5lbCBtZW1vcnkgcHJvdGVjdGlvbi5cXG5cJiMzNDspO1xuMTU0MTpcdFx0fVxuMTU0MjpcdH1cbjE1NDM6XHRcbjE1NDQ6XHR2b2lkIF9fd2VhayBmcmVlX2luaXRtZW0odm9pZClcbjE1NDU6XHR7XG4xNTQ2Olx0XHRmcmVlX2luaXRtZW1fZGVmYXVsdChQT0lTT05fRlJFRV9JTklUTUVNKTtcbjE1NDc6XHR9XG4xNTQ4Olx0XG4xNTQ5Olx0c3RhdGljIGludCBfX3JlZiBrZXJuZWxfaW5pdCh2b2lkICp1bnVzZWQpXG4xNTUwOlx0e1xuMTU1MTpcdFx0aW50IHJldDtcbjE1NTI6XHRcbjE1NTM6XHRcdGluaXRfdXNlcnNwYWNlX2ZzKCk7XG4xNTU0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDY4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgV15YIFZpb2xhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdmVyaWZ5X3J3eGAgZnVuY3Rpb24gYW5kIGEgcG90ZW50aWFsIFdyaXRlIFhPUiBFeGVjdXRlIChXXlgpIHZpb2xhdGlvbi4gVGhlIGNydXggb2YgdGhlIGlzc3VlIHNlZW1zIHRvIGJlIHRpZWQgdG8gdGhlIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBmbGFnLCB3aGljaCBpbmRpY2F0ZXMgd2hldGhlciByZWFkLW9ubHkgZGF0YSBzZWN0aW9ucyBoYXZlIGJlZW4gcHJvcGVybHkgbWFya2VkIGFzIHN1Y2guIEkmIzM5O20gd29uZGVyaW5nIHdoYXQgaGFwcGVucyBpbiBhIGZldyBzcGVjaWZpYyBzY2VuYXJpb3MuCgpGaXJzdCwgbGV0JiMzOTtzIGV4cGxvcmUgd2hhdCBvY2N1cnMgd2hlbiBgIXJvZGF0YV9lbmFibGVkYCwgd2hpY2ggZXNzZW50aWFsbHkgbWVhbnMgdGhlIGtlcm5lbCBpcyBib290ZWQgd2l0aCBgcm9kYXRhPW9mZmAgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIHRoZW4gYG1hcmtfcm9kYXRhX3JvKClgIGlzIG5ldmVyIGludm9rZWQuIENvbnNlcXVlbnRseSwgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIHJlbWFpbnMgMC4gVGhpcyBsYWNrIG9mIHNldHRpbmcgdGhlIGZsYWcgY291bGQgYmUgdGhlIHJvb3QgY2F1c2UuCgpOb3csIHdoYXQgaWYgdGhlcmUmIzM5O3MgYSBzaXR1YXRpb24gd2hlcmUgZWFybHkgYm9vdCBjb2RlLCB1c2luZyBgc2V0X21lbW9yeV8qYCBjYWxscywgbW9kaWZpZXMgbWVtb3J5IHJlZ2lvbnMgKmJlZm9yZSogYG1hcmtfcm9kYXRhX3JvKClgIGlzIGV2ZW4gY2FsbGVkPyBUaGlzIGNvdWxkIGFsc28gbGVhZCB0byBzaW1pbGFyIHByb2JsZW1zLiBJIG5lZWQgdG8ga2VlcCB0aGF0IHRpbWluZyBpbiBtaW5kLgoKSSYjMzk7bSBzZWVpbmcgdGhhdCBgdmVyaWZ5X3J3eGAgaXMgZmlyaW5nIGBXQVJOX09OQ0VgIGR1cmluZyBib290LCBpbmRpY2F0aW5nIGEgcG90ZW50aWFsIFdeWCBpc3N1ZS4gVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgd2FybmluZyBsb2dpYyB0byBpbmNsdWRlIHRoZSBga2VybmVsX3NldF90b19yZWFkb25seWAgY2hlY2suIFRoZSBpZGVhIGlzLCBpZiB0aGUgZmxhZyAqaXNuJiMzOTt0KiBzZXQsIHdlIGVtaXQgYSBzcGVjaWZpYyB3YXJuaW5nLCBhbmQgb3RoZXJ3aXNlIGlzc3VlIHRoZSBnZW5lcmFsIFdeWCB3YXJuaW5nLgoKV2FpdCBhIHNlY29uZCwgYmVmb3JlIEkgZGlnIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGNvbnN1bHQgYGdpdCBsb2dgIG9yIHRoZSBjb21taXQgaGlzdG9yeSBhcm91bmQgYHZlcmlmeV9yd3hgLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2XigJR3aGF0IHByb2JsZW1zIGl0IHdhcyBpbnRlbmRlZCB0byBzb2x2ZSBhbmQgd2hhdCBhc3N1bXB0aW9ucyB3ZXJlIG1hZGXigJR3aWxsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCBJJiMzOTttIGRlYWxpbmcgd2l0aC4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXJpZnlfcnd4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NjIzPXN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgc3RhdGljX3Byb3RlY3Rpb25zKHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy02NzAtICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjY3MTpzdGF0aWMgaW5saW5lIHBncHJvdF90IHZlcmlmeV9yd3gocGdwcm90X3Qgb2xkLCBwZ3Byb3RfdCBuZXcsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTY3Mi1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnBnLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9OTQzPXN0YXRpYyBpbnQgX19zaG91bGRfc3BsaXRfbGFyZ2VfcGFnZShwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTA2Ni1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTA2NzpcdG5ld19wcm90ID0gdmVyaWZ5X3J3eChvbGRfcHJvdCwgbmV3X3Byb3QsIGxwYWRkciwgb2xkX3BmbiwgbnVtcGFnZXMsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTEwNjgtXHRcdFx0ICAgICAgbngsIHJ3KTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE4NTA9c3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTg4MS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTg4MjpcdFx0bmV3X3Byb3QgPSB2ZXJpZnlfcnd4KG9sZF9wcm90LCBuZXdfcHJvdCwgYWRkcmVzcywgcGZuLCAxLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODgzLVx0XHRcdFx0ICAgICAgbngsIHJ3KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NDgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjoKCioqQW5hbHl6aW5nIGB2ZXJpZnlfcnd4YCBhbmQgQ29udGV4dCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhlIGB2ZXJpZnlfcnd4YCBmdW5jdGlvbiwgd2hpY2ggaW1wbGllcyBzb21lIGtpbmQgb2YgbWVtb3J5IGFjY2VzcyB2YWxpZGF0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byByZWFkLXdyaXRlLWV4ZWN1dGUgcGVybWlzc2lvbnMuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgbmVzdGxlZCB3aXRoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGltbWVkaWF0ZWx5IG5hcnJvd3MgdGhlIHNjb3BlLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIHg4NiBhcmNoaXRlY3R1cmUsIG1lbW9yeSBtYW5hZ2VtZW50LCBwb3RlbnRpYWxseSBpbmNsdWRpbmcgUGFnZSBBdHRyaWJ1dGUgVGFibGUgKFBBVCkgbWFuaXB1bGF0aW9uLCBhbmQgcGFydGljdWxhcmx5LCB0aGUgc2V0dGluZyBvZiBtZW1vcnkgYXR0cmlidXRlcy4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIHNlY3VyaXR5IGFuZCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3csIHRoZSB0eXBlcyBvZiB2YWxpZGF0aW9ucyBkb25lIGFuZCBob3cgcGVybWlzc2lvbnMgYXJlIGVuZm9yY2VkLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uJiMzOTtzIGFyZ3VtZW50cywgcmV0dXJuIHZhbHVlcywgYW5kIGFueSBzaWRlIGVmZmVjdHMgaXQgbWF5IGhhdmUsIHN1Y2ggYXMgZXJyb3IgcmVwb3J0aW5nIG9yIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIHVzZWQgYW5kIHRoZWlyIHNpemVzLCBhcyB0aGVzZSBjYW4gdGVsbCBhIGxvdCBhYm91dCB0aGUgaW50ZW5kZWQgdXNhZ2UgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoaXMgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHRcbiA2NjE6XHRcdHJlcyA9IHByb3RlY3Rfcm9kYXRhKHBmbiwgcGZuICYjNDM7IG5wZyAtIDEpO1xuIDY2MjpcdFx0Y2hlY2tfY29uZmxpY3Qod2Fybmx2bCwgcHJvdCwgcmVzLCBzdGFydCwgZW5kLCBwZm4sIFwmIzM0O1JvZGF0YSBST1wmIzM0Oyk7XG4gNjYzOlx0XHRmb3JiaWRkZW4gfD0gcmVzO1xuIDY2NDpcdFxuIDY2NTpcdFx0cmV0dXJuIF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgXHUwMDI2IH5mb3JiaWRkZW4pO1xuIDY2NjpcdH1cbiA2Njc6XHRcbiA2Njg6XHQvKlxuIDY2OTpcdCAqIFZhbGlkYXRlIHN0cmljdCBXXlggc2VtYW50aWNzLlxuIDY3MDpcdCAqL1xuIDY3MTpcdHN0YXRpYyBpbmxpbmUgcGdwcm90X3QgdmVyaWZ5X3J3eChwZ3Byb3RfdCBvbGQsIHBncHJvdF90IG5ldywgdW5zaWduZWQgbG9uZyBzdGFydCxcbiA2NzI6XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnBnLFxuIDY3MzpcdFx0XHRcdFx0ICBib29sIG54LCBib29sIHJ3KVxuIDY3NDpcdHtcbiA2NzU6XHRcdHVuc2lnbmVkIGxvbmcgZW5kO1xuIDY3NjpcdFxuIDY3NzpcdFx0LypcbiA2Nzg6XHRcdCAqIDMyLWJpdCBoYXMgc29tZSB1bmZpeGFibGUgVyYjNDM7WCBpc3N1ZXMsIGxpa2UgRUZJIGNvZGVcbiA2Nzk6XHRcdCAqIGFuZCB3cml0ZWFibGUgZGF0YSBiZWluZyBpbiB0aGUgc2FtZSBwYWdlLiAgRGlzYWJsZVxuIDY4MDpcdFx0ICogZGV0ZWN0aW9uIGFuZCBlbmZvcmNlbWVudCB0aGVyZS5cbiA2ODE6XHRcdCAqL1xuIDY4MjpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1g4Nl8zMikpXG4gNjgzOlx0XHRcdHJldHVybiBuZXc7XG4gNjg0Olx0XG4gNjg1Olx0XHQvKiBPbmx5IHZlcmlmeSB3aGVuIE5YIGlzIHN1cHBvcnRlZDogKi9cbiA2ODY6XHRcdGlmICghKF9fc3VwcG9ydGVkX3B0ZV9tYXNrIFx1MDAyNiBfUEFHRV9OWCkpXG4gNjg3Olx0XHRcdHJldHVybiBuZXc7XG4gNjg4Olx0XG4gNjg5Olx0XHRpZiAoISgocGdwcm90X3ZhbChvbGQpIF4gcGdwcm90X3ZhbChuZXcpKSBcdTAwMjYgKF9QQUdFX1JXIHwgX1BBR0VfTlgpKSlcbiA2OTA6XHRcdFx0cmV0dXJuIG5ldztcbiA2OTE6XHRcbiA2OTI6XHRcdGlmICgocGdwcm90X3ZhbChuZXcpIFx1MDAyNiAoX1BBR0VfUlcgfCBfUEFHRV9OWCkpICE9IF9QQUdFX1JXKVxuIDY5MzpcdFx0XHRyZXR1cm4gbmV3O1xuIDY5NDpcdFxuIDY5NTpcdFx0LyogTm9uLWxlYWYgdHJhbnNsYXRpb24gZW50cmllcyBjYW4gZGlzYWJsZSB3cml0aW5nIG9yIGV4ZWN1dGlvbi4gKi9cbiA2OTY6XHRcdGlmICghcncgfHwgbngpXG4gNjk3Olx0XHRcdHJldHVybiBuZXc7XG4gNjk4Olx0XG4gNjk5Olx0XHRlbmQgPSBzdGFydCAmIzQzOyBucGcgKiBQQUdFX1NJWkUgLSAxO1xuIDcwMDpcdFxuIDcwMTpcdFx0LypcbiA3MDI6XHRcdCAqIElmIHRoZSBrZXJuZWwgdGV4dCBpcyBzdGlsbCBSV1gsIGdlbnRseSBjb21wbGFpbiwgdGhpcyBjb3VsZCBiZSBhXG4gNzAzOlx0XHQgKiBmYWxzZSBwb3NpdGl2ZS5cbiA3MDQ6XHRcdCAqIE9uY2UgZGVidWdfY2hlY2t3eCgpIGJlY29tZXMgbWFuZGF0b3J5IGZvciBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gsXG4gNzA1Olx0XHQgKiB0aGUgd2FybmluZyBjYW4gYmUgcmVtb3ZlZCBjb21wbGV0ZWx5LlxuIDcwNjpcdFx0ICovXG4gNzA3Olx0XHRpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpIHtcbiA3MDg6XHRcdFx0cHJfd2Fybl9vbmNlKDEsIFwmIzM0O0NQQSBkZXRlY3RlZCBXXlggdmlvbGF0aW9uOiAlMDE2bGx4IC1cdTAwM2UgJTAxNmxseCByYW5nZTogMHglMDE2bHggLSAweCUwMTZseCBQRk4gJWx4XFxuXCYjMzQ7LFxuIDcwOTpcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChvbGQpLFxuIDcxMDpcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChuZXcpLFxuIDcxMTpcdFx0XHQgIHN0YXJ0LCBlbmQsIHBmbik7XG4gNzEyOlx0XHRcdHJldHVybiBuZXc7XG4gNzEzOlx0XHR9XG4gNzE0Olx0XG4gNzE1Olx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7Q1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXG5cJiMzNDssXG4gNzE2Olx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksXG4gNzE3Olx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXG4gNzE4Olx0XHRcdCAgc3RhcnQsIGVuZCwgcGZuKTtcbiA3MTk6XHRcbiA3MjA6XHRcdC8qXG4gNzIxOlx0XHQgKiBGb3Igbm93LCBhbGxvdyBhbGwgcGVybWlzc2lvbiBjaGFuZ2UgYXR0ZW1wdHMgYnkgcmV0dXJuaW5nIHRoZVxuIDcyMjpcdFx0ICogYXR0ZW1wdGVkIHBlcm1pc3Npb25zLiAgVGhpcyBjYW4gJiMzOTtyZXR1cm4gb2xkJiMzOTsgdG8gYWN0aXZlbHlcbiA3MjM6XHRcdCAqIHJlZnVzZSB0aGUgcGVybWlzc2lvbiBjaGFuZ2UgYXQgYSBsYXRlciB0aW1lLlxuIDcyNDpcdFx0ICovXG4gNzI1Olx0XHRyZXR1cm4gbmV3O1xuIDcyNjpcdH1cbiA3Mjc6XHRcbiA3Mjg6XHQvKlxuIDcyOTpcdCAqIExvb2t1cCB0aGUgcGFnZSB0YWJsZSBlbnRyeSBmb3IgYSB2aXJ0dWFsIGFkZHJlc3MgaW4gYSBzcGVjaWZpYyBwZ2QuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDgzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEV2YWx1YXRpb24gZm9yIHRoZSBDUEEgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCB3YXJyYW50cyBmdXp6aW5nLiBUaGlzIGlzIGEgY29yZSBzdWJzeXN0ZW0gcmVsYXRlZCB0byB4ODYgTWVtb3J5IE1hbmFnZW1lbnQgYW5kIENoYW5nZSBQYWdlIEF0dHJpYnV0ZXMgKENQQSksIHNvIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ2l2ZSBpdCBhIGNsb3NlIGxvb2suCgpGaXJzdCwgdGhlIGNvcmUgdHJpYWdlIHBoaWxvc29waHkgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC4gIFRoZSBwcmltYXJ5IGdvYWwgb2YgZnV6emluZyBpcyB0byB1bmVhcnRoIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciBuZXdseSBleHBvc2VkIGJ1Z3MsIHBhcnRpY3VsYXJseSB0aG9zZSBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaC4gVGhlIGtleSBoZXJlIGlzICpyZWFjaGFiaWxpdHkqIOKAkyBjYW4gdGhlIGNvZGUgYWN0dWFsbHkgZXhlY3V0ZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUsIG9yIHZpYSBlbXVsYXRlZCBkZXZpY2VzPyBUaGUgZG9jdW1lbnRhdGlvbiBzdHJlc3NlcyBub3QgdHJ1c3RpbmcgJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IG9yIHJlZmFjdG9yaW5nIGNsYWltcyBibGluZGx5LCBhbmQgdGhhdCBuZXcvbW9kaWZpZWQgYXNzZXJ0aW9ucyAqbXVzdCogYmUgZnV6emVkIGlmIHRoZXkmIzM5O3JlIGluIHJlYWNoYWJsZSBjb2RlLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvci4KCk5vdyBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBUaGUgcGF0Y2ggd291bGQgYmUgaWdub3JlZCBpZiB0aGUgY29kZSBtb2RpZmllZCBpcyAqc3RyaWN0bHkqIG5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgb3IgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLiAgVGhhdCBsYXN0IHBvaW50IOKAkyB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMg4oCTIGlzIGltcG9ydGFudC4gRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyBvbmx5IHVzZWQgZHVyaW5nIGhvdC11bnBsdWcsIG9yIGNvZGUgc3BlY2lmaWMgdG8gb3RoZXIgYXJjaGl0ZWN0dXJlcyBhcmUgb3V0LgoKVGhlbiwgdGhlcmUgYXJlIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYS4gV2UgKmRlZmluaXRlbHkqIHdhbnQgdG8gZnV6eiBpZiB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBUaGlzIGluY2x1ZGVzIGFueSBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBsb2NraW5nLCBCUEYsIHRoZSBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLiBSZWZhY3RvcmluZyByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsZ29yaXRobSBmbG93cyBpcyBhbHNvIGEgdHJpZ2dlci4gRmluYWxseSwgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgdGhlIGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzICptYW5kYXRlcyogZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGFuYWx5emUgdGhlIHBhdGNoIGl0c2VsZi4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGFuIGBpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpYCBjb25kaXRpb24gd2l0aGluIHRoZSBgdmVyaWZ5X3J3eCgpYCBmdW5jdGlvbi4gVGhpcyBhZmZlY3RzIGhvdyB0aGUgJiMzNDtXXlggdmlvbGF0aW9uJiMzNDsgaXMgaGFuZGxlZC4gIFByZXZpb3VzbHksIGBXQVJOX09OQ0VgIHdhcyBhbHdheXMgdHJpZ2dlcmVkLiBOb3csIGlmIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBpcyBmYWxzZSwgaXQgbG9ncyBhIGBwcl93YXJuX29uY2VgIG1lc3NhZ2UuIFRoZSBrZXkgaXMgd2hlbiBpcyB0aGlzIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBmbGFnIGZhbHNlPwoKQWgsIHJpZ2h0IOKAkyBga2VybmVsX3NldF90b19yZWFkb25seWAgaXMgemVybyAqZHVyaW5nIGJvb3QqLCAqYmVmb3JlKiBgbWFya19yb2RhdGFfcm8oKWAgaXMgY2FsbGVkLiBUaGlzIGlzIGltcG9ydGFudDogaXQmIzM5O3MgYWxzbyB6ZXJvIHdoZW4gdGhlIGtlcm5lbCBpcyBib290ZWQgd2l0aCBgcm9kYXRhPW9mZmAuIFN5emthbGxlciBtaWdodCBib290IHdpdGggYHJvZGF0YT1vZmZgLCB3aGljaCBtZWFucyB0aGlzIG5ldyBicmFuY2ggY291bGQgYmUgZnJlcXVlbnRseSB0YWtlbiBkdXJpbmcgZnV6emluZy4gQ1BBIChDaGFuZ2UgUGFnZSBBdHRyaWJ1dGUpIGlzIGNhbGxlZCBhdCBydW50aW1lIHdoZW4gbW9kdWxlcyBhcmUgbG9hZGVkL3VubG9hZGVkLCBCUEYgSklUIGFsbG9jYXRlcy9mcmVlcyBleGVjdXRhYmxlIG1lbW9yeSwgYW5kIHNldF9tZW1vcnlfcm8vcncveC9ueC91Yy93YiBpcyBjYWxsZWQgdmlhIHZhcmlvdXMgZHJpdmVycyBhbmQgc3Vic3lzdGVtcy4gVGhpcyBzdWdnZXN0cyB0aGUgY29kZSBpcyAqYWJzb2x1dGVseSogcmVhY2hhYmxlLgoKVG8gYmUgY2VydGFpbiwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdobyBjYWxscyBDUEEgZnVuY3Rpb25zIGF0IHJ1bnRpbWUuIEkgbmVlZCB0byBncmVwIHRoZSBrZXJuZWwgZm9yIGNhbGxlcnMgb2YgYGNoYW5nZV9wYWdlX2F0dHJgIG9yIGBzZXRfbWVtb3J5X2AgdG8gY29uZmlybSByZWFjaGFiaWxpdHkuCgpCYXNlZCBvbiB0aGlzLCBteSBwcmVsaW1pbmFyeSBldmFsdWF0aW9uIGlzICp5ZXMqLCB0aGlzIHBhdGNoICpkb2VzKiB3YXJyYW50IGZ1enppbmcuICBUaGUgY2hhbmdlIGludHJvZHVjZXMgYSBuZXcgY29kZSBwYXRoIHRoYXQmIzM5O3MgbGlrZWx5IHJlYWNoYWJsZSwgZXNwZWNpYWxseSB3aXRoIGByb2RhdGE9b2ZmYCwgYW5kIGludm9sdmVzIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IGNoYW5nZSBpbiBiZWhhdmlvci4gVGhpcyBkZWZpbml0ZWx5IGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4cG9zZSBsYXRlbnQgYnVncyBvciB0cmlnZ2VyIG5ldyBhc3NlcnRpb25zLCBzbyBJIHdvdWxkIGZsYWcgdGhpcyBmb3IgdGhlIGZ1enppbmcgcXVldWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9tZW1vcnlfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA3NjEgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9leHBvcnRzLmg9Nj1QUk9WSURFKGVhcmx5X3NldF9wYWdlc19zdGF0ZVx0XHQ9IF9fcGlfZWFybHlfc2V0X3BhZ2VzX3N0YXRlKTtcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9leHBvcnRzLmg6NzpQUk9WSURFKGVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGVcdD0gX19waV9lYXJseV9zbnBfc2V0X21lbW9yeV9wcml2YXRlKTtcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9leHBvcnRzLmg6ODpQUk9WSURFKGVhcmx5X3NucF9zZXRfbWVtb3J5X3NoYXJlZFx0PSBfX3BpX2Vhcmx5X3NucF9zZXRfbWVtb3J5X3NoYXJlZCk7XG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvZXhwb3J0cy5oLTktUFJPVklERShnZXRfaHZfZmVhdHVyZXNcdFx0XHQ9IF9fcGlfZ2V0X2h2X2ZlYXR1cmVzKTtcbi0tXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvbWFwX2tlcm5lbC5jPTMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBzbWVfcG9zdHByb2Nlc3Nfc3RhcnR1cChzdHJ1Y3QgYm9vdF9wYXJhbXMgKmJwLFxuLS1cbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9tYXBfa2VybmVsLmMtNTktXHRcdFx0ICogbWFwcGluZyAoa2VybmVsIC50ZXh0KS4gUFZBTElEQVRFLCBieSB3YXkgb2ZcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9tYXBfa2VybmVsLmM6NjA6XHRcdFx0ICogZWFybHlfc25wX3NldF9tZW1vcnlfc2hhcmVkKCksIHJlcXVpcmVzIGEgdmFsaWQgdmlydHVhbFxuYXJjaC94ODYvYm9vdC9zdGFydHVwL21hcF9rZXJuZWwuYy02MS1cdFx0XHQgKiBhZGRyZXNzIGJ1dCB0aGUga2VybmVsIGlzIGN1cnJlbnRseSBydW5uaW5nIG9mZiBvZiB0aGUgaWRlbnRpdHlcbi0tXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvbWFwX2tlcm5lbC5jLTYzLVx0XHRcdCAqL1xuYXJjaC94ODYvYm9vdC9zdGFydHVwL21hcF9rZXJuZWwuYzo2NDpcdFx0XHRlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQocGFkZHIsIHBhZGRyLCBQVFJTX1BFUl9QTUQpO1xuYXJjaC94ODYvYm9vdC9zdGFydHVwL21hcF9rZXJuZWwuYy02NS1cbi0tXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc2V2LXN0YXJ0dXAuYz00OT1lYXJseV9zZXRfcGFnZXNfc3RhdGUodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkcixcbi0tXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc2V2LXN0YXJ0dXAuYy02Ni1cbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9zZXYtc3RhcnR1cC5jOjY3OnZvaWQgX19pbml0IGVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkcixcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9zZXYtc3RhcnR1cC5jLTY4LVx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBucGFnZXMpXG4tLVxuYXJjaC94ODYvYm9vdC9zdGFydHVwL3Nldi1zdGFydHVwLmMtOTEtXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc2V2LXN0YXJ0dXAuYzo5Mjp2b2lkIF9faW5pdCBlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkcixcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9zZXYtc3RhcnR1cC5jLTkzLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIG5wYWdlcylcbi0tXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM9Mzg3PXN0YXRpYyB2b2lkIHNldF9wYWdlc19zdGF0ZSh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIG5wYWdlcywgaW50IG9wKVxuLS1cbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy00MDUtXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6NDA2OnZvaWQgc25wX3NldF9tZW1vcnlfc2hhcmVkKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTQwNy17XG4tLVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTQxMy1cbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYzo0MTQ6dm9pZCBzbnBfc2V0X21lbW9yeV9wcml2YXRlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTQxNS17XG4tLVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jPTU0ND1zdGF0aWMgdm9pZCB1bnNoYXJlX2FsbF9tZW1vcnkodm9pZClcbi0tXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNTg1LVx0XHRcdHNldF9wdGVfZW5jKHB0ZSwgbGV2ZWwsICh2b2lkICopYWRkcik7XG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6NTg2Olx0XHRcdHNucF9zZXRfbWVtb3J5X3ByaXZhdGUoYWRkciwgbnBhZ2VzKTtcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy01ODctXHRcdH1cbi0tXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNjAzLVx0YWRkciA9ICh1bnNpZ25lZCBsb25nKV9fc3RhcnRfYnNzX2RlY3J5cHRlZDtcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYzo2MDQ6XHRzbnBfc2V0X21lbW9yeV9wcml2YXRlKGFkZHIsIG5wYWdlcyk7XG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNjA1LVxuLS1cbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYz02MTA9dm9pZCBzbnBfa2V4ZWNfYmVnaW4odm9pZClcbi0tXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNjIzLVx0ICovXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6NjI0Olx0aWYgKCFzZXRfbWVtb3J5X2VuY19zdG9wX2NvbnZlcnNpb24oKSlcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy02MjUtXHRcdHByX3dhcm4oXCYjMzQ7RmFpbGVkIHRvIHN0b3Agc2hhcmVkXHUwMDNjLVx1MDAzZXByaXZhdGUgY29udmVyc2lvbnNcXG5cJiMzNDspO1xuLS1cbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYz02ODc9dm9pZCBzbnBfa2V4ZWNfZmluaXNoKHZvaWQpXG4tLVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTcyMS1cdFx0c2V0X3B0ZV9lbmMocHRlLCBsZXZlbCwgKHZvaWQgKilhZGRyKTtcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYzo3MjI6XHRcdHNucF9zZXRfbWVtb3J5X3ByaXZhdGUoYWRkciwgKHNpemUgLyBQQUdFX1NJWkUpKTtcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy03MjMtXHR9XG4tLVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jPTEyMDg9c3RhdGljIHZvaWQgX19pbml0IGluaXRfZ2hjYihpbnQgY3B1KVxuLS1cbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy0xMjE0LVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jOjEyMTU6XHRlcnIgPSBlYXJseV9zZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZylcdTAwMjZkYXRhLVx1MDAzZWdoY2JfcGFnZSxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy0xMjE2LVx0XHRcdFx0XHQgc2l6ZW9mKGRhdGEtXHUwMDNlZ2hjYl9wYWdlKSk7XG4tLVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jPTE0NzM9c3RhdGljIHZvaWQgZnJlZV9zaGFyZWRfcGFnZXModm9pZCAqYnVmLCBzaXplX3Qgc3opXG4tLVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTE0ODAtXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6MTQ4MTpcdHJldCA9IHNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKWJ1ZiwgbnBhZ2VzKTtcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy0xNDgyLVx0aWYgKHJldCkge1xuLS1cbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYz0xNDkwPXN0YXRpYyB2b2lkICphbGxvY19zaGFyZWRfcGFnZXMoc2l6ZV90IHN6KVxuLS1cbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy0xNDk5LVxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jOjE1MDA6XHRyZXQgPSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSksIG5wYWdlcyk7XG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtMTUwMS1cdGlmIChyZXQpIHtcbi0tXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xMDEwPXN0YXRpYyB2b2lkIHRkeF9rZXhlY19iZWdpbih2b2lkKVxuLS1cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jLTEwMjAtXHQgKi9cbmFyY2gveDg2L2NvY28vdGR4L3RkeC5jOjEwMjE6XHRpZiAoIXNldF9tZW1vcnlfZW5jX3N0b3BfY29udmVyc2lvbigpKVxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTAyMi1cdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gc3RvcCBzaGFyZWRcdTAwM2MtXHUwMDNlcHJpdmF0ZSBjb252ZXJzaW9uc1xcblwmIzM0Oyk7XG4tLVxuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYz0xMTg9c3RhdGljIGludCBodl9jcHVfaW5pdCh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtMTU4LVx0XHRcdGlmICgqaHZwIFx1MDAyNlx1MDAyNiAhbXNfaHlwZXJ2LnBhcmF2aXNvcl9wcmVzZW50IFx1MDAyNlx1MDAyNiBodl9pc29sYXRpb25fdHlwZV9zbnAoKSkge1xuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYzoxNTk6XHRcdFx0XHRXQVJOX09OX09OQ0Uoc2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpKCpodnApLCAxKSk7XG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jLTE2MC1cdFx0XHRcdG1lbXNldCgqaHZwLCAwLCBQQUdFX1NJWkUpO1xuLS1cbmFyY2gveDg2L2h5cGVydi9pdm0uYz02MTc9c3RhdGljIHZvaWQgaHZfdnRvbV9rZXhlY19iZWdpbih2b2lkKVxuLS1cbmFyY2gveDg2L2h5cGVydi9pdm0uYy02MjctXHQgKi9cbmFyY2gveDg2L2h5cGVydi9pdm0uYzo2Mjg6XHRpZiAoIXNldF9tZW1vcnlfZW5jX3N0b3BfY29udmVyc2lvbigpKVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTYyOS1cdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gc3RvcCBzaGFyZWRcdTAwM2MtXHUwMDNlcHJpdmF0ZSBjb252ZXJzaW9uc1xcblwmIzM0Oyk7XG4tLVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jPTY3Nz1zdGF0aWMgaW50IGh2X21hcmtfZ3BhX3Zpc2liaWxpdHkodTE2IGNvdW50LCBjb25zdCB1NjQgcGZuW10sXG4tLVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTczNy0gKiBXaGVuIHRyYW5zaXRpb25pbmcgbWVtb3J5IGJldHdlZW4gZW5jcnlwdGVkIGFuZCBkZWNyeXB0ZWQsIHRoZSBjYWxsZXJcbmFyY2gveDg2L2h5cGVydi9pdm0uYzo3Mzg6ICogb2Ygc2V0X21lbW9yeV9lbmNyeXB0ZWQoKSBvciBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIGlzIHJlc3BvbnNpYmxlIGZvclxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTczOS0gKiBlbnN1cmluZyB0aGF0IHRoZSBtZW1vcnkgaXNuJiMzOTt0IGluIHVzZSBhbmQgaXNuJiMzOTt0IHJlZmVyZW5jZWQgd2hpbGUgdGhlXG4tLVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jPTc1Nj1zdGF0aWMgaW50IGh2X3Z0b21fY2xlYXJfcHJlc2VudCh1bnNpZ25lZCBsb25nIGtidWZmZXIsIGludCBwYWdlY291bnQsIGJvb2wgZW5jKVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTc1Ny17XG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM6NzU4Olx0cmV0dXJuIHNldF9tZW1vcnlfbnAoa2J1ZmZlciwgcGFnZWNvdW50KTtcbmFyY2gveDg2L2h5cGVydi9pdm0uYy03NTktfVxuLS1cbmFyY2gveDg2L2h5cGVydi9pdm0uYz03Njk9c3RhdGljIGludCBodl92dG9tX3NldF9ob3N0X3Zpc2liaWxpdHkodW5zaWduZWQgbG9uZyBrYnVmZmVyLCBpbnQgcGFnZWNvdW50LCBib29sIGVuYylcbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmMtNzgxLVx0XHRyZXQgPSAtRU5PTUVNO1xuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjc4MjpcdFx0Z290byBlcnJfc2V0X21lbW9yeV9wO1xuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTc4My1cdH1cbi0tXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmMtODA4LVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjgwOTplcnJfc2V0X21lbW9yeV9wOlxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTgxMC1cdC8qXG4tLVxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTgxNS1cdCAqL1xuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjgxNjpcdGVyciA9IHNldF9tZW1vcnlfcChrYnVmZmVyLCBwYWdlY291bnQpO1xuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTgxNy1cdGlmIChlcnIgXHUwMDI2XHUwMDI2ICFyZXQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmg9MjM4PXN0YXRpYyBpbmxpbmUgdTMyIGVmaTY0X2NvbnZlcnRfc3RhdHVzKGVmaV9zdGF0dXNfdCBzdGF0dXMpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmgtMjk4LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmg6Mjk5OiNkZWZpbmUgX19lZmk2NF9hcmdtYXBfc2V0X21lbW9yeV9zcGFjZV9hdHRyaWJ1dGVzKHBoeXMsIHNpemUsIGZsYWdzKSBcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmgtMzAwLVx0KF9fZWZpNjRfc3BsaXQocGh5cyksIF9fZWZpNjRfc3BsaXQoc2l6ZSksIF9fZWZpNjRfc3BsaXQoZmxhZ3MpKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oLTMxNi1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oOjMxNzojZGVmaW5lIF9fZWZpNjRfYXJnbWFwX3NldF9tZW1vcnlfYXR0cmlidXRlcyhwcm90b2NvbCwgcGh5cywgc2l6ZSwgZmxhZ3MpIFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaC0zMTgtXHQoKHByb3RvY29sKSwgX19lZmk2NF9zcGxpdChwaHlzKSwgX19lZmk2NF9zcGxpdChzaXplKSwgX19lZmk2NF9zcGxpdChmbGFncykpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va2ZlbmNlLmg9MjI9c3RhdGljIGlubGluZSBib29sIGFyY2hfa2ZlbmNlX2luaXRfcG9vbCh2b2lkKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2tmZW5jZS5oLTMzLVx0XHRpZiAobGV2ZWwgIT0gUEdfTEVWRUxfNEspXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZmVuY2UuaDozNDpcdFx0XHRzZXRfbWVtb3J5XzRrKGFkZHIsIDEpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20va2ZlbmNlLmgtMzUtXHR9XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbWVtX2VuY3J5cHQuaD01MT12b2lkIHNtZV9lbmFibGUoc3RydWN0IGJvb3RfcGFyYW1zICpicCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1fZW5jcnlwdC5oLTUyLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbWVtX2VuY3J5cHQuaDo1MzppbnQgX19pbml0IGVhcmx5X3NldF9tZW1vcnlfZGVjcnlwdGVkKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1fZW5jcnlwdC5oOjU0OmludCBfX2luaXQgZWFybHlfc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21lbV9lbmNyeXB0LmgtNTUtdm9pZCBfX2luaXQgZWFybHlfc2V0X21lbV9lbmNfZGVjX2h5cGVyY2FsbCh1bnNpZ25lZCBsb25nIHZhZGRyLFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL21lbV9lbmNyeXB0Lmg9ODk9c3RhdGljIGlubGluZSBpbnQgX19pbml0XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1fZW5jcnlwdC5oOjkwOmVhcmx5X3NldF9tZW1vcnlfZGVjcnlwdGVkKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkgeyByZXR1cm4gMDsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbWVtX2VuY3J5cHQuaC05MS1zdGF0aWMgaW5saW5lIGludCBfX2luaXRcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21lbV9lbmNyeXB0Lmg6OTI6ZWFybHlfc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBzaXplKSB7IHJldHVybiAwOyB9XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1fZW5jcnlwdC5oLTkzLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXRcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtOC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo5OiNkZWZpbmUgc2V0X21lbW9yeV9yb3ggc2V0X21lbW9yeV9yb3hcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxMDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTExLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTEyLS8qXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6MTM6ICogVGhlIHNldF9tZW1vcnlfKiBBUEkgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHZhcmlvdXMgYXR0cmlidXRlcyBvZiBhIHZpcnR1YWxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC0xNC0gKiBhZGRyZXNzIHJhbmdlLiBUaGUgYXR0cmlidXRlcyBpbmNsdWRlOlxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC00MC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo0MTppbnQgX3NldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQyOmludCBfc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NDM6aW50IF9zZXRfbWVtb3J5X3d0KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo0NDppbnQgX3NldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQ1OmludCBzZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo0NjppbnQgc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NDc6aW50IHNldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQ4OmludCBzZXRfbWVtb3J5X25wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo0OTppbnQgc2V0X21lbW9yeV9wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo1MDppbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtNTEtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NTI6Ym9vbCBzZXRfbWVtb3J5X2VuY19zdG9wX2NvbnZlcnNpb24odm9pZCk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NTM6aW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo1NDppbnQgc2V0X21lbW9yeV9kZWNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTU1LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjU2OmludCBzZXRfbWVtb3J5X25wX25vYWxpYXModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjU3OmludCBzZXRfbWVtb3J5X25vbmdsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NTg6aW50IHNldF9tZW1vcnlfZ2xvYmFsKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC01OS1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg9NjI9aW50IHNldF9wYWdlc19hcnJheV93YihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgYWRkcmluYXJyYXkpO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC02OC0gKiBtZW1vcnkgdGhhdCB0aGUgc3RydWN0IHBhZ2UgcmVwcmVzZW50cywgYW5kIGludGVybmFsbHkganVzdFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjY5OiAqIGNhbGwgdGhlIHNldF9tZW1vcnlfKiBmdW5jdGlvbi4gU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGVcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo3MDogKiBzZXRfbWVtb3J5XyogZnVuY3Rpb24gZm9yIG1vcmUgZGV0YWlscyBvbiBjb252ZW50aW9ucy5cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC03MS0gKlxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC03OS0gKiBnZXQgYSBzdHJ1Y3QgcGFnZSogdGhhdCB0aGUgb2xkIEFQSSByZXF1aXJlZC5cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo4MDogKiBUbyBjb252ZXJ0IHRoZXNlIGNhc2VzLCB1c2Ugc2V0X21lbW9yeV8qKCkgb24gdGhlIG9yaWdpbmFsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtODEtICogdmlydHVhbCBhZGRyZXNzLCBkbyBub3QgdXNlIHRoZXNlIGZ1bmN0aW9ucy5cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD01MDU9dm9pZCBzbnBfcmVnaXN0ZXJfZ2hjYl9lYXJseSh1bnNpZ25lZCBsb25nIHBhZGRyKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjUwNjp2b2lkIGVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkcixcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTUwNy1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NTA4OnZvaWQgZWFybHlfc25wX3NldF9tZW1vcnlfc2hhcmVkKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgcGFkZHIsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaC01MDktXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NTEwOnZvaWQgc25wX3NldF9tZW1vcnlfc2hhcmVkKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjUxMTp2b2lkIHNucF9zZXRfbWVtb3J5X3ByaXZhdGUodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNTEyLXZvaWQgc25wX3NldF93YWtldXBfc2Vjb25kYXJ5X2NwdSh2b2lkKTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD02MTI9c3RhdGljIGlubGluZSB2b2lkIF9faW5pdFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjEzOmVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyBucGFnZXMpIHsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjE0LXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXRcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjYxNTplYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyBucGFnZXMpIHsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjE2OnN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0X21lbW9yeV9zaGFyZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBucGFnZXMpIHsgfVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjE3OnN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0X21lbW9yeV9wcml2YXRlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKSB7IH1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTYxOC1zdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldF93YWtldXBfc2Vjb25kYXJ5X2NwdSh2b2lkKSB7IH1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92Z2EuaC0yNC1cdGlmIChJU19FTkFCTEVEKENPTkZJR19BTURfTUVNX0VOQ1JZUFQpKVx0XHRcdFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS92Z2EuaDoyNTpcdFx0c2V0X21lbW9yeV9kZWNyeXB0ZWQoc3RhcnQsIChzKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XHRcXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdmdhLmgtMjYtXHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9MjE4PXN0YXRpYyB2b2lkICppdHNfYWxsb2Modm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yMzItXHRpZiAocGFnZXMgPT0gXHUwMDI2aXRzX3BhZ2VzKVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MjMzOlx0XHRzZXRfbWVtb3J5X3goKHVuc2lnbmVkIGxvbmcpcGFnZSwgMSk7XG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yMzQtXG4tLVxuYXJjaC94ODYva2VybmVsL2FtZF9nYXJ0XzY0LmM9NjE5PXN0YXRpYyBfX2luaXQgaW50IGluaXRfYW1kX2dhdHQoc3RydWN0IGFncF9rZXJuX2luZm8gKmluZm8pXG4tLVxuYXJjaC94ODYva2VybmVsL2FtZF9nYXJ0XzY0LmMtNjU0LVx0XHRwYW5pYyhcJiMzNDtDYW5ub3QgYWxsb2NhdGUgR0FUVCB0YWJsZVwmIzM0Oyk7XG5hcmNoL3g4Ni9rZXJuZWwvYW1kX2dhcnRfNjQuYzo2NTU6XHRpZiAoc2V0X21lbW9yeV91YygodW5zaWduZWQgbG9uZylnYXR0LCBnYXR0X3NpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpKVxuYXJjaC94ODYva2VybmVsL2FtZF9nYXJ0XzY0LmMtNjU2LVx0XHRwYW5pYyhcJiMzNDtDb3VsZCBub3Qgc2V0IEdBUlQgUFRFcyB0byB1bmNhY2hlYWJsZSBwYWdlc1wmIzM0Oyk7XG4tLVxuYXJjaC94ODYva2VybmVsL2FtZF9nYXJ0XzY0LmM9NzE0PWludCBfX2luaXQgZ2FydF9pb21tdV9pbml0KHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2FtZF9nYXJ0XzY0LmMtNzgxLVx0ICovXG5hcmNoL3g4Ni9rZXJuZWwvYW1kX2dhcnRfNjQuYzo3ODI6XHRzZXRfbWVtb3J5X25wKCh1bnNpZ25lZCBsb25nKV9fdmEoaW9tbXVfYnVzX2Jhc2UpLFxuYXJjaC94ODYva2VybmVsL2FtZF9nYXJ0XzY0LmMtNzgzLVx0XHRcdFx0aW9tbXVfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4tLVxuYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYz01NTk9c3RhdGljIF9faW5pdCB2b2lkIHNldF9ibG9ja19zaXplKHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYy01NjQtXHRcdC8qIGFkanVzdCBmb3IgZmZzIHJldHVybiBvZiAxLi42NCAqL1xuYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYzo1NjU6XHRcdHNldF9tZW1vcnlfYmxvY2tfc2l6ZV9vcmRlcihvcmRlciAtIDEpO1xuYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYy01NjYtXHRcdHByX2luZm8oXCYjMzQ7VVY6IG1lbV9ibG9ja19zaXplIHNldCB0byAweCVseFxcblwmIzM0OywgbWVtX2Jsb2NrX3NpemUpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMtNTY5LVx0XHRwcl9lcnIoXCYjMzQ7VVY6IG1lbV9ibG9ja19zaXplIGVycm9yIHdpdGggMHglbHhcXG5cJiMzNDssIG1lbV9ibG9ja19zaXplKTtcbmFyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmM6NTcwOlx0XHRzZXRfbWVtb3J5X2Jsb2NrX3NpemVfb3JkZXIoMzEpO1xuYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYy01NzEtXHR9XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYz0yNTg4PXZvaWQgX19pbml0IGFyY2hfY3B1X2ZpbmFsaXplX2luaXQodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jLTI2NjMtXHRcdGlmICghZGlyZWN0X2dicGFnZXMpXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jOjI2NjQ6XHRcdFx0c2V0X21lbW9yeV80aygodW5zaWduZWQgbG9uZylfX3ZhKDApLCAxKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMtMjY2NS1cdH0gZWxzZSB7XG4tLVxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jPTMwOT1jcmVhdGVfdHJhbXBvbGluZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBpbnQgKnRyYW1wX3NpemUpXG4tLVxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jLTQyNy1cbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYzo0Mjg6XHRzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZyl0cmFtcG9saW5lLCBucGFnZXMpO1xuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jLTQyOS1cdHJldHVybiAodW5zaWduZWQgbG9uZyl0cmFtcG9saW5lO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYz00MzU9dm9pZCBzZXRfZnRyYWNlX29wc19ybyh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00NTYtXHRcdG5wYWdlcyA9IERJVl9ST1VORF9VUChzaXplLCBQQUdFX1NJWkUpO1xuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jOjQ1NzpcdFx0c2V0X21lbW9yeV9ybygodW5zaWduZWQgbG9uZylvcHMtXHUwMDNldHJhbXBvbGluZSwgbnBhZ2VzKTtcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00NTgtXHR9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9vcChvcHMpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9pZHQuYz0yOTQ9dm9pZCBfX2luaXQgaWR0X3NldHVwX2FwaWNfYW5kX2lycV9nYXRlcyh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9pZHQuYy0zMjEtXHQvKiBNYWtlIHRoZSBJRFQgdGFibGUgcmVhZCBvbmx5ICovXG5hcmNoL3g4Ni9rZXJuZWwvaWR0LmM6MzIyOlx0c2V0X21lbW9yeV9ybygodW5zaWduZWQgbG9uZylcdTAwMjZpZHRfdGFibGUsIDEpO1xuYXJjaC94ODYva2VybmVsL2lkdC5jLTMyMy1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmM9NDMyPXN0YXRpYyBpbmxpbmUgX19pbml0IHZvaWQgX19zZXRfcGVyY3B1X2RlY3J5cHRlZCh2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbmFyY2gveDg2L2tlcm5lbC9rdm0uYy00MzMte1xuYXJjaC94ODYva2VybmVsL2t2bS5jOjQzNDpcdGVhcmx5X3NldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKSBwdHIsIHNpemUpO1xuYXJjaC94ODYva2VybmVsL2t2bS5jLTQzNS19XG4tLVxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM9MjI1PXN0YXRpYyB2b2lkIF9faW5pdCBrdm1jbG9ja19pbml0X21lbSh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTI1MC1cdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9HVUVTVF9NRU1fRU5DUllQVCkpIHtcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jOjI1MTpcdFx0ciA9IHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKSBodmNsb2NrX21lbSxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTI1Mi1cdFx0XHRcdFx0IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTI1NS1cdFx0XHRodmNsb2NrX21lbSA9IE5VTEw7XG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzoyNTY6XHRcdFx0cHJfd2FybihcJiMzNDtrdm1jbG9jazogc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBmYWlsZWQuIERpc2FibGluZ1xcblwmIzM0Oyk7XG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYy0yNTctXHRcdFx0cmV0dXJuO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmM9MTM1PWludCBtYWNoaW5lX2tleGVjX3ByZXBhcmUoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXG4tLVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYy0xMzgtXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jOjEzOTpcdHNldF9tZW1vcnlfeCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MoaW1hZ2UtXHUwMDNlY29udHJvbF9jb2RlX3BhZ2UpLCAxKTtcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMtMTQwLVx0ZXJyb3IgPSBtYWNoaW5lX2tleGVjX2FsbG9jX3BhZ2VfdGFibGVzKGltYWdlKTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jPTE1MT12b2lkIG1hY2hpbmVfa2V4ZWNfY2xlYW51cChzdHJ1Y3Qga2ltYWdlICppbWFnZSlcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMtMTUyLXtcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmM6MTUzOlx0c2V0X21lbW9yeV9ueCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MoaW1hZ2UtXHUwMDNlY29udHJvbF9jb2RlX3BhZ2UpLCAxKTtcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMtMTU0LVx0bWFjaGluZV9rZXhlY19mcmVlX3BhZ2VfdGFibGVzKGltYWdlKTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jPTM0Mz1pbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlKHN0cnVjdCBraW1hZ2UgKmltYWdlKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMtMzY0LVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYzozNjU6XHRzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZyljb250cm9sX3BhZ2UsIDEpO1xuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy0zNjYtXG4tLVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYz0zNzA9dm9pZCBtYWNoaW5lX2tleGVjX2NsZWFudXAoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXG4tLVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy0zNzMtXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jOjM3NDpcdHNldF9tZW1vcnlfbngoKHVuc2lnbmVkIGxvbmcpY29udHJvbF9wYWdlLCAxKTtcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM6Mzc1Olx0c2V0X21lbW9yeV9ydygodW5zaWduZWQgbG9uZyljb250cm9sX3BhZ2UsIDEpO1xuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy0zNzYtXG4tLVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYz02NDg9c3RhdGljIHZvaWQga2V4ZWNfbWFya19kbV9jcnlwdF9rZXlzKGJvb2wgcHJvdGVjdClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTY1Ny1cdFx0aWYgKHByb3RlY3QpXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jOjY1ODpcdFx0XHRzZXRfbWVtb3J5X25wKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChzdGFydF9wYWRkciksIG5yX3BhZ2VzKTtcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMtNjU5LVx0XHRlbHNlXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jOjY2MDpcdFx0XHRzZXRfbWVtb3J5X3AoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KHN0YXJ0X3BhZGRyKSwgbnJfcGFnZXMpO1xuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy02NjEtXHR9XG4tLVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYz02ODY9aW50IGFyY2hfa2V4ZWNfcG9zdF9hbGxvY19wYWdlcyh2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IHBhZ2VzLCBnZnBfdCBnZnApXG4tLVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy02OTUtXHQgKi9cbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM6Njk2Olx0cmV0dXJuIHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBwYWdlcyk7XG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTY5Ny19XG4tLVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYz02OTk9dm9pZCBhcmNoX2tleGVjX3ByZV9mcmVlX3BhZ2VzKHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4tLVxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy03MDctXHQgKi9cbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM6NzA4Olx0c2V0X21lbW9yeV9lbmNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIHBhZ2VzKTtcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMtNzA5LX1cbi0tXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYz0yOTEwPWludCBrdm1fYWxsb2NfYXBpY19hY2Nlc3NfcGFnZShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL2xhcGljLmMtMjkxOS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jOjI5MjA6XHRodmEgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULFxuYXJjaC94ODYva3ZtL2xhcGljLmMtMjkyMS1cdFx0XHRcdCAgICAgIEFQSUNfREVGQVVMVF9QSFlTX0JBU0UsIFBBR0VfU0laRSk7XG4tLVxuYXJjaC94ODYva3ZtL2xhcGljLmM9MjkzMT12b2lkIGt2bV9pbmhpYml0X2FwaWNfYWNjZXNzX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5NDItXHRpZiAoa3ZtLVx1MDAzZWFyY2guYXBpY19hY2Nlc3NfbWVtc2xvdF9lbmFibGVkKSB7XG5hcmNoL3g4Ni9rdm0vbGFwaWMuYzoyOTQzOlx0XHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULCAwLCAwKTtcbmFyY2gveDg2L2t2bS9sYXBpYy5jLTI5NDQtXHRcdC8qXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02ODAxPXN0YXRpYyB2b2lkIGZyZWVfbW11X3BhZ2VzKHN0cnVjdCBrdm1fbW11ICptbXUpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODAzLVx0aWYgKCF0ZHBfZW5hYmxlZCBcdTAwMjZcdTAwMjYgbW11LVx1MDAzZXBhZV9yb290KVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2ODA0Olx0XHRzZXRfbWVtb3J5X2VuY3J5cHRlZCgodW5zaWduZWQgbG9uZyltbXUtXHUwMDNlcGFlX3Jvb3QsIDEpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODA1LVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKW1tdS1cdTAwM2VwYWVfcm9vdCk7XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02ODEwPXN0YXRpYyBpbnQgX19rdm1fbW11X2NyZWF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11ICptbXUsIHN0cnVjdCBrdm1fcGFnZXdhbGsgKncpXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02ODU0LVx0aWYgKCF0ZHBfZW5hYmxlZClcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Njg1NTpcdFx0c2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpbW11LVx1MDAzZXBhZV9yb290LCAxKTtcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjg1Ni1cdGVsc2Vcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTgxMTM9c3RhdGljIHZvaWQgaHVnZXBhZ2Vfc2V0X21peGVkKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbixcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgxMTgtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjgxMTk6Ym9vbCBrdm1fYXJjaF9wcmVfc2V0X21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODEyMC1cdFx0XHRcdFx0c3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9ODE4Mj1zdGF0aWMgYm9vbCBodWdlcGFnZV9oYXNfYXR0cnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODE5OC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODE5OTpib29sIGt2bV9hcmNoX3Bvc3Rfc2V0X21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODIwMC1cdFx0XHRcdFx0IHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTQwMjk9c3RhdGljIGludCBpbml0X3Jtb2RlX2lkZW50aXR5X21hcChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00MDQ0LVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo0MDQ1Olx0dWFkZHIgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTQwNDYtXHRcdFx0XHRcdElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1QsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz01Mjc2PWludCB2bXhfc2V0X3Rzc19hZGRyKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IGFkZHIpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01MjgzLVx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjUyODQ6XHRyZXQgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIFRTU19QUklWQVRFX01FTVNMT1QsIGFkZHIsXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTUyODUtXHRcdFx0XHQgICAgICBQQUdFX1NJWkUgKiAzKTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9OTg0Mz1pbnQga3ZtX2FyY2hfaW5pdF92bShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxNi0vKipcbmFyY2gveDg2L2t2bS94ODYuYzo5OTE3OiAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uOiBTZXR1cCBLVk0gaW50ZXJuYWwgbWVtb3J5IHNsb3RcbmFyY2gveDg2L2t2bS94ODYuYy05OTE4LSAqXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MzctICovXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkzODp2b2lkIF9fdXNlciAqIF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlkLCBncGFfdCBncGEsXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkzOS1cdFx0XHRcdCAgICAgIHUzMiBzaXplKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05OTg5LX1cbmFyY2gveDg2L2t2bS94ODYuYzo5OTkwOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbik7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTk5MS1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwMTQ9dm9pZCBrdm1fYXJjaF9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjItXHRcdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDIzOlx0XHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDI0LVx0XHRcdFx0XHQwLCAwKTtcbmFyY2gveDg2L2t2bS94ODYuYzoxMDAyNTpcdFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBJREVOVElUWV9QQUdFVEFCTEVfUFJJVkFURV9NRU1TTE9ULFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDI2LVx0XHRcdFx0XHQwLCAwKTtcbmFyY2gveDg2L2t2bS94ODYuYzoxMDAyNzpcdFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBUU1NfUFJJVkFURV9NRU1TTE9ULCAwLCAwKTtcbmFyY2gveDg2L2t2bS94ODYuYy0xMDAyOC1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTAwOTM9c3RhdGljIGludCBrdm1fYWxsb2NfbWVtc2xvdF9tZXRhZGF0YShzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMTAwLVx0ICogQ2xlYXIgb3V0IHRoZSBwcmV2aW91cyBhcnJheSBwb2ludGVycyBmb3IgdGhlIEtWTV9NUl9NT1ZFIGNhc2UuICBUaGVcbmFyY2gveDg2L2t2bS94ODYuYzoxMDEwMTpcdCAqIG9sZCBhcnJheXMgd2lsbCBiZSBmcmVlZCBieSBrdm1fc2V0X21lbW9yeV9yZWdpb24oKSBpZiBpbnN0YWxsaW5nXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxMDItXHQgKiB0aGUgbmV3IG1lbXNsb3QgaXMgc3VjY2Vzc2Z1bC5cbi0tXG5hcmNoL3g4Ni9rdm0veDg2Lmg9NTI2PWludCBrdm1fZ2V0X25yX3BlbmRpbmdfbm1pcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5oLTUyNy1cbmFyY2gveDg2L2t2bS94ODYuaDo1Mjg6dm9pZCBfX3VzZXIgKl9feDg2X3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlkLCBncGFfdCBncGEsXG5hcmNoL3g4Ni9rdm0veDg2LmgtNTI5LVx0XHRcdFx0ICAgICB1MzIgc2l6ZSk7XG4tLVxuYXJjaC94ODYvbW0vaW5pdC5jPTg5Nz12b2lkIGZyZWVfaW5pdF9wYWdlcyhjb25zdCBjaGFyICp3aGF0LCB1bnNpZ25lZCBsb25nIGJlZ2luLCB1bnNpZ25lZCBsb25nIGVuZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0LmMtOTI1LVx0XHRrbWVtbGVha19mcmVlX3BhcnQoKHZvaWQgKiliZWdpbiwgZW5kIC0gYmVnaW4pO1xuYXJjaC94ODYvbW0vaW5pdC5jOjkyNjpcdFx0c2V0X21lbW9yeV9ucChiZWdpbiwgKGVuZCAtIGJlZ2luKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5hcmNoL3g4Ni9tbS9pbml0LmMtOTI3LVx0fSBlbHNlIHtcbi0tXG5hcmNoL3g4Ni9tbS9pbml0LmMtOTMyLVx0XHQgKi9cbmFyY2gveDg2L21tL2luaXQuYzo5MzM6XHRcdHNldF9tZW1vcnlfbngoYmVnaW4sIChlbmQgLSBiZWdpbikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuYXJjaC94ODYvbW0vaW5pdC5jOjkzNDpcdFx0c2V0X21lbW9yeV9ydyhiZWdpbiwgKGVuZCAtIGJlZ2luKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5hcmNoL3g4Ni9tbS9pbml0LmMtOTM1LVxuLS1cbmFyY2gveDg2L21tL2luaXQuYz05NDY9dm9pZCBmcmVlX2tlcm5lbF9pbWFnZV9wYWdlcyhjb25zdCBjaGFyICp3aGF0LCB2b2lkICpiZWdpbiwgdm9pZCAqZW5kKVxuLS1cbmFyY2gveDg2L21tL2luaXQuYy05NjktXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWDg2XzY0KSBcdTAwMjZcdTAwMjYgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9QVEkpKVxuYXJjaC94ODYvbW0vaW5pdC5jOjk3MDpcdFx0c2V0X21lbW9yeV9ucF9ub2FsaWFzKGJlZ2luX3VsLCBsZW5fcGFnZXMpO1xuYXJjaC94ODYvbW0vaW5pdC5jLTk3MS19XG4tLVxuYXJjaC94ODYvbW0vaW5pdF8zMi5jPTcyMz1zdGF0aWMgdm9pZCBtYXJrX254ZGF0YV9ueCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL2luaXRfMzIuYy03MzYtXHRcdHByaW50ayhLRVJOX0lORk8gXCYjMzQ7TlgtcHJvdGVjdGluZyB0aGUga2VybmVsIGRhdGE6ICVsdWtcXG5cJiMzNDssIHNpemUgXHUwMDNlXHUwMDNlIDEwKTtcbmFyY2gveDg2L21tL2luaXRfMzIuYzo3Mzc6XHRzZXRfbWVtb3J5X254KHN0YXJ0LCBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbmFyY2gveDg2L21tL2luaXRfMzIuYy03MzgtfVxuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYz0xMzU5PXZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM2OS1cdCAgICAgICAoZW5kIC0gc3RhcnQpIFx1MDAzZVx1MDAzZSAxMCk7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM3MDpcdHNldF9tZW1vcnlfcm8oc3RhcnQsIChlbmQgLSBzdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzNzEtXG4tLVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzODYtXHRhbGxfZW5kID0gcm91bmR1cCgodW5zaWduZWQgbG9uZylfYnJrX2VuZCwgUE1EX1NJWkUpO1xuYXJjaC94ODYvbW0vaW5pdF82NC5jOjEzODc6XHRzZXRfbWVtb3J5X254KHRleHRfZW5kLCAoYWxsX2VuZCAtIHRleHRfZW5kKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM4OC1cbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM5Mi1cdHByaW50ayhLRVJOX0lORk8gXCYjMzQ7VGVzdGluZyBDUEE6IHVuZG8gJWx4LSVseFxcblwmIzM0Oywgc3RhcnQsIGVuZCk7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM5MzpcdHNldF9tZW1vcnlfcncoc3RhcnQsIChlbmQtc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzk0LVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzOTUtXHRwcmludGsoS0VSTl9JTkZPIFwmIzM0O1Rlc3RpbmcgQ1BBOiBhZ2FpblxcblwmIzM0Oyk7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM5NjpcdHNldF9tZW1vcnlfcm8oc3RhcnQsIChlbmQtc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzk3LSNlbmRpZlxuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYy0xNDE1LS8qIEFkanVzdGFibGUgbWVtb3J5IGJsb2NrIHNpemUgKi9cbmFyY2gveDg2L21tL2luaXRfNjQuYzoxNDE2OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNldF9tZW1vcnlfYmxvY2tfc2l6ZTtcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxNDE3OmludCBfX2luaXQgc2V0X21lbW9yeV9ibG9ja19zaXplX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xNDE4LXtcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQyMy1cbmFyY2gveDg2L21tL2luaXRfNjQuYzoxNDI0Olx0c2V0X21lbW9yeV9ibG9ja19zaXplID0gc2l6ZTtcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xNDI1LVx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvbW0vaW5pdF82NC5jPTE0Mjg9c3RhdGljIHVuc2lnbmVkIGxvbmcgcHJvYmVfbWVtb3J5X2Jsb2NrX3NpemUodm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQzMy1cdC8qIElmIG1lbW9yeSBibG9jayBzaXplIGhhcyBiZWVuIHNldCwgdGhlbiB1c2UgaXQgKi9cbmFyY2gveDg2L21tL2luaXRfNjQuYzoxNDM0Olx0YnogPSBzZXRfbWVtb3J5X2Jsb2NrX3NpemU7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQzNS1cdGlmIChieilcbi0tXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM9NDU9aW50IGlvcmVtYXBfY2hhbmdlX2F0dHIodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBzaXplLFxuLS1cbmFyY2gveDg2L21tL2lvcmVtYXAuYy01My1cdGRlZmF1bHQ6XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NTQ6XHRcdGVyciA9IF9zZXRfbWVtb3J5X3VjKHZhZGRyLCBucnBhZ2VzKTtcbmFyY2gveDg2L21tL2lvcmVtYXAuYy01NS1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNTYtXHRjYXNlIF9QQUdFX0NBQ0hFX01PREVfV0M6XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NTc6XHRcdGVyciA9IF9zZXRfbWVtb3J5X3djKHZhZGRyLCBucnBhZ2VzKTtcbmFyY2gveDg2L21tL2lvcmVtYXAuYy01OC1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNTktXHRjYXNlIF9QQUdFX0NBQ0hFX01PREVfV1Q6XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NjA6XHRcdGVyciA9IF9zZXRfbWVtb3J5X3d0KHZhZGRyLCBucnBhZ2VzKTtcbmFyY2gveDg2L21tL2lvcmVtYXAuYy02MS1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNjItXHRjYXNlIF9QQUdFX0NBQ0hFX01PREVfV0I6XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NjM6XHRcdGVyciA9IF9zZXRfbWVtb3J5X3diKHZhZGRyLCBucnBhZ2VzKTtcbmFyY2gveDg2L21tL2lvcmVtYXAuYy02NC1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM9NTc9c3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzbnBfbWVtY3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgc3osXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNjYtXHRcdCAqL1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM6Njc6XHRcdGVhcmx5X3NucF9zZXRfbWVtb3J5X3NoYXJlZCgodW5zaWduZWQgbG9uZylfX3ZhKHBhZGRyKSwgcGFkZHIsIG5wYWdlcyk7XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy02OC1cbi0tXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy03MS1cdFx0LyogUmVzdG9yZSB0aGUgcGFnZSBzdGF0ZSBhZnRlciB0aGUgbWVtY3B5LiAqL1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM6NzI6XHRcdGVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUoKHVuc2lnbmVkIGxvbmcpX192YShwYWRkciksIHBhZGRyLCBucGFnZXMpO1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNzMtXHR9IGVsc2Uge1xuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jPTI4Nj1zdGF0aWMgaW50IGFtZF9lbmNfc3RhdHVzX2NoYW5nZV9wcmVwYXJlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBucGFnZXMsIGJvb2wgZW5jKVxuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTI5Mi1cdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9HVUVTVF9TRVZfU05QKSBcdTAwMjZcdTAwMjYgIWVuYylcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjI5MzpcdFx0c25wX3NldF9tZW1vcnlfc2hhcmVkKHZhZGRyLCBucGFnZXMpO1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMjk0LVxuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jPTI5OT1zdGF0aWMgaW50IGFtZF9lbmNfc3RhdHVzX2NoYW5nZV9maW5pc2godW5zaWduZWQgbG9uZyB2YWRkciwgaW50IG5wYWdlcywgYm9vbCBlbmMpXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzA1LVx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NFVl9TTlApIFx1MDAyNlx1MDAyNiBlbmMpXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzozMDY6XHRcdHNucF9zZXRfbWVtb3J5X3ByaXZhdGUodmFkZHIsIG5wYWdlcyk7XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zMDctXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM9MzU4PXN0YXRpYyB2b2lkIF9faW5pdCBfX3NldF9jbHJfcHRlX2VuYyhwdGVfdCAqa3B0ZSwgaW50IGxldmVsLCBib29sIGVuYylcbi0tXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zNzgtXHRcdCAqL1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM6Mzc5Olx0XHRlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQoKHVuc2lnbmVkIGxvbmcpX192YShkLnBhKSwgZC5wYSwgMSk7XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zODAtXHR9XG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzg4LVx0aWYgKGVuYylcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM0MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFdeWCBWaW9sYXRpb24gRGV0ZWN0aW9uIGluIHNldF9tZW1vcnkuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgYHNldF9tZW1vcnkuY2AgZmlsZSBhbmQsIHNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9ucyBsaWtlIGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBhbmQgb3RoZXJzLiBXaGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGNhbGxlZD8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGVpciB1c2FnZS4KCkkgcmVjYWxsIEJQRiBKSVQsIGZ0cmFjZSwgdGhlIG1vZHVsZSBsb2FkZXIg4oCTIHRoZXkgYWxsIG1hbmlwdWxhdGUgbWVtb3J5IHBlcm1pc3Npb25zLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSByZWxldmFudCBmdW5jdGlvbnM6IGBtb2R1bGVfZW5hYmxlX3JvKClgLCBgbW9kdWxlX2VuYWJsZV9ueCgpYCwgYGJwZl9qaXRfYmluYXJ5X2xvY2tfcm8oKWAsIGFuZCBgYnBmX3Byb2dfbG9ja19ybygpYC4gS3Byb2JlcyBhbHNvIGNvbWUgdG8gbWluZCB3aXRoIGBhbGxvY19pbnNuX3BhZ2UoKWAgYW5kIGl0cyBpbXBsaWNhdGlvbnMgb24gc2V0dGluZyByZWFkLW9ubHkvcmVhZC13cml0ZSBwZXJtaXNzaW9ucy4gTGV0JiMzOTtzIG5vdCBmb3JnZXQgYC9kZXYvbWVtYCBhbmQgYGlvcmVtYXBgIHdoaWNoIGNvdWxkIGJlIHJlbGV2YW50IHRvby4gSSBuZWVkIHRvIGtlZXAgdGhlc2UgaW4gbWluZCBhcyBwb3RlbnRpYWwgY2FsbCBzaXRlcy4KCk5vdywgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiB0aGUgcGF0Y2ggaXRzZWxmLCBJIHNob3VsZCBleGFtaW5lIHRoZSBgZ2l0IHNob3dgIG91dHB1dCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlIGludHJvZHVjZXMgYSB3YXJuaW5nIGFib3V0IFdeWCB2aW9sYXRpb25zIHdpdGhpbiB0aGUgYHZlcmlmeV9yd3hgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYSBgcHJfd2Fybl9vbmNlYCBjYWxsLgoKSSBjYXJlZnVsbHkgZXhhbWluZSB0aGUgYHZlcmlmeV9yd3hgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBjaGVjayBmb3IgY2hhbmdlcyB0aGF0IGNvdWxkIHZpb2xhdGUgdGhlIFdyaXRlIFhPUiBFeGVjdXRlIChXXlgpIHByaW5jaXBsZS4gSXQgaGFzIHNvbWUgY29uZGl0aW9ucyByZWxhdGVkIHRvIHRoZSBhcmNoaXRlY3R1cmUgKDMyLWJpdCBzcGVjaWZpY2FsbHkpIGFuZCBOWCBzdXBwb3J0LiBJIGNhbiBzZWUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIFdeWCBjaGVjaywgbG9va2luZyBhdCB0aGUgb2xkIGFuZCBuZXcgcGFnZSBwcm90ZWN0aW9uIGZsYWdzLgoKQWhhISBOb3cgSSBzZWUgYSBjcnVjaWFsIGRldGFpbDogdGhlcmUgYXJlIHR3byBgcHJfd2Fybl9vbmNlYCBjYWxscyBpbiB0aGUgY29kZS4gT25lIGlzIGNvbmRpdGlvbmFsIG9uIGAha2VybmVsX3NldF90b19yZWFkb25seWAgYW5kIHRoZSBvdGhlciBpcyB1bmNvbmRpdGlvbmFsLiBNeSBhdHRlbnRpb24gaXMgbm93IGRyYXduIHRvIHRoZSBmaXJzdCBhcmd1bWVudCBvZiBgcHJfd2Fybl9vbmNlYC4gSXMgaXQgYSBjb25kaXRpb24sIG9yIGlzIGl0IHBhcnQgb2YgdGhlIGZvcm1hdCBzdHJpbmc/IFRoYXQmIzM5O3MgYSBjbGFzc2ljIGdvdGNoYSEgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB3aGF0IHRoYXQgZmlyc3QgYXJndW1lbnQgaXMgZG9pbmcuIExldCYjMzk7cyBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgcHJfd2Fybl9vbmNlYCEgSSBuZWVkIHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGxvZ2dpbmcgYmVoYXZpb3IgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBwcl93YXJuX29uY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jZXBoL2NlcGhfZGVidWcuaC01OS1cdFx0Y2xpZW50LVx1MDAzZW1vbmMuYXV0aC1cdTAwM2VnbG9iYWxfaWQsICMjX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L2NlcGgvY2VwaF9kZWJ1Zy5oOjYwOiNkZWZpbmUgcHJfd2Fybl9vbmNlX2NsaWVudChjbGllbnQsIGZtdCwgLi4uKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvY2VwaC9jZXBoX2RlYnVnLmgtNjEtXHRwcl93YXJuX29uY2UoXCYjMzQ7WyVwVSAlbGx1XTogXCYjMzQ7IGZtdCwgXHUwMDI2Y2xpZW50LVx1MDAzZWZzaWQsXHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oPTQwNz1zdHJ1Y3QgcGlfZW50cnkge1xuLS1cbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjY3LVx0cHJpbnRrX29uY2UoS0VSTl9FUlIgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oOjY2ODojZGVmaW5lIHByX3dhcm5fb25jZShmbXQsIC4uLilcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjY5LVx0cHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuaD00MTc9ZXh0ZXJuIHUzMiBzdHJpbmdfdG9fYXZfcGVybShzdHJ1Y3QgcG9saWN5ZGIgKnAsIHUxNiB0Y2xhc3MsIGNvbnN0IGNoYXIgKm5hbWUpO1xuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5oLTQxOC1cbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuaDo0MTk6I2RlZmluZSBwcl93YXJuX29uY2VfcG9saWN5bG9hZChwb2xpY3ksIGZtdCwgLi4uKSAgICBcXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5oLTQyMC1cdGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9jdXN0b20uaD0xMj1leHRlcm4gdW5zaWduZWQgbG9uZyBkYWNfbW1hcF9taW5fYWRkcjtcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2N1c3RvbS5oLTIzLSAqL1xudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9jdXN0b20uaDoyNDojZGVmaW5lIHByX3dhcm5fb25jZSBwcl9lcnJcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvY3VzdG9tLmgtMjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNjkyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBCdWcgRGlzY292ZXJ5OiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBoZWFkIGFzIEkgYW5hbHl6ZSB0aGlzOiBJJiMzOTttIHN0YXJpbmcgYXQgdGhpcyBgcHJfd2Fybl9vbmNlKDEsICYjMzQ7Q1BBIGRldGVjdGVkLi4uJiMzNDspYCBhbmQgc29tZXRoaW5nIGluc3RhbnRseSBzY3JlYW1zICYjMzQ7d3JvbmchJiMzNDsgVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBjbGVhcmx5IGluZGljYXRlcyB0aGUgZmlyc3QgcGFyYW1ldGVyIHNob3VsZCBiZSB0aGUgZm9ybWF0IHN0cmluZywgbm90IGEgbnVtZXJpY2FsIHZhbHVlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXYWl0LCBgcHJfd2Fybl9vbmNlKGZtdCwgLi4uKWAgdGFrZXMgYGZtdGAgZmlyc3QhJiMzNDssIHRoZW4gSSBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIGBXQVJOX09OQ0UoY29uZGl0aW9uLCBmbXQsIC4uLilgIHdoaWNoIHRha2VzIHRoZSAqY29uZGl0aW9uKiBmaXJzdC4gSXQmIzM5O3MgbGlrZSBkZWphIHZ1LgoKSW4gdGhpcyBzcGVjaWZpYyBwYXRjaCwgaXQmIzM5O3MgY2FsbGluZyBgcHJfd2Fybl9vbmNlKDEsICYjMzQ7Q1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLSZndDsgLi4uJiMzNDssIC4uLilgIGFuZCB0aGUgZmlyc3QgYXJndW1lbnQgKmlzKiBqdXN0IHRoZSBudW1iZXIgYDFgIHdoaWNoIGlzIGJlaW5nIGludGVycHJldGVkIGFzIGEgcG9pbnRlciwgc3BlY2lmaWNhbGx5IGAoY29uc3QgY2hhciAqKTFgLCBvciwgZXNzZW50aWFsbHksIE5VTEwgcGx1cyBvbmUhIFRoaXMgaXMgd2hlbiB0aGUgYWxhcm0gYmVsbHMgZ28gb2ZmLgoKV2hlbiBgcHJfd2Fybl9vbmNlKDEsIC4uLilgIGlzIGludm9rZWQsIGBmbXRgIGlzIGJlaW5nIHNldCB0byBgKGNoYXIgKikxYC4gVGhhdCBtZWFucywgdWx0aW1hdGVseSwgd2UmIzM5O3JlIHRyeWluZyB0byBkZXJlZmVyZW5jZSB0aGUgYWRkcmVzcyBgMHgwMDAwMDAwMWAhIFRoaXMgaXMgZ29pbmcgdG8gY2F1c2UgYSBrZXJuZWwgb29wcywgYSBwYWdlIGZhdWx0LCBiZWNhdXNlIGl0JiMzOTtzIGFjY2Vzc2luZyBhbiBpbnZhbGlkIG1lbW9yeSBsb2NhdGlvbiEgSE9MWSBDT1csIHRoYXQmIzM5O3MgYSBzZXJpb3VzIGJ1ZyEgVGhlIGF1dGhvciBhcHBlYXJzIHRvIGhhdmUgY29waWVkIGBXQVJOX09OQ0UoMSwgJiMzNDsuLi4mIzM0OylgIGFuZCBzaW1wbHkgY2hhbmdlZCBgV0FSTl9PTkNFYCB0byBgcHJfd2Fybl9vbmNlYCwgd2l0aG91dCByZW1vdmluZyB0aGUgY29uZGl0aW9uYWwgYDFgISBUaGV5JiMzOTtyZSBwYXNzaW5nIGAxYCBhcyBhIGZvcm1hdCBzdHJpbmcgd2hlbiBpdCBzaG91bGQgYmUgYCYjMzQ7Q1BBIGRldGVjdGVkLi4uJiMzNDtgLgoKRXNzZW50aWFsbHksIGlmIGAha2VybmVsX3NldF90b19yZWFkb25seWAgYW5kIGB2ZXJpZnlfcnd4YCBkZXRlY3RzIGEgV15YIHZpb2xhdGlvbiwgY2FsbGluZyBgcHJfd2Fybl9vbmNlKDEsIC4uLilgIHBhc3NlcyBpbnRlZ2VyIDEgYXMgcG9pbnRlciB0byBmb3JtYXQgc3RyaW5nIGludG8gYHByaW50a19vbmNlYCAtJmd0OyBgdnByaW50a19zdG9yZWAgLSZndDsgcGFnZSBmYXVsdCEgVGhpcyBpcyBnb2luZyB0byBjcmFzaCB0aGUga2VybmVsIGluIHRoZSB3b3JzdCB3YXkuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHJlYWNoYWJsZSB0aGlzIGFjdHVhbGx5IGlzLiBXaGVuIGRvZXMgYHZlcmlmeV9yd3hgIGdldCBjYWxsZWQgd2hlbiBgIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgPyBUaGUgcG9zc2liaWxpdGllcyBJIGNhbiBzZWUgYXJlOgoKMS4gIEVhcmx5IGJvb3QgYmVmb3JlIGBtYXJrX3JvZGF0YV9ybygpYCBpcyBjYWxsZWQuCjIuICBXaGVuIGJvb3Rpbmcgd2l0aCBgcm9kYXRhPW9mZmAgb3IgaWYgYENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWGAgaXMgZGlzYWJsZWQuIEluIHRoYXQgY2FzZSwgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIHdvdWxkIHJlbWFpbiAwLgoKSWYgYHJvZGF0YT1vZmZgLCBga2VybmVsX3NldF90b19yZWFkb25seWAgc3RheXMgMCBmb3IgdGhlIGVudGlyZSBsaWZldGltZSBvZiB0aGUgc3lzdGVtIQoKQXQgcnVudGltZSwgYW55IEJQRiBwcm9ncmFtIGxvYWQsIG1vZHVsZSBsb2FkLCBmdHJhY2UgdHJhbXBvbGluZSBjcmVhdGlvbiwga3Byb2JlLCBvciBhbnkgdXNlci10cmlnZ2VyZWQgc3lzY2FsbCB0aGF0IGNoYW5nZXMgcGFnZSBwZXJtaXNzaW9ucyBjYW4gY2FsbCBgdmVyaWZ5X3J3eCgpYC4gSWYgYSBXXlggY2hhbmdlIGlzIGRldGVjdGVkIGJ5IGB2ZXJpZnlfcnd4KClgIChlLmcuIHNldHRpbmcgUlcgb24gYW4gZXhlY3V0YWJsZSBwYWdlIG9yIFggb24gYSB3cml0YWJsZSBwYWdlKSwgYCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBpcyB0cnVlIGFuZCBpdCBleGVjdXRlcyBgcHJfd2Fybl9vbmNlKDEsIC4uLilgIHdoaWNoIGNyYXNoZXMgdGhlIGtlcm5lbCBiZWNhdXNlIHRoZSBmb3JtYXQgc3RyaW5nIGlzIHJlYWxseSBgKGNoYXIgKikweDFgIQoKTGV0IG1lIG1ha2Ugc3VyZSB0aGlzIGNoZWNrcyBvdXQuIFdoYXQgZG9lcyBgcHJfd2Fybl9vbmNlYCBhY3R1YWxseSBleHBhbmQgdG8/IEkgbmVlZCB0byBjaGVjayBgaW5jbHVkZS9saW51eC9wcmludGsuaGA6CgpgYGBjCiNkZWZpbmUgcHJfd2Fybl9vbmNlKGZtdCwgLi4uKQkJCQkJXAoJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQpgYGAKCldhaXQsIGBwcl9mbXQoMSlgIGJlY29tZXMgYDFgLiBUaGVuIGBwcmludGtfb25jZShLRVJOX1dBUk5JTkcgMSwgLi4uKWAuLi4gZG9lcyB0aGlzIGV2ZW4gY29tcGlsZT8gYEtFUk5fV0FSTklOR2AgYmVjb21lcyBgJiMzNDtcMDAxJiMzNDsgJiMzNDs0JiMzNDtgIHdoaWNoIGNvbXBpbGVzIGFzIHN0cmluZyBjb25jYXRlbmF0aW9uLiBCdXQgYEtFUk5fV0FSTklORyAxYCBhdHRlbXB0cyB0byBjb25jYXRlbmF0ZSBzdHJpbmcgd2l0aCBpbnRlZ2VyLCB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IhIFdoeSBkaWQgaXQgY29tcGlsZT8gSSBuZWVkIHRvIGV4YW1pbmUgaG93IGBwcl9mbXRgIGlzIGRlZmluZWQuIEkgc2hvdWxkIGxvb2sgaW4gYHNldF9tZW1vcnkuY2Agb3IgY2hlY2sgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ByX2ZtdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQ0NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvbnN0cnVjdGluZyB0aGUgV2FybmluZyBNZXNzYWdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgd2FybmluZyBpcyBvcmlnaW5hdGluZywgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUuIEZpcnN0LCBJJiMzOTttIGNoZWNraW5nIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgdGhpbmtpbmcgdGhhdCYjMzk7cyBhIGxpa2VseSBzcG90IGZvciBtZW1vcnktcmVsYXRlZCB3YXJuaW5ncy4gQW5kLCBub3BlLCBubyBgcHJfZm10KGZtdClgIG1hY3JvIGRlZmluZWQgdGhlcmUuIFJpZ2h0LCBzbywgaW4gKnRoaXMqIGNvbnRleHQsIGBwcl9mbXQoZm10KWAgaXMganVzdCByZXNvbHZpbmcgdG8gYGZtdGAuIFNpbXBsZSBlbm91Z2guCgpUaGVuIEkgc2VlIGBwcl93YXJuX29uY2UoMSwgLi4uKWAuIEV4cGFuZGluZyB0aGF0LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBtYWNyb3Mgd29yaywgbGVhZHMgbWUgdG8gYHByaW50a19vbmNlKEtFUk5fV0FSTklORyAxLCAuLi4pYC4gQWgsIGBwcmludGtfb25jZWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gV2hlcmUgaXMgKnRoYXQqIGRlZmluZWQ/IEkgbmVlZCB0byBjaGVjayBgaW5jbHVkZS9saW51eC9wcmludGsuaGAuIEdvdHRhIHNlZSB0aGUgZXhhY3QgZGVmaW5pdGlvbiBvZiBgcHJpbnRrX29uY2VgIHRvIGZ1bGx5IGdyYXNwIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8ga25vdyBob3cgdGhlICYjMzQ7b25jZSYjMzQ7IGFzcGVjdCBpcyBpbXBsZW1lbnRlZCB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvZiB0aGUgd2FybmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBwcmludGtfb25jZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3ByaW50ay5oPTQwNz1zdHJ1Y3QgcGlfZW50cnkge1xuLS1cbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjQ4LSNpZmRlZiBDT05GSUdfUFJJTlRLXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oOjY0OTojZGVmaW5lIHByaW50a19vbmNlKGZtdCwgLi4uKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wcmludGsuaC02NTAtXHRET19PTkNFX0xJVEUocHJpbnRrLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxuaW5jbHVkZS9saW51eC9wcmludGsuaC02NTMtI2Vsc2VcbmluY2x1ZGUvbGludXgvcHJpbnRrLmg6NjU0OiNkZWZpbmUgcHJpbnRrX29uY2UoZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY1NS1cdG5vX3ByaW50ayhmbXQsICMjX19WQV9BUkdTX18pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyOTc1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgTG9nZ2luZyBJc3N1ZSoqCgpBbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjaGVjayBvdXQgdGhpcyBgRE9fT05DRV9MSVRFYCBtYWNyby4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGggYHByaW50a2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZyBpbXBvcnRhbnQuIGBET19PTkNFX0xJVEUocHJpbnRrLCBLRVJOX1dBUk5JTkcgMSwgLi4uKWAuLi53YWl0IGEgc2Vjb25kLiBUaGF0IGBLRVJOX1dBUk5JTkcgMWAgbG9va3Mgd3JvbmcuIEluIHN0YW5kYXJkIEMgc3ludGF4LCB0aGF0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYSBzeW50YXggZXJyb3IgdW5sZXNzIHNvbWV0aGluZyBmdW5reSBpcyBoYXBwZW5pbmcgd2l0aCBob3cgYEtFUk5fV0FSTklOR2AgaXMgZGVmaW5lZC4gU29tZXRoaW5nIGlzIG1ha2luZyBtZSB0aGluayB0aGF0IGl0IGlzIG5vdCBiZWluZyBwcm9wZXJseSBwcmVmaXhlZC4KCk9rYXksIGxldCYjMzk7cyBwYXVzZSBhbmQgaW52ZXN0aWdhdGUgYEtFUk5fV0FSTklOR2AgdG8gc2VlIHdoYXQgaXMgZ29pbmcgb24uIEkga25vdyB0aGlzIGlzIGdvaW5nIHRvIGJlIGluIGFuIGluY2x1ZGUgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgaW5jbHVkZS9saW51eC9rZXJuX2xldmVscy5oYCB0byBzZWUgZXhhY3RseSBob3cgdGhhdCBpcyBkZWZpbmVkIGFuZCB3aGF0IGl0IGlzIG1lYW50IHRvIHJlcHJlc2VudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S0VSTl9XQVJOSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rZXJuX2xldmVscy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2Vybl9sZXZlbHMuaC0xMS0jZGVmaW5lIEtFUk5fRVJSXHRLRVJOX1NPSCBcJiMzNDszXCYjMzQ7XHQvKiBlcnJvciBjb25kaXRpb25zICovXG5pbmNsdWRlL2xpbnV4L2tlcm5fbGV2ZWxzLmg6MTI6I2RlZmluZSBLRVJOX1dBUk5JTkdcdEtFUk5fU09IIFwmIzM0OzRcJiMzNDtcdC8qIHdhcm5pbmcgY29uZGl0aW9ucyAqL1xuaW5jbHVkZS9saW51eC9rZXJuX2xldmVscy5oLTEzLSNkZWZpbmUgS0VSTl9OT1RJQ0VcdEtFUk5fU09IIFwmIzM0OzVcJiMzNDtcdC8qIG5vcm1hbCBidXQgc2lnbmlmaWNhbnQgY29uZGl0aW9uICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDA3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyBgS0VSTl9XQVJOSU5HYCBpcyBkZWZpbmVkIGFzIGAmIzM0O1wwMDEmIzM0OyAmIzM0OzQmIzM0O2AuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcmVkIGZsYWcuIGBLRVJOX1dBUk5JTkcgMWAgZXhwYW5kcyB0byBgJiMzNDtcMDAxJiMzNDsgJiMzNDs0JiMzNDsgMWAsIHdoaWNoIGlzIG9idmlvdXNseSBhIEMgY29tcGlsZXIgc3ludGF4IGVycm9yLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgc3VzcGljaW9uIOKAkyB0aGUgcGF0Y2ggYXV0aG9yIGVpdGhlciBkaWRuJiMzOTt0IHRlc3QgdGhpcyBwcm9wZXJseSwgb3IgYSBidWcgd2FzIGludHJvZHVjZWQhIFRoaXMgaXMgYSBnb29kIHNpZ24sIGFuZCBpdCBtZWFucyB3ZSBuZWVkIHRvIGRpZyBkZWVwZXIuCgpUaGUgY2hhbmdlcyBhcmUgd2l0aGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgd2hpY2gsIGFzIEkga25vdywgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtIChDaGFuZ2UgUGFnZSBBdHRyaWJ1dGVzLCBvciBDUEEpLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBicmVhayBpdCBkb3duOgoKMS4gICoqQ29yZSBTdWJzeXN0ZW06KiogYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGlzIGRlZmluaXRlbHkgYSBjb3JlIHN1YnN5c3RlbSwgZGVhbGluZyBkaXJlY3RseSB3aXRoIHg4NiBtZW1vcnkgbWFuYWdlbWVudC4gQ2hlY2suCjIuICAqKlJlYWNoYWJsZToqKiBZZXMsIENQQSBpcyByZWFjaGFibGUgdGhyb3VnaCBhIG11bHRpdHVkZSBvZiBzeXNjYWxscyBhbmQga2VybmVsIG9wZXJhdGlvbnMgb24gYW1kNjQgc3lzdGVtcy4gVGhpbmdzIGxpa2UgQlBGIEpJVCwgbW9kdWxlIGxvYWRpbmcvdW5sb2FkaW5nLCB0cmFjZXBvaW50cy9rcHJvYmVzLCBhbmQgdGhlIGBzZXRfbWVtb3J5XypgIGNhbGxlcnMsIGFsbCBjYW4gcG90ZW50aWFsbHkgdHJpZ2dlciBpc3N1ZXMuIENoZWNrLgozLiAgKipEZWZlbnNpdmUgQ2hlY2tzOioqIFRoZSBwYXRjaCBtb2RpZmllcyBkZWZlbnNpdmUgY2hlY2tzIGFuZCBXXlggdmlvbGF0aW9uIHZlcmlmaWNhdGlvbiBsb2dpYyBpbiBgdmVyaWZ5X3J3eCgpYC4gQ2hlY2suCgpDb25zaWRlcmluZyB0aGUgY3JpdGVyaWEgZnJvbSB0aGUgaW5zdHJ1Y3Rpb25zIChTZWN0aW9uIDMpLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgYSBzdHJvbmcgY2FuZGlkYXRlOgoqICAgTWVtb3J5IG1hbmFnZW1lbnQgbW9kaWZpY2F0aW9ucyBhcmUgYSBnby4KKiAgIFRoZSBtb2RpZmljYXRpb24gaXMgYWx0ZXJpbmcgZGVmZW5zaXZlIGNoZWNrcyBpbiByZWFjaGFibGUgcGF0aHMuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRpdmVseSBgdHJ1ZWAuCgpOb3cgbGV0JiMzOTtzIGRldGVybWluZSB0aGUgRm9jdXNTeW1ib2xzLgoKSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIHN5bWJvbHMgdG8gZm9jdXMgb24gZHVyaW5nIGZ1enppbmcuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBmdW5jdGlvbnMgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIHRoYXQgYXJlIGNhbGxlZCBvciBpbnZvbHZlZC4gSXQgc2VlbXMgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGlzIHRoZSByaWdodCBwbGFjZSB0byBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHNldF9tZW1vcnlfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxOTQ9aW50IF9zZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIwNi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjIwNzppbnQgc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIwOC17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjMyPWludCBfc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNDctXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyNDg6aW50IHNldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNDkte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjI3MT1pbnQgX3NldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjc3LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjc4OmludCBzZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjc5LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzMjk9RVhQT1JUX1NZTUJPTF9HUEwoY2xlYXJfbWNlX25vc3BlYyk7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzMxLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzMyOmludCBzZXRfbWVtb3J5X3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzMte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzOS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM0MDppbnQgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0MS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzQ3LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQ4OmludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzQ5LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNTItXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNTM6aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzU0LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjMtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNjQ6aW50IHNldF9tZW1vcnlfcncodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjUte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2OC1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2OTppbnQgc2V0X21lbW9yeV9ucCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3MC17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzczLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzc0OmludCBzZXRfbWVtb3J5X25wX25vYWxpYXModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNzUte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4MC1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM4MTppbnQgc2V0X21lbW9yeV9wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzgyLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODUtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzODY6aW50IHNldF9tZW1vcnlfNGsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODcte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5Mi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM5MzppbnQgc2V0X21lbW9yeV9ub25nbG9iYWwodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTQte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5OC1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM5OTppbnQgc2V0X21lbW9yeV9nbG9iYWwodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDAte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjQ5NT1zdGF0aWMgaW50IF9fc2V0X21lbW9yeV9lbmNfZGVjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLCBib29sIGVuYylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MTAtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MTE6aW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTEyLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1MTU9RVhQT1JUX1NZTUJPTF9HUEwoc2V0X21lbW9yeV9lbmNyeXB0ZWQpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTE2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTE3OmludCBzZXRfbWVtb3J5X2RlY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUxOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTA3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsIFNpdGVzIG9mIGB2ZXJpZnlfcnd4YCoqCgpPa2F5LCBzbyBgdmVyaWZ5X3J3eGAgaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLCB3aGljaCBpcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gIEkgaW1tZWRpYXRlbHkgbm90ZSBpdCYjMzk7cyBkZWZpbmVkIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2Ugd2l0aGluIHRoYXQgZmlsZS4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBpbmxpbmUgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IGNhbGxlZCBhIGZldyB0aW1lcyBpbiBzdHJhdGVnaWNhbGx5IHBsYWNlZCBzcG90cy4gTXkgaW1tZWRpYXRlIHByaW9yaXR5IGlzIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHZlcmlmeV9yd3hgIGdldHMgaW52b2tlZC4gVGhhdCB3aWxsIGluZm9ybSBpdHMgcHVycG9zZS4gSSYjMzk7bGwgZm9jdXMgbXkgc2VhcmNoIG9uIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIG51bWJlcnMgMTA2NyBhbmQgMTg4Mi4gSSBleHBlY3QgdG8gc2VlIHRoZSBjYWxscyB0aGVyZSwgd2hpY2ggc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIHJvbGUgb2YgYHZlcmlmeV9yd3hgIGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2MDpcdFx0LypcbjEwNjE6XHRcdCAqIENoZWNrIHdoZXRoZXIgdGhlIHJlcXVlc3RlZCBwZ3Byb3QgaXMgY29uZmxpY3Rpbmcgd2l0aCBhIHN0YXRpY1xuMTA2MjpcdFx0ICogcHJvdGVjdGlvbiByZXF1aXJlbWVudCBpbiB0aGUgbGFyZ2UgcGFnZS5cbjEwNjM6XHRcdCAqL1xuMTA2NDpcdFx0bmV3X3Byb3QgPSBzdGF0aWNfcHJvdGVjdGlvbnMocmVxX3Byb3QsIGxwYWRkciwgb2xkX3BmbiwgbnVtcGFnZXMsXG4xMDY1Olx0XHRcdFx0XHQgICAgICBwc2l6ZSwgQ1BBX0RFVEVDVCk7XG4xMDY2Olx0XG4xMDY3Olx0XHRuZXdfcHJvdCA9IHZlcmlmeV9yd3gob2xkX3Byb3QsIG5ld19wcm90LCBscGFkZHIsIG9sZF9wZm4sIG51bXBhZ2VzLFxuMTA2ODpcdFx0XHRcdCAgICAgIG54LCBydyk7XG4xMDY5Olx0XG4xMDcwOlx0XHQvKlxuMTA3MTpcdFx0ICogSWYgdGhlcmUgaXMgYSBjb25mbGljdCwgc3BsaXQgdGhlIGxhcmdlIHBhZ2UuXG4xMDcyOlx0XHQgKlxuMTA3MzpcdFx0ICogVGhlcmUgdXNlZCB0byBiZSBhIDRrIHdpc2UgZXZhbHVhdGlvbiB0cnlpbmcgcmVhbGx5IGhhcmQgdG9cbjEwNzQ6XHRcdCAqIHByZXNlcnZlIHRoZSBsYXJnZSBwYWdlcywgYnV0IGV4cGVyaW1lbnRhdGlvbiBoYXMgc2hvd24sIHRoYXQgdGhpc1xuMTA3NTpcdFx0ICogZG9lcyBub3QgaGVscCBhdCBhbGwuIFRoZXJlIG1pZ2h0IGJlIGNvcm5lciBjYXNlcyB3aGljaCB3b3VsZFxuMTA3NjpcdFx0ICogcHJlc2VydmUgb25lIGxhcmdlIHBhZ2Ugb2NjYXNpb25hbGx5LCBidXQgaXQmIzM5O3MgcmVhbGx5IG5vdCB3b3J0aCB0aGVcbjEwNzc6XHRcdCAqIGV4dHJhIGNvZGUgYW5kIGN5Y2xlcyBmb3IgdGhlIGNvbW1vbiBjYXNlLlxuMTA3ODpcdFx0ICovXG4xMDc5Olx0XHRpZiAocGdwcm90X3ZhbChyZXFfcHJvdCkgIT0gcGdwcm90X3ZhbChuZXdfcHJvdCkpXG4xMDgwOlx0XHRcdHJldHVybiAxO1xuMTA4MTpcdFxuMTA4MjpcdFx0LyogQWxsIGNoZWNrcyBwYXNzZWQuIFVwZGF0ZSB0aGUgbGFyZ2UgcGFnZSBtYXBwaW5nLiAqL1xuMTA4MzpcdFx0bmV3X3B0ZSA9IHBmbl9wdGUob2xkX3BmbiwgbmV3X3Byb3QpO1xuMTA4NDpcdFx0X19zZXRfcG1kX3B0ZShrcHRlLCBhZGRyZXNzLCBuZXdfcHRlKTtcbjEwODU6XHRcdGNwYS1cdTAwM2VmbGFncyB8PSBDUEFfRkxVU0hUTEI7XG4xMDg2Olx0XHRjcGFfaW5jX2xwX3ByZXNlcnZlZChsZXZlbCk7XG4xMDg3Olx0XHRyZXR1cm4gMDtcbjEwODg6XHR9XG4xMDg5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzM0CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gTWVtb3J5IEF0dHJpYnV0ZSBUYWJsZSAoUEFUKSBCZWhhdmlvcioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBzaGVuYW5pZ2FucywgYW5kIHRoZSBQQVQgaXMgcHJvYmFibHkgaW52b2x2ZWQuIE15IGluaXRpYWwgaHVuY2ggaXMgdG8gdGFrZSBhIGxvb2sgYXQgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCBzcGVjaWZpY2FsbHkgbGluZSAxODgyLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBzZXQgbWVtb3J5IG9wZXJhdGlvbiByZWxhdGVkIHRvIHRoZSBQQVQgdGhhdCBJIHdhbnQgdG8gaW52ZXN0aWdhdGUsIGxpa2VseSBpbnZvbHZpbmcgaG93IG1lbW9yeSBhdHRyaWJ1dGVzIGFyZSBiZWluZyBzZXQuIEdpdmVuIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBQQVQgYW5kIGl0cyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UgYW5kIGNhY2hpbmcsIHNvbWV0aGluZyBvbiB0aGlzIGxpbmUgd2lsbCBwcm9iYWJseSBnaXZlIHNvbWUgZ29vZCBjbHVlcyBvbiB3aGF0IG5lZWRzIGxvb2tpbmcgYXQuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB1cGRhdGluZyB0aGUgTVRSUiBvciBQQVQgZW50cmllcy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gY2hlY2tpbmcgdGhpcyBwYXJ0aWN1bGFyIHNwb3QgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODcwOlx0XHRcdHBncHJvdF90IG9sZF9wcm90ID0gcHRlX3BncHJvdChvbGRfcHRlKTtcbjE4NzE6XHRcdFx0cGdwcm90X3QgbmV3X3Byb3QgPSBwdGVfcGdwcm90KG9sZF9wdGUpO1xuMTg3MjpcdFx0XHR1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ob2xkX3B0ZSk7XG4xODczOlx0XG4xODc0Olx0XHRcdHBncHJvdF92YWwobmV3X3Byb3QpIFx1MDAyNj0gfnBncHJvdF92YWwoY3BhLVx1MDAzZW1hc2tfY2xyKTtcbjE4NzU6XHRcdFx0cGdwcm90X3ZhbChuZXdfcHJvdCkgfD0gcGdwcm90X3ZhbChjcGEtXHUwMDNlbWFza19zZXQpO1xuMTg3NjpcdFxuMTg3NzpcdFx0XHRjcGFfaW5jXzRrX2luc3RhbGwoKTtcbjE4Nzg6XHRcdFx0LyogSGFuZCBpbiBscHNpemUgPSAwIHRvIGVuZm9yY2UgdGhlIHByb3RlY3Rpb24gbWVjaGFuaXNtICovXG4xODc5Olx0XHRcdG5ld19wcm90ID0gc3RhdGljX3Byb3RlY3Rpb25zKG5ld19wcm90LCBhZGRyZXNzLCBwZm4sIDEsIDAsXG4xODgwOlx0XHRcdFx0XHRcdCAgICAgIENQQV9QUk9URUNUKTtcbjE4ODE6XHRcbjE4ODI6XHRcdFx0bmV3X3Byb3QgPSB2ZXJpZnlfcnd4KG9sZF9wcm90LCBuZXdfcHJvdCwgYWRkcmVzcywgcGZuLCAxLFxuMTg4MzpcdFx0XHRcdFx0ICAgICAgbngsIHJ3KTtcbjE4ODQ6XHRcbjE4ODU6XHRcdFx0bmV3X3Byb3QgPSBwZ3Byb3RfY2xlYXJfcHJvdG5vbmVfYml0cyhuZXdfcHJvdCk7XG4xODg2Olx0XG4xODg3Olx0XHRcdC8qXG4xODg4Olx0XHRcdCAqIFdlIG5lZWQgdG8ga2VlcCB0aGUgcGZuIGZyb20gdGhlIGV4aXN0aW5nIFBURSxcbjE4ODk6XHRcdFx0ICogYWZ0ZXIgYWxsIHdlJiMzOTtyZSBvbmx5IGdvaW5nIHRvIGNoYW5nZSBpdHMgYXR0cmlidXRlc1xuMTg5MDpcdFx0XHQgKiBub3QgdGhlIG1lbW9yeSBpdCBwb2ludHMgdG9cbjE4OTE6XHRcdFx0ICovXG4xODkyOlx0XHRcdG5ld19wdGUgPSBwZm5fcHRlKHBmbiwgbmV3X3Byb3QpO1xuMTg5MzpcdFx0XHRjcGEtXHUwMDNlcGZuID0gcGZuO1xuMTg5NDpcdFx0XHQvKlxuMTg5NTpcdFx0XHQgKiBEbyB3ZSByZWFsbHkgY2hhbmdlIGFueXRoaW5nID9cbjE4OTY6XHRcdFx0ICovXG4xODk3Olx0XHRcdGlmIChwdGVfdmFsKG9sZF9wdGUpICE9IHB0ZV92YWwobmV3X3B0ZSkpIHtcbjE4OTg6XHRcdFx0XHRzZXRfcHRlX2F0b21pYyhrcHRlLCBuZXdfcHRlKTtcbjE4OTk6XHRcdFx0XHRjcGEtXHUwMDNlZmxhZ3MgfD0gQ1BBX0ZMVVNIVExCO1xuMTkwMDpcdFx0XHR9XG4xOTAxOlx0XHRcdGNwYS1cdTAwM2VudW1wYWdlcyA9IDE7XG4xOTAyOlx0XHRcdHJldHVybiAwO1xuMTkwMzpcdFx0fVxuMTkwNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU3OAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gdGhlIFBhZ2UgQXR0cmlidXRlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gYHZlcmlmeV9yd3goKWAgcG9wcyB1cCBpbiB0d28ga2V5IHBsYWNlczogYF9fc2hvdWxkX3NwbGl0X2xhcmdlX3BhZ2VgIGFuZCBgX19jaGFuZ2VfcGFnZV9hdHRyYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVycGxheSBoZXJlLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZ3VhcmRpbmcgYWdhaW5zdCBzb21ldGhpbmcsIGxpa2VseSBhIGJhZCBwYWdlIHN0YXRlLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyAqdHJpZ2dlcmluZyogYF9fY2hhbmdlX3BhZ2VfYXR0cmAuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IHNlZW1zIHRvIGJlIHRoZSBwbGFjZSB3aGVyZSBwZXJtaXNzaW9ucyBhcmUgYWN0dWFsbHkgZ2V0dGluZyBtb2RpZmllZC4gSSBzaG91bGQgZXhhbWluZSB0aGUgY2FsbCBncmFwaCB0byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgYWxsIG9mIHRoZSB1c2UgY2FzZXMuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBleHBvc2UgdGhlIGNvbnRleHRzIGluIHdoaWNoIHRoZXNlIGF0dHJpYnV0ZXMgYXJlIGJlaW5nIGNoYW5nZWQsIGFuZCB0aGVyZWZvcmUsIHBvdGVudGlhbGx5IHdoZXJlIGB2ZXJpZnlfcnd4KClgIGlzIHByb3RlY3Rpbmcgc29tZXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2NoYW5nZV9wYWdlX2F0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MTgwNT1zdGF0aWMgaW50IF9fY3BhX3Byb2Nlc3NfZmF1bHQoc3RydWN0IGNwYV9kYXRhICpjcGEsIHVuc2lnbmVkIGxvbmcgdmFkZHIsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODQ5LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxODUwOnN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgcHJpbWFyeSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTg1MS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xOTI3LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxOTI4OnN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTkyOS1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE5MzM9c3RhdGljIGludCBjcGFfcHJvY2Vzc19hbGlhcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5NjMtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjE5NjQ6XHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmFsaWFzX2NwYSwgMCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5NjUtXHRcdGlmIChyZXQpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xOTk3LVx0XHQgKi9cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTk5ODpcdFx0X19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2YWxpYXNfY3BhLCAwKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTk5OS1cdH1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMDQtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIwMDU6c3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMDYte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjA1My1cdFx0XHRndWFyZChzcGlubG9jaykoXHUwMDI2Y3BhX2xvY2spO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDU0Olx0XHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cihjcGEsIHByaW1hcnkpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMDU1LVx0XHR9IGVsc2Uge1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDU2Olx0XHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cihjcGEsIHByaW1hcnkpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMDU3LVx0XHR9XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMDgzPXN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxMzgtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIxMzk6XHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZjcGEsIDEpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTQwLVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjQwOT1zdGF0aWMgaW50IF9fc2V0X21lbW9yeV9lbmNfcGd0YWJsZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgYm9vbCBlbmMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDM4LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDM5Olx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQ0MC1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI2MzY9c3RhdGljIGludCBfX3NldF9wYWdlc19wKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsIHVuc2lnbmVkIGludCBjcGFfZmxhZ3MpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjUxLVx0ICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2NTI6XHRyZXR1cm4gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY1My19XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjU1PXN0YXRpYyBpbnQgX19zZXRfcGFnZXNfbnAoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgdW5zaWduZWQgaW50IGNwYV9mbGFncylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NzAtXHQgKi9cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjY3MTpcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZjcGEsIDEpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjcyLX1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI3NDY9aW50IF9faW5pdCBrZXJuZWxfbWFwX3BhZ2VzX2luX3BnZChwZ2RfdCAqcGdkLCB1NjQgcGZuLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNzcwLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNzcxOlx0cmV0dmFsID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjc3Mi1cdF9fZmx1c2hfdGxiX2FsbCgpO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9Mjc4Mz1pbnQgX19pbml0IGtlcm5lbF91bm1hcF9wYWdlc19pbl9wZ2QocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjgwNS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjgwNjpcdHJldHZhbCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI4MDctXHRfX2ZsdXNoX3RsYl9hbGwoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk0MTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBzZXRfbWVtb3J5LmMgTW9kdWxlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYHZlcmlmeV9yd3hgLCBhbmQgSSBzZWUgaXQmIzM5O3MgYSBzdGF0aWMgaW5saW5lIHdpdGhpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIEdpdmVuIHRoYXQsIEkgd2FudCB0byBtYXAgb3V0IHRoZSByZWxldmFudCBzeW1ib2xzIHdpdGhpbiB0aGF0IGZpbGUgYW5kIGRldGVybWluZSB3aGljaCBvbmVzIGFyZSBleHBvcnRlZCAob3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMpIHRoYXQgY2FsbCBvciBpbmNsdWRlIGB2ZXJpZnlfcnd4YC4KClNvLCBmcm9tIHRoZSBsb29rcyBvZiBpdCB0aGUgcmVsZXZhbnQgc3ltYm9scyBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgYXJlOiBgX19jaGFuZ2VfcGFnZV9hdHRyYCwgYF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfbnhgLCBgc2V0X21lbW9yeV9yb3hgLCBgc2V0X21lbW9yeV91Y2AsIGBzZXRfbWVtb3J5X3djYCwgYHNldF9tZW1vcnlfd2JgLCBgc2V0X21lbW9yeV9ucGAsIGBzZXRfbWVtb3J5X3BgLCBgc2V0X21lbW9yeV80a2AsIGBzZXRfbWVtb3J5X2VuY3J5cHRlZGAsIGFuZCBgc2V0X21lbW9yeV9kZWNyeXB0ZWRgLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgdGhvc2UgYXJlIGFjdHVhbGx5IGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIG9yIGZ1bmN0aW9ucyB0aGF0IGluY2x1ZGUgYHZlcmlmeV9yd3hgLiBNeSBpbW1lZGlhdGUgY2FuZGlkYXRlcyBhcmU6IGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfbnhgLCBgc2V0X21lbW9yeV9yb3hgLCBgc2V0X21lbW9yeV91Y2AsIGBzZXRfbWVtb3J5X3diYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGFuZCBgX19jaGFuZ2VfcGFnZV9hdHRyYC4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIG90aGVyIHNldHRpbmdzIHRoYXQgaW1wYWN0IGl0cyBpbmNsdXNpb24gb3IgYmVoYXZpb3IuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBgYXJjaC94ODYvbW0vTWFrZWZpbGVgIG9yIGBhcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGVgIHRvIGRvIHRoaXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9tZW1vcnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9pbml0LmMtMTEtXG5hcmNoL3g4Ni9tbS9pbml0LmM6MTI6I2luY2x1ZGUgXHUwMDNjYXNtL3NldF9tZW1vcnkuaFx1MDAzZVxuYXJjaC94ODYvbW0vaW5pdC5jLTEzLSNpbmNsdWRlIFx1MDAzY2FzbS9jcHVfZGV2aWNlX2lkLmhcdTAwM2Vcbi0tXG5hcmNoL3g4Ni9tbS9pbml0LmM9ODk3PXZvaWQgZnJlZV9pbml0X3BhZ2VzKGNvbnN0IGNoYXIgKndoYXQsIHVuc2lnbmVkIGxvbmcgYmVnaW4sIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbmFyY2gveDg2L21tL2luaXQuYy05MjUtXHRcdGttZW1sZWFrX2ZyZWVfcGFydCgodm9pZCAqKWJlZ2luLCBlbmQgLSBiZWdpbik7XG5hcmNoL3g4Ni9tbS9pbml0LmM6OTI2Olx0XHRzZXRfbWVtb3J5X25wKGJlZ2luLCAoZW5kIC0gYmVnaW4pIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbmFyY2gveDg2L21tL2luaXQuYy05MjctXHR9IGVsc2Uge1xuLS1cbmFyY2gveDg2L21tL2luaXQuYy05MzItXHRcdCAqL1xuYXJjaC94ODYvbW0vaW5pdC5jOjkzMzpcdFx0c2V0X21lbW9yeV9ueChiZWdpbiwgKGVuZCAtIGJlZ2luKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5hcmNoL3g4Ni9tbS9pbml0LmM6OTM0Olx0XHRzZXRfbWVtb3J5X3J3KGJlZ2luLCAoZW5kIC0gYmVnaW4pIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbmFyY2gveDg2L21tL2luaXQuYy05MzUtXG4tLVxuYXJjaC94ODYvbW0vaW5pdC5jPTk0Nj12b2lkIGZyZWVfa2VybmVsX2ltYWdlX3BhZ2VzKGNvbnN0IGNoYXIgKndoYXQsIHZvaWQgKmJlZ2luLCB2b2lkICplbmQpXG4tLVxuYXJjaC94ODYvbW0vaW5pdC5jLTk2OS1cdGlmIChJU19FTkFCTEVEKENPTkZJR19YODZfNjQpIFx1MDAyNlx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1BUSSkpXG5hcmNoL3g4Ni9tbS9pbml0LmM6OTcwOlx0XHRzZXRfbWVtb3J5X25wX25vYWxpYXMoYmVnaW5fdWwsIGxlbl9wYWdlcyk7XG5hcmNoL3g4Ni9tbS9pbml0LmMtOTcxLX1cbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNDgtI2luY2x1ZGUgXHUwMDNjYXNtL3NldHVwLmhcdTAwM2VcbmFyY2gveDg2L21tL2luaXRfMzIuYzo0OTojaW5jbHVkZSBcdTAwM2Nhc20vc2V0X21lbW9yeS5oXHUwMDNlXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNTAtI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2VfdHlwZXMuaFx1MDAzZVxuLS1cbmFyY2gveDg2L21tL2luaXRfMzIuYz03MjM9c3RhdGljIHZvaWQgbWFya19ueGRhdGFfbngodm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzM2LVx0XHRwcmludGsoS0VSTl9JTkZPIFwmIzM0O05YLXByb3RlY3RpbmcgdGhlIGtlcm5lbCBkYXRhOiAlbHVrXFxuXCYjMzQ7LCBzaXplIFx1MDAzZVx1MDAzZSAxMCk7XG5hcmNoL3g4Ni9tbS9pbml0XzMyLmM6NzM3Olx0c2V0X21lbW9yeV9ueChzdGFydCwgc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzM4LX1cbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtNTEtI2luY2x1ZGUgXHUwMDNjYXNtL251bWEuaFx1MDAzZVxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjUyOiNpbmNsdWRlIFx1MDAzY2FzbS9zZXRfbWVtb3J5LmhcdTAwM2VcbmFyY2gveDg2L21tL2luaXRfNjQuYy01My0jaW5jbHVkZSBcdTAwM2Nhc20vaW5pdC5oXHUwMDNlXG4tLVxuYXJjaC94ODYvbW0vaW5pdF82NC5jPTEzNTk9dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzY5LVx0ICAgICAgIChlbmQgLSBzdGFydCkgXHUwMDNlXHUwMDNlIDEwKTtcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxMzcwOlx0c2V0X21lbW9yeV9ybyhzdGFydCwgKGVuZCAtIHN0YXJ0KSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM3MS1cbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM4Ni1cdGFsbF9lbmQgPSByb3VuZHVwKCh1bnNpZ25lZCBsb25nKV9icmtfZW5kLCBQTURfU0laRSk7XG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM4NzpcdHNldF9tZW1vcnlfbngodGV4dF9lbmQsIChhbGxfZW5kIC0gdGV4dF9lbmQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzg4LVxuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzkyLVx0cHJpbnRrKEtFUk5fSU5GTyBcJiMzNDtUZXN0aW5nIENQQTogdW5kbyAlbHgtJWx4XFxuXCYjMzQ7LCBzdGFydCwgZW5kKTtcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxMzkzOlx0c2V0X21lbW9yeV9ydyhzdGFydCwgKGVuZC1zdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzOTQtXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM5NS1cdHByaW50ayhLRVJOX0lORk8gXCYjMzQ7VGVzdGluZyBDUEE6IGFnYWluXFxuXCYjMzQ7KTtcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxMzk2Olx0c2V0X21lbW9yeV9ybyhzdGFydCwgKGVuZC1zdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzOTctI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTE0MTUtLyogQWRqdXN0YWJsZSBtZW1vcnkgYmxvY2sgc2l6ZSAqL1xuYXJjaC94ODYvbW0vaW5pdF82NC5jOjE0MTY6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2V0X21lbW9yeV9ibG9ja19zaXplO1xuYXJjaC94ODYvbW0vaW5pdF82NC5jOjE0MTc6aW50IF9faW5pdCBzZXRfbWVtb3J5X2Jsb2NrX3NpemVfb3JkZXIodW5zaWduZWQgaW50IG9yZGVyKVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTE0MTgte1xuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYy0xNDIzLVxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjE0MjQ6XHRzZXRfbWVtb3J5X2Jsb2NrX3NpemUgPSBzaXplO1xuYXJjaC94ODYvbW0vaW5pdF82NC5jLTE0MjUtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM9MTQyOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBwcm9iZV9tZW1vcnlfYmxvY2tfc2l6ZSh2b2lkKVxuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYy0xNDMzLVx0LyogSWYgbWVtb3J5IGJsb2NrIHNpemUgaGFzIGJlZW4gc2V0LCB0aGVuIHVzZSBpdCAqL1xuYXJjaC94ODYvbW0vaW5pdF82NC5jOjE0MzQ6XHRieiA9IHNldF9tZW1vcnlfYmxvY2tfc2l6ZTtcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xNDM1LVx0aWYgKGJ6KVxuLS1cbmFyY2gveDg2L21tL2lvcmVtYXAuYy0yMi1cbmFyY2gveDg2L21tL2lvcmVtYXAuYzoyMzojaW5jbHVkZSBcdTAwM2Nhc20vc2V0X21lbW9yeS5oXHUwMDNlXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtMjQtI2luY2x1ZGUgXHUwMDNjYXNtL2U4MjAvYXBpLmhcdTAwM2Vcbi0tXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM9NDU9aW50IGlvcmVtYXBfY2hhbmdlX2F0dHIodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBzaXplLFxuLS1cbmFyY2gveDg2L21tL2lvcmVtYXAuYy01My1cdGRlZmF1bHQ6XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NTQ6XHRcdGVyciA9IF9zZXRfbWVtb3J5X3VjKHZhZGRyLCBucnBhZ2VzKTtcbmFyY2gveDg2L21tL2lvcmVtYXAuYy01NS1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNTYtXHRjYXNlIF9QQUdFX0NBQ0hFX01PREVfV0M6XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NTc6XHRcdGVyciA9IF9zZXRfbWVtb3J5X3djKHZhZGRyLCBucnBhZ2VzKTtcbmFyY2gveDg2L21tL2lvcmVtYXAuYy01OC1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNTktXHRjYXNlIF9QQUdFX0NBQ0hFX01PREVfV1Q6XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NjA6XHRcdGVyciA9IF9zZXRfbWVtb3J5X3d0KHZhZGRyLCBucnBhZ2VzKTtcbmFyY2gveDg2L21tL2lvcmVtYXAuYy02MS1cdFx0YnJlYWs7XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNjItXHRjYXNlIF9QQUdFX0NBQ0hFX01PREVfV0I6XG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NjM6XHRcdGVyciA9IF9zZXRfbWVtb3J5X3diKHZhZGRyLCBucnBhZ2VzKTtcbmFyY2gveDg2L21tL2lvcmVtYXAuYy02NC1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMjYtI2luY2x1ZGUgXHUwMDNjYXNtL2Jvb3RwYXJhbS5oXHUwMDNlXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzoyNzojaW5jbHVkZSBcdTAwM2Nhc20vc2V0X21lbW9yeS5oXHUwMDNlXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0yOC0jaW5jbHVkZSBcdTAwM2Nhc20vY2FjaGVmbHVzaC5oXHUwMDNlXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM9NTc9c3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzbnBfbWVtY3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgc3osXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNjYtXHRcdCAqL1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM6Njc6XHRcdGVhcmx5X3NucF9zZXRfbWVtb3J5X3NoYXJlZCgodW5zaWduZWQgbG9uZylfX3ZhKHBhZGRyKSwgcGFkZHIsIG5wYWdlcyk7XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy02OC1cbi0tXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy03MS1cdFx0LyogUmVzdG9yZSB0aGUgcGFnZSBzdGF0ZSBhZnRlciB0aGUgbWVtY3B5LiAqL1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM6NzI6XHRcdGVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUoKHVuc2lnbmVkIGxvbmcpX192YShwYWRkciksIHBhZGRyLCBucGFnZXMpO1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNzMtXHR9IGVsc2Uge1xuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jPTI4Nj1zdGF0aWMgaW50IGFtZF9lbmNfc3RhdHVzX2NoYW5nZV9wcmVwYXJlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBucGFnZXMsIGJvb2wgZW5jKVxuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTI5Mi1cdGlmIChjY19wbGF0Zm9ybV9oYXMoQ0NfQVRUUl9HVUVTVF9TRVZfU05QKSBcdTAwMjZcdTAwMjYgIWVuYylcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjI5MzpcdFx0c25wX3NldF9tZW1vcnlfc2hhcmVkKHZhZGRyLCBucGFnZXMpO1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMjk0LVxuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jPTI5OT1zdGF0aWMgaW50IGFtZF9lbmNfc3RhdHVzX2NoYW5nZV9maW5pc2godW5zaWduZWQgbG9uZyB2YWRkciwgaW50IG5wYWdlcywgYm9vbCBlbmMpXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzA1LVx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NFVl9TTlApIFx1MDAyNlx1MDAyNiBlbmMpXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzozMDY6XHRcdHNucF9zZXRfbWVtb3J5X3ByaXZhdGUodmFkZHIsIG5wYWdlcyk7XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zMDctXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM9MzU4PXN0YXRpYyB2b2lkIF9faW5pdCBfX3NldF9jbHJfcHRlX2VuYyhwdGVfdCAqa3B0ZSwgaW50IGxldmVsLCBib29sIGVuYylcbi0tXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zNzgtXHRcdCAqL1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM6Mzc5Olx0XHRlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQoKHVuc2lnbmVkIGxvbmcpX192YShkLnBhKSwgZC5wYSwgMSk7XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zODAtXHR9XG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzg4LVx0aWYgKGVuYylcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjM4OTpcdFx0ZWFybHlfc25wX3NldF9tZW1vcnlfcHJpdmF0ZSgodW5zaWduZWQgbG9uZylfX3ZhKGQucGEpLCBkLnBhLCAxKTtcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTM5MC19XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zOTEtXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzozOTI6c3RhdGljIGludCBfX2luaXQgZWFybHlfc2V0X21lbW9yeV9lbmNfZGVjKHVuc2lnbmVkIGxvbmcgdmFkZHIsXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zOTMtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgYm9vbCBlbmMpXG4tLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNDYxLVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM6NDYyOmludCBfX2luaXQgZWFybHlfc2V0X21lbW9yeV9kZWNyeXB0ZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBzaXplKVxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNDYzLXtcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjQ2NDpcdHJldHVybiBlYXJseV9zZXRfbWVtb3J5X2VuY19kZWModmFkZHIsIHNpemUsIGZhbHNlKTtcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTQ2NS19XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy00NjYtXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzo0Njc6aW50IF9faW5pdCBlYXJseV9zZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy00Njgte1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM6NDY5Olx0cmV0dXJuIGVhcmx5X3NldF9tZW1vcnlfZW5jX2RlYyh2YWRkciwgc2l6ZSwgdHJ1ZSk7XG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy00NzAtfVxuLS1cbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jPTU0Mz12b2lkIF9faW5pdCBtZW1fZW5jcnlwdF9mcmVlX2RlY3J5cHRlZF9tZW0odm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy01NjAtXHRpZiAoc21lX21lX21hc2spIHtcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjU2MTpcdFx0ciA9IHNldF9tZW1vcnlfZW5jcnlwdGVkKHZhZGRyLCBucGFnZXMpO1xuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNTYyLVx0XHRpZiAocikge1xuLS1cbmFyY2gveDg2L21tL3BhdC9NYWtlZmlsZS0yLVxuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlOjM6b2JqLXlcdFx0XHRcdDo9IHNldF9tZW1vcnkubyBtZW10eXBlLm9cbmFyY2gveDg2L21tL3BhdC9NYWtlZmlsZS00LVxuLS1cbmFyY2gveDg2L21tL3BhdC9tZW10eXBlLmM9NDkyPXN0YXRpYyB1NjQgc2FuaXRpemVfcGh5cyh1NjQgYWRkcmVzcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvbWVtdHlwZS5jLTQ5Ni1cdCAqIGZvciBhIFwmIzM0O2RlY295XCYjMzQ7IHZpcnR1YWwgYWRkcmVzcyAoYml0IDYzIGNsZWFyKSBwYXNzZWQgdG9cbmFyY2gveDg2L21tL3BhdC9tZW10eXBlLmM6NDk3Olx0ICogc2V0X21lbW9yeV9YKCkuIF9fcGEoKSBvbiBhIFwmIzM0O2RlY295XCYjMzQ7IGFkZHJlc3MgcmVzdWx0cyBpbiBhXG5hcmNoL3g4Ni9tbS9wYXQvbWVtdHlwZS5jLTQ5OC1cdCAqIHBoeXNpY2FsIGFkZHJlc3Mgd2l0aCBiaXQgNjMgc2V0LlxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjItI2luY2x1ZGUgXHUwMDNjbGludXgvY2NfcGxhdGZvcm0uaFx1MDAzZVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzojaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQtI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVnaW9uLmhcdTAwM2Vcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI3ND1zdGF0aWMgYm9vbCBfX2NwYV9wZm5faW5faGlnaG1hcCh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI4Ni0gKiBVQyB0byBhdm9pZCBzcGVjdWxhdGl2ZSBhY2Nlc3MgbG9nZ2luZyBhbm90aGVyIGVycm9yLiBCdXQgcGFzc2luZyB0aGVcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6Mjg3OiAqIGFkZHJlc3Mgb2YgdGhlIDE6MSBtYXBwaW5nIHRvIHNldF9tZW1vcnlfdWMoKSBpcyBhIGZpbmUgd2F5IHRvIGVuY291cmFnZSBhXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI4OC0gKiBzcGVjdWxhdGl2ZSBhY2Nlc3MuIFNvIHdlIGNoZWF0IGFuZCBmbGlwIHRoZSB0b3AgYml0IG9mIHRoZSBhZGRyZXNzLiBUaGlzXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMTg3PXN0YXRpYyBpbmxpbmUgaW50IGNwYV9jbGVhcl9wYWdlc19hcnJheShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTkzLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTk0OmludCBfc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE5NS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTk4LVx0ICogSWYgeW91IHJlYWxseSBuZWVkIHN0cm9uZyBVQyB1c2UgaW9yZW1hcF91YygpLCBidXQgbm90ZVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTk5Olx0ICogdGhhdCB5b3UgY2Fubm90IG92ZXJyaWRlIElPIGFyZWFzIHdpdGggc2V0X21lbW9yeV8qKCkgYXNcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIwMC1cdCAqIHRoZXNlIGhlbHBlcnMgY2Fubm90IHdvcmsgd2l0aCBJTyBtZW1vcnkuXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjA2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjA3OmludCBzZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjA4LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMTgtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyMTk6XHRyZXQgPSBfc2V0X21lbW9yeV91YyhhZGRyLCBudW1wYWdlcyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMjAtXHRpZiAocmV0KVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIyOS19XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyMzA6RVhQT1JUX1NZTUJPTChzZXRfbWVtb3J5X3VjKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIzMS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjIzMjppbnQgX3NldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMzMte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI0Ny1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI0ODppbnQgc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI0OS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjU2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjU3Olx0cmV0ID0gX3NldF9tZW1vcnlfd2MoYWRkciwgbnVtcGFnZXMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjU4LVx0aWYgKHJldClcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNjItfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjYzOkVYUE9SVF9TWU1CT0woc2V0X21lbW9yeV93Yyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNjQtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyNjU6aW50IF9zZXRfbWVtb3J5X3d0KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjY2LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNzAtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyNzE6aW50IF9zZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjcyLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNzctXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyNzg6aW50IHNldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNzkte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI4MS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI4MjpcdHJldCA9IF9zZXRfbWVtb3J5X3diKGFkZHIsIG51bXBhZ2VzKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI4My1cdGlmIChyZXQpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjg4LX1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI4OTpFWFBPUlRfU1lNQk9MKHNldF9tZW1vcnlfd2IpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjkwLVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjI5Mz1pbnQgc2V0X21jZV9ub3NwZWModW5zaWduZWQgbG9uZyBwZm4pXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzAyLVx0ICogV2Ugd291bGQgbGlrZSB0byBqdXN0IGNhbGw6XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzMDM6XHQgKiAgICAgIHNldF9tZW1vcnlfWFgoKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKHBmbiksIDEpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzA0LVx0ICogYnV0IGRvaW5nIHRoYXQgd291bGQgcmFkaWNhbGx5IGluY3JlYXNlIHRoZSBvZGRzIG9mIGFcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMDktXHQgKiB0aGF0IGxvb2tzIGp1c3QgbGlrZSB0aGUgb25lIHdlIHdhbnQsIGJ1dCBoYXMgYml0IDYzIGZsaXBwZWQuXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzMTA6XHQgKiBUaGlzIHJlbGllcyBvbiBzZXRfbWVtb3J5X1hYKCkgcHJvcGVybHkgc2FuaXRpemluZyBhbnkgX19wYSgpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMTEtXHQgKiByZXN1bHRzIHdpdGggX19QSFlTSUNBTF9NQVNLIG9yIFBURV9QRk5fTUFTSy5cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMTQtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzMTU6XHRyYyA9IHNldF9tZW1vcnlfbnAoZGVjb3lfYWRkciwgMSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMTYtXHRpZiAocmMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzIzPWludCBjbGVhcl9tY2Vfbm9zcGVjKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMyNi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMyNzpcdHJldHVybiBzZXRfbWVtb3J5X3AoYWRkciwgMSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMjgtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzI5PUVYUE9SVF9TWU1CT0xfR1BMKGNsZWFyX21jZV9ub3NwZWMpO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMzMjppbnQgc2V0X21lbW9yeV94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzMzLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzktXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNDA6aW50IHNldF9tZW1vcnlfbngodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDEte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0Ny1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM0ODppbnQgc2V0X21lbW9yeV9ybyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0OS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzUyLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzUzOmludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM1NC17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzYzLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzY0OmludCBzZXRfbWVtb3J5X3J3KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzY1LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjgtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNjk6aW50IHNldF9tZW1vcnlfbnAodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNzAte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3My1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM3NDppbnQgc2V0X21lbW9yeV9ucF9ub2FsaWFzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzc1LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODAtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzODE6aW50IHNldF9tZW1vcnlfcCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4Mi17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg1LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzg2OmludCBzZXRfbWVtb3J5XzRrKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg3LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTItXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzOTM6aW50IHNldF9tZW1vcnlfbm9uZ2xvYmFsKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzk0LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTgtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzOTk6aW50IHNldF9tZW1vcnlfZ2xvYmFsKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDAwLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDUtLypcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQwNjogKiBfX3NldF9tZW1vcnlfZW5jX3BndGFibGUoKSBpcyB1c2VkIGZvciB0aGUgaHlwZXJ2aXNvcnMgdGhhdCBnZXRcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQwNy0gKiBpbmZvcm1lZCBhYm91dCBcJiMzNDtlbmNyeXB0aW9uXCYjMzQ7IHN0YXR1cyB2aWEgcGFnZSB0YWJsZXMuXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDgtICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI0MDk6c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX3BndGFibGUodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDEwLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI0NzM9c3RhdGljIERFQ0xBUkVfUldTRU0obWVtX2VuY19sb2NrKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0ODAtICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI0ODE6Ym9vbCBzZXRfbWVtb3J5X2VuY19zdG9wX2NvbnZlcnNpb24odm9pZClcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQ4Mi17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDk0LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDk1OnN0YXRpYyBpbnQgX19zZXRfbWVtb3J5X2VuY19kZWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDk2LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MDItXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MDM6XHRcdHJldCA9IF9fc2V0X21lbW9yeV9lbmNfcGd0YWJsZShhZGRyLCBudW1wYWdlcywgZW5jKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUwNC1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MTAtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MTE6aW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTEyLXtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUxMzpcdHJldHVybiBfX3NldF9tZW1vcnlfZW5jX2RlYyhhZGRyLCBudW1wYWdlcywgdHJ1ZSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MTQtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTE1OkVYUE9SVF9TWU1CT0xfR1BMKHNldF9tZW1vcnlfZW5jcnlwdGVkKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUxNi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUxNzppbnQgc2V0X21lbW9yeV9kZWNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MTgte1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTE5Olx0cmV0dXJuIF9fc2V0X21lbW9yeV9lbmNfZGVjKGFkZHIsIG51bXBhZ2VzLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MjAtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTIxOkVYUE9SVF9TWU1CT0xfR1BMKHNldF9tZW1vcnlfZGVjcnlwdGVkKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyMi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUyMz1pbnQgc2V0X3BhZ2VzX3VjKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTI2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTI3Olx0cmV0dXJuIHNldF9tZW1vcnlfdWMoYWRkciwgbnVtcGFnZXMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTI4LX1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1ODk9aW50IHNldF9wYWdlc193YihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjU5Mi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjU5MzpcdHJldHVybiBzZXRfbWVtb3J5X3diKGFkZHIsIG51bXBhZ2VzKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjU5NC19XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjIyPWludCBzZXRfcGFnZXNfcm8oc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MjUtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2MjY6XHRyZXR1cm4gc2V0X21lbW9yeV9ybyhhZGRyLCBudW1wYWdlcyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MjctfVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjYyOT1pbnQgc2V0X3BhZ2VzX3J3KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjMyLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjMzOlx0cmV0dXJuIHNldF9tZW1vcnlfcncoYWRkciwgbnVtcGFnZXMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjM0LX1cbi0tXG5hcmNoL3g4Ni9tbS9wdGkuYy00MC0jaW5jbHVkZSBcdTAwM2Nhc20vc2VjdGlvbnMuaFx1MDAzZVxuYXJjaC94ODYvbW0vcHRpLmM6NDE6I2luY2x1ZGUgXHUwMDNjYXNtL3NldF9tZW1vcnkuaFx1MDAzZVxuYXJjaC94ODYvbW0vcHRpLmMtNDItI2luY2x1ZGUgXHUwMDNjYXNtL2J1Z3MuaFx1MDAzZVxuLS1cbmFyY2gveDg2L21tL3B0aS5jPTU3MT1zdGF0aWMgdm9pZCBwdGlfY2xvbmVfa2VybmVsX3RleHQodm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9wdGkuYy02MDAtXHQvKiBTZXQgdGhlIGdsb2JhbCBiaXQgZm9yIG5vcm1hbCBub24tX19pbml0IGtlcm5lbCB0ZXh0OiAqL1xuYXJjaC94ODYvbW0vcHRpLmM6NjAxOlx0c2V0X21lbW9yeV9nbG9iYWwoc3RhcnQsIChlbmRfZ2xvYmFsIC0gc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbmFyY2gveDg2L21tL3B0aS5jLTYwMi19XG4tLVxuYXJjaC94ODYvbW0vcHRpLmM9NjA0PXN0YXRpYyB2b2lkIHB0aV9zZXRfa2VybmVsX2ltYWdlX25vbmdsb2JhbCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL3B0aS5jLTYxOS1cdCAqL1xuYXJjaC94ODYvbW0vcHRpLmM6NjIwOlx0c2V0X21lbW9yeV9ub25nbG9iYWwoc3RhcnQsIChlbmQgLSBzdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuYXJjaC94ODYvbW0vcHRpLmMtNjIxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg0MDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSB4ODYgTWVtb3J5IFByb3RlY3Rpb24gQ29kZSoqCgpPa2F5LCBzbyBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgaXMgKmFsd2F5cyogY29tcGlsZWQgaW50byB0aGUgeDg2IGtlcm5lbDsgdGhhdCYjMzk7cyBnb29kIHRvIGtub3cg4oCTIGl0JiMzOTtzIGZ1bmRhbWVudGFsLiBUaGUgYE1ha2VmaWxlYCBjb25maXJtcyB0aGlzIChgb2JqLXkgOj0gc2V0X21lbW9yeS5vIG1lbXR5cGUub2ApLiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGl0cyBiZWhhdmlvdXIgaXMgdGllZCB0byBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHNlZSBpZiBgU1RSSUNUX0tFUk5FTF9SV1hgIG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIENvbnRyb2wtRmxvdyBBdHRlbnVhdGlvbiAoQ1BBKSwgbGlrZSB0aGUgYENQQWAgbWFjcm8sIGhhcyBhbnkgaW5mbHVlbmNlIG9uIGl0cyBvcGVyYXRpb24uIEEgcXVpY2sgaW5zcGVjdGlvbiBvZiBgYXJjaC94ODYvS2NvbmZpZ2Agc2hvdWxkIHJldmVhbCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIHdoZXRoZXIgSSBuZWVkIHRvIGNvbnNpZGVyIHRob3NlIGluIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTVFJJQ1RfS0VSTkVMX1JXWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMTA3LVx0c2VsZWN0IEFSQ0hfSEFTX1NFVF9ESVJFQ1RfTUFQXG5hcmNoL3g4Ni9LY29uZmlnOjEwODpcdHNlbGVjdCBBUkNIX0hBU19TVFJJQ1RfS0VSTkVMX1JXWFxuYXJjaC94ODYvS2NvbmZpZy0xMDktXHRzZWxlY3QgQVJDSF9IQVNfU1RSSUNUX01PRFVMRV9SV1hcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYz0xNzI9c3RhdGljIHZvaWQgaXRzX2ZpbmlfY29yZSh2b2lkKVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTczLXtcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjE3NDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWCkpXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xNzUtXHRcdGl0c19wYWdlc19wcm90ZWN0KFx1MDAyNml0c19wYWdlcyk7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz02NzE9c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2ZXJpZnlfcnd4KHBncHJvdF90IG9sZCwgcGdwcm90X3QgbmV3LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNzAzLVx0ICogZmFsc2UgcG9zaXRpdmUuXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjcwNDpcdCAqIE9uY2UgZGVidWdfY2hlY2t3eCgpIGJlY29tZXMgbWFuZGF0b3J5IGZvciBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTcwNS1cdCAqIHRoZSB3YXJuaW5nIGNhbiBiZSByZW1vdmVkIGNvbXBsZXRlbHkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MDY0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbm5lciBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYFNUUklDVF9LRVJORUxfUldYYCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byB0aGUgZGVlcCBlbmQsIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSB3aGVyZSBgU1RSSUNUX0tFUk5FTF9SV1hgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEkgc3VzcGVjdCBpdCYjMzk7cyBlaXRoZXIgaW4gdGhlIGdlbmVyYWwgaW5pdGlhbGl6YXRpb24gY29uZmlnLCBgaW5pdC9LY29uZmlnYCwgb3IgcGVyaGFwcyBhIG1vcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZpbGUsIGxpa2UgYGFyY2gvS2NvbmZpZ2AuIEl0JiMzOTtzIGNyaXRpY2FsIHRvIGtub3cgKmV4YWN0bHkqIHdoZXJlIHRoaXMgY29uZmlnIG9wdGlvbiBpcyBkZWZpbmVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBob3cgaXQmIzM5O3MgaGFuZGxlZCBkdXJpbmcgYnVpbGQgYW5kIGNvbmZpZ3VyYXRpb24gdGltZS4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiB0byBwcm9wZXJseSBhc3Nlc3MgaXRzIGltcGFjdCBhbmQgaG93IEkgY2FuLCBpZiBuZWNlc3NhcnksIGN1c3RvbWl6ZSBvciBvdmVycmlkZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aG9zZSBLY29uZmlnIGZpbGVzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1RSSUNUX0tFUk5FTF9SV1gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTE1OTU9Y29uZmlnIEFSQ0hfSEFTX1NUUklDVF9LRVJORUxfUldYXG4tLVxuYXJjaC9LY29uZmlnLTE1OTctXG5hcmNoL0tjb25maWc6MTU5ODpjb25maWcgU1RSSUNUX0tFUk5FTF9SV1hcbmFyY2gvS2NvbmZpZy0xNTk5LVx0Ym9vbCBcJiMzNDtNYWtlIGtlcm5lbCB0ZXh0IGFuZCByb2RhdGEgcmVhZC1vbmx5XCYjMzQ7IGlmIEFSQ0hfT1BUSU9OQUxfS0VSTkVMX1JXWFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTM4NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIG15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBob3VzZWQgaW4gYGFyY2gvS2NvbmZpZ2AuIEkmIzM5O20gcmVhc29uYWJseSBzdXJlIG9mIHRoYXQgZGlyZWN0b3J5LCBpdCYjMzk7cyB3aGVyZSB0aGUgYXJjaGl0ZWN0dXJhbC1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyB1c3VhbGx5IGxpdmUuIEkmIzM5O2xsIGZvY3VzIG15IHNlYXJjaCBhcm91bmQgbGluZSAxNTk4LiBObyBuZWVkIHRvIGdldCBkaXN0cmFjdGVkIGJ5IGEgd2lkZXIgc2VhcmNoIHdoZW4gSSBoYXZlIGEgZ29vZCBpZGVhIHdoZXJlIHRvIHN0YXJ0IGRpZ2dpbmcuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBicmV3aW5nIGluIHRoYXQgcGFydGljdWxhciBhcmVhIG9mIHRoZSBjb25maWcgZmlsZS4gVGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU5NTpcdGNvbmZpZyBBUkNIX0hBU19TVFJJQ1RfS0VSTkVMX1JXWFxuMTU5NjpcdFx0ZGVmX2Jvb2wgblxuMTU5NzpcdFxuMTU5ODpcdGNvbmZpZyBTVFJJQ1RfS0VSTkVMX1JXWFxuMTU5OTpcdFx0Ym9vbCBcJiMzNDtNYWtlIGtlcm5lbCB0ZXh0IGFuZCByb2RhdGEgcmVhZC1vbmx5XCYjMzQ7IGlmIEFSQ0hfT1BUSU9OQUxfS0VSTkVMX1JXWFxuMTYwMDpcdFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19TVFJJQ1RfS0VSTkVMX1JXWFxuMTYwMTpcdFx0ZGVmYXVsdCAhQVJDSF9PUFRJT05BTF9LRVJORUxfUldYIHx8IEFSQ0hfT1BUSU9OQUxfS0VSTkVMX1JXWF9ERUZBVUxUXG4xNjAyOlx0XHRoZWxwXG4xNjAzOlx0XHQgIElmIHRoaXMgaXMgc2V0LCBrZXJuZWwgdGV4dCBhbmQgcm9kYXRhIG1lbW9yeSB3aWxsIGJlIG1hZGUgcmVhZC1vbmx5LFxuMTYwNDpcdFx0ICBhbmQgbm9uLXRleHQgbWVtb3J5IHdpbGwgYmUgbWFkZSBub24tZXhlY3V0YWJsZS4gVGhpcyBwcm92aWRlc1xuMTYwNTpcdFx0ICBwcm90ZWN0aW9uIGFnYWluc3QgY2VydGFpbiBzZWN1cml0eSBleHBsb2l0cyAoZS5nLiBleGVjdXRpbmcgdGhlIGhlYXBcbjE2MDY6XHRcdCAgb3IgbW9kaWZ5aW5nIHRleHQpXG4xNjA3Olx0XG4xNjA4Olx0XHQgIFRoZXNlIGZlYXR1cmVzIGFyZSBjb25zaWRlcmVkIHN0YW5kYXJkIHNlY3VyaXR5IHByYWN0aWNlIHRoZXNlIGRheXMuXG4xNjA5Olx0XHQgIFlvdSBzaG91bGQgc2F5IFkgaGVyZSBpbiBhbG1vc3QgYWxsIGNhc2VzLlxuMTYxMDpcdFxuMTYxMTpcdGNvbmZpZyBBUkNIX0hBU19TVFJJQ1RfTU9EVUxFX1JXWFxuMTYxMjpcdFx0ZGVmX2Jvb2wgblxuMTYxMzpcdFxuMTYxNDpcdGNvbmZpZyBTVFJJQ1RfTU9EVUxFX1JXWFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTkxMgoJCQkJCQkJb3V0cHV0OiAyMTAKCQkJCQkJCXRob3VnaHRzOiAxMDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFdeWCBWZXJpZmljYXRpb24gTG9naWMgaW4geDg2IE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIGNvbmZpcm1lZCB0aGF0IGBTVFJJQ1RfS0VSTkVMX1JXWGAgZGVmYXVsdHMgdG8gYHlgLCBzbyB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4gVGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBpcyBjcnVjaWFsOiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBFbmFibGVDb25maWdzYDogYFsmIzM0O1NUUklDVF9LRVJORUxfUldYJiMzNDtdYC4KCk5vdywgbGV0JiMzOTtzIGhvbmUgaW4gb24gdGhlIGNvcmUgb2YgdGhlIG1hdHRlci4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjYXJlZnVsbHkgc2VsZWN0ZWQgdG8gYXZvaWQgdGhlIG5vaXNlIG9mIHViaXF1aXRvdXMgZnVuY3Rpb25zIGxpa2UgYHZmcmVlYCBvciBga21hbGxvY2AuIEluc3RlYWQsIEkmIzM5O20gY29uY2VudHJhdGluZyBvbiB0aGUgc3BlY2lmaWMgZW50cnkgcG9pbnRzIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLCBgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLCBgX19jaGFuZ2VfcGFnZV9hdHRyYCwgYF9fc2hvdWxkX3NwbGl0X2xhcmdlX3BhZ2VgLCBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfcm94YCwgYHNldF9tZW1vcnlfeGAsIGFuZCBgc2V0X21lbW9yeV9ueGAuIFRoZXNlIGFyZSBhbGwgcmVsZXZhbnQgZnVuY3Rpb25zIGluIHRoZSBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgZmlsZS4KClRoZSBnaXQgZGlmZiBjb25maXJtcyB0aGUgY2hhbmdlcy4gV2UmIzM5O3JlIG1vZGlmeWluZyB0aGUgV15YIHZlcmlmaWNhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGluIHRoZSBgdmVyaWZ5X3J3eGAgZnVuY3Rpb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY29uZGl0aW9uYWwgd2FybmluZyByZWxhdGVkIHRvIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBhbmQgcm9kYXRhIHByb3RlY3Rpb24uIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCBwcm92aWRlcyBhIG1lY2hhbmlzbSB0byBoYW5kbGUgcG90ZW50aWFsIGZhbHNlIHBvc2l0aXZlcywgcGFydGljdWxhcmx5IGJlZm9yZSB0aGUgYGRlYnVnX2NoZWNrd3goKWAgYmVjb21lcyBtYW5kYXRvcnkuCgpUaGUgc3Vic3lzdGVtIGlzIGNsZWFybHkgeDg2IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIENoYW5nZSBQYWdlIEF0dHJpYnV0ZXMgKENQQSkuIFRoZSByZWFjaGFiaWxpdHkgaXMgd2VsbC1kZWZpbmVkOiB0aGlzIGNvZGUgcGF0aCBpcyBmdWxseSByZWFjaGFibGUgb24geDg2XzY0IHdoZW5ldmVyIHBhZ2UgcHJvdGVjdGlvbiBhdHRyaWJ1dGVzIGFyZSBtb2RpZmllZCwgd2hpY2ggaGFwcGVucyBmcmVxdWVudGx5IChtb2R1bGVzLCBCUEYgSklULCBrcHJvYmVzL2Z0cmFjZSwgZGlyZWN0IG1hcCBtYW5pcHVsYXRpb24pLiBUaGlzIG1ha2VzIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhcmUgYXBwcm9wcmlhdGUuIFRoZSBwYXRjaCBtb2RpZmllcyBXXlggdmVyaWZpY2F0aW9uLCBhbmQgdGhpcyBtYWtlcyBpdCBhIHN1aXRhYmxlIGFyZWEgZm9yIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVFJJQ1RfS0VSTkVMX1JXWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fY2hhbmdlX3BhZ2VfYXR0ciYjMzQ7LAogICAgJiMzNDtfX3Nob3VsZF9zcGxpdF9sYXJnZV9wYWdlJiMzNDssCiAgICAmIzM0O2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NsciYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3JvJiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfcncmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9yb3gmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ueCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdeWCBwZXJtaXNzaW9uIHZlcmlmaWNhdGlvbiBsb2dpYyAodmVyaWZ5X3J3eCkgd2l0aGluIHg4NiBDaGFuZ2UgUGFnZSBBdHRyaWJ1dGVzIChDUEEpIGluIGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBleGVjdXRlZCB3aGVuZXZlciBrZXJuZWwgcGFnZSBwcm90ZWN0aW9ucyBhcmUgYWRqdXN0ZWQgKHN1Y2ggYXMgdmlhIEJQRiBKSVQsIGZ0cmFjZSwgbW9kdWxlIGxvYWRpbmcvdW5sb2FkaW5nLCBvciBkcml2ZXIgbWVtb3J5IGF0dHJpYnV0ZSBjaGFuZ2VzKS4gSXQgaW50cm9kdWNlcyBuZXcgY29uZGl0aW9uYWwgd2FybmluZyBiZWhhdmlvciB3aGVuIGtlcm5lbF9zZXRfdG9fcmVhZG9ubHkgaXMgZmFsc2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUUklDVF9LRVJORUxfUldYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19jaGFuZ2VfcGFnZV9hdHRyJiMzNDssCiAgICAmIzM0O19fc2hvdWxkX3NwbGl0X2xhcmdlX3BhZ2UmIzM0OywKICAgICYjMzQ7Y2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyJiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfcm8mIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ydyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3JveCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X254JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfeCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV15YIHBlcm1pc3Npb24gdmVyaWZpY2F0aW9uIGxvZ2ljICh2ZXJpZnlfcnd4KSB3aXRoaW4geDg2IENoYW5nZSBQYWdlIEF0dHJpYnV0ZXMgKENQQSkgaW4gYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGV4ZWN1dGVkIHdoZW5ldmVyIGtlcm5lbCBwYWdlIHByb3RlY3Rpb25zIGFyZSBhZGp1c3RlZCAoc3VjaCBhcyB2aWEgQlBGIEpJVCwgZnRyYWNlLCBtb2R1bGUgbG9hZGluZy91bmxvYWRpbmcsIG9yIGRyaXZlciBtZW1vcnkgYXR0cmlidXRlIGNoYW5nZXMpLiBJdCBpbnRyb2R1Y2VzIG5ldyBjb25kaXRpb25hbCB3YXJuaW5nIGJlaGF2aW9yIHdoZW4ga2VybmVsX3NldF90b19yZWFkb25seSBpcyBmYWxzZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2ZXJpZnlfcnd4KClgIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCB0byBsb2cgYSB3YXJuaW5nIHZpYSBgcHJfd2Fybl9vbmNlYCBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSBmdWxsIGBXQVJOX09OQ0VgIHdoZW4gYSBXXlggdmlvbGF0aW9uIGlzIGRldGVjdGVkIGJlZm9yZSBrZXJuZWwgdGV4dCBoYXMgYmVlbiBtYXJrZWQgcmVhZC1vbmx5IChga2VybmVsX3NldF90b19yZWFkb25seWAgaXMgZmFsc2UpLiBcblxuVGhpcyBjaGFuZ2Ugb25seSB0b3VjaGVzIGxvZ2dpbmcgYW5kIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBhbiBleGlzdGluZyBnbG9iYWwgYm9vbGVhbiBmbGFnIGFuZCBzY2FsYXIgcGFnZS10YWJsZSBwcm90ZWN0aW9uIHZhbHVlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZGQ2ZDRlZWRhYWY0MzJmN2ZiYTM3YzJlZmM4OGI4NDU5YWY4MDIwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTI6Mzc6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwppbmRleCBiMzA2MDAwMGRhOGQxLi5hNGY3ZmU2OWU2OTIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKQEAgLTY5Nyw2ICYjNDM7Njk3LDIxIEBAIHN0YXRpYyBpbmxpbmUgcGdwcm90X3QgdmVyaWZ5X3J3eChwZ3Byb3RfdCBvbGQsIHBncHJvdF90IG5ldywgdW5zaWduZWQgbG9uZyBzdGFyCiAJCXJldHVybiBuZXc7CiAKIAllbmQgPSBzdGFydCAmIzQzOyBucGcgKiBQQUdFX1NJWkUgLSAxOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUga2VybmVsIHRleHQgaXMgc3RpbGwgUldYLCBnZW50bHkgY29tcGxhaW4sIHRoaXMgY291bGQgYmUgYQomIzQzOwkgKiBmYWxzZSBwb3NpdGl2ZS4KJiM0MzsJICogT25jZSBkZWJ1Z19jaGVja3d4KCkgYmVjb21lcyBtYW5kYXRvcnkgZm9yIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWCwKJiM0MzsJICogdGhlIHdhcm5pbmcgY2FuIGJlIHJlbW92ZWQgY29tcGxldGVseS4KJiM0MzsJICovCiYjNDM7CWlmICgha2VybmVsX3NldF90b19yZWFkb25seSkgewomIzQzOwkJcHJfd2Fybl9vbmNlKDEsICYjMzQ7Q1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLSZndDsgJTAxNmxseCByYW5nZTogMHglMDE2bHggLSAweCUwMTZseCBQRk4gJWx4XG4mIzM0OywKJiM0MzsJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksCiYjNDM7CQkgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChuZXcpLAomIzQzOwkJICBzdGFydCwgZW5kLCBwZm4pOwomIzQzOwkJcmV0dXJuIG5ldzsKJiM0MzsJfQomIzQzOwogCVdBUk5fT05DRSgxLCAmIzM0O0NQQSBkZXRlY3RlZCBXXlggdmlvbGF0aW9uOiAlMDE2bGx4IC0mZ3Q7ICUwMTZsbHggcmFuZ2U6IDB4JTAxNmx4IC0gMHglMDE2bHggUEZOICVseFxuJiMzNDssCiAJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksCiAJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzM2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNjQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhlIE5lZWQgZm9yIEtNU0FOIEZ1enppbmcgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGRlYWwuIEkmIzM5O20gYmVpbmcgYXNrZWQgdG8gZmlndXJlIG91dCB3aGV0aGVyIGEgcGF0Y2ggaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIHdhcnJhbnRzIEtNU0FOIGZ1enppbmcsIG9yIGlmIEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBnb29kIGVub3VnaC4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4KCkZpcnN0LCB0aGUgcmlzayBhbmFseXNpcy4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgcmVxdWVzdDogaXQmIzM5O3MgYSBkZWZlbnNpdmUgc2VjdXJpdHkgZW5naW5lZXJpbmcgcXVlc3Rpb24gd2l0aGluIExpbnV4IGtlcm5lbCBRQSB0cmlhZ2UuIFRoZSBzZXZlcml0eSBpc24mIzM5O3QgY3JpdGljYWw7IHdlJiMzOTtyZSBqdXN0IG1ha2luZyBzdXJlIG91ciBiYXNlcyBhcmUgY292ZXJlZC4gU28sIG15IGFjdGlvbiBpcyB0byBwcm92aWRlIGEgY29tcGxldGUgZXZhbHVhdGlvbi4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBhcHBlYXJzIHRvIGJlIGFkZGluZyBhIHdhcm5pbmcgcmVsYXRlZCB0byBXXlggdmlvbGF0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCBjaGVja3MgaWYgY29kZSBpcyBiZWluZyBtYWRlIHdyaXRhYmxlIGFmdGVyIGJlaW5nIHJlYWQtb25seSBpbiB0aGUga2VybmVsIHRleHQuIFRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgY2hlY2sgaGVyZTogSWYgdGhlIGtlcm5lbCBpc24mIzM5O3QgY29uZmlndXJlZCBmb3Igc3RyaWN0IHJlYWQtb25seSB0ZXh0LCBhIHdhcm5pbmcgaXMgcHJpbnRlZC4gT3RoZXJ3aXNlLCBgV0FSTl9PTkNFYCBpcyB1c2VkLiBUaGlzIGlzIGNsZWFybHkgcmVsYXRlZCB0byBwcm90ZWN0aW5nIGFnYWluc3QgY29kZSBpbmplY3Rpb24gdnVsbmVyYWJpbGl0aWVzLgoKSSYjMzk7bGwgbmVlZCB0byBnbyBkZWVwZXIgdGhhbiBqdXN0IGdsYW5jaW5nIGF0IHRoZSBkaWZmLiBJJiMzOTtsbCB1c2UgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgdGhlIGJyb2FkZXIgY29udGV4dCB3aXRoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIGBzZXRfbWVtb3J5LmNgIGNvZGUgaXMgZG9pbmcgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYSBjb25jZXJuIGluIHRoZSBwYXRjaGVkIGNvZGUuIE9uY2UgSSBnZXQgdGhlIHdpZGVyIHBpY3R1cmUsIEkmIzM5O2xsIGJlIGluIGEgYmV0dGVyIHBvc2l0aW9uIHRvIGRldGVybWluZSBpZiBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeSwgb3IgaWYgc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBhZGVxdWF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2OTA6XHRcdFx0cmV0dXJuIG5ldztcbiA2OTE6XHRcbiA2OTI6XHRcdGlmICgocGdwcm90X3ZhbChuZXcpIFx1MDAyNiAoX1BBR0VfUlcgfCBfUEFHRV9OWCkpICE9IF9QQUdFX1JXKVxuIDY5MzpcdFx0XHRyZXR1cm4gbmV3O1xuIDY5NDpcdFxuIDY5NTpcdFx0LyogTm9uLWxlYWYgdHJhbnNsYXRpb24gZW50cmllcyBjYW4gZGlzYWJsZSB3cml0aW5nIG9yIGV4ZWN1dGlvbi4gKi9cbiA2OTY6XHRcdGlmICghcncgfHwgbngpXG4gNjk3Olx0XHRcdHJldHVybiBuZXc7XG4gNjk4Olx0XG4gNjk5Olx0XHRlbmQgPSBzdGFydCAmIzQzOyBucGcgKiBQQUdFX1NJWkUgLSAxO1xuIDcwMDpcdFxuIDcwMTpcdFx0LypcbiA3MDI6XHRcdCAqIElmIHRoZSBrZXJuZWwgdGV4dCBpcyBzdGlsbCBSV1gsIGdlbnRseSBjb21wbGFpbiwgdGhpcyBjb3VsZCBiZSBhXG4gNzAzOlx0XHQgKiBmYWxzZSBwb3NpdGl2ZS5cbiA3MDQ6XHRcdCAqIE9uY2UgZGVidWdfY2hlY2t3eCgpIGJlY29tZXMgbWFuZGF0b3J5IGZvciBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gsXG4gNzA1Olx0XHQgKiB0aGUgd2FybmluZyBjYW4gYmUgcmVtb3ZlZCBjb21wbGV0ZWx5LlxuIDcwNjpcdFx0ICovXG4gNzA3Olx0XHRpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpIHtcbiA3MDg6XHRcdFx0cHJfd2Fybl9vbmNlKDEsIFwmIzM0O0NQQSBkZXRlY3RlZCBXXlggdmlvbGF0aW9uOiAlMDE2bGx4IC1cdTAwM2UgJTAxNmxseCByYW5nZTogMHglMDE2bHggLSAweCUwMTZseCBQRk4gJWx4XFxuXCYjMzQ7LFxuIDcwOTpcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChvbGQpLFxuIDcxMDpcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChuZXcpLFxuIDcxMTpcdFx0XHQgIHN0YXJ0LCBlbmQsIHBmbik7XG4gNzEyOlx0XHRcdHJldHVybiBuZXc7XG4gNzEzOlx0XHR9XG4gNzE0Olx0XG4gNzE1Olx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7Q1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXG5cJiMzNDssXG4gNzE2Olx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksXG4gNzE3Olx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXG4gNzE4Olx0XHRcdCAgc3RhcnQsIGVuZCwgcGZuKTtcbiA3MTk6XHRcbiA3MjA6XHRcdC8qXG4gNzIxOlx0XHQgKiBGb3Igbm93LCBhbGxvdyBhbGwgcGVybWlzc2lvbiBjaGFuZ2UgYXR0ZW1wdHMgYnkgcmV0dXJuaW5nIHRoZVxuIDcyMjpcdFx0ICogYXR0ZW1wdGVkIHBlcm1pc3Npb25zLiAgVGhpcyBjYW4gJiMzOTtyZXR1cm4gb2xkJiMzOTsgdG8gYWN0aXZlbHlcbiA3MjM6XHRcdCAqIHJlZnVzZSB0aGUgcGVybWlzc2lvbiBjaGFuZ2UgYXQgYSBsYXRlciB0aW1lLlxuIDcyNDpcdFx0ICovXG4gNzI1Olx0XHRyZXR1cm4gbmV3O1xuIDcyNjpcdH1cbiA3Mjc6XHRcbiA3Mjg6XHQvKlxuIDcyOTpcdCAqIExvb2t1cCB0aGUgcGFnZSB0YWJsZSBlbnRyeSBmb3IgYSB2aXJ0dWFsIGFkZHJlc3MgaW4gYSBzcGVjaWZpYyBwZ2QuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNzIKCQkJCQkJCW91dHB1dDogMTgxCgkJCQkJCQl0aG91Z2h0czogNTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBwcl93YXJuX29uY2VgIHVzYWdlIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUg4oCTIHRoZSBmaXJzdCBhcmd1bWVudCBsb29rcyBzdXNwaWNpb3VzLiBJcyBpdCBhIHR5cG8gb3IgYSBtYWNybz8gSW4gYW55IGNhc2UsIGl0JiMzOTtzIG5vdCB0aGUgc3RhbmRhcmQgcGF0dGVybiwgc28gSSYjMzk7bSBmaWxpbmcgdGhhdCBhd2F5IGZvciBub3cuIE15IGltbWVkaWF0ZSBmb2N1cywgaG93ZXZlciwgaXMgb24gd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyByaXNrcyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGFueXRoaW5nIEtNU0FOIHdvdWxkIGZsYWcuCgpUaGUgcGF0Y2ggbW9kaWZpZXMgYHZlcmlmeV9yd3goKWAgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBSaWdodCwgc28gSSByYW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OgoKKiAgICoqQWxsb2NhdGlvbj8qKiBOb3BlLCBubyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb24gdGhhdCBjb3VsZCBiZSB1bmluaXRpYWxpemVkLgoqICAgKipVc2VyIHNwYWNlIGNvcHk/KiogTm90IGF0IGFsbC4KKiAgICoqVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHM/KiogTm8sIHRoZSBhcmd1bWVudHMgdG8gYHZlcmlmeV9yd3goKWAg4oCTIGBvbGRgLCBgbmV3YCwgYHN0YXJ0YCwgYGVuZGAsIGBwZm5gLCBga2VybmVsX3NldF90b19yZWFkb25seWAg4oCTIGFyZSBhbGwgc2NhbGFyIHZhbHVlcywgYm9vbGVhbnMsIG9yIGBwZ3Byb3RfdGAgcGFzc2VkIGJ5IHZhbHVlLiBUaGlzIGlzIGEgY2xlYW4gYmlsbCBvZiBoZWFsdGguCiogICAqKkJ1ZmZlciBtYW5pcHVsYXRpb24gb3IgYm91bmRzIGNoZWNrcz8qKiBOb3RoaW5nIGhlcmUuCiogICAqKktlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzPyoqIE5vLgoKR2l2ZW4gYWxsIG9mIHRoYXQsIGl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkICYjMzQ7TmVlZHNLTVNBTiA9IGZhbHNlLiYjMzQ7CgpOb3csIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgcmVhc29uaW5nIGZvciB0aGUgcmVjb3JkLiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgYSBgV0FSTl9PTkNFYCB0byBhIGBwcl93YXJuX29uY2VgIGluIGB2ZXJpZnlfcnd4KClgLiBUaGUgY2hhbmdlIG9ubHkgZG93bmdyYWRlcyB0aGUgd2FybmluZyBpZiBga2VybmVsX3NldF90b19yZWFkb25seWAgaXMgZmFsc2UgZHVyaW5nIGVhcmx5IGJvb3QsIHdoZW4gdGhlIGtlcm5lbCB0ZXh0IHBlcm1pc3Npb25zIGFyZSBzdGlsbCBSV1guIEl0JiMzOTtzIGVzc2VudGlhbGx5IGp1c3QgYSBjb25kaXRpb25hbCBsb2dnaW5nIGNoYW5nZS4gVGhlIGNvZGUgaXMgb25seSB3b3JraW5nIHdpdGggc2NhbGFyIHZhcmlhYmxlcyDigJMgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmVzLCBubyB3cml0ZXMgb3IgY29waWVzIHRvIHVzZXJzcGFjZSwgbm8gY2hhbmdlcyB0byBidWZmZXIgbGVuZ3RocyBvciBjYWxjdWxhdGlvbnMuIEFsbCB0aGUgaW5mb3JtYXRpb24gZm9yIEtNU0FOIHRvIGFuYWx5emUgaXMgc2NhbGFyIGFuZCBwYXNzZWQgYnkgdmFsdWUuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBhYnNvbHV0ZWx5IGRvZXMgbm90IGludHJvZHVjZSBhbnkgS01TQU4tcmVsZXZhbnQgaXNzdWVzIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHZlcmlmeV9yd3goKWAgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIHRvIGxvZyBhIHdhcm5pbmcgdmlhIGBwcl93YXJuX29uY2VgIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIGZ1bGwgYFdBUk5fT05DRWAgd2hlbiBhIFdeWCB2aW9sYXRpb24gaXMgZGV0ZWN0ZWQgYmVmb3JlIGtlcm5lbCB0ZXh0IGhhcyBiZWVuIG1hcmtlZCByZWFkLW9ubHkgKGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBpcyBmYWxzZSkuIFxuXG5UaGlzIGNoYW5nZSBvbmx5IHRvdWNoZXMgbG9nZ2luZyBhbmQgY29udHJvbCBmbG93IGJhc2VkIG9uIGFuIGV4aXN0aW5nIGdsb2JhbCBib29sZWFuIGZsYWcgYW5kIHNjYWxhciBwYWdlLXRhYmxlIHByb3RlY3Rpb24gdmFsdWVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgdG91Y2ggdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZywgYW5kIGRvZXMgbm90IGV4cG9zZSBhbnkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2ZXJpZnlfcnd4KClgIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCB0byBsb2cgYSB3YXJuaW5nIHZpYSBgcHJfd2Fybl9vbmNlYCBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSBmdWxsIGBXQVJOX09OQ0VgIHdoZW4gYSBXXlggdmlvbGF0aW9uIGlzIGRldGVjdGVkIGJlZm9yZSBrZXJuZWwgdGV4dCBoYXMgYmVlbiBtYXJrZWQgcmVhZC1vbmx5IChga2VybmVsX3NldF90b19yZWFkb25seWAgaXMgZmFsc2UpLiBcblxuVGhpcyBjaGFuZ2Ugb25seSB0b3VjaGVzIGxvZ2dpbmcgYW5kIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBhbiBleGlzdGluZyBnbG9iYWwgYm9vbGVhbiBmbGFnIGFuZCBzY2FsYXIgcGFnZS10YWJsZSBwcm90ZWN0aW9uIHZhbHVlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM3OjQ0LjEwMjU0ODQ4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzYwODM4NzA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVFJJQ1RfS0VSTkVMX1JXWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fY2hhbmdlX3BhZ2VfYXR0clwiLFxuICAgIFwiX19zaG91bGRfc3BsaXRfbGFyZ2VfcGFnZVwiLFxuICAgIFwiY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyXCIsXG4gICAgXCJzZXRfbWVtb3J5X3JvXCIsXG4gICAgXCJzZXRfbWVtb3J5X3J3XCIsXG4gICAgXCJzZXRfbWVtb3J5X3JveFwiLFxuICAgIFwic2V0X21lbW9yeV9ueFwiLFxuICAgIFwic2V0X21lbW9yeV94XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdmVyaWZ5X3J3eCgpYCBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgdG8gbG9nIGEgd2FybmluZyB2aWEgYHByX3dhcm5fb25jZWAgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgZnVsbCBgV0FSTl9PTkNFYCB3aGVuIGEgV15YIHZpb2xhdGlvbiBpcyBkZXRlY3RlZCBiZWZvcmUga2VybmVsIHRleHQgaGFzIGJlZW4gbWFya2VkIHJlYWQtb25seSAoYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIGlzIGZhbHNlKS4gXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSB0b3VjaGVzIGxvZ2dpbmcgYW5kIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBhbiBleGlzdGluZyBnbG9iYWwgYm9vbGVhbiBmbGFnIGFuZCBzY2FsYXIgcGFnZS10YWJsZSBwcm90ZWN0aW9uIHZhbHVlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdeWCBwZXJtaXNzaW9uIHZlcmlmaWNhdGlvbiBsb2dpYyAodmVyaWZ5X3J3eCkgd2l0aGluIHg4NiBDaGFuZ2UgUGFnZSBBdHRyaWJ1dGVzIChDUEEpIGluIGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBleGVjdXRlZCB3aGVuZXZlciBrZXJuZWwgcGFnZSBwcm90ZWN0aW9ucyBhcmUgYWRqdXN0ZWQgKHN1Y2ggYXMgdmlhIEJQRiBKSVQsIGZ0cmFjZSwgbW9kdWxlIGxvYWRpbmcvdW5sb2FkaW5nLCBvciBkcml2ZXIgbWVtb3J5IGF0dHJpYnV0ZSBjaGFuZ2VzKS4gSXQgaW50cm9kdWNlcyBuZXcgY29uZGl0aW9uYWwgd2FybmluZyBiZWhhdmlvciB3aGVuIGtlcm5lbF9zZXRfdG9fcmVhZG9ubHkgaXMgZmFsc2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM3OjQ0LjEwMjU1MzM2M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI3NDYyNzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmRkNmQ0ZWVkYWFmNDMyZjdmYmEzN2MyZWZjODhiODQ1OWFmODAyMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAxMjozNzo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbmluZGV4IGIzMDYwMDAwZGE4ZDEuLmE0ZjdmZTY5ZTY5MjIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbisrKyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG5AQCAtNjk3LDYgKzY5NywyMSBAQCBzdGF0aWMgaW5saW5lIHBncHJvdF90IHZlcmlmeV9yd3gocGdwcm90X3Qgb2xkLCBwZ3Byb3RfdCBuZXcsIHVuc2lnbmVkIGxvbmcgc3RhclxcbiBcXHRcXHRyZXR1cm4gbmV3O1xcbiBcXG4gXFx0ZW5kID0gc3RhcnQgKyBucGcgKiBQQUdFX1NJWkUgLSAxO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIGtlcm5lbCB0ZXh0IGlzIHN0aWxsIFJXWCwgZ2VudGx5IGNvbXBsYWluLCB0aGlzIGNvdWxkIGJlIGFcXG4rXFx0ICogZmFsc2UgcG9zaXRpdmUuXFxuK1xcdCAqIE9uY2UgZGVidWdfY2hlY2t3eCgpIGJlY29tZXMgbWFuZGF0b3J5IGZvciBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gsXFxuK1xcdCAqIHRoZSB3YXJuaW5nIGNhbiBiZSByZW1vdmVkIGNvbXBsZXRlbHkuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpIHtcXG4rXFx0XFx0cHJfd2Fybl9vbmNlKDEsIFxcXCJDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXFx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXFxcblxcXCIsXFxuK1xcdFxcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksXFxuK1xcdFxcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXFxuK1xcdFxcdCAgc3RhcnQsIGVuZCwgcGZuKTtcXG4rXFx0XFx0cmV0dXJuIG5ldztcXG4rXFx0fVxcbitcXG4gXFx0V0FSTl9PTkNFKDEsIFxcXCJDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXFx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXFxcblxcXCIsXFxuIFxcdFxcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksXFxuIFxcdFxcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM3OjQ0LjYzMDc1MzQ0NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA4MzI4NTMwNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNUUklDVF9LRVJORUxfUldYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19jaGFuZ2VfcGFnZV9hdHRyXCIsXG4gICAgXCJfX3Nob3VsZF9zcGxpdF9sYXJnZV9wYWdlXCIsXG4gICAgXCJjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJcIixcbiAgICBcInNldF9tZW1vcnlfcm9cIixcbiAgICBcInNldF9tZW1vcnlfcndcIixcbiAgICBcInNldF9tZW1vcnlfcm94XCIsXG4gICAgXCJzZXRfbWVtb3J5X254XCIsXG4gICAgXCJzZXRfbWVtb3J5X3hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV15YIHBlcm1pc3Npb24gdmVyaWZpY2F0aW9uIGxvZ2ljICh2ZXJpZnlfcnd4KSB3aXRoaW4geDg2IENoYW5nZSBQYWdlIEF0dHJpYnV0ZXMgKENQQSkgaW4gYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGV4ZWN1dGVkIHdoZW5ldmVyIGtlcm5lbCBwYWdlIHByb3RlY3Rpb25zIGFyZSBhZGp1c3RlZCAoc3VjaCBhcyB2aWEgQlBGIEpJVCwgZnRyYWNlLCBtb2R1bGUgbG9hZGluZy91bmxvYWRpbmcsIG9yIGRyaXZlciBtZW1vcnkgYXR0cmlidXRlIGNoYW5nZXMpLiBJdCBpbnRyb2R1Y2VzIG5ldyBjb25kaXRpb25hbCB3YXJuaW5nIGJlaGF2aW9yIHdoZW4ga2VybmVsX3NldF90b19yZWFkb25seSBpcyBmYWxzZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZGQ2ZDRlZWRhYWY0MzJmN2ZiYTM3YzJlZmM4OGI4NDU5YWY4MDIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTI6Mzc6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuaW5kZXggYjMwNjAwMDBkYThkMS4uYTRmN2ZlNjllNjkyMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbisrKyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC02OTcsNiArNjk3LDIxIEBAIHN0YXRpYyBpbmxpbmUgcGdwcm90X3QgdmVyaWZ5X3J3eChwZ3Byb3RfdCBvbGQsIHBncHJvdF90IG5ldywgdW5zaWduZWQgbG9uZyBzdGFyXG4gXHRcdHJldHVybiBuZXc7XG4gXG4gXHRlbmQgPSBzdGFydCArIG5wZyAqIFBBR0VfU0laRSAtIDE7XG4rXG4rXHQvKlxuK1x0ICogSWYgdGhlIGtlcm5lbCB0ZXh0IGlzIHN0aWxsIFJXWCwgZ2VudGx5IGNvbXBsYWluLCB0aGlzIGNvdWxkIGJlIGFcbitcdCAqIGZhbHNlIHBvc2l0aXZlLlxuK1x0ICogT25jZSBkZWJ1Z19jaGVja3d4KCkgYmVjb21lcyBtYW5kYXRvcnkgZm9yIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWCxcbitcdCAqIHRoZSB3YXJuaW5nIGNhbiBiZSByZW1vdmVkIGNvbXBsZXRlbHkuXG4rXHQgKi9cbitcdGlmICgha2VybmVsX3NldF90b19yZWFkb25seSkge1xuK1x0XHRwcl93YXJuX29uY2UoMSwgXCJDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXHUwMDNlICUwMTZsbHggcmFuZ2U6IDB4JTAxNmx4IC0gMHglMDE2bHggUEZOICVseFxcblwiLFxuK1x0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChvbGQpLFxuK1x0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChuZXcpLFxuK1x0XHQgIHN0YXJ0LCBlbmQsIHBmbik7XG4rXHRcdHJldHVybiBuZXc7XG4rXHR9XG4rXG4gXHRXQVJOX09OQ0UoMSwgXCJDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXHUwMDNlICUwMTZsbHggcmFuZ2U6IDB4JTAxNmx4IC0gMHglMDE2bHggUEZOICVseFxcblwiLFxuIFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChvbGQpLFxuIFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChuZXcpLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzc6NDQuNjMwNzU1MDQ0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc2NTYxMDI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGFuZCBBc3NvY2lhdGVkIFRvb2xzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBwYXRjaCBpdHNlbGYsIG9mIGNvdXJzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB3aGF0J3MgY2hhbmdlZCBhbmQgdGhlbiBwdXQgdGhhdCBpbnRvIGNvbnRleHQuIFRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIGlzIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGNvZGUsIHdoaWNoIGluIHRoaXMgY2FzZSBzZWVtcyB0byBiZSB3aXRoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBJIHdpbGwgdGhlbiBnbyBhaGVhZCBhbmQgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBvbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBpbnNwZWN0aW5nIHRoaXMgZmlsZSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCdzIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyNCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzc6NDkuMzk2MzY3NDM0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjgwOlxcdFxcdCAqIGRldGVjdGlvbiBhbmQgZW5mb3JjZW1lbnQgdGhlcmUuXFxuIDY4MTpcXHRcXHQgKi9cXG4gNjgyOlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19YODZfMzIpKVxcbiA2ODM6XFx0XFx0XFx0cmV0dXJuIG5ldztcXG4gNjg0OlxcdFxcbiA2ODU6XFx0XFx0LyogT25seSB2ZXJpZnkgd2hlbiBOWCBpcyBzdXBwb3J0ZWQ6ICovXFxuIDY4NjpcXHRcXHRpZiAoIShfX3N1cHBvcnRlZF9wdGVfbWFzayBcXHUwMDI2IF9QQUdFX05YKSlcXG4gNjg3OlxcdFxcdFxcdHJldHVybiBuZXc7XFxuIDY4ODpcXHRcXG4gNjg5OlxcdFxcdGlmICghKChwZ3Byb3RfdmFsKG9sZCkgXiBwZ3Byb3RfdmFsKG5ldykpIFxcdTAwMjYgKF9QQUdFX1JXIHwgX1BBR0VfTlgpKSlcXG4gNjkwOlxcdFxcdFxcdHJldHVybiBuZXc7XFxuIDY5MTpcXHRcXG4gNjkyOlxcdFxcdGlmICgocGdwcm90X3ZhbChuZXcpIFxcdTAwMjYgKF9QQUdFX1JXIHwgX1BBR0VfTlgpKSAhPSBfUEFHRV9SVylcXG4gNjkzOlxcdFxcdFxcdHJldHVybiBuZXc7XFxuIDY5NDpcXHRcXG4gNjk1OlxcdFxcdC8qIE5vbi1sZWFmIHRyYW5zbGF0aW9uIGVudHJpZXMgY2FuIGRpc2FibGUgd3JpdGluZyBvciBleGVjdXRpb24uICovXFxuIDY5NjpcXHRcXHRpZiAoIXJ3IHx8IG54KVxcbiA2OTc6XFx0XFx0XFx0cmV0dXJuIG5ldztcXG4gNjk4OlxcdFxcbiA2OTk6XFx0XFx0ZW5kID0gc3RhcnQgKyBucGcgKiBQQUdFX1NJWkUgLSAxO1xcbiA3MDA6XFx0XFxuIDcwMTpcXHRcXHQvKlxcbiA3MDI6XFx0XFx0ICogSWYgdGhlIGtlcm5lbCB0ZXh0IGlzIHN0aWxsIFJXWCwgZ2VudGx5IGNvbXBsYWluLCB0aGlzIGNvdWxkIGJlIGFcXG4gNzAzOlxcdFxcdCAqIGZhbHNlIHBvc2l0aXZlLlxcbiA3MDQ6XFx0XFx0ICogT25jZSBkZWJ1Z19jaGVja3d4KCkgYmVjb21lcyBtYW5kYXRvcnkgZm9yIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWCxcXG4gNzA1OlxcdFxcdCAqIHRoZSB3YXJuaW5nIGNhbiBiZSByZW1vdmVkIGNvbXBsZXRlbHkuXFxuIDcwNjpcXHRcXHQgKi9cXG4gNzA3OlxcdFxcdGlmICgha2VybmVsX3NldF90b19yZWFkb25seSkge1xcbiA3MDg6XFx0XFx0XFx0cHJfd2Fybl9vbmNlKDEsIFxcXCJDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXFx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXFxcblxcXCIsXFxuIDcwOTpcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChvbGQpLFxcbiA3MTA6XFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwobmV3KSxcXG4gNzExOlxcdFxcdFxcdCAgc3RhcnQsIGVuZCwgcGZuKTtcXG4gNzEyOlxcdFxcdFxcdHJldHVybiBuZXc7XFxuIDcxMzpcXHRcXHR9XFxuIDcxNDpcXHRcXG4gNzE1OlxcdFxcdFdBUk5fT05DRSgxLCBcXFwiQ1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVxcdTAwM2UgJTAxNmxseCByYW5nZTogMHglMDE2bHggLSAweCUwMTZseCBQRk4gJWx4XFxcXG5cXFwiLFxcbiA3MTY6XFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwob2xkKSxcXG4gNzE3OlxcdFxcdFxcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXFxuIDcxODpcXHRcXHRcXHQgIHN0YXJ0LCBlbmQsIHBmbik7XFxuIDcxOTpcXHRcXG4gNzIwOlxcdFxcdC8qXFxuIDcyMTpcXHRcXHQgKiBGb3Igbm93LCBhbGxvdyBhbGwgcGVybWlzc2lvbiBjaGFuZ2UgYXR0ZW1wdHMgYnkgcmV0dXJuaW5nIHRoZVxcbiA3MjI6XFx0XFx0ICogYXR0ZW1wdGVkIHBlcm1pc3Npb25zLiAgVGhpcyBjYW4gJ3JldHVybiBvbGQnIHRvIGFjdGl2ZWx5XFxuIDcyMzpcXHRcXHQgKiByZWZ1c2UgdGhlIHBlcm1pc3Npb24gY2hhbmdlIGF0IGEgbGF0ZXIgdGltZS5cXG4gNzI0OlxcdFxcdCAqL1xcbiA3MjU6XFx0XFx0cmV0dXJuIG5ldztcXG4gNzI2OlxcdH1cXG4gNzI3OlxcdFxcbiA3Mjg6XFx0LypcXG4gNzI5OlxcdCAqIExvb2t1cCB0aGUgcGFnZSB0YWJsZSBlbnRyeSBmb3IgYSB2aXJ0dWFsIGFkZHJlc3MgaW4gYSBzcGVjaWZpYyBwZ2QuXFxuIDczMDpcXHQgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBlbnRyeSAob3IgTlVMTCBpZiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QpLFxcbiA3MzE6XFx0ICogdGhlIGxldmVsIG9mIHRoZSBlbnRyeSwgYW5kIHRoZSBlZmZlY3RpdmUgTlggYW5kIFJXIGJpdHMgb2YgYWxsXFxuIDczMjpcXHQgKiBwYWdlIHRhYmxlIGxldmVscy5cXG4gNzMzOlxcdCAqL1xcbiA3MzQ6XFx0cHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gNzM1OlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50ICpsZXZlbCwgYm9vbCAqbngsIGJvb2wgKnJ3KVxcbiA3MzY6XFx0e1xcbiA3Mzc6XFx0XFx0cDRkX3QgKnA0ZDtcXG4gNzM4OlxcdFxcdHB1ZF90ICpwdWQ7XFxuIDczOTpcXHRcXHRwbWRfdCAqcG1kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozNzo0OS4zOTY1NjIzOTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjQ4OTA2Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHZlcmlmeV9yd3hgIFVzYWdlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBgdmVyaWZ5X3J3eGAgZnVuY3Rpb24gYW5kIGhvdyBpdCdzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGlzIGNvZGViYXNlLiBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBpbmZsdWVuY2UsIEknbSBnb2luZyB0byByZWFjaCBmb3IgdGhlIHRyaWVkIGFuZCB0cnVlIGBncmVwYCBjb21tYW5kLiBTcGVjaWZpY2FsbHksIEknbGwgc2VhcmNoIGZvciBgdmVyaWZ5X3J3eGAgdG8gaWRlbnRpZnkgZXZlcnkgaW5zdGFuY2Ugd2hlcmUgaXQncyBpbnZva2VkLiBUaGlzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBhbmQgcmV2ZWFsIHRoZSBhcmVhcyBvZiB0aGUgY29kZSB0aGF0IGRlcGVuZCBvbiBpdHMgZnVuY3Rpb25hbGl0eS4gVGhpcyBxdWljayBzY2FuIHdpbGwgc2V0IHRoZSBzdGFnZSBmb3IgYSBkZWVwZXIgZGl2ZSwgYWxsb3dpbmcgbWUgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNzgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM3OjUyLjY0NTQ3MjI1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY4MjYyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZXJpZnlfcnd4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz02MjM9c3RhdGljIGlubGluZSBwZ3Byb3RfdCBzdGF0aWNfcHJvdGVjdGlvbnMocGdwcm90X3QgcHJvdCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNjcwLSAqL1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NjcxOnN0YXRpYyBpbmxpbmUgcGdwcm90X3QgdmVyaWZ5X3J3eChwZ3Byb3RfdCBvbGQsIHBncHJvdF90IG5ldywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTY3Mi1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5wZyxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9OTQzPXN0YXRpYyBpbnQgX19zaG91bGRfc3BsaXRfbGFyZ2VfcGFnZShwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xMDY2LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTA2NzpcXHRuZXdfcHJvdCA9IHZlcmlmeV9yd3gob2xkX3Byb3QsIG5ld19wcm90LCBscGFkZHIsIG9sZF9wZm4sIG51bXBhZ2VzLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTA2OC1cXHRcXHRcXHQgICAgICBueCwgcncpO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0xODUwPXN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgcHJpbWFyeSlcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTg4MS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjE4ODI6XFx0XFx0bmV3X3Byb3QgPSB2ZXJpZnlfcnd4KG9sZF9wcm90LCBuZXdfcHJvdCwgYWRkcmVzcywgcGZuLCAxLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTg4My1cXHRcXHRcXHRcXHQgICAgICBueCwgcncpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozNzo1Mi42OTExNjA2MzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODk0NDU3MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS2VybmVsIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBoZXJlLlwiIFRoZSBnb2FsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhcnRpY3VsYXIgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIGB2ZXJpZnlfcnd4YCBhbmQgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGRvZXMsIGFuZCBob3cgdGhleSByZWxhdGUuIEdpdmVuIHRoYXQgdGhlIGdvYWwgaXMgdG8gZnVsbHkgYW5hbHl6ZSB0aGUgY29kZSwgaXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgd2l0aCBga2VybmVsX3NldF90b19yZWFkb25seWAuIExldCdzIHNlYXJjaCBmb3IgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIHRoYXQgZnVuY3Rpb24gZmlyc3QuIEEgZ29vZCBzb2xpZCBkZWZpbml0aW9uIHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCBmb3VuZGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGludGVudCBvZiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA0NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM3OjU2LjU4NTYyNDQ2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk0MzMwMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtlcm5lbF9zZXRfdG9fcmVhZG9ubHlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wYXJpc2MvbW0vaW5pdC5jPTExMj1zdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdG1lbSh2b2lkKVxcbi0tXFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTM0MC1cXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM6MzQxOnN0YXRpYyBib29sIGtlcm5lbF9zZXRfdG9fcmVhZG9ubHk7XFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTM0Mi1cXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM9MzQzPXN0YXRpYyB2b2lkIF9fcmVmIG1hcF9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3ZhZGRyLFxcbi0tXFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTQwMy1cXHRcXHRcXHRcXHRcXHRwcm90ID0gUEFHRV9LRVJORUw7XFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jOjQwNDpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KSB7XFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTQwNS1cXHRcXHRcXHRcXHRcXHQvKiBzdGlsbCBpbml0aWFsaXppbmcsIGFsbG93IHdyaXRpbmcgdG8gUk8gbWVtb3J5ICovXFxuLS1cXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM9NDg5PXZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcXG4tLVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYy00OTYtXFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jOjQ5NzpcXHRrZXJuZWxfc2V0X3RvX3JlYWRvbmx5ID0gdHJ1ZTtcXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtNDk4LVxcdG1hcF9wYWdlcyhzdGFydCwgX19wYShzdGFydCksIGVuZCAtIHN0YXJ0LCBQQUdFX0tFUk5FTCwgMCk7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg9OTI9Ym9vbCBrZXJuZWxfcGFnZV9wcmVzZW50KHN0cnVjdCBwYWdlICpwYWdlKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtOTMtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjk0OmV4dGVybiBpbnQga2VybmVsX3NldF90b19yZWFkb25seTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtOTUtXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmM9NjkyPXZvaWQgX19pbml0IG1lbV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzIwLVxcbmFyY2gveDg2L21tL2luaXRfMzIuYzo3MjE6aW50IGtlcm5lbF9zZXRfdG9fcmVhZG9ubHkgX19yZWFkX21vc3RseTtcXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzIyLVxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF8zMi5jPTc0MD12b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzQ4LVxcbmFyY2gveDg2L21tL2luaXRfMzIuYzo3NDk6XFx0a2VybmVsX3NldF90b19yZWFkb25seSA9IDE7XFxuYXJjaC94ODYvbW0vaW5pdF8zMi5jLTc1MC1cXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYz0xMzQzPXZvaWQgX19pbml0IG1lbV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM1Ni1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM1NzppbnQga2VybmVsX3NldF90b19yZWFkb25seTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM1OC1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM9MTM1OT12b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM3MS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM3MjpcXHRrZXJuZWxfc2V0X3RvX3JlYWRvbmx5ID0gMTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM3My1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NTA3PXN0YXRpYyBwZ3Byb3R2YWxfdCBwcm90ZWN0X3BjaV9iaW9zKHVuc2lnbmVkIGxvbmcgc3BmbiwgdW5zaWduZWQgbG9uZyBlcGZuKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy01MTUtICogYWxpYXNlcy4gIFRoaXMgYWxzbyBpbmNsdWRlcyBfX3JvX2FmdGVyX2luaXQsIHNvIGRvIG5vdCBlbmZvcmNlIHVudGlsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo1MTY6ICoga2VybmVsX3NldF90b19yZWFkb25seSBpcyB0cnVlLlxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTE3LSAqL1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NTE4PXN0YXRpYyBwZ3Byb3R2YWxfdCBwcm90ZWN0X3JvZGF0YSh1bnNpZ25lZCBsb25nIHNwZm4sIHVuc2lnbmVkIGxvbmcgZXBmbilcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTI3LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NTI4OlxcdGlmIChrZXJuZWxfc2V0X3RvX3JlYWRvbmx5IFxcdTAwMjZcXHUwMDI2IG92ZXJsYXBzKHNwZm4sIGVwZm4sIHNwZm5fcm8sIGVwZm5fcm8pKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTI5LVxcdFxcdHJldHVybiBfUEFHRV9SVztcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NTQxPXN0YXRpYyBwZ3Byb3R2YWxfdCBwcm90ZWN0X2tlcm5lbF90ZXh0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy01NTItLypcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjU1MzogKiBPbmNlIHRoZSBrZXJuZWwgbWFwcyB0aGUgdGV4dCBhcyBSTyAoa2VybmVsX3NldF90b19yZWFkb25seSBpcyBzZXQpLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTU0LSAqIGtlcm5lbCB0ZXh0IG1hcHBpbmdzIGZvciB0aGUgbGFyZ2UgcGFnZSBhbGlnbmVkIHRleHQsIHJvZGF0YSBzZWN0aW9uc1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz01NjE9c3RhdGljIHBncHJvdHZhbF90IHByb3RlY3Rfa2VybmVsX3RleHRfcm8odW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTY3LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NTY4OlxcdGlmICgha2VybmVsX3NldF90b19yZWFkb25seSB8fCAhb3ZlcmxhcHMoc3RhcnQsIGVuZCwgdF9zdGFydCwgdF9lbmQpKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNTY5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz02NzE9c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2ZXJpZnlfcnd4KHBncHJvdF90IG9sZCwgcGdwcm90X3QgbmV3LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03MDYtXFx0ICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo3MDc6XFx0aWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KSB7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03MDgtXFx0XFx0cHJfd2Fybl9vbmNlKDEsIFxcXCJDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXFx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM3OjU4LjY3OTk2MjMxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NjkzMjM2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFkLU9ubHkgRGF0YSBNYXJraW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgbWFya19yb2RhdGFfcm8oKWAgZ2V0cyBpbnZva2VkIGR1cmluZyB0aGUga2VybmVsJ3MgYm9vdCBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBmdW5jdGlvbnMgYG1hcmtfcmVhZG9ubHkoKWAgb3IgZGlyZWN0bHkgYXMgYG1hcmtfcm9kYXRhX3JvKClgLiBUaGUgY3J1Y2lhbCBwaWVjZSBoZXJlIGlzIHRoYXQgd2hlbiB0aGlzIGZ1bmN0aW9uIGV4ZWN1dGVzIGR1cmluZyBib290LCB0aGUgdmFyaWFibGUgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIGdldHMgc2V0IHRvIGEgdmFsdWUgb2YgMS5cblxuVGhlIGludGVyZXN0aW5nIHRoaW5nIGlzIHRoYXQgYWZ0ZXIgdGhlIGJvb3Qgc2VxdWVuY2UgY29tcGxldGVzLCBkdXJpbmcgdGhlIHN0YW5kYXJkIHJ1bnRpbWUgb2YgdGhlIGtlcm5lbCwgYW5kIGV2ZW4gZHVyaW5nIGZ1enppbmcgZWZmb3J0cywgdGhpcyBga2VybmVsX3NldF90b19yZWFkb25seWAgdmFyaWFibGUgKmFsd2F5cyogcmV0YWlucyBpdHMgdmFsdWUgb2YgMS5cblxuQnV0LCB3YWl0IGEgc2Vjb25kLi4uIHRoaXMgZmVlbHMgbGlrZSBpdCBtaWdodCBiZSBhbiBvdmVyc2ltcGxpZmljYXRpb24uIElzIGl0IHRydWx5IHRoZSBjYXNlIHRoYXQgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIGlzICpuZXZlciogemVybyBhZnRlciB0aGUgaW5pdGlhbCBib290PyBJIG5lZWQgdG8gY2xhcmlmeSBpZiB0aGVyZSdzIGEgdHJhbnNpZW50IHBlcmlvZCBkdXJpbmcgdGhlIHZlcnkgZWFybHkgc3RhZ2VzIG9mIHRoZSBib290IHByb2Nlc3Mgd2hlcmUgdGhpcyB2YXJpYWJsZSBtaWdodCBiZSAwLCBiZWZvcmUgYmVpbmcgaW5pdGlhbGl6ZWQgdG8gMS4gVGhpcyBjb3VsZCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIHZlcmlmeSB3aGVuIGBtYXJrX3JvZGF0YV9ybygpYCBpcyBhY3R1YWxseSBjYWxsZWQgaW4gdGhlIGJvb3Qgc2VxdWVuY2UuIExldCdzIGRvIGEgcXVpY2sgZ3JlcCBzZWFyY2ggdG8gY29uZmlybSB0aGUgY2FsbCBzaXRlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgdmFyaWF0aW9ucyBpbiB0aGUgY2FsbCBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg2OCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozODowMS40NDkyODgwNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzAyMDYxNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFya19yb2RhdGFfcm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vbW0vaW5pdC5jPTM5Mj1zdGF0aWMgdm9pZCBmaXhfa2Vybm1lbV9wZXJtcyh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbW0vaW5pdC5jLTM5Ni1cXG5hcmNoL2FybS9tbS9pbml0LmM6Mzk3OnN0YXRpYyBpbnQgX19tYXJrX3JvZGF0YV9ybyh2b2lkICp1bnVzZWQpXFxuYXJjaC9hcm0vbW0vaW5pdC5jLTM5OC17XFxuLS1cXG5hcmNoL2FybS9tbS9pbml0LmMtNDAyLVxcbmFyY2gvYXJtL21tL2luaXQuYzo0MDM6dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxcbmFyY2gvYXJtL21tL2luaXQuYy00MDQte1xcbmFyY2gvYXJtL21tL2luaXQuYzo0MDU6XFx0c3RvcF9tYWNoaW5lKF9fbWFya19yb2RhdGFfcm8sIE5VTEwsIE5VTEwpO1xcbmFyY2gvYXJtL21tL2luaXQuYy00MDYtXFx0YXJtX2RlYnVnX2NoZWNrd3goKTtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vbW11LmM9MTE4MD1zdGF0aWMgdm9pZCBfX2luaXQgbWFwX21lbSh2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0xMjUzLVxcbmFyY2gvYXJtNjQvbW0vbW11LmM6MTI1NDp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0xMjU1LXtcXG4tLVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYz00NTE9dm9pZCBmcmVlX2luaXRtZW0odm9pZClcXG4tLVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYy00ODgtI2lmZGVmIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWFxcbmFyY2gvcGFyaXNjL21tL2luaXQuYzo0ODk6dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxcbmFyY2gvcGFyaXNjL21tL2luaXQuYy00OTAte1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLmg9MTUyPXN0YXRpYyBpbmxpbmUgaW50IGhhc2hfX3A0ZF9iYWQocDRkX3QgcDRkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLmgtMTU2LSNpZmRlZiBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1hcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2guaDoxNTc6ZXh0ZXJuIHZvaWQgaGFzaF9fbWFya19yb2RhdGFfcm8odm9pZCk7XFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLmgtMTU4LWV4dGVybiB2b2lkIGhhc2hfX21hcmtfaW5pdG1lbV9ueCh2b2lkKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaC0xNDEtI2lmZGVmIENPTkZJR19TVFJJQ1RfS0VSTkVMX1JXWFxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaDoxNDI6ZXh0ZXJuIHZvaWQgcmFkaXhfX21hcmtfcm9kYXRhX3JvKHZvaWQpO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaC0xNDMtZXh0ZXJuIHZvaWQgcmFkaXhfX21hcmtfaW5pdG1lbV9ueCh2b2lkKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3MzMi9tbXUuYz0xOTY9aW50IG1tdV9tYXJrX2luaXRtZW1fbngodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3MzMi9tbXUuYy0yMzUtXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczMyL21tdS5jOjIzNjppbnQgbW11X21hcmtfcm9kYXRhX3JvKHZvaWQpXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczMyL21tdS5jLTIzNy17XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmM9NTI0PXN0YXRpYyBib29sIGhhc2hfX2NoYW5nZV9tZW1vcnlfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmMtNTY0LVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuYzo1NjU6dm9pZCBoYXNoX19tYXJrX3JvZGF0YV9ybyh2b2lkKVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuYy01NjYte1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYz0xODg9c3RhdGljIHZvaWQgcmFkaXhfX2NoYW5nZV9tZW1vcnlfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jLTIzMC1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jOjIzMTp2b2lkIHJhZGl4X19tYXJrX3JvZGF0YV9ybyh2b2lkKVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmMtMjMyLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9tbXVfZGVjbC5oPTE2Mz1pbnQgbW11X21hcmtfaW5pdG1lbV9ueCh2b2lkKTtcXG5hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaDoxNjQ6aW50IG1tdV9tYXJrX3JvZGF0YV9ybyh2b2lkKTtcXG5hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaC0xNjUtI2Vsc2VcXG5hcmNoL3Bvd2VycGMvbW0vbW11X2RlY2wuaD0xNjY9c3RhdGljIGlubGluZSBpbnQgbW11X21hcmtfaW5pdG1lbV9ueCh2b2lkKSB7IHJldHVybiAwOyB9XFxuYXJjaC9wb3dlcnBjL21tL21tdV9kZWNsLmg6MTY3OnN0YXRpYyBpbmxpbmUgaW50IG1tdV9tYXJrX3JvZGF0YV9ybyh2b2lkKSB7IHJldHVybiAwOyB9XFxuYXJjaC9wb3dlcnBjL21tL21tdV9kZWNsLmgtMTY4LSNlbmRpZlxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC84eHguYz0xNzE9aW50IG1tdV9tYXJrX2luaXRtZW1fbngodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvOHh4LmMtMTg4LSNpZmRlZiBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1hcXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoLzh4eC5jOjE4OTppbnQgbW11X21hcmtfcm9kYXRhX3JvKHZvaWQpXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC84eHguYy0xOTAte1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9lNTAwLmM9MjY2PXZvaWQgX19pbml0IGFkanVzdF90b3RhbF9sb3dtZW0odm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ub2hhc2gvZTUwMC5jLTI4Ny0jaWZkZWYgQ09ORklHX1NUUklDVF9LRVJORUxfUldYXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9lNTAwLmM6Mjg4OmludCBtbXVfbWFya19yb2RhdGFfcm8odm9pZClcXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL2U1MDAuYy0yODkte1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9lNTAwLmM9MzAxPWludCBtbXVfbWFya19pbml0bWVtX254KHZvaWQpXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9lNTAwLmMtMzAyLXtcXG5hcmNoL3Bvd2VycGMvbW0vbm9oYXNoL2U1MDAuYzozMDM6XFx0LyogRXZlcnl0aGluZyBpcyBkb25lIGluIG1tdV9tYXJrX3JvZGF0YV9ybygpICovXFxuYXJjaC9wb3dlcnBjL21tL25vaGFzaC9lNTAwLmMtMzA0LVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYz0xNDU9dm9pZCBtYXJrX2luaXRtZW1fbngodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMtMTUzLSNpZmRlZiBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1hcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jOjE1NDpzdGF0aWMgaW50IF9fbWFya19yb2RhdGFfcm8odm9pZClcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jLTE1NS17XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jLTE2MS1cXHRpZiAodl9ibG9ja19tYXBwZWQoKHVuc2lnbmVkIGxvbmcpX3N0ZXh0ICsgMSkpXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYzoxNjI6XFx0XFx0cmV0dXJuIG1tdV9tYXJrX3JvZGF0YV9ybygpO1xcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMtMTYzLVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYy0xNzQtXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYzoxNzU6dm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMtMTc2LXtcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jOjE3NzpcXHRpbnQgZXJyID0gX19tYXJrX3JvZGF0YV9ybygpO1xcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMtMTc4LVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYz0xMjY9c3RydWN0IHBhZ2UgKnBtZF9wYWdlKHBtZF90IHBtZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMtMTQxLSNpZmRlZiBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1hcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jOjE0Mjp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYy0xNDMte1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYy0xNDktXFx0aWYgKHJhZGl4X2VuYWJsZWQoKSlcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jOjE1MDpcXHRcXHRyYWRpeF9fbWFya19yb2RhdGFfcm8oKTtcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jLTE1MS1cXHRlbHNlXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYzoxNTI6XFx0XFx0aGFzaF9fbWFya19yb2RhdGFfcm8oKTtcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jLTE1My19XFxuLS1cXG5hcmNoL3Jpc2N2L21tL2luaXQuYz03MzI9c3RhdGljIF9fbWVtaW5pdCBwZ3Byb3RfdCBwZ3Byb3RfZnJvbV92YSh1aW50cHRyX3QgdmEpXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2luaXQuYy03NDAtXFx0ICogd3JpdHRlbi5cXG5hcmNoL3Jpc2N2L21tL2luaXQuYzo3NDE6XFx0ICogQW5kIHJvZGF0YSBzZWN0aW9uIGlzIG1hcmtlZCByZWFkb25seSBpbiBtYXJrX3JvZGF0YV9yby5cXG5hcmNoL3Jpc2N2L21tL2luaXQuYy03NDItXFx0ICovXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2luaXQuYy03NDgtXFxuYXJjaC9yaXNjdi9tbS9pbml0LmM6NzQ5OnZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcXG5hcmNoL3Jpc2N2L21tL2luaXQuYy03NTAte1xcbi0tXFxuYXJjaC9zMzkwL21tL2luaXQuYz0xMDE9dm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZClcXG4tLVxcbmFyY2gvczM5MC9tbS9pbml0LmMtMTA2LVxcbmFyY2gvczM5MC9tbS9pbml0LmM6MTA3OnZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTEwOC17XFxuLS1cXG5hcmNoL3VtL2tlcm5lbC9tZW0uYz0xMzE9REVDTEFSRV9WTV9HRVRfUEFHRV9QUk9UXFxuYXJjaC91bS9rZXJuZWwvbWVtLmMtMTMyLVxcbmFyY2gvdW0va2VybmVsL21lbS5jOjEzMzp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXFxuYXJjaC91bS9rZXJuZWwvbWVtLmMtMTM0LXtcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfMzIuYz03MjM9c3RhdGljIHZvaWQgbWFya19ueGRhdGFfbngodm9pZClcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfMzIuYy03MzktXFxuYXJjaC94ODYvbW0vaW5pdF8zMi5jOjc0MDp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXFxuYXJjaC94ODYvbW0vaW5pdF8zMi5jLTc0MS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM9MTM1Nz1pbnQga2VybmVsX3NldF90b19yZWFkb25seTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM1OC1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM1OTp2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzNjAte1xcbi0tXFxuaW5jbHVkZS9saW51eC9jYWNoZS5oLTU1LSAqIF9fcm9fYWZ0ZXJfaW5pdCBpcyB1c2VkIHRvIG1hcmsgdGhpbmdzIHRoYXQgYXJlIHJlYWQtb25seSBhZnRlciBpbml0IChpLmUuXFxuaW5jbHVkZS9saW51eC9jYWNoZS5oOjU2OiAqIGFmdGVyIG1hcmtfcm9kYXRhX3JvKCkgaGFzIGJlZW4gY2FsbGVkKS4gVGhlc2UgYXJlIGVmZmVjdGl2ZWx5IHJlYWQtb25seSxcXG5pbmNsdWRlL2xpbnV4L2NhY2hlLmgtNTctICogYnV0IG1heSBnZXQgd3JpdHRlbiB0byBkdXJpbmcgaW5pdCwgc28gY2FuJ3QgbGl2ZSBpbiAucm9kYXRhICh2aWEgXFxcImNvbnN0XFxcIikuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2luaXQuaD0xNjU9ZXh0ZXJuIGJvb2wgcm9kYXRhX2VuYWJsZWQ7XFxuaW5jbHVkZS9saW51eC9pbml0Lmg6MTY2OnZvaWQgbWFya19yb2RhdGFfcm8odm9pZCk7XFxuaW5jbHVkZS9saW51eC9pbml0LmgtMTY3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9yb2RhdGFfdGVzdC5oLTItLypcXG5pbmNsdWRlL2xpbnV4L3JvZGF0YV90ZXN0Lmg6MzogKiByb2RhdGFfdGVzdC5oOiBmdW5jdGlvbmFsIHRlc3QgZm9yIG1hcmtfcm9kYXRhX3JvIGZ1bmN0aW9uXFxuaW5jbHVkZS9saW51eC9yb2RhdGFfdGVzdC5oLTQtICpcXG4tLVxcbmluaXQvbWFpbi5jPTE1MjE9c3RhdGljIHZvaWQgbWFya19yZWFkb25seSh2b2lkKVxcbi0tXFxuaW5pdC9tYWluLmMtMTUzMS1cXHRcXHRqdW1wX2xhYmVsX2luaXRfcm8oKTtcXG5pbml0L21haW4uYzoxNTMyOlxcdFxcdG1hcmtfcm9kYXRhX3JvKCk7XFxuaW5pdC9tYWluLmMtMTUzMy1cXHRcXHRkZWJ1Z19jaGVja3d4KCk7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zMDg4PXN0YXRpYyBub2lubGluZSBpbnQgZG9faW5pdF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzE4OC1cXHQgKiBtYXBwaW5ncyB3aGljaCB3b24ndCBiZSBjbGVhbmVkIHVwIHVudGlsIGRvX2ZyZWVfaW5pdCgpIHJ1bnMuICBBbnlcXG5rZXJuZWwvbW9kdWxlL21haW4uYzozMTg5OlxcdCAqIGNvZGUgc3VjaCBhcyBtYXJrX3JvZGF0YV9ybygpIHdoaWNoIGRlcGVuZHMgb24gdGhvc2UgbWFwcGluZ3MgdG9cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zMTkwLVxcdCAqIGJlIGNsZWFuZWQgdXAgbmVlZHMgdG8gc3luYyB3aXRoIHRoZSBxdWV1ZWQgd29yayBieSBpbnZva2luZ1xcbi0tXFxubW0vcm9kYXRhX3Rlc3QuYy0yLS8qXFxubW0vcm9kYXRhX3Rlc3QuYzozOiAqIHJvZGF0YV90ZXN0LmM6IGZ1bmN0aW9uYWwgdGVzdCBmb3IgbWFya19yb2RhdGFfcm8gZnVuY3Rpb25cXG5tbS9yb2RhdGFfdGVzdC5jLTQtICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzg6MDMuNTc5NTAxODIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2OTMyMTc1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB3aGF0IEknbSBsb29raW5nIGF0LCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBtYXJrX3JlYWRvbmx5YCBEdXJpbmcgS2VybmVsIEJvb3QqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVuIGFuZCB3aGVyZSBgbWFya19yZWFkb25seWAgaXMgYmVpbmcgY2FsbGVkLCB3aGljaCwgYXMgSSByZWNhbGwsIGxpa2VseSBwZXJ0YWlucyB0byBtZW1vcnkgcmVnaW9ucy4gVGhlIGhpbnQgaXMgaW4gYGluaXQvbWFpbi5jYCwgYW5kIG1vcmUgc3BlY2lmaWNhbGx5LCBpdCdzIHRyaWdnZXJlZCBkdXJpbmcgYm9vdCwgcmlnaHQgYXJvdW5kIHRoZSB0aW1lIHRoZSBrZXJuZWwgaXMgaW5pdGlhbGl6aW5nLCBiZWZvcmUgaXQgaGFuZHMgY29udHJvbCBvdmVyIHRvIHRoZSBpbml0IHByb2Nlc3MgYW5kIHN0YXJ0cyBmcmVlaW5nIG1lbW9yeSBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBpbml0aWFsIGJvb3Qgc2VxdWVuY2UuIFRoYXQgbmFycm93cyBpdCBkb3duIGNvbnNpZGVyYWJseS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgaW5pdC9tYWluLmNgIG5vdyBhbmQgem9vbSBpbiBhcm91bmQgbGluZSAxNTIxLCB0byBmaW5kIHRoZSBleGFjdCBjb250ZXh0IG9mIHRoYXQgY2FsbCBhbmQgdHJ5IHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucyBhcmUgYmVpbmcgbWFkZSByZWFkLW9ubHkgYXQgdGhhdCBzdGFnZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUga2VybmVsIGlzIHNldHRpbmcgdXAgbWVtb3J5IHByb3RlY3Rpb24gZWFybHkgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTg5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzg6MDcuMjcyNzIzMTgxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTE1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTE1OlxcdFxcdFxcdHByX3dhcm4oXFxcIkludmFsaWQgb3B0aW9uIHN0cmluZyBmb3Igcm9kYXRhOiAnJXMnXFxcXG5cXFwiLCBzdHIpO1xcbjE1MTY6XFx0XFx0cmV0dXJuIDA7XFxuMTUxNzpcXHR9XFxuMTUxODpcXHRlYXJseV9wYXJhbShcXFwicm9kYXRhXFxcIiwgc2V0X2RlYnVnX3JvZGF0YSk7XFxuMTUxOTpcXHQjZW5kaWZcXG4xNTIwOlxcdFxcbjE1MjE6XFx0c3RhdGljIHZvaWQgbWFya19yZWFkb25seSh2b2lkKVxcbjE1MjI6XFx0e1xcbjE1MjM6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NUUklDVF9LRVJORUxfUldYKSBcXHUwMDI2XFx1MDAyNiByb2RhdGFfZW5hYmxlZCkge1xcbjE1MjQ6XFx0XFx0XFx0LypcXG4xNTI1OlxcdFxcdFxcdCAqIGxvYWRfbW9kdWxlKCkgcmVzdWx0cyBpbiBXK1ggbWFwcGluZ3MsIHdoaWNoIGFyZSBjbGVhbmVkXFxuMTUyNjpcXHRcXHRcXHQgKiB1cCB3aXRoIGluaXRfZnJlZV93cS4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgcXVldWVkIHdvcmsgaXNcXG4xNTI3OlxcdFxcdFxcdCAqIGZsdXNoZWQgc28gdGhhdCB3ZSBkb24ndCBoaXQgZmFsc2UgcG9zaXRpdmVzIGxvb2tpbmcgZm9yXFxuMTUyODpcXHRcXHRcXHQgKiBpbnNlY3VyZSBwYWdlcyB3aGljaCBhcmUgVytYLlxcbjE1Mjk6XFx0XFx0XFx0ICovXFxuMTUzMDpcXHRcXHRcXHRmbHVzaF9tb2R1bGVfaW5pdF9mcmVlX3dvcmsoKTtcXG4xNTMxOlxcdFxcdFxcdGp1bXBfbGFiZWxfaW5pdF9ybygpO1xcbjE1MzI6XFx0XFx0XFx0bWFya19yb2RhdGFfcm8oKTtcXG4xNTMzOlxcdFxcdFxcdGRlYnVnX2NoZWNrd3goKTtcXG4xNTM0OlxcdFxcdFxcdHJvZGF0YV90ZXN0KCk7XFxuMTUzNTpcXHRcXHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX1NUUklDVF9LRVJORUxfUldYKSkge1xcbjE1MzY6XFx0XFx0XFx0cHJfaW5mbyhcXFwiS2VybmVsIG1lbW9yeSBwcm90ZWN0aW9uIGRpc2FibGVkLlxcXFxuXFxcIik7XFxuMTUzNzpcXHRcXHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX1NUUklDVF9LRVJORUxfUldYKSkge1xcbjE1Mzg6XFx0XFx0XFx0cHJfd2FybihcXFwiS2VybmVsIG1lbW9yeSBwcm90ZWN0aW9uIG5vdCBzZWxlY3RlZCBieSBrZXJuZWwgY29uZmlnLlxcXFxuXFxcIik7XFxuMTUzOTpcXHRcXHR9IGVsc2Uge1xcbjE1NDA6XFx0XFx0XFx0cHJfd2FybihcXFwiVGhpcyBhcmNoaXRlY3R1cmUgZG9lcyBub3QgaGF2ZSBrZXJuZWwgbWVtb3J5IHByb3RlY3Rpb24uXFxcXG5cXFwiKTtcXG4xNTQxOlxcdFxcdH1cXG4xNTQyOlxcdH1cXG4xNTQzOlxcdFxcbjE1NDQ6XFx0dm9pZCBfX3dlYWsgZnJlZV9pbml0bWVtKHZvaWQpXFxuMTU0NTpcXHR7XFxuMTU0NjpcXHRcXHRmcmVlX2luaXRtZW1fZGVmYXVsdChQT0lTT05fRlJFRV9JTklUTUVNKTtcXG4xNTQ3OlxcdH1cXG4xNTQ4OlxcdFxcbjE1NDk6XFx0c3RhdGljIGludCBfX3JlZiBrZXJuZWxfaW5pdCh2b2lkICp1bnVzZWQpXFxuMTU1MDpcXHR7XFxuMTU1MTpcXHRcXHRpbnQgcmV0O1xcbjE1NTI6XFx0XFxuMTU1MzpcXHRcXHRpbml0X3VzZXJzcGFjZV9mcygpO1xcbjE1NTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM4OjA3LjI3Mjg0MjA4MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTA5MDI0NDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgV15YIFZpb2xhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHZlcmlmeV9yd3hgIGZ1bmN0aW9uIGFuZCBhIHBvdGVudGlhbCBXcml0ZSBYT1IgRXhlY3V0ZSAoV15YKSB2aW9sYXRpb24uIFRoZSBjcnV4IG9mIHRoZSBpc3N1ZSBzZWVtcyB0byBiZSB0aWVkIHRvIHRoZSBga2VybmVsX3NldF90b19yZWFkb25seWAgZmxhZywgd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgcmVhZC1vbmx5IGRhdGEgc2VjdGlvbnMgaGF2ZSBiZWVuIHByb3Blcmx5IG1hcmtlZCBhcyBzdWNoLiBJJ20gd29uZGVyaW5nIHdoYXQgaGFwcGVucyBpbiBhIGZldyBzcGVjaWZpYyBzY2VuYXJpb3MuXG5cbkZpcnN0LCBsZXQncyBleHBsb3JlIHdoYXQgb2NjdXJzIHdoZW4gYCFyb2RhdGFfZW5hYmxlZGAsIHdoaWNoIGVzc2VudGlhbGx5IG1lYW5zIHRoZSBrZXJuZWwgaXMgYm9vdGVkIHdpdGggYHJvZGF0YT1vZmZgIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZW4gYG1hcmtfcm9kYXRhX3JvKClgIGlzIG5ldmVyIGludm9rZWQuIENvbnNlcXVlbnRseSwgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIHJlbWFpbnMgMC4gVGhpcyBsYWNrIG9mIHNldHRpbmcgdGhlIGZsYWcgY291bGQgYmUgdGhlIHJvb3QgY2F1c2UuXG5cbk5vdywgd2hhdCBpZiB0aGVyZSdzIGEgc2l0dWF0aW9uIHdoZXJlIGVhcmx5IGJvb3QgY29kZSwgdXNpbmcgYHNldF9tZW1vcnlfKmAgY2FsbHMsIG1vZGlmaWVzIG1lbW9yeSByZWdpb25zICpiZWZvcmUqIGBtYXJrX3JvZGF0YV9ybygpYCBpcyBldmVuIGNhbGxlZD8gVGhpcyBjb3VsZCBhbHNvIGxlYWQgdG8gc2ltaWxhciBwcm9ibGVtcy4gSSBuZWVkIHRvIGtlZXAgdGhhdCB0aW1pbmcgaW4gbWluZC5cblxuSSdtIHNlZWluZyB0aGF0IGB2ZXJpZnlfcnd4YCBpcyBmaXJpbmcgYFdBUk5fT05DRWAgZHVyaW5nIGJvb3QsIGluZGljYXRpbmcgYSBwb3RlbnRpYWwgV15YIGlzc3VlLiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSB3YXJuaW5nIGxvZ2ljIHRvIGluY2x1ZGUgdGhlIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBjaGVjay4gVGhlIGlkZWEgaXMsIGlmIHRoZSBmbGFnICppc24ndCogc2V0LCB3ZSBlbWl0IGEgc3BlY2lmaWMgd2FybmluZywgYW5kIG90aGVyd2lzZSBpc3N1ZSB0aGUgZ2VuZXJhbCBXXlggd2FybmluZy5cblxuV2FpdCBhIHNlY29uZCwgYmVmb3JlIEkgZGlnIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGNvbnN1bHQgYGdpdCBsb2dgIG9yIHRoZSBjb21taXQgaGlzdG9yeSBhcm91bmQgYHZlcmlmeV9yd3hgLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2XigJR3aGF0IHByb2JsZW1zIGl0IHdhcyBpbnRlbmRlZCB0byBzb2x2ZSBhbmQgd2hhdCBhc3N1bXB0aW9ucyB3ZXJlIG1hZGXigJR3aWxsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCBJJ20gZGVhbGluZyB3aXRoLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozODoxNi4xODE4Njg2MTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjQxNDY3ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmVyaWZ5X3J3eFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTYyMz1zdGF0aWMgaW5saW5lIHBncHJvdF90IHN0YXRpY19wcm90ZWN0aW9ucyhwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy02NzAtICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo2NzE6c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2ZXJpZnlfcnd4KHBncHJvdF90IG9sZCwgcGdwcm90X3QgbmV3LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNjcyLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnBnLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz05NDM9c3RhdGljIGludCBfX3Nob3VsZF9zcGxpdF9sYXJnZV9wYWdlKHB0ZV90ICprcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTEwNjYtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxMDY3OlxcdG5ld19wcm90ID0gdmVyaWZ5X3J3eChvbGRfcHJvdCwgbmV3X3Byb3QsIGxwYWRkciwgb2xkX3BmbiwgbnVtcGFnZXMsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xMDY4LVxcdFxcdFxcdCAgICAgIG54LCBydyk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE4NTA9c3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODgxLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTg4MjpcXHRcXHRuZXdfcHJvdCA9IHZlcmlmeV9yd3gob2xkX3Byb3QsIG5ld19wcm90LCBhZGRyZXNzLCBwZm4sIDEsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODgzLVxcdFxcdFxcdFxcdCAgICAgIG54LCBydyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM4OjE4LjEwNjAyMDA0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODM1MjM0Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjpcblxuKipBbmFseXppbmcgYHZlcmlmeV9yd3hgIGFuZCBDb250ZXh0KipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gdGhlIGB2ZXJpZnlfcnd4YCBmdW5jdGlvbiwgd2hpY2ggaW1wbGllcyBzb21lIGtpbmQgb2YgbWVtb3J5IGFjY2VzcyB2YWxpZGF0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byByZWFkLXdyaXRlLWV4ZWN1dGUgcGVybWlzc2lvbnMuIFRoZSBmYWN0IHRoYXQgaXQncyBuZXN0bGVkIHdpdGhpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgaW1tZWRpYXRlbHkgbmFycm93cyB0aGUgc2NvcGUuIFRoaXMgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBtZW1vcnkgbWFuYWdlbWVudCwgcG90ZW50aWFsbHkgaW5jbHVkaW5nIFBhZ2UgQXR0cmlidXRlIFRhYmxlIChQQVQpIG1hbmlwdWxhdGlvbiwgYW5kIHBhcnRpY3VsYXJseSwgdGhlIHNldHRpbmcgb2YgbWVtb3J5IGF0dHJpYnV0ZXMuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhIGZvciBzZWN1cml0eSBhbmQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBob3cgaXQncyBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3csIHRoZSB0eXBlcyBvZiB2YWxpZGF0aW9ucyBkb25lIGFuZCBob3cgcGVybWlzc2lvbnMgYXJlIGVuZm9yY2VkLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMsIHJldHVybiB2YWx1ZXMsIGFuZCBhbnkgc2lkZSBlZmZlY3RzIGl0IG1heSBoYXZlLCBzdWNoIGFzIGVycm9yIHJlcG9ydGluZyBvciBjaGFuZ2VzIHRvIGRhdGEgc3RydWN0dXJlcy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIHVzZWQgYW5kIHRoZWlyIHNpemVzLCBhcyB0aGVzZSBjYW4gdGVsbCBhIGxvdCBhYm91dCB0aGUgaW50ZW5kZWQgdXNhZ2UgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoaXMgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NDgsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozODoyMC45NDEyNTY0OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjA6XFx0XFxuIDY2MTpcXHRcXHRyZXMgPSBwcm90ZWN0X3JvZGF0YShwZm4sIHBmbiArIG5wZyAtIDEpO1xcbiA2NjI6XFx0XFx0Y2hlY2tfY29uZmxpY3Qod2Fybmx2bCwgcHJvdCwgcmVzLCBzdGFydCwgZW5kLCBwZm4sIFxcXCJSb2RhdGEgUk9cXFwiKTtcXG4gNjYzOlxcdFxcdGZvcmJpZGRlbiB8PSByZXM7XFxuIDY2NDpcXHRcXG4gNjY1OlxcdFxcdHJldHVybiBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIFxcdTAwMjYgfmZvcmJpZGRlbik7XFxuIDY2NjpcXHR9XFxuIDY2NzpcXHRcXG4gNjY4OlxcdC8qXFxuIDY2OTpcXHQgKiBWYWxpZGF0ZSBzdHJpY3QgV15YIHNlbWFudGljcy5cXG4gNjcwOlxcdCAqL1xcbiA2NzE6XFx0c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2ZXJpZnlfcnd4KHBncHJvdF90IG9sZCwgcGdwcm90X3QgbmV3LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiA2NzI6XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucGcsXFxuIDY3MzpcXHRcXHRcXHRcXHRcXHQgIGJvb2wgbngsIGJvb2wgcncpXFxuIDY3NDpcXHR7XFxuIDY3NTpcXHRcXHR1bnNpZ25lZCBsb25nIGVuZDtcXG4gNjc2OlxcdFxcbiA2Nzc6XFx0XFx0LypcXG4gNjc4OlxcdFxcdCAqIDMyLWJpdCBoYXMgc29tZSB1bmZpeGFibGUgVytYIGlzc3VlcywgbGlrZSBFRkkgY29kZVxcbiA2Nzk6XFx0XFx0ICogYW5kIHdyaXRlYWJsZSBkYXRhIGJlaW5nIGluIHRoZSBzYW1lIHBhZ2UuICBEaXNhYmxlXFxuIDY4MDpcXHRcXHQgKiBkZXRlY3Rpb24gYW5kIGVuZm9yY2VtZW50IHRoZXJlLlxcbiA2ODE6XFx0XFx0ICovXFxuIDY4MjpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWDg2XzMyKSlcXG4gNjgzOlxcdFxcdFxcdHJldHVybiBuZXc7XFxuIDY4NDpcXHRcXG4gNjg1OlxcdFxcdC8qIE9ubHkgdmVyaWZ5IHdoZW4gTlggaXMgc3VwcG9ydGVkOiAqL1xcbiA2ODY6XFx0XFx0aWYgKCEoX19zdXBwb3J0ZWRfcHRlX21hc2sgXFx1MDAyNiBfUEFHRV9OWCkpXFxuIDY4NzpcXHRcXHRcXHRyZXR1cm4gbmV3O1xcbiA2ODg6XFx0XFxuIDY4OTpcXHRcXHRpZiAoISgocGdwcm90X3ZhbChvbGQpIF4gcGdwcm90X3ZhbChuZXcpKSBcXHUwMDI2IChfUEFHRV9SVyB8IF9QQUdFX05YKSkpXFxuIDY5MDpcXHRcXHRcXHRyZXR1cm4gbmV3O1xcbiA2OTE6XFx0XFxuIDY5MjpcXHRcXHRpZiAoKHBncHJvdF92YWwobmV3KSBcXHUwMDI2IChfUEFHRV9SVyB8IF9QQUdFX05YKSkgIT0gX1BBR0VfUlcpXFxuIDY5MzpcXHRcXHRcXHRyZXR1cm4gbmV3O1xcbiA2OTQ6XFx0XFxuIDY5NTpcXHRcXHQvKiBOb24tbGVhZiB0cmFuc2xhdGlvbiBlbnRyaWVzIGNhbiBkaXNhYmxlIHdyaXRpbmcgb3IgZXhlY3V0aW9uLiAqL1xcbiA2OTY6XFx0XFx0aWYgKCFydyB8fCBueClcXG4gNjk3OlxcdFxcdFxcdHJldHVybiBuZXc7XFxuIDY5ODpcXHRcXG4gNjk5OlxcdFxcdGVuZCA9IHN0YXJ0ICsgbnBnICogUEFHRV9TSVpFIC0gMTtcXG4gNzAwOlxcdFxcbiA3MDE6XFx0XFx0LypcXG4gNzAyOlxcdFxcdCAqIElmIHRoZSBrZXJuZWwgdGV4dCBpcyBzdGlsbCBSV1gsIGdlbnRseSBjb21wbGFpbiwgdGhpcyBjb3VsZCBiZSBhXFxuIDcwMzpcXHRcXHQgKiBmYWxzZSBwb3NpdGl2ZS5cXG4gNzA0OlxcdFxcdCAqIE9uY2UgZGVidWdfY2hlY2t3eCgpIGJlY29tZXMgbWFuZGF0b3J5IGZvciBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gsXFxuIDcwNTpcXHRcXHQgKiB0aGUgd2FybmluZyBjYW4gYmUgcmVtb3ZlZCBjb21wbGV0ZWx5LlxcbiA3MDY6XFx0XFx0ICovXFxuIDcwNzpcXHRcXHRpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpIHtcXG4gNzA4OlxcdFxcdFxcdHByX3dhcm5fb25jZSgxLCBcXFwiQ1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVxcdTAwM2UgJTAxNmxseCByYW5nZTogMHglMDE2bHggLSAweCUwMTZseCBQRk4gJWx4XFxcXG5cXFwiLFxcbiA3MDk6XFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwob2xkKSxcXG4gNzEwOlxcdFxcdFxcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG5ldyksXFxuIDcxMTpcXHRcXHRcXHQgIHN0YXJ0LCBlbmQsIHBmbik7XFxuIDcxMjpcXHRcXHRcXHRyZXR1cm4gbmV3O1xcbiA3MTM6XFx0XFx0fVxcbiA3MTQ6XFx0XFxuIDcxNTpcXHRcXHRXQVJOX09OQ0UoMSwgXFxcIkNQQSBkZXRlY3RlZCBXXlggdmlvbGF0aW9uOiAlMDE2bGx4IC1cXHUwMDNlICUwMTZsbHggcmFuZ2U6IDB4JTAxNmx4IC0gMHglMDE2bHggUEZOICVseFxcXFxuXFxcIixcXG4gNzE2OlxcdFxcdFxcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksXFxuIDcxNzpcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChuZXcpLFxcbiA3MTg6XFx0XFx0XFx0ICBzdGFydCwgZW5kLCBwZm4pO1xcbiA3MTk6XFx0XFxuIDcyMDpcXHRcXHQvKlxcbiA3MjE6XFx0XFx0ICogRm9yIG5vdywgYWxsb3cgYWxsIHBlcm1pc3Npb24gY2hhbmdlIGF0dGVtcHRzIGJ5IHJldHVybmluZyB0aGVcXG4gNzIyOlxcdFxcdCAqIGF0dGVtcHRlZCBwZXJtaXNzaW9ucy4gIFRoaXMgY2FuICdyZXR1cm4gb2xkJyB0byBhY3RpdmVseVxcbiA3MjM6XFx0XFx0ICogcmVmdXNlIHRoZSBwZXJtaXNzaW9uIGNoYW5nZSBhdCBhIGxhdGVyIHRpbWUuXFxuIDcyNDpcXHRcXHQgKi9cXG4gNzI1OlxcdFxcdHJldHVybiBuZXc7XFxuIDcyNjpcXHR9XFxuIDcyNzpcXHRcXG4gNzI4OlxcdC8qXFxuIDcyOTpcXHQgKiBMb29rdXAgdGhlIHBhZ2UgdGFibGUgZW50cnkgZm9yIGEgdmlydHVhbCBhZGRyZXNzIGluIGEgc3BlY2lmaWMgcGdkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozODoyMC45NDE0Njc0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3OTI4MjUzODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRXZhbHVhdGlvbiBmb3IgdGhlIENQQSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCB3YXJyYW50cyBmdXp6aW5nLiBUaGlzIGlzIGEgY29yZSBzdWJzeXN0ZW0gcmVsYXRlZCB0byB4ODYgTWVtb3J5IE1hbmFnZW1lbnQgYW5kIENoYW5nZSBQYWdlIEF0dHJpYnV0ZXMgKENQQSksIHNvIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ2l2ZSBpdCBhIGNsb3NlIGxvb2suXG5cbkZpcnN0LCB0aGUgY29yZSB0cmlhZ2UgcGhpbG9zb3BoeSBuZWVkcyB0byBiZSBjb25zaWRlcmVkLiAgVGhlIHByaW1hcnkgZ29hbCBvZiBmdXp6aW5nIGlzIHRvIHVuZWFydGggY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIG5ld2x5IGV4cG9zZWQgYnVncywgcGFydGljdWxhcmx5IHRob3NlIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLiBUaGUga2V5IGhlcmUgaXMgKnJlYWNoYWJpbGl0eSog4oCTIGNhbiB0aGUgY29kZSBhY3R1YWxseSBleGVjdXRlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgb3IgdmlhIGVtdWxhdGVkIGRldmljZXM/IFRoZSBkb2N1bWVudGF0aW9uIHN0cmVzc2VzIG5vdCB0cnVzdGluZyBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgb3IgcmVmYWN0b3JpbmcgY2xhaW1zIGJsaW5kbHksIGFuZCB0aGF0IG5ldy9tb2RpZmllZCBhc3NlcnRpb25zICptdXN0KiBiZSBmdXp6ZWQgaWYgdGhleSdyZSBpbiByZWFjaGFibGUgY29kZS4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvci5cblxuTm93IGxldCdzIGNvbnNpZGVyIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhlIHBhdGNoIHdvdWxkIGJlIGlnbm9yZWQgaWYgdGhlIGNvZGUgbW9kaWZpZWQgaXMgKnN0cmljdGx5KiBub24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSwgZGVjb3JhdGl2ZSBsb2dnaW5nLCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsIG9yIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4gIFRoYXQgbGFzdCBwb2ludCDigJMgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIOKAkyBpcyBpbXBvcnRhbnQuIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3Mgb25seSB1c2VkIGR1cmluZyBob3QtdW5wbHVnLCBvciBjb2RlIHNwZWNpZmljIHRvIG90aGVyIGFyY2hpdGVjdHVyZXMgYXJlIG91dC5cblxuVGhlbiwgdGhlcmUgYXJlIHRoZSBwb3NpdGl2ZSBjcml0ZXJpYS4gV2UgKmRlZmluaXRlbHkqIHdhbnQgdG8gZnV6eiBpZiB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBUaGlzIGluY2x1ZGVzIGFueSBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBsb2NraW5nLCBCUEYsIHRoZSBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLiBSZWZhY3RvcmluZyByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGFsZ29yaXRobSBmbG93cyBpcyBhbHNvIGEgdHJpZ2dlci4gRmluYWxseSwgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgdGhlIGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzICptYW5kYXRlcyogZnV6emluZy5cblxuTm93LCBsZXQncyBhbmFseXplIHRoZSBwYXRjaCBpdHNlbGYuIFRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhbiBgaWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KWAgY29uZGl0aW9uIHdpdGhpbiB0aGUgYHZlcmlmeV9yd3goKWAgZnVuY3Rpb24uIFRoaXMgYWZmZWN0cyBob3cgdGhlIFwiV15YIHZpb2xhdGlvblwiIGlzIGhhbmRsZWQuICBQcmV2aW91c2x5LCBgV0FSTl9PTkNFYCB3YXMgYWx3YXlzIHRyaWdnZXJlZC4gTm93LCBpZiBga2VybmVsX3NldF90b19yZWFkb25seWAgaXMgZmFsc2UsIGl0IGxvZ3MgYSBgcHJfd2Fybl9vbmNlYCBtZXNzYWdlLiBUaGUga2V5IGlzIHdoZW4gaXMgdGhpcyBga2VybmVsX3NldF90b19yZWFkb25seWAgZmxhZyBmYWxzZT9cblxuQWgsIHJpZ2h0IOKAkyBga2VybmVsX3NldF90b19yZWFkb25seWAgaXMgemVybyAqZHVyaW5nIGJvb3QqLCAqYmVmb3JlKiBgbWFya19yb2RhdGFfcm8oKWAgaXMgY2FsbGVkLiBUaGlzIGlzIGltcG9ydGFudDogaXQncyBhbHNvIHplcm8gd2hlbiB0aGUga2VybmVsIGlzIGJvb3RlZCB3aXRoIGByb2RhdGE9b2ZmYC4gU3l6a2FsbGVyIG1pZ2h0IGJvb3Qgd2l0aCBgcm9kYXRhPW9mZmAsIHdoaWNoIG1lYW5zIHRoaXMgbmV3IGJyYW5jaCBjb3VsZCBiZSBmcmVxdWVudGx5IHRha2VuIGR1cmluZyBmdXp6aW5nLiBDUEEgKENoYW5nZSBQYWdlIEF0dHJpYnV0ZSkgaXMgY2FsbGVkIGF0IHJ1bnRpbWUgd2hlbiBtb2R1bGVzIGFyZSBsb2FkZWQvdW5sb2FkZWQsIEJQRiBKSVQgYWxsb2NhdGVzL2ZyZWVzIGV4ZWN1dGFibGUgbWVtb3J5LCBhbmQgc2V0X21lbW9yeV9yby9ydy94L254L3VjL3diIGlzIGNhbGxlZCB2aWEgdmFyaW91cyBkcml2ZXJzIGFuZCBzdWJzeXN0ZW1zLiBUaGlzIHN1Z2dlc3RzIHRoZSBjb2RlIGlzICphYnNvbHV0ZWx5KiByZWFjaGFibGUuXG5cblRvIGJlIGNlcnRhaW4sIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdobyBjYWxscyBDUEEgZnVuY3Rpb25zIGF0IHJ1bnRpbWUuIEkgbmVlZCB0byBncmVwIHRoZSBrZXJuZWwgZm9yIGNhbGxlcnMgb2YgYGNoYW5nZV9wYWdlX2F0dHJgIG9yIGBzZXRfbWVtb3J5X2AgdG8gY29uZmlybSByZWFjaGFiaWxpdHkuXG5cbkJhc2VkIG9uIHRoaXMsIG15IHByZWxpbWluYXJ5IGV2YWx1YXRpb24gaXMgKnllcyosIHRoaXMgcGF0Y2ggKmRvZXMqIHdhcnJhbnQgZnV6emluZy4gIFRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIG5ldyBjb2RlIHBhdGggdGhhdCdzIGxpa2VseSByZWFjaGFibGUsIGVzcGVjaWFsbHkgd2l0aCBgcm9kYXRhPW9mZmAsIGFuZCBpbnZvbHZlcyBhIHBvdGVudGlhbGx5IGltcG9ydGFudCBjaGFuZ2UgaW4gYmVoYXZpb3IuIFRoaXMgZGVmaW5pdGVseSBoYXMgdGhlIHBvdGVudGlhbCB0byBleHBvc2UgbGF0ZW50IGJ1Z3Mgb3IgdHJpZ2dlciBuZXcgYXNzZXJ0aW9ucywgc28gSSB3b3VsZCBmbGFnIHRoaXMgZm9yIHRoZSBmdXp6aW5nIHF1ZXVlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA4MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozODoyOC44Njk3MjMyMzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NTY3Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9tZW1vcnlfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc2MSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuYXJjaC94ODYvYm9vdC9zdGFydHVwL2V4cG9ydHMuaD02PVBST1ZJREUoZWFybHlfc2V0X3BhZ2VzX3N0YXRlXFx0XFx0PSBfX3BpX2Vhcmx5X3NldF9wYWdlc19zdGF0ZSk7XFxuYXJjaC94ODYvYm9vdC9zdGFydHVwL2V4cG9ydHMuaDo3OlBST1ZJREUoZWFybHlfc25wX3NldF9tZW1vcnlfcHJpdmF0ZVxcdD0gX19waV9lYXJseV9zbnBfc2V0X21lbW9yeV9wcml2YXRlKTtcXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvZXhwb3J0cy5oOjg6UFJPVklERShlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWRcXHQ9IF9fcGlfZWFybHlfc25wX3NldF9tZW1vcnlfc2hhcmVkKTtcXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvZXhwb3J0cy5oLTktUFJPVklERShnZXRfaHZfZmVhdHVyZXNcXHRcXHRcXHQ9IF9fcGlfZ2V0X2h2X2ZlYXR1cmVzKTtcXG4tLVxcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9tYXBfa2VybmVsLmM9MzM9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHNtZV9wb3N0cHJvY2Vzc19zdGFydHVwKHN0cnVjdCBib290X3BhcmFtcyAqYnAsXFxuLS1cXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvbWFwX2tlcm5lbC5jLTU5LVxcdFxcdFxcdCAqIG1hcHBpbmcgKGtlcm5lbCAudGV4dCkuIFBWQUxJREFURSwgYnkgd2F5IG9mXFxuYXJjaC94ODYvYm9vdC9zdGFydHVwL21hcF9rZXJuZWwuYzo2MDpcXHRcXHRcXHQgKiBlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQoKSwgcmVxdWlyZXMgYSB2YWxpZCB2aXJ0dWFsXFxuYXJjaC94ODYvYm9vdC9zdGFydHVwL21hcF9rZXJuZWwuYy02MS1cXHRcXHRcXHQgKiBhZGRyZXNzIGJ1dCB0aGUga2VybmVsIGlzIGN1cnJlbnRseSBydW5uaW5nIG9mZiBvZiB0aGUgaWRlbnRpdHlcXG4tLVxcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9tYXBfa2VybmVsLmMtNjMtXFx0XFx0XFx0ICovXFxuYXJjaC94ODYvYm9vdC9zdGFydHVwL21hcF9rZXJuZWwuYzo2NDpcXHRcXHRcXHRlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQocGFkZHIsIHBhZGRyLCBQVFJTX1BFUl9QTUQpO1xcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9tYXBfa2VybmVsLmMtNjUtXFxuLS1cXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc2V2LXN0YXJ0dXAuYz00OT1lYXJseV9zZXRfcGFnZXNfc3RhdGUodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkcixcXG4tLVxcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9zZXYtc3RhcnR1cC5jLTY2LVxcbmFyY2gveDg2L2Jvb3Qvc3RhcnR1cC9zZXYtc3RhcnR1cC5jOjY3OnZvaWQgX19pbml0IGVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkcixcXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc2V2LXN0YXJ0dXAuYy02OC1cXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBucGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc2V2LXN0YXJ0dXAuYy05MS1cXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc2V2LXN0YXJ0dXAuYzo5Mjp2b2lkIF9faW5pdCBlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkcixcXG5hcmNoL3g4Ni9ib290L3N0YXJ0dXAvc2V2LXN0YXJ0dXAuYy05My1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5wYWdlcylcXG4tLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYz0zODc9c3RhdGljIHZvaWQgc2V0X3BhZ2VzX3N0YXRlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLCBpbnQgb3ApXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNDA1LVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYzo0MDY6dm9pZCBzbnBfc2V0X21lbW9yeV9zaGFyZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBucGFnZXMpXFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTQwNy17XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNDEzLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYzo0MTQ6dm9pZCBzbnBfc2V0X21lbW9yeV9wcml2YXRlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy00MTUte1xcbi0tXFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jPTU0ND1zdGF0aWMgdm9pZCB1bnNoYXJlX2FsbF9tZW1vcnkodm9pZClcXG4tLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy01ODUtXFx0XFx0XFx0c2V0X3B0ZV9lbmMocHRlLCBsZXZlbCwgKHZvaWQgKilhZGRyKTtcXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6NTg2OlxcdFxcdFxcdHNucF9zZXRfbWVtb3J5X3ByaXZhdGUoYWRkciwgbnBhZ2VzKTtcXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNTg3LVxcdFxcdH1cXG4tLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy02MDMtXFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKV9fc3RhcnRfYnNzX2RlY3J5cHRlZDtcXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6NjA0OlxcdHNucF9zZXRfbWVtb3J5X3ByaXZhdGUoYWRkciwgbnBhZ2VzKTtcXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNjA1LVxcbi0tXFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jPTYxMD12b2lkIHNucF9rZXhlY19iZWdpbih2b2lkKVxcbi0tXFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTYyMy1cXHQgKi9cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6NjI0OlxcdGlmICghc2V0X21lbW9yeV9lbmNfc3RvcF9jb252ZXJzaW9uKCkpXFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTYyNS1cXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gc3RvcCBzaGFyZWRcXHUwMDNjLVxcdTAwM2Vwcml2YXRlIGNvbnZlcnNpb25zXFxcXG5cXFwiKTtcXG4tLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYz02ODc9dm9pZCBzbnBfa2V4ZWNfZmluaXNoKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtNzIxLVxcdFxcdHNldF9wdGVfZW5jKHB0ZSwgbGV2ZWwsICh2b2lkICopYWRkcik7XFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jOjcyMjpcXHRcXHRzbnBfc2V0X21lbW9yeV9wcml2YXRlKGFkZHIsIChzaXplIC8gUEFHRV9TSVpFKSk7XFxuYXJjaC94ODYvY29jby9zZXYvY29yZS5jLTcyMy1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM9MTIwOD1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9naGNiKGludCBjcHUpXFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtMTIxNC1cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM6MTIxNTpcXHRlcnIgPSBlYXJseV9zZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZylcXHUwMDI2ZGF0YS1cXHUwMDNlZ2hjYl9wYWdlLFxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy0xMjE2LVxcdFxcdFxcdFxcdFxcdCBzaXplb2YoZGF0YS1cXHUwMDNlZ2hjYl9wYWdlKSk7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM9MTQ3Mz1zdGF0aWMgdm9pZCBmcmVlX3NoYXJlZF9wYWdlcyh2b2lkICpidWYsIHNpemVfdCBzeilcXG4tLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy0xNDgwLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYzoxNDgxOlxcdHJldCA9IHNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKWJ1ZiwgbnBhZ2VzKTtcXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtMTQ4Mi1cXHRpZiAocmV0KSB7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmM9MTQ5MD1zdGF0aWMgdm9pZCAqYWxsb2Nfc2hhcmVkX3BhZ2VzKHNpemVfdCBzeilcXG4tLVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYy0xNDk5LVxcbmFyY2gveDg2L2NvY28vc2V2L2NvcmUuYzoxNTAwOlxcdHJldCA9IHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKSwgbnBhZ2VzKTtcXG5hcmNoL3g4Ni9jb2NvL3Nldi9jb3JlLmMtMTUwMS1cXHRpZiAocmV0KSB7XFxuLS1cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYz0xMDEwPXN0YXRpYyB2b2lkIHRkeF9rZXhlY19iZWdpbih2b2lkKVxcbi0tXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTAyMC1cXHQgKi9cXG5hcmNoL3g4Ni9jb2NvL3RkeC90ZHguYzoxMDIxOlxcdGlmICghc2V0X21lbW9yeV9lbmNfc3RvcF9jb252ZXJzaW9uKCkpXFxuYXJjaC94ODYvY29jby90ZHgvdGR4LmMtMTAyMi1cXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gc3RvcCBzaGFyZWRcXHUwMDNjLVxcdTAwM2Vwcml2YXRlIGNvbnZlcnNpb25zXFxcXG5cXFwiKTtcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmM9MTE4PXN0YXRpYyBpbnQgaHZfY3B1X2luaXQodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9odl9pbml0LmMtMTU4LVxcdFxcdFxcdGlmICgqaHZwIFxcdTAwMjZcXHUwMDI2ICFtc19oeXBlcnYucGFyYXZpc29yX3ByZXNlbnQgXFx1MDAyNlxcdTAwMjYgaHZfaXNvbGF0aW9uX3R5cGVfc25wKCkpIHtcXG5hcmNoL3g4Ni9oeXBlcnYvaHZfaW5pdC5jOjE1OTpcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0Uoc2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpKCpodnApLCAxKSk7XFxuYXJjaC94ODYvaHlwZXJ2L2h2X2luaXQuYy0xNjAtXFx0XFx0XFx0XFx0bWVtc2V0KCpodnAsIDAsIFBBR0VfU0laRSk7XFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM9NjE3PXN0YXRpYyB2b2lkIGh2X3Z0b21fa2V4ZWNfYmVnaW4odm9pZClcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy02MjctXFx0ICovXFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjYyODpcXHRpZiAoIXNldF9tZW1vcnlfZW5jX3N0b3BfY29udmVyc2lvbigpKVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy02MjktXFx0XFx0cHJfd2FybihcXFwiRmFpbGVkIHRvIHN0b3Agc2hhcmVkXFx1MDAzYy1cXHUwMDNlcHJpdmF0ZSBjb252ZXJzaW9uc1xcXFxuXFxcIik7XFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM9Njc3PXN0YXRpYyBpbnQgaHZfbWFya19ncGFfdmlzaWJpbGl0eSh1MTYgY291bnQsIGNvbnN0IHU2NCBwZm5bXSxcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy03MzctICogV2hlbiB0cmFuc2l0aW9uaW5nIG1lbW9yeSBiZXR3ZWVuIGVuY3J5cHRlZCBhbmQgZGVjcnlwdGVkLCB0aGUgY2FsbGVyXFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjczODogKiBvZiBzZXRfbWVtb3J5X2VuY3J5cHRlZCgpIG9yIHNldF9tZW1vcnlfZGVjcnlwdGVkKCkgaXMgcmVzcG9uc2libGUgZm9yXFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jLTczOS0gKiBlbnN1cmluZyB0aGF0IHRoZSBtZW1vcnkgaXNuJ3QgaW4gdXNlIGFuZCBpc24ndCByZWZlcmVuY2VkIHdoaWxlIHRoZVxcbi0tXFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jPTc1Nj1zdGF0aWMgaW50IGh2X3Z0b21fY2xlYXJfcHJlc2VudCh1bnNpZ25lZCBsb25nIGtidWZmZXIsIGludCBwYWdlY291bnQsIGJvb2wgZW5jKVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy03NTcte1xcbmFyY2gveDg2L2h5cGVydi9pdm0uYzo3NTg6XFx0cmV0dXJuIHNldF9tZW1vcnlfbnAoa2J1ZmZlciwgcGFnZWNvdW50KTtcXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmMtNzU5LX1cXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYz03Njk9c3RhdGljIGludCBodl92dG9tX3NldF9ob3N0X3Zpc2liaWxpdHkodW5zaWduZWQgbG9uZyBrYnVmZmVyLCBpbnQgcGFnZWNvdW50LCBib29sIGVuYylcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy03ODEtXFx0XFx0cmV0ID0gLUVOT01FTTtcXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmM6NzgyOlxcdFxcdGdvdG8gZXJyX3NldF9tZW1vcnlfcDtcXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmMtNzgzLVxcdH1cXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy04MDgtXFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjgwOTplcnJfc2V0X21lbW9yeV9wOlxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy04MTAtXFx0LypcXG4tLVxcbmFyY2gveDg2L2h5cGVydi9pdm0uYy04MTUtXFx0ICovXFxuYXJjaC94ODYvaHlwZXJ2L2l2bS5jOjgxNjpcXHRlcnIgPSBzZXRfbWVtb3J5X3Aoa2J1ZmZlciwgcGFnZWNvdW50KTtcXG5hcmNoL3g4Ni9oeXBlcnYvaXZtLmMtODE3LVxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgIXJldClcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oPTIzOD1zdGF0aWMgaW5saW5lIHUzMiBlZmk2NF9jb252ZXJ0X3N0YXR1cyhlZmlfc3RhdHVzX3Qgc3RhdHVzKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmgtMjk4LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oOjI5OTojZGVmaW5lIF9fZWZpNjRfYXJnbWFwX3NldF9tZW1vcnlfc3BhY2VfYXR0cmlidXRlcyhwaHlzLCBzaXplLCBmbGFncykgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oLTMwMC1cXHQoX19lZmk2NF9zcGxpdChwaHlzKSwgX19lZmk2NF9zcGxpdChzaXplKSwgX19lZmk2NF9zcGxpdChmbGFncykpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaC0zMTYtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmg6MzE3OiNkZWZpbmUgX19lZmk2NF9hcmdtYXBfc2V0X21lbW9yeV9hdHRyaWJ1dGVzKHByb3RvY29sLCBwaHlzLCBzaXplLCBmbGFncykgXFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oLTMxOC1cXHQoKHByb3RvY29sKSwgX19lZmk2NF9zcGxpdChwaHlzKSwgX19lZmk2NF9zcGxpdChzaXplKSwgX19lZmk2NF9zcGxpdChmbGFncykpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZmVuY2UuaD0yMj1zdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9rZmVuY2VfaW5pdF9wb29sKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZmVuY2UuaC0zMy1cXHRcXHRpZiAobGV2ZWwgIT0gUEdfTEVWRUxfNEspXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va2ZlbmNlLmg6MzQ6XFx0XFx0XFx0c2V0X21lbW9yeV80ayhhZGRyLCAxKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZmVuY2UuaC0zNS1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1fZW5jcnlwdC5oPTUxPXZvaWQgc21lX2VuYWJsZShzdHJ1Y3QgYm9vdF9wYXJhbXMgKmJwKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1fZW5jcnlwdC5oLTUyLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21lbV9lbmNyeXB0Lmg6NTM6aW50IF9faW5pdCBlYXJseV9zZXRfbWVtb3J5X2RlY3J5cHRlZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21lbV9lbmNyeXB0Lmg6NTQ6aW50IF9faW5pdCBlYXJseV9zZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21lbV9lbmNyeXB0LmgtNTUtdm9pZCBfX2luaXQgZWFybHlfc2V0X21lbV9lbmNfZGVjX2h5cGVyY2FsbCh1bnNpZ25lZCBsb25nIHZhZGRyLFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbWVtX2VuY3J5cHQuaD04OT1zdGF0aWMgaW5saW5lIGludCBfX2luaXRcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1fZW5jcnlwdC5oOjkwOmVhcmx5X3NldF9tZW1vcnlfZGVjcnlwdGVkKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkgeyByZXR1cm4gMDsgfVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21lbV9lbmNyeXB0LmgtOTEtc3RhdGljIGlubGluZSBpbnQgX19pbml0XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbWVtX2VuY3J5cHQuaDo5MjplYXJseV9zZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpIHsgcmV0dXJuIDA7IH1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1fZW5jcnlwdC5oLTkzLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXRcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC04LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo5OiNkZWZpbmUgc2V0X21lbW9yeV9yb3ggc2V0X21lbW9yeV9yb3hcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6MTA6aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtMTEtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTEyLS8qXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjEzOiAqIFRoZSBzZXRfbWVtb3J5XyogQVBJIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB2YXJpb3VzIGF0dHJpYnV0ZXMgb2YgYSB2aXJ0dWFsXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTE0LSAqIGFkZHJlc3MgcmFuZ2UuIFRoZSBhdHRyaWJ1dGVzIGluY2x1ZGU6XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtNDAtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQxOmludCBfc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQyOmludCBfc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQzOmludCBfc2V0X21lbW9yeV93dCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQ0OmludCBfc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQ1OmludCBzZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NDY6aW50IHNldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo0NzppbnQgc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjQ4OmludCBzZXRfbWVtb3J5X25wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NDk6aW50IHNldF9tZW1vcnlfcCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjUwOmludCBzZXRfbWVtb3J5XzRrKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtNTEtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjUyOmJvb2wgc2V0X21lbW9yeV9lbmNfc3RvcF9jb252ZXJzaW9uKHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo1MzppbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo1NDppbnQgc2V0X21lbW9yeV9kZWNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC01NS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5Lmg6NTY6aW50IHNldF9tZW1vcnlfbnBfbm9hbGlhcyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjU3OmludCBzZXRfbWVtb3J5X25vbmdsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjU4OmludCBzZXRfbWVtb3J5X2dsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTU5LVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oPTYyPWludCBzZXRfcGFnZXNfYXJyYXlfd2Ioc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IGFkZHJpbmFycmF5KTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC02OC0gKiBtZW1vcnkgdGhhdCB0aGUgc3RydWN0IHBhZ2UgcmVwcmVzZW50cywgYW5kIGludGVybmFsbHkganVzdFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo2OTogKiBjYWxsIHRoZSBzZXRfbWVtb3J5XyogZnVuY3Rpb24uIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjcwOiAqIHNldF9tZW1vcnlfKiBmdW5jdGlvbiBmb3IgbW9yZSBkZXRhaWxzIG9uIGNvbnZlbnRpb25zLlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC03MS0gKlxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTc5LSAqIGdldCBhIHN0cnVjdCBwYWdlKiB0aGF0IHRoZSBvbGQgQVBJIHJlcXVpcmVkLlxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo4MDogKiBUbyBjb252ZXJ0IHRoZXNlIGNhc2VzLCB1c2Ugc2V0X21lbW9yeV8qKCkgb24gdGhlIG9yaWdpbmFsXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTgxLSAqIHZpcnR1YWwgYWRkcmVzcywgZG8gbm90IHVzZSB0aGVzZSBmdW5jdGlvbnMuXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaD01MDU9dm9pZCBzbnBfcmVnaXN0ZXJfZ2hjYl9lYXJseSh1bnNpZ25lZCBsb25nIHBhZGRyKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXYuaDo1MDY6dm9pZCBlYXJseV9zbnBfc2V0X21lbW9yeV9wcml2YXRlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgcGFkZHIsXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNTA3LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjUwODp2b2lkIGVhcmx5X3NucF9zZXRfbWVtb3J5X3NoYXJlZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHBhZGRyLFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTUwOS1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjUxMDp2b2lkIHNucF9zZXRfbWVtb3J5X3NoYXJlZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NTExOnZvaWQgc25wX3NldF9tZW1vcnlfcHJpdmF0ZSh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNTEyLXZvaWQgc25wX3NldF93YWtldXBfc2Vjb25kYXJ5X2NwdSh2b2lkKTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oPTYxMj1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjEzOmVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyBucGFnZXMpIHsgfVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oLTYxNC1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjE1OmVhcmx5X3NucF9zZXRfbWVtb3J5X3NoYXJlZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHBhZGRyLCB1bnNpZ25lZCBsb25nIG5wYWdlcykgeyB9XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2Lmg6NjE2OnN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0X21lbW9yeV9zaGFyZWQodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBucGFnZXMpIHsgfVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Nldi5oOjYxNzpzdGF0aWMgaW5saW5lIHZvaWQgc25wX3NldF9tZW1vcnlfcHJpdmF0ZSh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIG5wYWdlcykgeyB9XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V2LmgtNjE4LXN0YXRpYyBpbmxpbmUgdm9pZCBzbnBfc2V0X3dha2V1cF9zZWNvbmRhcnlfY3B1KHZvaWQpIHsgfVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdmdhLmgtMjQtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FNRF9NRU1fRU5DUllQVCkpXFx0XFx0XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3ZnYS5oOjI1OlxcdFxcdHNldF9tZW1vcnlfZGVjcnlwdGVkKHN0YXJ0LCAocykgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFx0XFxcXFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3ZnYS5oLTI2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jPTIxOD1zdGF0aWMgdm9pZCAqaXRzX2FsbG9jKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yMzItXFx0aWYgKHBhZ2VzID09IFxcdTAwMjZpdHNfcGFnZXMpXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MjMzOlxcdFxcdHNldF9tZW1vcnlfeCgodW5zaWduZWQgbG9uZylwYWdlLCAxKTtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yMzQtXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYW1kX2dhcnRfNjQuYz02MTk9c3RhdGljIF9faW5pdCBpbnQgaW5pdF9hbWRfZ2F0dChzdHJ1Y3QgYWdwX2tlcm5faW5mbyAqaW5mbylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hbWRfZ2FydF82NC5jLTY1NC1cXHRcXHRwYW5pYyhcXFwiQ2Fubm90IGFsbG9jYXRlIEdBVFQgdGFibGVcXFwiKTtcXG5hcmNoL3g4Ni9rZXJuZWwvYW1kX2dhcnRfNjQuYzo2NTU6XFx0aWYgKHNldF9tZW1vcnlfdWMoKHVuc2lnbmVkIGxvbmcpZ2F0dCwgZ2F0dF9zaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpKVxcbmFyY2gveDg2L2tlcm5lbC9hbWRfZ2FydF82NC5jLTY1Ni1cXHRcXHRwYW5pYyhcXFwiQ291bGQgbm90IHNldCBHQVJUIFBURXMgdG8gdW5jYWNoZWFibGUgcGFnZXNcXFwiKTtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hbWRfZ2FydF82NC5jPTcxND1pbnQgX19pbml0IGdhcnRfaW9tbXVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2FtZF9nYXJ0XzY0LmMtNzgxLVxcdCAqL1xcbmFyY2gveDg2L2tlcm5lbC9hbWRfZ2FydF82NC5jOjc4MjpcXHRzZXRfbWVtb3J5X25wKCh1bnNpZ25lZCBsb25nKV9fdmEoaW9tbXVfYnVzX2Jhc2UpLFxcbmFyY2gveDg2L2tlcm5lbC9hbWRfZ2FydF82NC5jLTc4My1cXHRcXHRcXHRcXHRpb21tdV9zaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYz01NTk9c3RhdGljIF9faW5pdCB2b2lkIHNldF9ibG9ja19zaXplKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jLTU2NC1cXHRcXHQvKiBhZGp1c3QgZm9yIGZmcyByZXR1cm4gb2YgMS4uNjQgKi9cXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jOjU2NTpcXHRcXHRzZXRfbWVtb3J5X2Jsb2NrX3NpemVfb3JkZXIob3JkZXIgLSAxKTtcXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jLTU2Ni1cXHRcXHRwcl9pbmZvKFxcXCJVVjogbWVtX2Jsb2NrX3NpemUgc2V0IHRvIDB4JWx4XFxcXG5cXFwiLCBtZW1fYmxvY2tfc2l6ZSk7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jLTU2OS1cXHRcXHRwcl9lcnIoXFxcIlVWOiBtZW1fYmxvY2tfc2l6ZSBlcnJvciB3aXRoIDB4JWx4XFxcXG5cXFwiLCBtZW1fYmxvY2tfc2l6ZSk7XFxuYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYzo1NzA6XFx0XFx0c2V0X21lbW9yeV9ibG9ja19zaXplX29yZGVyKDMxKTtcXG5hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jLTU3MS1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jPTI1ODg9dm9pZCBfX2luaXQgYXJjaF9jcHVfZmluYWxpemVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYy0yNjYzLVxcdFxcdGlmICghZGlyZWN0X2dicGFnZXMpXFxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYzoyNjY0OlxcdFxcdFxcdHNldF9tZW1vcnlfNGsoKHVuc2lnbmVkIGxvbmcpX192YSgwKSwgMSk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYy0yNjY1LVxcdH0gZWxzZSB7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM9MzA5PWNyZWF0ZV90cmFtcG9saW5lKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGludCAqdHJhbXBfc2l6ZSlcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00MjctXFxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jOjQyODpcXHRzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZyl0cmFtcG9saW5lLCBucGFnZXMpO1xcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00MjktXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKXRyYW1wb2xpbmU7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM9NDM1PXZvaWQgc2V0X2Z0cmFjZV9vcHNfcm8odm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00NTYtXFx0XFx0bnBhZ2VzID0gRElWX1JPVU5EX1VQKHNpemUsIFBBR0VfU0laRSk7XFxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jOjQ1NzpcXHRcXHRzZXRfbWVtb3J5X3JvKCh1bnNpZ25lZCBsb25nKW9wcy1cXHUwMDNldHJhbXBvbGluZSwgbnBhZ2VzKTtcXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMtNDU4LVxcdH0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX29wKG9wcyk7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvaWR0LmM9Mjk0PXZvaWQgX19pbml0IGlkdF9zZXR1cF9hcGljX2FuZF9pcnFfZ2F0ZXModm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9pZHQuYy0zMjEtXFx0LyogTWFrZSB0aGUgSURUIHRhYmxlIHJlYWQgb25seSAqL1xcbmFyY2gveDg2L2tlcm5lbC9pZHQuYzozMjI6XFx0c2V0X21lbW9yeV9ybygodW5zaWduZWQgbG9uZylcXHUwMDI2aWR0X3RhYmxlLCAxKTtcXG5hcmNoL3g4Ni9rZXJuZWwvaWR0LmMtMzIzLVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bS5jPTQzMj1zdGF0aWMgaW5saW5lIF9faW5pdCB2b2lkIF9fc2V0X3BlcmNwdV9kZWNyeXB0ZWQodm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIHNpemUpXFxuYXJjaC94ODYva2VybmVsL2t2bS5jLTQzMy17XFxuYXJjaC94ODYva2VybmVsL2t2bS5jOjQzNDpcXHRlYXJseV9zZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZykgcHRyLCBzaXplKTtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtLmMtNDM1LX1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jPTIyNT1zdGF0aWMgdm9pZCBfX2luaXQga3ZtY2xvY2tfaW5pdF9tZW0odm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTI1MC1cXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfTUVNX0VOQ1JZUFQpKSB7XFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmM6MjUxOlxcdFxcdHIgPSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZykgaHZjbG9ja19tZW0sXFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMjUyLVxcdFxcdFxcdFxcdFxcdCAxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMtMjU1LVxcdFxcdFxcdGh2Y2xvY2tfbWVtID0gTlVMTDtcXG5hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYzoyNTY6XFx0XFx0XFx0cHJfd2FybihcXFwia3ZtY2xvY2s6IHNldF9tZW1vcnlfZGVjcnlwdGVkKCkgZmFpbGVkLiBEaXNhYmxpbmdcXFxcblxcXCIpO1xcbmFyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jLTI1Ny1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jPTEzNT1pbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlKHN0cnVjdCBraW1hZ2UgKmltYWdlKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYy0xMzgtXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYzoxMzk6XFx0c2V0X21lbW9yeV94KCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhpbWFnZS1cXHUwMDNlY29udHJvbF9jb2RlX3BhZ2UpLCAxKTtcXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jLTE0MC1cXHRlcnJvciA9IG1hY2hpbmVfa2V4ZWNfYWxsb2NfcGFnZV90YWJsZXMoaW1hZ2UpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYz0xNTE9dm9pZCBtYWNoaW5lX2tleGVjX2NsZWFudXAoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYy0xNTIte1xcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmM6MTUzOlxcdHNldF9tZW1vcnlfbngoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKGltYWdlLVxcdTAwM2Vjb250cm9sX2NvZGVfcGFnZSksIDEpO1xcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMtMTU0LVxcdG1hY2hpbmVfa2V4ZWNfZnJlZV9wYWdlX3RhYmxlcyhpbWFnZSk7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jPTM0Mz1pbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlKHN0cnVjdCBraW1hZ2UgKmltYWdlKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy0zNjQtXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYzozNjU6XFx0c2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpY29udHJvbF9wYWdlLCAxKTtcXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTM2Ni1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM9MzcwPXZvaWQgbWFjaGluZV9rZXhlY19jbGVhbnVwKHN0cnVjdCBraW1hZ2UgKmltYWdlKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy0zNzMtXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYzozNzQ6XFx0c2V0X21lbW9yeV9ueCgodW5zaWduZWQgbG9uZyljb250cm9sX3BhZ2UsIDEpO1xcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM6Mzc1OlxcdHNldF9tZW1vcnlfcncoKHVuc2lnbmVkIGxvbmcpY29udHJvbF9wYWdlLCAxKTtcXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTM3Ni1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM9NjQ4PXN0YXRpYyB2b2lkIGtleGVjX21hcmtfZG1fY3J5cHRfa2V5cyhib29sIHByb3RlY3QpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTY1Ny1cXHRcXHRpZiAocHJvdGVjdClcXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jOjY1ODpcXHRcXHRcXHRzZXRfbWVtb3J5X25wKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChzdGFydF9wYWRkciksIG5yX3BhZ2VzKTtcXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTY1OS1cXHRcXHRlbHNlXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYzo2NjA6XFx0XFx0XFx0c2V0X21lbW9yeV9wKCh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChzdGFydF9wYWRkciksIG5yX3BhZ2VzKTtcXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTY2MS1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jPTY4Nj1pbnQgYXJjaF9rZXhlY19wb3N0X2FsbG9jX3BhZ2VzKHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBpbnQgcGFnZXMsIGdmcF90IGdmcClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMtNjk1LVxcdCAqL1xcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM6Njk2OlxcdHJldHVybiBzZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZyl2YWRkciwgcGFnZXMpO1xcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMtNjk3LX1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmM9Njk5PXZvaWQgYXJjaF9rZXhlY19wcmVfZnJlZV9wYWdlcyh2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IHBhZ2VzKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYy03MDctXFx0ICovXFxuYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYzo3MDg6XFx0c2V0X21lbW9yeV9lbmNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIHBhZ2VzKTtcXG5hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jLTcwOS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYz0yOTEwPWludCBrdm1fYWxsb2NfYXBpY19hY2Nlc3NfcGFnZShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0yOTE5LVxcbmFyY2gveDg2L2t2bS9sYXBpYy5jOjI5MjA6XFx0aHZhID0gX194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVCxcXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0yOTIxLVxcdFxcdFxcdFxcdCAgICAgIEFQSUNfREVGQVVMVF9QSFlTX0JBU0UsIFBBR0VfU0laRSk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYz0yOTMxPXZvaWQga3ZtX2luaGliaXRfYXBpY19hY2Nlc3NfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0yOTQyLVxcdGlmIChrdm0tXFx1MDAzZWFyY2guYXBpY19hY2Nlc3NfbWVtc2xvdF9lbmFibGVkKSB7XFxuYXJjaC94ODYva3ZtL2xhcGljLmM6Mjk0MzpcXHRcXHRfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIEFQSUNfQUNDRVNTX1BBR0VfUFJJVkFURV9NRU1TTE9ULCAwLCAwKTtcXG5hcmNoL3g4Ni9rdm0vbGFwaWMuYy0yOTQ0LVxcdFxcdC8qXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY4MDE9c3RhdGljIHZvaWQgZnJlZV9tbXVfcGFnZXMoc3RydWN0IGt2bV9tbXUgKm1tdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjgwMy1cXHRpZiAoIXRkcF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IG1tdS1cXHUwMDNlcGFlX3Jvb3QpXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2ODA0OlxcdFxcdHNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKW1tdS1cXHUwMDNlcGFlX3Jvb3QsIDEpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjgwNS1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpbW11LVxcdTAwM2VwYWVfcm9vdCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY4MTA9c3RhdGljIGludCBfX2t2bV9tbXVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tbXUgKm1tdSwgc3RydWN0IGt2bV9wYWdld2FsayAqdylcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjg1NC1cXHRpZiAoIXRkcF9lbmFibGVkKVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6Njg1NTpcXHRcXHRzZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZyltbXUtXFx1MDAzZXBhZV9yb290LCAxKTtcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY4NTYtXFx0ZWxzZVxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz04MTEzPXN0YXRpYyB2b2lkIGh1Z2VwYWdlX3NldF9taXhlZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgxMTgtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo4MTE5OmJvb2wga3ZtX2FyY2hfcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy04MTIwLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9ODE4Mj1zdGF0aWMgYm9vbCBodWdlcGFnZV9oYXNfYXR0cnMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy04MTk4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODE5OTpib29sIGt2bV9hcmNoX3Bvc3Rfc2V0X21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgyMDAtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NDAyOT1zdGF0aWMgaW50IGluaXRfcm1vZGVfaWRlbnRpdHlfbWFwKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNDA0NC1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjQwNDU6XFx0dWFkZHIgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy00MDQ2LVxcdFxcdFxcdFxcdFxcdElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1QsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTUyNzY9aW50IHZteF9zZXRfdHNzX2FkZHIoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgYWRkcilcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNTI4My1cXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NTI4NDpcXHRyZXQgPSBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIFRTU19QUklWQVRFX01FTVNMT1QsIGFkZHIsXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy01Mjg1LVxcdFxcdFxcdFxcdCAgICAgIFBBR0VfU0laRSAqIDMpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTk4NDM9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkxNi0vKipcXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTkxNzogKiBfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbjogU2V0dXAgS1ZNIGludGVybmFsIG1lbW9yeSBzbG90XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk5MTgtICpcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05OTM3LSAqL1xcbmFyY2gveDg2L2t2bS94ODYuYzo5OTM4OnZvaWQgX191c2VyICogX194ODZfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgaWQsIGdwYV90IGdwYSxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTkzOS1cXHRcXHRcXHRcXHQgICAgICB1MzIgc2l6ZSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05OTg5LX1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTk5MDpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoX194ODZfc2V0X21lbW9yeV9yZWdpb24pO1xcbmFyY2gveDg2L2t2bS94ODYuYy05OTkxLVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMDE0PXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjItXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAwMjM6XFx0XFx0X194ODZfc2V0X21lbW9yeV9yZWdpb24oa3ZtLCBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjQtXFx0XFx0XFx0XFx0XFx0MCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDI1OlxcdFxcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgSURFTlRJVFlfUEFHRVRBQkxFX1BSSVZBVEVfTUVNU0xPVCxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAwMjYtXFx0XFx0XFx0XFx0XFx0MCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEwMDI3OlxcdFxcdF9feDg2X3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgVFNTX1BSSVZBVEVfTUVNU0xPVCwgMCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMDI4LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMDA5Mz1zdGF0aWMgaW50IGt2bV9hbGxvY19tZW1zbG90X21ldGFkYXRhKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDEwMC1cXHQgKiBDbGVhciBvdXQgdGhlIHByZXZpb3VzIGFycmF5IHBvaW50ZXJzIGZvciB0aGUgS1ZNX01SX01PVkUgY2FzZS4gIFRoZVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMDEwMTpcXHQgKiBvbGQgYXJyYXlzIHdpbGwgYmUgZnJlZWQgYnkga3ZtX3NldF9tZW1vcnlfcmVnaW9uKCkgaWYgaW5zdGFsbGluZ1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMDEwMi1cXHQgKiB0aGUgbmV3IG1lbXNsb3QgaXMgc3VjY2Vzc2Z1bC5cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuaD01MjY9aW50IGt2bV9nZXRfbnJfcGVuZGluZ19ubWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5oLTUyNy1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg6NTI4OnZvaWQgX191c2VyICpfX3g4Nl9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBpZCwgZ3BhX3QgZ3BhLFxcbmFyY2gveDg2L2t2bS94ODYuaC01MjktXFx0XFx0XFx0XFx0ICAgICB1MzIgc2l6ZSk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0LmM9ODk3PXZvaWQgZnJlZV9pbml0X3BhZ2VzKGNvbnN0IGNoYXIgKndoYXQsIHVuc2lnbmVkIGxvbmcgYmVnaW4sIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdC5jLTkyNS1cXHRcXHRrbWVtbGVha19mcmVlX3BhcnQoKHZvaWQgKiliZWdpbiwgZW5kIC0gYmVnaW4pO1xcbmFyY2gveDg2L21tL2luaXQuYzo5MjY6XFx0XFx0c2V0X21lbW9yeV9ucChiZWdpbiwgKGVuZCAtIGJlZ2luKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5hcmNoL3g4Ni9tbS9pbml0LmMtOTI3LVxcdH0gZWxzZSB7XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0LmMtOTMyLVxcdFxcdCAqL1xcbmFyY2gveDg2L21tL2luaXQuYzo5MzM6XFx0XFx0c2V0X21lbW9yeV9ueChiZWdpbiwgKGVuZCAtIGJlZ2luKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5hcmNoL3g4Ni9tbS9pbml0LmM6OTM0OlxcdFxcdHNldF9tZW1vcnlfcncoYmVnaW4sIChlbmQgLSBiZWdpbikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuYXJjaC94ODYvbW0vaW5pdC5jLTkzNS1cXG4tLVxcbmFyY2gveDg2L21tL2luaXQuYz05NDY9dm9pZCBmcmVlX2tlcm5lbF9pbWFnZV9wYWdlcyhjb25zdCBjaGFyICp3aGF0LCB2b2lkICpiZWdpbiwgdm9pZCAqZW5kKVxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdC5jLTk2OS1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWDg2XzY0KSBcXHUwMDI2XFx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1BUSSkpXFxuYXJjaC94ODYvbW0vaW5pdC5jOjk3MDpcXHRcXHRzZXRfbWVtb3J5X25wX25vYWxpYXMoYmVnaW5fdWwsIGxlbl9wYWdlcyk7XFxuYXJjaC94ODYvbW0vaW5pdC5jLTk3MS19XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmM9NzIzPXN0YXRpYyB2b2lkIG1hcmtfbnhkYXRhX254KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzM2LVxcdFxcdHByaW50ayhLRVJOX0lORk8gXFxcIk5YLXByb3RlY3RpbmcgdGhlIGtlcm5lbCBkYXRhOiAlbHVrXFxcXG5cXFwiLCBzaXplIFxcdTAwM2VcXHUwMDNlIDEwKTtcXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmM6NzM3OlxcdHNldF9tZW1vcnlfbngoc3RhcnQsIHNpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuYXJjaC94ODYvbW0vaW5pdF8zMi5jLTczOC19XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM9MTM1OT12b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM2OS1cXHQgICAgICAgKGVuZCAtIHN0YXJ0KSBcXHUwMDNlXFx1MDAzZSAxMCk7XFxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjEzNzA6XFx0c2V0X21lbW9yeV9ybyhzdGFydCwgKGVuZCAtIHN0YXJ0KSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM3MS1cXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzg2LVxcdGFsbF9lbmQgPSByb3VuZHVwKCh1bnNpZ25lZCBsb25nKV9icmtfZW5kLCBQTURfU0laRSk7XFxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjEzODc6XFx0c2V0X21lbW9yeV9ueCh0ZXh0X2VuZCwgKGFsbF9lbmQgLSB0ZXh0X2VuZCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzODgtXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM5Mi1cXHRwcmludGsoS0VSTl9JTkZPIFxcXCJUZXN0aW5nIENQQTogdW5kbyAlbHgtJWx4XFxcXG5cXFwiLCBzdGFydCwgZW5kKTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM5MzpcXHRzZXRfbWVtb3J5X3J3KHN0YXJ0LCAoZW5kLXN0YXJ0KSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM5NC1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM5NS1cXHRwcmludGsoS0VSTl9JTkZPIFxcXCJUZXN0aW5nIENQQTogYWdhaW5cXFxcblxcXCIpO1xcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxMzk2OlxcdHNldF9tZW1vcnlfcm8oc3RhcnQsIChlbmQtc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzk3LSNlbmRpZlxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTE0MTUtLyogQWRqdXN0YWJsZSBtZW1vcnkgYmxvY2sgc2l6ZSAqL1xcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxNDE2OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNldF9tZW1vcnlfYmxvY2tfc2l6ZTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTQxNzppbnQgX19pbml0IHNldF9tZW1vcnlfYmxvY2tfc2l6ZV9vcmRlcih1bnNpZ25lZCBpbnQgb3JkZXIpXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTE0MTgte1xcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTE0MjMtXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjE0MjQ6XFx0c2V0X21lbW9yeV9ibG9ja19zaXplID0gc2l6ZTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQyNS1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYz0xNDI4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHByb2JlX21lbW9yeV9ibG9ja19zaXplKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQzMy1cXHQvKiBJZiBtZW1vcnkgYmxvY2sgc2l6ZSBoYXMgYmVlbiBzZXQsIHRoZW4gdXNlIGl0ICovXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjE0MzQ6XFx0YnogPSBzZXRfbWVtb3J5X2Jsb2NrX3NpemU7XFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTE0MzUtXFx0aWYgKGJ6KVxcbi0tXFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jPTQ1PWludCBpb3JlbWFwX2NoYW5nZV9hdHRyKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4tLVxcbmFyY2gveDg2L21tL2lvcmVtYXAuYy01My1cXHRkZWZhdWx0OlxcbmFyY2gveDg2L21tL2lvcmVtYXAuYzo1NDpcXHRcXHRlcnIgPSBfc2V0X21lbW9yeV91Yyh2YWRkciwgbnJwYWdlcyk7XFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jLTU1LVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L21tL2lvcmVtYXAuYy01Ni1cXHRjYXNlIF9QQUdFX0NBQ0hFX01PREVfV0M6XFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jOjU3OlxcdFxcdGVyciA9IF9zZXRfbWVtb3J5X3djKHZhZGRyLCBucnBhZ2VzKTtcXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNTgtXFx0XFx0YnJlYWs7XFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jLTU5LVxcdGNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9XVDpcXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NjA6XFx0XFx0ZXJyID0gX3NldF9tZW1vcnlfd3QodmFkZHIsIG5ycGFnZXMpO1xcbmFyY2gveDg2L21tL2lvcmVtYXAuYy02MS1cXHRcXHRicmVhaztcXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNjItXFx0Y2FzZSBfUEFHRV9DQUNIRV9NT0RFX1dCOlxcbmFyY2gveDg2L21tL2lvcmVtYXAuYzo2MzpcXHRcXHRlcnIgPSBfc2V0X21lbW9yeV93Yih2YWRkciwgbnJwYWdlcyk7XFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jLTY0LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM9NTc9c3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzbnBfbWVtY3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgc3osXFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy02Ni1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzo2NzpcXHRcXHRlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQoKHVuc2lnbmVkIGxvbmcpX192YShwYWRkciksIHBhZGRyLCBucGFnZXMpO1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTY4LVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNzEtXFx0XFx0LyogUmVzdG9yZSB0aGUgcGFnZSBzdGF0ZSBhZnRlciB0aGUgbWVtY3B5LiAqL1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjcyOlxcdFxcdGVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUoKHVuc2lnbmVkIGxvbmcpX192YShwYWRkciksIHBhZGRyLCBucGFnZXMpO1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTczLVxcdH0gZWxzZSB7XFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYz0yODY9c3RhdGljIGludCBhbWRfZW5jX3N0YXR1c19jaGFuZ2VfcHJlcGFyZSh1bnNpZ25lZCBsb25nIHZhZGRyLCBpbnQgbnBhZ2VzLCBib29sIGVuYylcXG4tLVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTI5Mi1cXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfU0VWX1NOUCkgXFx1MDAyNlxcdTAwMjYgIWVuYylcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzoyOTM6XFx0XFx0c25wX3NldF9tZW1vcnlfc2hhcmVkKHZhZGRyLCBucGFnZXMpO1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTI5NC1cXG4tLVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jPTI5OT1zdGF0aWMgaW50IGFtZF9lbmNfc3RhdHVzX2NoYW5nZV9maW5pc2godW5zaWduZWQgbG9uZyB2YWRkciwgaW50IG5wYWdlcywgYm9vbCBlbmMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zMDUtXFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NFVl9TTlApIFxcdTAwMjZcXHUwMDI2IGVuYylcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzozMDY6XFx0XFx0c25wX3NldF9tZW1vcnlfcHJpdmF0ZSh2YWRkciwgbnBhZ2VzKTtcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zMDctXFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYz0zNTg9c3RhdGljIHZvaWQgX19pbml0IF9fc2V0X2Nscl9wdGVfZW5jKHB0ZV90ICprcHRlLCBpbnQgbGV2ZWwsIGJvb2wgZW5jKVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzc4LVxcdFxcdCAqL1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjM3OTpcXHRcXHRlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQoKHVuc2lnbmVkIGxvbmcpX192YShkLnBhKSwgZC5wYSwgMSk7XFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzgwLVxcdH1cXG4tLVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTM4OC1cXHRpZiAoZW5jKVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozODoyOC45MzkyOTU5MDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI5NTI3Nzc5MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFdeWCBWaW9sYXRpb24gRGV0ZWN0aW9uIGluIHNldF9tZW1vcnkuYyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGBzZXRfbWVtb3J5LmNgIGZpbGUgYW5kLCBzcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbnMgbGlrZSBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYW5kIG90aGVycy4gV2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9ucyBjYWxsZWQ/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlaXIgdXNhZ2UuXG5cbkkgcmVjYWxsIEJQRiBKSVQsIGZ0cmFjZSwgdGhlIG1vZHVsZSBsb2FkZXIg4oCTIHRoZXkgYWxsIG1hbmlwdWxhdGUgbWVtb3J5IHBlcm1pc3Npb25zLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSByZWxldmFudCBmdW5jdGlvbnM6IGBtb2R1bGVfZW5hYmxlX3JvKClgLCBgbW9kdWxlX2VuYWJsZV9ueCgpYCwgYGJwZl9qaXRfYmluYXJ5X2xvY2tfcm8oKWAsIGFuZCBgYnBmX3Byb2dfbG9ja19ybygpYC4gS3Byb2JlcyBhbHNvIGNvbWUgdG8gbWluZCB3aXRoIGBhbGxvY19pbnNuX3BhZ2UoKWAgYW5kIGl0cyBpbXBsaWNhdGlvbnMgb24gc2V0dGluZyByZWFkLW9ubHkvcmVhZC13cml0ZSBwZXJtaXNzaW9ucy4gTGV0J3Mgbm90IGZvcmdldCBgL2Rldi9tZW1gIGFuZCBgaW9yZW1hcGAgd2hpY2ggY291bGQgYmUgcmVsZXZhbnQgdG9vLiBJIG5lZWQgdG8ga2VlcCB0aGVzZSBpbiBtaW5kIGFzIHBvdGVudGlhbCBjYWxsIHNpdGVzLlxuXG5Ob3csIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIHBhdGNoIGl0c2VsZiwgSSBzaG91bGQgZXhhbWluZSB0aGUgYGdpdCBzaG93YCBvdXRwdXQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gTGV0J3Mgc2VlLi4uIHRoZSBjb2RlIGludHJvZHVjZXMgYSB3YXJuaW5nIGFib3V0IFdeWCB2aW9sYXRpb25zIHdpdGhpbiB0aGUgYHZlcmlmeV9yd3hgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYSBgcHJfd2Fybl9vbmNlYCBjYWxsLlxuXG5JIGNhcmVmdWxseSBleGFtaW5lIHRoZSBgdmVyaWZ5X3J3eGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGNoZWNrIGZvciBjaGFuZ2VzIHRoYXQgY291bGQgdmlvbGF0ZSB0aGUgV3JpdGUgWE9SIEV4ZWN1dGUgKFdeWCkgcHJpbmNpcGxlLiBJdCBoYXMgc29tZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gdGhlIGFyY2hpdGVjdHVyZSAoMzItYml0IHNwZWNpZmljYWxseSkgYW5kIE5YIHN1cHBvcnQuIEkgY2FuIHNlZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgV15YIGNoZWNrLCBsb29raW5nIGF0IHRoZSBvbGQgYW5kIG5ldyBwYWdlIHByb3RlY3Rpb24gZmxhZ3MuXG5cbkFoYSEgTm93IEkgc2VlIGEgY3J1Y2lhbCBkZXRhaWw6IHRoZXJlIGFyZSB0d28gYHByX3dhcm5fb25jZWAgY2FsbHMgaW4gdGhlIGNvZGUuIE9uZSBpcyBjb25kaXRpb25hbCBvbiBgIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIGFuZCB0aGUgb3RoZXIgaXMgdW5jb25kaXRpb25hbC4gTXkgYXR0ZW50aW9uIGlzIG5vdyBkcmF3biB0byB0aGUgZmlyc3QgYXJndW1lbnQgb2YgYHByX3dhcm5fb25jZWAuIElzIGl0IGEgY29uZGl0aW9uLCBvciBpcyBpdCBwYXJ0IG9mIHRoZSBmb3JtYXQgc3RyaW5nPyBUaGF0J3MgYSBjbGFzc2ljIGdvdGNoYSEgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB3aGF0IHRoYXQgZmlyc3QgYXJndW1lbnQgaXMgZG9pbmcuIExldCdzIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBwcl93YXJuX29uY2VgISBJIG5lZWQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgbG9nZ2luZyBiZWhhdmlvciBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM0MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzg6NDEuODkyMDc3NDU3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE5Nzc2MTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgcHJfd2Fybl9vbmNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvY2VwaC9jZXBoX2RlYnVnLmgtNTktXFx0XFx0Y2xpZW50LVxcdTAwM2Vtb25jLmF1dGgtXFx1MDAzZWdsb2JhbF9pZCwgIyNfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL2xpbnV4L2NlcGgvY2VwaF9kZWJ1Zy5oOjYwOiNkZWZpbmUgcHJfd2Fybl9vbmNlX2NsaWVudChjbGllbnQsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2NlcGgvY2VwaF9kZWJ1Zy5oLTYxLVxcdHByX3dhcm5fb25jZShcXFwiWyVwVSAlbGx1XTogXFxcIiBmbXQsIFxcdTAwMjZjbGllbnQtXFx1MDAzZWZzaWQsXFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9wcmludGsuaD00MDc9c3RydWN0IHBpX2VudHJ5IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjY3LVxcdHByaW50a19vbmNlKEtFUk5fRVJSIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmg6NjY4OiNkZWZpbmUgcHJfd2Fybl9vbmNlKGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY2OS1cXHRwcmludGtfb25jZShLRVJOX1dBUk5JTkcgcHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmg9NDE3PWV4dGVybiB1MzIgc3RyaW5nX3RvX2F2X3Blcm0oc3RydWN0IHBvbGljeWRiICpwLCB1MTYgdGNsYXNzLCBjb25zdCBjaGFyICpuYW1lKTtcXG5zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmgtNDE4LVxcbnNlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuaDo0MTk6I2RlZmluZSBwcl93YXJuX29uY2VfcG9saWN5bG9hZChwb2xpY3ksIGZtdCwgLi4uKSAgICBcXFxcXFxuc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5oLTQyMC1cXHRkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2N1c3RvbS5oPTEyPWV4dGVybiB1bnNpZ25lZCBsb25nIGRhY19tbWFwX21pbl9hZGRyO1xcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9jdXN0b20uaC0yMy0gKi9cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2N1c3RvbS5oOjI0OiNkZWZpbmUgcHJfd2Fybl9vbmNlIHByX2VyclxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvY3VzdG9tLmgtMjUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM4OjQzLjgxMTg2MDM3OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDAwODczNTg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQnVnIERpc2NvdmVyeTogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgaGVhZCBhcyBJIGFuYWx5emUgdGhpczogSSdtIHN0YXJpbmcgYXQgdGhpcyBgcHJfd2Fybl9vbmNlKDEsIFwiQ1BBIGRldGVjdGVkLi4uXCIpYCBhbmQgc29tZXRoaW5nIGluc3RhbnRseSBzY3JlYW1zIFwid3JvbmchXCIgVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBjbGVhcmx5IGluZGljYXRlcyB0aGUgZmlyc3QgcGFyYW1ldGVyIHNob3VsZCBiZSB0aGUgZm9ybWF0IHN0cmluZywgbm90IGEgbnVtZXJpY2FsIHZhbHVlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXYWl0LCBgcHJfd2Fybl9vbmNlKGZtdCwgLi4uKWAgdGFrZXMgYGZtdGAgZmlyc3QhXCIsIHRoZW4gSSBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIGBXQVJOX09OQ0UoY29uZGl0aW9uLCBmbXQsIC4uLilgIHdoaWNoIHRha2VzIHRoZSAqY29uZGl0aW9uKiBmaXJzdC4gSXQncyBsaWtlIGRlamEgdnUuXG5cbkluIHRoaXMgc3BlY2lmaWMgcGF0Y2gsIGl0J3MgY2FsbGluZyBgcHJfd2Fybl9vbmNlKDEsIFwiQ1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVx1MDAzZSAuLi5cIiwgLi4uKWAgYW5kIHRoZSBmaXJzdCBhcmd1bWVudCAqaXMqIGp1c3QgdGhlIG51bWJlciBgMWAgd2hpY2ggaXMgYmVpbmcgaW50ZXJwcmV0ZWQgYXMgYSBwb2ludGVyLCBzcGVjaWZpY2FsbHkgYChjb25zdCBjaGFyICopMWAsIG9yLCBlc3NlbnRpYWxseSwgTlVMTCBwbHVzIG9uZSEgVGhpcyBpcyB3aGVuIHRoZSBhbGFybSBiZWxscyBnbyBvZmYuXG5cbldoZW4gYHByX3dhcm5fb25jZSgxLCAuLi4pYCBpcyBpbnZva2VkLCBgZm10YCBpcyBiZWluZyBzZXQgdG8gYChjaGFyICopMWAuIFRoYXQgbWVhbnMsIHVsdGltYXRlbHksIHdlJ3JlIHRyeWluZyB0byBkZXJlZmVyZW5jZSB0aGUgYWRkcmVzcyBgMHgwMDAwMDAwMWAhIFRoaXMgaXMgZ29pbmcgdG8gY2F1c2UgYSBrZXJuZWwgb29wcywgYSBwYWdlIGZhdWx0LCBiZWNhdXNlIGl0J3MgYWNjZXNzaW5nIGFuIGludmFsaWQgbWVtb3J5IGxvY2F0aW9uISBIT0xZIENPVywgdGhhdCdzIGEgc2VyaW91cyBidWchIFRoZSBhdXRob3IgYXBwZWFycyB0byBoYXZlIGNvcGllZCBgV0FSTl9PTkNFKDEsIFwiLi4uXCIpYCBhbmQgc2ltcGx5IGNoYW5nZWQgYFdBUk5fT05DRWAgdG8gYHByX3dhcm5fb25jZWAsIHdpdGhvdXQgcmVtb3ZpbmcgdGhlIGNvbmRpdGlvbmFsIGAxYCEgVGhleSdyZSBwYXNzaW5nIGAxYCBhcyBhIGZvcm1hdCBzdHJpbmcgd2hlbiBpdCBzaG91bGQgYmUgYFwiQ1BBIGRldGVjdGVkLi4uXCJgLlxuXG5Fc3NlbnRpYWxseSwgaWYgYCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBhbmQgYHZlcmlmeV9yd3hgIGRldGVjdHMgYSBXXlggdmlvbGF0aW9uLCBjYWxsaW5nIGBwcl93YXJuX29uY2UoMSwgLi4uKWAgcGFzc2VzIGludGVnZXIgMSBhcyBwb2ludGVyIHRvIGZvcm1hdCBzdHJpbmcgaW50byBgcHJpbnRrX29uY2VgIC1cdTAwM2UgYHZwcmludGtfc3RvcmVgIC1cdTAwM2UgcGFnZSBmYXVsdCEgVGhpcyBpcyBnb2luZyB0byBjcmFzaCB0aGUga2VybmVsIGluIHRoZSB3b3JzdCB3YXkuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgcmVhY2hhYmxlIHRoaXMgYWN0dWFsbHkgaXMuIFdoZW4gZG9lcyBgdmVyaWZ5X3J3eGAgZ2V0IGNhbGxlZCB3aGVuIGAha2VybmVsX3NldF90b19yZWFkb25seWA/IFRoZSBwb3NzaWJpbGl0aWVzIEkgY2FuIHNlZSBhcmU6XG5cbjEuICBFYXJseSBib290IGJlZm9yZSBgbWFya19yb2RhdGFfcm8oKWAgaXMgY2FsbGVkLlxuMi4gIFdoZW4gYm9vdGluZyB3aXRoIGByb2RhdGE9b2ZmYCBvciBpZiBgQ09ORklHX1NUUklDVF9LRVJORUxfUldYYCBpcyBkaXNhYmxlZC4gSW4gdGhhdCBjYXNlLCBga2VybmVsX3NldF90b19yZWFkb25seWAgd291bGQgcmVtYWluIDAuXG5cbklmIGByb2RhdGE9b2ZmYCwgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIHN0YXlzIDAgZm9yIHRoZSBlbnRpcmUgbGlmZXRpbWUgb2YgdGhlIHN5c3RlbSFcblxuQXQgcnVudGltZSwgYW55IEJQRiBwcm9ncmFtIGxvYWQsIG1vZHVsZSBsb2FkLCBmdHJhY2UgdHJhbXBvbGluZSBjcmVhdGlvbiwga3Byb2JlLCBvciBhbnkgdXNlci10cmlnZ2VyZWQgc3lzY2FsbCB0aGF0IGNoYW5nZXMgcGFnZSBwZXJtaXNzaW9ucyBjYW4gY2FsbCBgdmVyaWZ5X3J3eCgpYC4gSWYgYSBXXlggY2hhbmdlIGlzIGRldGVjdGVkIGJ5IGB2ZXJpZnlfcnd4KClgIChlLmcuIHNldHRpbmcgUlcgb24gYW4gZXhlY3V0YWJsZSBwYWdlIG9yIFggb24gYSB3cml0YWJsZSBwYWdlKSwgYCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBpcyB0cnVlIGFuZCBpdCBleGVjdXRlcyBgcHJfd2Fybl9vbmNlKDEsIC4uLilgIHdoaWNoIGNyYXNoZXMgdGhlIGtlcm5lbCBiZWNhdXNlIHRoZSBmb3JtYXQgc3RyaW5nIGlzIHJlYWxseSBgKGNoYXIgKikweDFgIVxuXG5MZXQgbWUgbWFrZSBzdXJlIHRoaXMgY2hlY2tzIG91dC4gV2hhdCBkb2VzIGBwcl93YXJuX29uY2VgIGFjdHVhbGx5IGV4cGFuZCB0bz8gSSBuZWVkIHRvIGNoZWNrIGBpbmNsdWRlL2xpbnV4L3ByaW50ay5oYDpcblxuYGBgY1xuI2RlZmluZSBwcl93YXJuX29uY2UoZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5cdHByaW50a19vbmNlKEtFUk5fV0FSTklORyBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXylcbmBgYFxuXG5XYWl0LCBgcHJfZm10KDEpYCBiZWNvbWVzIGAxYC4gVGhlbiBgcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HIDEsIC4uLilgLi4uIGRvZXMgdGhpcyBldmVuIGNvbXBpbGU/IGBLRVJOX1dBUk5JTkdgIGJlY29tZXMgYFwiXFwwMDFcIiBcIjRcImAgd2hpY2ggY29tcGlsZXMgYXMgc3RyaW5nIGNvbmNhdGVuYXRpb24uIEJ1dCBgS0VSTl9XQVJOSU5HIDFgIGF0dGVtcHRzIHRvIGNvbmNhdGVuYXRlIHN0cmluZyB3aXRoIGludGVnZXIsIHdoaWNoIGlzIHVuZGVmaW5lZCBiZWhhdmlvciEgV2h5IGRpZCBpdCBjb21waWxlPyBJIG5lZWQgdG8gZXhhbWluZSBob3cgYHByX2ZtdGAgaXMgZGVmaW5lZC4gSSBzaG91bGQgbG9vayBpbiBgc2V0X21lbW9yeS5jYCBvciBjaGVjayBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjkyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM4OjUzLjgyMDU5ODgyOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzNDAzNzMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByX2ZtdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozODo1My44NzQ5NDgzNjJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3MjEwMjUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWNvbnN0cnVjdGluZyB0aGUgV2FybmluZyBNZXNzYWdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIHdhcm5pbmcgaXMgb3JpZ2luYXRpbmcsIHNvIEknbSBkaXZpbmcgaW50byB0aGUga2VybmVsIGNvZGUuIEZpcnN0LCBJJ20gY2hlY2tpbmcgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCB0aGlua2luZyB0aGF0J3MgYSBsaWtlbHkgc3BvdCBmb3IgbWVtb3J5LXJlbGF0ZWQgd2FybmluZ3MuIEFuZCwgbm9wZSwgbm8gYHByX2ZtdChmbXQpYCBtYWNybyBkZWZpbmVkIHRoZXJlLiBSaWdodCwgc28sIGluICp0aGlzKiBjb250ZXh0LCBgcHJfZm10KGZtdClgIGlzIGp1c3QgcmVzb2x2aW5nIHRvIGBmbXRgLiBTaW1wbGUgZW5vdWdoLlxuXG5UaGVuIEkgc2VlIGBwcl93YXJuX29uY2UoMSwgLi4uKWAuIEV4cGFuZGluZyB0aGF0LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBtYWNyb3Mgd29yaywgbGVhZHMgbWUgdG8gYHByaW50a19vbmNlKEtFUk5fV0FSTklORyAxLCAuLi4pYC4gQWgsIGBwcmludGtfb25jZWAuIFRoYXQncyB0aGUga2V5LiBXaGVyZSBpcyAqdGhhdCogZGVmaW5lZD8gSSBuZWVkIHRvIGNoZWNrIGBpbmNsdWRlL2xpbnV4L3ByaW50ay5oYC4gR290dGEgc2VlIHRoZSBleGFjdCBkZWZpbml0aW9uIG9mIGBwcmludGtfb25jZWAgdG8gZnVsbHkgZ3Jhc3Agd2hhdCdzIGhhcHBlbmluZy4gSSBuZWVkIHRvIGtub3cgaG93IHRoZSBcIm9uY2VcIiBhc3BlY3QgaXMgaW1wbGVtZW50ZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igb2YgdGhlIHdhcm5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNDQ3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM4OjU2LjI0NzA1NDE1MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNDQyNjI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIHByaW50a19vbmNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcHJpbnRrLmg9NDA3PXN0cnVjdCBwaV9lbnRyeSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ByaW50ay5oLTY0OC0jaWZkZWYgQ09ORklHX1BSSU5US1xcbmluY2x1ZGUvbGludXgvcHJpbnRrLmg6NjQ5OiNkZWZpbmUgcHJpbnRrX29uY2UoZm10LCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjUwLVxcdERPX09OQ0VfTElURShwcmludGssIGZtdCwgIyNfX1ZBX0FSR1NfXylcXG4tLVxcbmluY2x1ZGUvbGludXgvcHJpbnRrLmgtNjUzLSNlbHNlXFxuaW5jbHVkZS9saW51eC9wcmludGsuaDo2NTQ6I2RlZmluZSBwcmludGtfb25jZShmbXQsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wcmludGsuaC02NTUtXFx0bm9fcHJpbnRrKGZtdCwgIyNfX1ZBX0FSR1NfXylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzg6NTcuODgxNDg1NzQ1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDg4NDMwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIGEgS2VybmVsIExvZ2dpbmcgSXNzdWUqKlxuXG5BbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjaGVjayBvdXQgdGhpcyBgRE9fT05DRV9MSVRFYCBtYWNyby4gSXQgbG9va3MgbGlrZSBpdCdzIGJlaW5nIHVzZWQgd2l0aCBgcHJpbnRrYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3Mgc29tZXRoaW5nIGltcG9ydGFudC4gYERPX09OQ0VfTElURShwcmludGssIEtFUk5fV0FSTklORyAxLCAuLi4pYC4uLndhaXQgYSBzZWNvbmQuIFRoYXQgYEtFUk5fV0FSTklORyAxYCBsb29rcyB3cm9uZy4gSW4gc3RhbmRhcmQgQyBzeW50YXgsIHRoYXQncyBhbG1vc3QgY2VydGFpbmx5IGEgc3ludGF4IGVycm9yIHVubGVzcyBzb21ldGhpbmcgZnVua3kgaXMgaGFwcGVuaW5nIHdpdGggaG93IGBLRVJOX1dBUk5JTkdgIGlzIGRlZmluZWQuIFNvbWV0aGluZyBpcyBtYWtpbmcgbWUgdGhpbmsgdGhhdCBpdCBpcyBub3QgYmVpbmcgcHJvcGVybHkgcHJlZml4ZWQuXG5cbk9rYXksIGxldCdzIHBhdXNlIGFuZCBpbnZlc3RpZ2F0ZSBgS0VSTl9XQVJOSU5HYCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbi4gSSBrbm93IHRoaXMgaXMgZ29pbmcgdG8gYmUgaW4gYW4gaW5jbHVkZSBmaWxlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGluY2x1ZGUvbGludXgva2Vybl9sZXZlbHMuaGAgdG8gc2VlIGV4YWN0bHkgaG93IHRoYXQgaXMgZGVmaW5lZCBhbmQgd2hhdCBpdCBpcyBtZWFudCB0byByZXByZXNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyOTc1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MDAuMjkwMzMyMTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzQ1Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktFUk5fV0FSTklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2tlcm5fbGV2ZWxzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rZXJuX2xldmVscy5oLTExLSNkZWZpbmUgS0VSTl9FUlJcXHRLRVJOX1NPSCBcXFwiM1xcXCJcXHQvKiBlcnJvciBjb25kaXRpb25zICovXFxuaW5jbHVkZS9saW51eC9rZXJuX2xldmVscy5oOjEyOiNkZWZpbmUgS0VSTl9XQVJOSU5HXFx0S0VSTl9TT0ggXFxcIjRcXFwiXFx0Lyogd2FybmluZyBjb25kaXRpb25zICovXFxuaW5jbHVkZS9saW51eC9rZXJuX2xldmVscy5oLTEzLSNkZWZpbmUgS0VSTl9OT1RJQ0VcXHRLRVJOX1NPSCBcXFwiNVxcXCJcXHQvKiBub3JtYWwgYnV0IHNpZ25pZmljYW50IGNvbmRpdGlvbiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozOTowMC4zMzk2ODQxMjhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDUxNTk1MjcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyBgS0VSTl9XQVJOSU5HYCBpcyBkZWZpbmVkIGFzIGBcIlxcMDAxXCIgXCI0XCJgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnLiBgS0VSTl9XQVJOSU5HIDFgIGV4cGFuZHMgdG8gYFwiXFwwMDFcIiBcIjRcIiAxYCwgd2hpY2ggaXMgb2J2aW91c2x5IGEgQyBjb21waWxlciBzeW50YXggZXJyb3IuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBzdXNwaWNpb24g4oCTIHRoZSBwYXRjaCBhdXRob3IgZWl0aGVyIGRpZG4ndCB0ZXN0IHRoaXMgcHJvcGVybHksIG9yIGEgYnVnIHdhcyBpbnRyb2R1Y2VkISBUaGlzIGlzIGEgZ29vZCBzaWduLCBhbmQgaXQgbWVhbnMgd2UgbmVlZCB0byBkaWcgZGVlcGVyLlxuXG5UaGUgY2hhbmdlcyBhcmUgd2l0aGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgd2hpY2gsIGFzIEkga25vdywgaXMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtIChDaGFuZ2UgUGFnZSBBdHRyaWJ1dGVzLCBvciBDUEEpLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuMS4gICoqQ29yZSBTdWJzeXN0ZW06KiogYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGlzIGRlZmluaXRlbHkgYSBjb3JlIHN1YnN5c3RlbSwgZGVhbGluZyBkaXJlY3RseSB3aXRoIHg4NiBtZW1vcnkgbWFuYWdlbWVudC4gQ2hlY2suXG4yLiAgKipSZWFjaGFibGU6KiogWWVzLCBDUEEgaXMgcmVhY2hhYmxlIHRocm91Z2ggYSBtdWx0aXR1ZGUgb2Ygc3lzY2FsbHMgYW5kIGtlcm5lbCBvcGVyYXRpb25zIG9uIGFtZDY0IHN5c3RlbXMuIFRoaW5ncyBsaWtlIEJQRiBKSVQsIG1vZHVsZSBsb2FkaW5nL3VubG9hZGluZywgdHJhY2Vwb2ludHMva3Byb2JlcywgYW5kIHRoZSBgc2V0X21lbW9yeV8qYCBjYWxsZXJzLCBhbGwgY2FuIHBvdGVudGlhbGx5IHRyaWdnZXIgaXNzdWVzLiBDaGVjay5cbjMuICAqKkRlZmVuc2l2ZSBDaGVja3M6KiogVGhlIHBhdGNoIG1vZGlmaWVzIGRlZmVuc2l2ZSBjaGVja3MgYW5kIFdeWCB2aW9sYXRpb24gdmVyaWZpY2F0aW9uIGxvZ2ljIGluIGB2ZXJpZnlfcnd4KClgLiBDaGVjay5cblxuQ29uc2lkZXJpbmcgdGhlIGNyaXRlcmlhIGZyb20gdGhlIGluc3RydWN0aW9ucyAoU2VjdGlvbiAzKSwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGEgc3Ryb25nIGNhbmRpZGF0ZTpcbiogICBNZW1vcnkgbWFuYWdlbWVudCBtb2RpZmljYXRpb25zIGFyZSBhIGdvLlxuKiAgIFRoZSBtb2RpZmljYXRpb24gaXMgYWx0ZXJpbmcgZGVmZW5zaXZlIGNoZWNrcyBpbiByZWFjaGFibGUgcGF0aHMuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGl2ZWx5IGB0cnVlYC5cblxuTm93IGxldCdzIGRldGVybWluZSB0aGUgRm9jdXNTeW1ib2xzLlxuXG5JIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggc3ltYm9scyB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZy4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgZnVuY3Rpb25zIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCB0aGF0IGFyZSBjYWxsZWQgb3IgaW52b2x2ZWQuIEl0IHNlZW1zIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0MDcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MDQuODU1NjM5NDY1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYzOTE0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHNldF9tZW1vcnlfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMTk0PWludCBfc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIwNi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyMDc6aW50IHNldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjA4LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjIzMj1pbnQgX3NldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNDctXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjQ4OmludCBzZXRfbWVtb3J5X3djKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI0OS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIyNzE9aW50IF9zZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjc3LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI3ODppbnQgc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNzkte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzI5PUVYUE9SVF9TWU1CT0xfR1BMKGNsZWFyX21jZV9ub3NwZWMpO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzMxLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMzMjppbnQgc2V0X21lbW9yeV94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMy17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzktXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQwOmludCBzZXRfbWVtb3J5X254KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0MS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDctXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQ4OmludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0OS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNTItXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzUzOmludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNTQte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzYzLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2NDppbnQgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjUte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzY4LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2OTppbnQgc2V0X21lbW9yeV9ucCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNzAte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzczLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM3NDppbnQgc2V0X21lbW9yeV9ucF9ub2FsaWFzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3NS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODAtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzgxOmludCBzZXRfbWVtb3J5X3AodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzgyLXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4NS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzODY6aW50IHNldF9tZW1vcnlfNGsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg3LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5Mi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzOTM6aW50IHNldF9tZW1vcnlfbm9uZ2xvYmFsKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5NC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTgtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzk5OmludCBzZXRfbWVtb3J5X2dsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDAte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNDk1PXN0YXRpYyBpbnQgX19zZXRfbWVtb3J5X2VuY19kZWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTEwLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUxMTppbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTEyLXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUxNT1FWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X2VuY3J5cHRlZCk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTE2LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUxNzppbnQgc2V0X21lbW9yeV9kZWNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTE4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MDQuOTAxMjgzMDNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5NTgwODI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIFNpdGVzIG9mIGB2ZXJpZnlfcnd4YCoqXG5cbk9rYXksIHNvIGB2ZXJpZnlfcnd4YCBpcyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24sIHdoaWNoIGlzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiAgSSBpbW1lZGlhdGVseSBub3RlIGl0J3MgZGVmaW5lZCBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHVzYWdlIHdpdGhpbiB0aGF0IGZpbGUuIFRoZSBmYWN0IHRoYXQgaXQncyBpbmxpbmUgc3VnZ2VzdHMgaXQncyBsaWtlbHkgY2FsbGVkIGEgZmV3IHRpbWVzIGluIHN0cmF0ZWdpY2FsbHkgcGxhY2VkIHNwb3RzLiBNeSBpbW1lZGlhdGUgcHJpb3JpdHkgaXMgdG8gdW5kZXJzdGFuZCB3aGVyZSBgdmVyaWZ5X3J3eGAgZ2V0cyBpbnZva2VkLiBUaGF0IHdpbGwgaW5mb3JtIGl0cyBwdXJwb3NlLiBJJ2xsIGZvY3VzIG15IHNlYXJjaCBvbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSBudW1iZXJzIDEwNjcgYW5kIDE4ODIuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY2FsbHMgdGhlcmUsIHdoaWNoIHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSByb2xlIG9mIGB2ZXJpZnlfcnd4YCBpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTkwNywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjA3LjE5NzA5Mzg3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDYwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDYwOlxcdFxcdC8qXFxuMTA2MTpcXHRcXHQgKiBDaGVjayB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQgcGdwcm90IGlzIGNvbmZsaWN0aW5nIHdpdGggYSBzdGF0aWNcXG4xMDYyOlxcdFxcdCAqIHByb3RlY3Rpb24gcmVxdWlyZW1lbnQgaW4gdGhlIGxhcmdlIHBhZ2UuXFxuMTA2MzpcXHRcXHQgKi9cXG4xMDY0OlxcdFxcdG5ld19wcm90ID0gc3RhdGljX3Byb3RlY3Rpb25zKHJlcV9wcm90LCBscGFkZHIsIG9sZF9wZm4sIG51bXBhZ2VzLFxcbjEwNjU6XFx0XFx0XFx0XFx0XFx0ICAgICAgcHNpemUsIENQQV9ERVRFQ1QpO1xcbjEwNjY6XFx0XFxuMTA2NzpcXHRcXHRuZXdfcHJvdCA9IHZlcmlmeV9yd3gob2xkX3Byb3QsIG5ld19wcm90LCBscGFkZHIsIG9sZF9wZm4sIG51bXBhZ2VzLFxcbjEwNjg6XFx0XFx0XFx0XFx0ICAgICAgbngsIHJ3KTtcXG4xMDY5OlxcdFxcbjEwNzA6XFx0XFx0LypcXG4xMDcxOlxcdFxcdCAqIElmIHRoZXJlIGlzIGEgY29uZmxpY3QsIHNwbGl0IHRoZSBsYXJnZSBwYWdlLlxcbjEwNzI6XFx0XFx0ICpcXG4xMDczOlxcdFxcdCAqIFRoZXJlIHVzZWQgdG8gYmUgYSA0ayB3aXNlIGV2YWx1YXRpb24gdHJ5aW5nIHJlYWxseSBoYXJkIHRvXFxuMTA3NDpcXHRcXHQgKiBwcmVzZXJ2ZSB0aGUgbGFyZ2UgcGFnZXMsIGJ1dCBleHBlcmltZW50YXRpb24gaGFzIHNob3duLCB0aGF0IHRoaXNcXG4xMDc1OlxcdFxcdCAqIGRvZXMgbm90IGhlbHAgYXQgYWxsLiBUaGVyZSBtaWdodCBiZSBjb3JuZXIgY2FzZXMgd2hpY2ggd291bGRcXG4xMDc2OlxcdFxcdCAqIHByZXNlcnZlIG9uZSBsYXJnZSBwYWdlIG9jY2FzaW9uYWxseSwgYnV0IGl0J3MgcmVhbGx5IG5vdCB3b3J0aCB0aGVcXG4xMDc3OlxcdFxcdCAqIGV4dHJhIGNvZGUgYW5kIGN5Y2xlcyBmb3IgdGhlIGNvbW1vbiBjYXNlLlxcbjEwNzg6XFx0XFx0ICovXFxuMTA3OTpcXHRcXHRpZiAocGdwcm90X3ZhbChyZXFfcHJvdCkgIT0gcGdwcm90X3ZhbChuZXdfcHJvdCkpXFxuMTA4MDpcXHRcXHRcXHRyZXR1cm4gMTtcXG4xMDgxOlxcdFxcbjEwODI6XFx0XFx0LyogQWxsIGNoZWNrcyBwYXNzZWQuIFVwZGF0ZSB0aGUgbGFyZ2UgcGFnZSBtYXBwaW5nLiAqL1xcbjEwODM6XFx0XFx0bmV3X3B0ZSA9IHBmbl9wdGUob2xkX3BmbiwgbmV3X3Byb3QpO1xcbjEwODQ6XFx0XFx0X19zZXRfcG1kX3B0ZShrcHRlLCBhZGRyZXNzLCBuZXdfcHRlKTtcXG4xMDg1OlxcdFxcdGNwYS1cXHUwMDNlZmxhZ3MgfD0gQ1BBX0ZMVVNIVExCO1xcbjEwODY6XFx0XFx0Y3BhX2luY19scF9wcmVzZXJ2ZWQobGV2ZWwpO1xcbjEwODc6XFx0XFx0cmV0dXJuIDA7XFxuMTA4ODpcXHR9XFxuMTA4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MDcuMTk3MjM5MzM1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3Mjc0MDMxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIE1lbW9yeSBBdHRyaWJ1dGUgVGFibGUgKFBBVCkgQmVoYXZpb3IqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IHNoZW5hbmlnYW5zLCBhbmQgdGhlIFBBVCBpcyBwcm9iYWJseSBpbnZvbHZlZC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0byB0YWtlIGEgbG9vayBhdCBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBsaW5lIDE4ODIuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGVyZSdzIGEgc3BlY2lmaWMgc2V0IG1lbW9yeSBvcGVyYXRpb24gcmVsYXRlZCB0byB0aGUgUEFUIHRoYXQgSSB3YW50IHRvIGludmVzdGlnYXRlLCBsaWtlbHkgaW52b2x2aW5nIGhvdyBtZW1vcnkgYXR0cmlidXRlcyBhcmUgYmVpbmcgc2V0LiBHaXZlbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgUEFUIGFuZCBpdHMgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBjYWNoaW5nLCBzb21ldGhpbmcgb24gdGhpcyBsaW5lIHdpbGwgcHJvYmFibHkgZ2l2ZSBzb21lIGdvb2QgY2x1ZXMgb24gd2hhdCBuZWVkcyBsb29raW5nIGF0LiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiB1cGRhdGluZyB0aGUgTVRSUiBvciBQQVQgZW50cmllcy4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gY2hlY2tpbmcgdGhpcyBwYXJ0aWN1bGFyIHNwb3QgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY3MzQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjA4LjkyNDY0NDk4OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODcwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODcwOlxcdFxcdFxcdHBncHJvdF90IG9sZF9wcm90ID0gcHRlX3BncHJvdChvbGRfcHRlKTtcXG4xODcxOlxcdFxcdFxcdHBncHJvdF90IG5ld19wcm90ID0gcHRlX3BncHJvdChvbGRfcHRlKTtcXG4xODcyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihvbGRfcHRlKTtcXG4xODczOlxcdFxcbjE4NzQ6XFx0XFx0XFx0cGdwcm90X3ZhbChuZXdfcHJvdCkgXFx1MDAyNj0gfnBncHJvdF92YWwoY3BhLVxcdTAwM2VtYXNrX2Nscik7XFxuMTg3NTpcXHRcXHRcXHRwZ3Byb3RfdmFsKG5ld19wcm90KSB8PSBwZ3Byb3RfdmFsKGNwYS1cXHUwMDNlbWFza19zZXQpO1xcbjE4NzY6XFx0XFxuMTg3NzpcXHRcXHRcXHRjcGFfaW5jXzRrX2luc3RhbGwoKTtcXG4xODc4OlxcdFxcdFxcdC8qIEhhbmQgaW4gbHBzaXplID0gMCB0byBlbmZvcmNlIHRoZSBwcm90ZWN0aW9uIG1lY2hhbmlzbSAqL1xcbjE4Nzk6XFx0XFx0XFx0bmV3X3Byb3QgPSBzdGF0aWNfcHJvdGVjdGlvbnMobmV3X3Byb3QsIGFkZHJlc3MsIHBmbiwgMSwgMCxcXG4xODgwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIENQQV9QUk9URUNUKTtcXG4xODgxOlxcdFxcbjE4ODI6XFx0XFx0XFx0bmV3X3Byb3QgPSB2ZXJpZnlfcnd4KG9sZF9wcm90LCBuZXdfcHJvdCwgYWRkcmVzcywgcGZuLCAxLFxcbjE4ODM6XFx0XFx0XFx0XFx0XFx0ICAgICAgbngsIHJ3KTtcXG4xODg0OlxcdFxcbjE4ODU6XFx0XFx0XFx0bmV3X3Byb3QgPSBwZ3Byb3RfY2xlYXJfcHJvdG5vbmVfYml0cyhuZXdfcHJvdCk7XFxuMTg4NjpcXHRcXG4xODg3OlxcdFxcdFxcdC8qXFxuMTg4ODpcXHRcXHRcXHQgKiBXZSBuZWVkIHRvIGtlZXAgdGhlIHBmbiBmcm9tIHRoZSBleGlzdGluZyBQVEUsXFxuMTg4OTpcXHRcXHRcXHQgKiBhZnRlciBhbGwgd2UncmUgb25seSBnb2luZyB0byBjaGFuZ2UgaXRzIGF0dHJpYnV0ZXNcXG4xODkwOlxcdFxcdFxcdCAqIG5vdCB0aGUgbWVtb3J5IGl0IHBvaW50cyB0b1xcbjE4OTE6XFx0XFx0XFx0ICovXFxuMTg5MjpcXHRcXHRcXHRuZXdfcHRlID0gcGZuX3B0ZShwZm4sIG5ld19wcm90KTtcXG4xODkzOlxcdFxcdFxcdGNwYS1cXHUwMDNlcGZuID0gcGZuO1xcbjE4OTQ6XFx0XFx0XFx0LypcXG4xODk1OlxcdFxcdFxcdCAqIERvIHdlIHJlYWxseSBjaGFuZ2UgYW55dGhpbmcgP1xcbjE4OTY6XFx0XFx0XFx0ICovXFxuMTg5NzpcXHRcXHRcXHRpZiAocHRlX3ZhbChvbGRfcHRlKSAhPSBwdGVfdmFsKG5ld19wdGUpKSB7XFxuMTg5ODpcXHRcXHRcXHRcXHRzZXRfcHRlX2F0b21pYyhrcHRlLCBuZXdfcHRlKTtcXG4xODk5OlxcdFxcdFxcdFxcdGNwYS1cXHUwMDNlZmxhZ3MgfD0gQ1BBX0ZMVVNIVExCO1xcbjE5MDA6XFx0XFx0XFx0fVxcbjE5MDE6XFx0XFx0XFx0Y3BhLVxcdTAwM2VudW1wYWdlcyA9IDE7XFxuMTkwMjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xOTAzOlxcdFxcdH1cXG4xOTA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozOTowOC45MjQ3ODIxOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDU5MTMxMjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBQYWdlIEF0dHJpYnV0ZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gYHZlcmlmeV9yd3goKWAgcG9wcyB1cCBpbiB0d28ga2V5IHBsYWNlczogYF9fc2hvdWxkX3NwbGl0X2xhcmdlX3BhZ2VgIGFuZCBgX19jaGFuZ2VfcGFnZV9hdHRyYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVycGxheSBoZXJlLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QuIEl0IGxvb2tzIGxpa2UgaXQncyBndWFyZGluZyBhZ2FpbnN0IHNvbWV0aGluZywgbGlrZWx5IGEgYmFkIHBhZ2Ugc3RhdGUuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyAqdHJpZ2dlcmluZyogYF9fY2hhbmdlX3BhZ2VfYXR0cmAuIFRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IHNlZW1zIHRvIGJlIHRoZSBwbGFjZSB3aGVyZSBwZXJtaXNzaW9ucyBhcmUgYWN0dWFsbHkgZ2V0dGluZyBtb2RpZmllZC4gSSBzaG91bGQgZXhhbWluZSB0aGUgY2FsbCBncmFwaCB0byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgYWxsIG9mIHRoZSB1c2UgY2FzZXMuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBleHBvc2UgdGhlIGNvbnRleHRzIGluIHdoaWNoIHRoZXNlIGF0dHJpYnV0ZXMgYXJlIGJlaW5nIGNoYW5nZWQsIGFuZCB0aGVyZWZvcmUsIHBvdGVudGlhbGx5IHdoZXJlIGB2ZXJpZnlfcnd4KClgIGlzIHByb3RlY3Rpbmcgc29tZXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzU3OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MTAuOTgzOTE1MzE2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUzNTM0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2NoYW5nZV9wYWdlX2F0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE4MDU9c3RhdGljIGludCBfX2NwYV9wcm9jZXNzX2ZhdWx0KHN0cnVjdCBjcGFfZGF0YSAqY3BhLCB1bnNpZ25lZCBsb25nIHZhZGRyLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODQ5LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTg1MDpzdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODUxLXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTkyNy1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjE5Mjg6c3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTkyOS1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MTkzMz1zdGF0aWMgaW50IGNwYV9wcm9jZXNzX2FsaWFzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xOTYzLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTk2NDpcXHRcXHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2YWxpYXNfY3BhLCAwKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5NjUtXFx0XFx0aWYgKHJldClcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTk5Ny1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjE5OTg6XFx0XFx0X19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmFsaWFzX2NwYSwgMCk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xOTk5LVxcdH1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjAwNC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIwMDU6c3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMDA2LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjA1My1cXHRcXHRcXHRndWFyZChzcGlubG9jaykoXFx1MDAyNmNwYV9sb2NrKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIwNTQ6XFx0XFx0XFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyKGNwYSwgcHJpbWFyeSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMDU1LVxcdFxcdH0gZWxzZSB7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDU2OlxcdFxcdFxcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cihjcGEsIHByaW1hcnkpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjA1Ny1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIwODM9c3RhdGljIGludCBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTM4LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjEzOTpcXHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxNDAtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI0MDk9c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX3BndGFibGUodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDM4LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQzOTpcXHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0NDAtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI2MzY9c3RhdGljIGludCBfX3NldF9wYWdlc19wKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsIHVuc2lnbmVkIGludCBjcGFfZmxhZ3MpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NTEtXFx0ICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjUyOlxcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NTMtfVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjU1PXN0YXRpYyBpbnQgX19zZXRfcGFnZXNfbnAoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgdW5zaWduZWQgaW50IGNwYV9mbGFncylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY3MC1cXHQgKi9cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2NzE6XFx0cmV0dXJuIF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZjcGEsIDEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY3Mi19XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI3NDY9aW50IF9faW5pdCBrZXJuZWxfbWFwX3BhZ2VzX2luX3BnZChwZ2RfdCAqcGdkLCB1NjQgcGZuLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI3NzAtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNzcxOlxcdHJldHZhbCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZjcGEsIDEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjc3Mi1cXHRfX2ZsdXNoX3RsYl9hbGwoKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9Mjc4Mz1pbnQgX19pbml0IGtlcm5lbF91bm1hcF9wYWdlc19pbl9wZ2QocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yODA1LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjgwNjpcXHRyZXR2YWwgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI4MDctXFx0X19mbHVzaF90bGJfYWxsKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjExLjAzMDQ1Njc0MVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODg2NzAyODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgc2V0X21lbW9yeS5jIE1vZHVsZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgdmVyaWZ5X3J3eGAsIGFuZCBJIHNlZSBpdCdzIGEgc3RhdGljIGlubGluZSB3aXRoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBHaXZlbiB0aGF0LCBJIHdhbnQgdG8gbWFwIG91dCB0aGUgcmVsZXZhbnQgc3ltYm9scyB3aXRoaW4gdGhhdCBmaWxlIGFuZCBkZXRlcm1pbmUgd2hpY2ggb25lcyBhcmUgZXhwb3J0ZWQgKG9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zKSB0aGF0IGNhbGwgb3IgaW5jbHVkZSBgdmVyaWZ5X3J3eGAuXG5cblNvLCBmcm9tIHRoZSBsb29rcyBvZiBpdCB0aGUgcmVsZXZhbnQgc3ltYm9scyBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgYXJlOiBgX19jaGFuZ2VfcGFnZV9hdHRyYCwgYF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfbnhgLCBgc2V0X21lbW9yeV9yb3hgLCBgc2V0X21lbW9yeV91Y2AsIGBzZXRfbWVtb3J5X3djYCwgYHNldF9tZW1vcnlfd2JgLCBgc2V0X21lbW9yeV9ucGAsIGBzZXRfbWVtb3J5X3BgLCBgc2V0X21lbW9yeV80a2AsIGBzZXRfbWVtb3J5X2VuY3J5cHRlZGAsIGFuZCBgc2V0X21lbW9yeV9kZWNyeXB0ZWRgLlxuXG5Ob3csIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRob3NlIGFyZSBhY3R1YWxseSBleHBvcnRlZCBvciBub24tc3RhdGljIGZ1bmN0aW9ucyBvciBmdW5jdGlvbnMgdGhhdCBpbmNsdWRlIGB2ZXJpZnlfcnd4YC4gTXkgaW1tZWRpYXRlIGNhbmRpZGF0ZXMgYXJlOiBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5X254YCwgYHNldF9tZW1vcnlfcm94YCwgYHNldF9tZW1vcnlfdWNgLCBgc2V0X21lbW9yeV93YmAsIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLCBhbmQgYF9fY2hhbmdlX3BhZ2VfYXR0cmAuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCB0byBzZWUgaWYgdGhlcmUncyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3Igb3RoZXIgc2V0dGluZ3MgdGhhdCBpbXBhY3QgaXRzIGluY2x1c2lvbiBvciBiZWhhdmlvci4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgYGFyY2gveDg2L21tL01ha2VmaWxlYCBvciBgYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlYCB0byBkbyB0aGlzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTQxNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozOToxNC45MTcxNjIxNThaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjQ3MzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9tZW1vcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vaW5pdC5jLTExLVxcbmFyY2gveDg2L21tL2luaXQuYzoxMjojaW5jbHVkZSBcXHUwMDNjYXNtL3NldF9tZW1vcnkuaFxcdTAwM2VcXG5hcmNoL3g4Ni9tbS9pbml0LmMtMTMtI2luY2x1ZGUgXFx1MDAzY2FzbS9jcHVfZGV2aWNlX2lkLmhcXHUwMDNlXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0LmM9ODk3PXZvaWQgZnJlZV9pbml0X3BhZ2VzKGNvbnN0IGNoYXIgKndoYXQsIHVuc2lnbmVkIGxvbmcgYmVnaW4sIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdC5jLTkyNS1cXHRcXHRrbWVtbGVha19mcmVlX3BhcnQoKHZvaWQgKiliZWdpbiwgZW5kIC0gYmVnaW4pO1xcbmFyY2gveDg2L21tL2luaXQuYzo5MjY6XFx0XFx0c2V0X21lbW9yeV9ucChiZWdpbiwgKGVuZCAtIGJlZ2luKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5hcmNoL3g4Ni9tbS9pbml0LmMtOTI3LVxcdH0gZWxzZSB7XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0LmMtOTMyLVxcdFxcdCAqL1xcbmFyY2gveDg2L21tL2luaXQuYzo5MzM6XFx0XFx0c2V0X21lbW9yeV9ueChiZWdpbiwgKGVuZCAtIGJlZ2luKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5hcmNoL3g4Ni9tbS9pbml0LmM6OTM0OlxcdFxcdHNldF9tZW1vcnlfcncoYmVnaW4sIChlbmQgLSBiZWdpbikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuYXJjaC94ODYvbW0vaW5pdC5jLTkzNS1cXG4tLVxcbmFyY2gveDg2L21tL2luaXQuYz05NDY9dm9pZCBmcmVlX2tlcm5lbF9pbWFnZV9wYWdlcyhjb25zdCBjaGFyICp3aGF0LCB2b2lkICpiZWdpbiwgdm9pZCAqZW5kKVxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdC5jLTk2OS1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWDg2XzY0KSBcXHUwMDI2XFx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1BUSSkpXFxuYXJjaC94ODYvbW0vaW5pdC5jOjk3MDpcXHRcXHRzZXRfbWVtb3J5X25wX25vYWxpYXMoYmVnaW5fdWwsIGxlbl9wYWdlcyk7XFxuYXJjaC94ODYvbW0vaW5pdC5jLTk3MS19XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNDgtI2luY2x1ZGUgXFx1MDAzY2FzbS9zZXR1cC5oXFx1MDAzZVxcbmFyY2gveDg2L21tL2luaXRfMzIuYzo0OTojaW5jbHVkZSBcXHUwMDNjYXNtL3NldF9tZW1vcnkuaFxcdTAwM2VcXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNTAtI2luY2x1ZGUgXFx1MDAzY2FzbS9wYWdlX3R5cGVzLmhcXHUwMDNlXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmM9NzIzPXN0YXRpYyB2b2lkIG1hcmtfbnhkYXRhX254KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmMtNzM2LVxcdFxcdHByaW50ayhLRVJOX0lORk8gXFxcIk5YLXByb3RlY3RpbmcgdGhlIGtlcm5lbCBkYXRhOiAlbHVrXFxcXG5cXFwiLCBzaXplIFxcdTAwM2VcXHUwMDNlIDEwKTtcXG5hcmNoL3g4Ni9tbS9pbml0XzMyLmM6NzM3OlxcdHNldF9tZW1vcnlfbngoc3RhcnQsIHNpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuYXJjaC94ODYvbW0vaW5pdF8zMi5jLTczOC19XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtNTEtI2luY2x1ZGUgXFx1MDAzY2FzbS9udW1hLmhcXHUwMDNlXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjUyOiNpbmNsdWRlIFxcdTAwM2Nhc20vc2V0X21lbW9yeS5oXFx1MDAzZVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy01My0jaW5jbHVkZSBcXHUwMDNjYXNtL2luaXQuaFxcdTAwM2VcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYz0xMzU5PXZvaWQgbWFya19yb2RhdGFfcm8odm9pZClcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzY5LVxcdCAgICAgICAoZW5kIC0gc3RhcnQpIFxcdTAwM2VcXHUwMDNlIDEwKTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM3MDpcXHRzZXRfbWVtb3J5X3JvKHN0YXJ0LCAoZW5kIC0gc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzcxLVxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzODYtXFx0YWxsX2VuZCA9IHJvdW5kdXAoKHVuc2lnbmVkIGxvbmcpX2Jya19lbmQsIFBNRF9TSVpFKTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTM4NzpcXHRzZXRfbWVtb3J5X254KHRleHRfZW5kLCAoYWxsX2VuZCAtIHRleHRfZW5kKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTM4OC1cXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzkyLVxcdHByaW50ayhLRVJOX0lORk8gXFxcIlRlc3RpbmcgQ1BBOiB1bmRvICVseC0lbHhcXFxcblxcXCIsIHN0YXJ0LCBlbmQpO1xcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxMzkzOlxcdHNldF9tZW1vcnlfcncoc3RhcnQsIChlbmQtc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzk0LVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xMzk1LVxcdHByaW50ayhLRVJOX0lORk8gXFxcIlRlc3RpbmcgQ1BBOiBhZ2FpblxcXFxuXFxcIik7XFxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjEzOTY6XFx0c2V0X21lbW9yeV9ybyhzdGFydCwgKGVuZC1zdGFydCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTEzOTctI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQxNS0vKiBBZGp1c3RhYmxlIG1lbW9yeSBibG9jayBzaXplICovXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jOjE0MTY6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2V0X21lbW9yeV9ibG9ja19zaXplO1xcbmFyY2gveDg2L21tL2luaXRfNjQuYzoxNDE3OmludCBfX2luaXQgc2V0X21lbW9yeV9ibG9ja19zaXplX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQxOC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQyMy1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTQyNDpcXHRzZXRfbWVtb3J5X2Jsb2NrX3NpemUgPSBzaXplO1xcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xNDI1LVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vaW5pdF82NC5jPTE0Mjg9c3RhdGljIHVuc2lnbmVkIGxvbmcgcHJvYmVfbWVtb3J5X2Jsb2NrX3NpemUodm9pZClcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy0xNDMzLVxcdC8qIElmIG1lbW9yeSBibG9jayBzaXplIGhhcyBiZWVuIHNldCwgdGhlbiB1c2UgaXQgKi9cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6MTQzNDpcXHRieiA9IHNldF9tZW1vcnlfYmxvY2tfc2l6ZTtcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMTQzNS1cXHRpZiAoYnopXFxuLS1cXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtMjItXFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jOjIzOiNpbmNsdWRlIFxcdTAwM2Nhc20vc2V0X21lbW9yeS5oXFx1MDAzZVxcbmFyY2gveDg2L21tL2lvcmVtYXAuYy0yNC0jaW5jbHVkZSBcXHUwMDNjYXNtL2U4MjAvYXBpLmhcXHUwMDNlXFxuLS1cXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM9NDU9aW50IGlvcmVtYXBfY2hhbmdlX2F0dHIodW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyBzaXplLFxcbi0tXFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jLTUzLVxcdGRlZmF1bHQ6XFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jOjU0OlxcdFxcdGVyciA9IF9zZXRfbWVtb3J5X3VjKHZhZGRyLCBucnBhZ2VzKTtcXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNTUtXFx0XFx0YnJlYWs7XFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jLTU2LVxcdGNhc2UgX1BBR0VfQ0FDSEVfTU9ERV9XQzpcXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmM6NTc6XFx0XFx0ZXJyID0gX3NldF9tZW1vcnlfd2ModmFkZHIsIG5ycGFnZXMpO1xcbmFyY2gveDg2L21tL2lvcmVtYXAuYy01OC1cXHRcXHRicmVhaztcXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNTktXFx0Y2FzZSBfUEFHRV9DQUNIRV9NT0RFX1dUOlxcbmFyY2gveDg2L21tL2lvcmVtYXAuYzo2MDpcXHRcXHRlcnIgPSBfc2V0X21lbW9yeV93dCh2YWRkciwgbnJwYWdlcyk7XFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jLTYxLVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L21tL2lvcmVtYXAuYy02Mi1cXHRjYXNlIF9QQUdFX0NBQ0hFX01PREVfV0I6XFxuYXJjaC94ODYvbW0vaW9yZW1hcC5jOjYzOlxcdFxcdGVyciA9IF9zZXRfbWVtb3J5X3diKHZhZGRyLCBucnBhZ2VzKTtcXG5hcmNoL3g4Ni9tbS9pb3JlbWFwLmMtNjQtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0yNi0jaW5jbHVkZSBcXHUwMDNjYXNtL2Jvb3RwYXJhbS5oXFx1MDAzZVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjI3OiNpbmNsdWRlIFxcdTAwM2Nhc20vc2V0X21lbW9yeS5oXFx1MDAzZVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTI4LSNpbmNsdWRlIFxcdTAwM2Nhc20vY2FjaGVmbHVzaC5oXFx1MDAzZVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM9NTc9c3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzbnBfbWVtY3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3Qgc3osXFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy02Ni1cXHRcXHQgKi9cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzo2NzpcXHRcXHRlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQoKHVuc2lnbmVkIGxvbmcpX192YShwYWRkciksIHBhZGRyLCBucGFnZXMpO1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTY4LVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNzEtXFx0XFx0LyogUmVzdG9yZSB0aGUgcGFnZSBzdGF0ZSBhZnRlciB0aGUgbWVtY3B5LiAqL1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjcyOlxcdFxcdGVhcmx5X3NucF9zZXRfbWVtb3J5X3ByaXZhdGUoKHVuc2lnbmVkIGxvbmcpX192YShwYWRkciksIHBhZGRyLCBucGFnZXMpO1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTczLVxcdH0gZWxzZSB7XFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYz0yODY9c3RhdGljIGludCBhbWRfZW5jX3N0YXR1c19jaGFuZ2VfcHJlcGFyZSh1bnNpZ25lZCBsb25nIHZhZGRyLCBpbnQgbnBhZ2VzLCBib29sIGVuYylcXG4tLVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTI5Mi1cXHRpZiAoY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfU0VWX1NOUCkgXFx1MDAyNlxcdTAwMjYgIWVuYylcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzoyOTM6XFx0XFx0c25wX3NldF9tZW1vcnlfc2hhcmVkKHZhZGRyLCBucGFnZXMpO1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTI5NC1cXG4tLVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jPTI5OT1zdGF0aWMgaW50IGFtZF9lbmNfc3RhdHVzX2NoYW5nZV9maW5pc2godW5zaWduZWQgbG9uZyB2YWRkciwgaW50IG5wYWdlcywgYm9vbCBlbmMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zMDUtXFx0aWYgKGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX1NFVl9TTlApIFxcdTAwMjZcXHUwMDI2IGVuYylcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzozMDY6XFx0XFx0c25wX3NldF9tZW1vcnlfcHJpdmF0ZSh2YWRkciwgbnBhZ2VzKTtcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zMDctXFxuLS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYz0zNTg9c3RhdGljIHZvaWQgX19pbml0IF9fc2V0X2Nscl9wdGVfZW5jKHB0ZV90ICprcHRlLCBpbnQgbGV2ZWwsIGJvb2wgZW5jKVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzc4LVxcdFxcdCAqL1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjM3OTpcXHRcXHRlYXJseV9zbnBfc2V0X21lbW9yeV9zaGFyZWQoKHVuc2lnbmVkIGxvbmcpX192YShkLnBhKSwgZC5wYSwgMSk7XFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzgwLVxcdH1cXG4tLVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTM4OC1cXHRpZiAoZW5jKVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjM4OTpcXHRcXHRlYXJseV9zbnBfc2V0X21lbW9yeV9wcml2YXRlKCh1bnNpZ25lZCBsb25nKV9fdmEoZC5wYSksIGQucGEsIDEpO1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTM5MC19XFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtMzkxLVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjM5MjpzdGF0aWMgaW50IF9faW5pdCBlYXJseV9zZXRfbWVtb3J5X2VuY19kZWModW5zaWduZWQgbG9uZyB2YWRkcixcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy0zOTMtXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzaXplLCBib29sIGVuYylcXG4tLVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTQ2MS1cXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzo0NjI6aW50IF9faW5pdCBlYXJseV9zZXRfbWVtb3J5X2RlY3J5cHRlZCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNDYzLXtcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYzo0NjQ6XFx0cmV0dXJuIGVhcmx5X3NldF9tZW1vcnlfZW5jX2RlYyh2YWRkciwgc2l6ZSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jLTQ2NS19XFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNDY2LVxcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjQ2NzppbnQgX19pbml0IGVhcmx5X3NldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy00Njgte1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjQ2OTpcXHRyZXR1cm4gZWFybHlfc2V0X21lbW9yeV9lbmNfZGVjKHZhZGRyLCBzaXplLCB0cnVlKTtcXG5hcmNoL3g4Ni9tbS9tZW1fZW5jcnlwdF9hbWQuYy00NzAtfVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmM9NTQzPXZvaWQgX19pbml0IG1lbV9lbmNyeXB0X2ZyZWVfZGVjcnlwdGVkX21lbSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNTYwLVxcdGlmIChzbWVfbWVfbWFzaykge1xcbmFyY2gveDg2L21tL21lbV9lbmNyeXB0X2FtZC5jOjU2MTpcXHRcXHRyID0gc2V0X21lbW9yeV9lbmNyeXB0ZWQodmFkZHIsIG5wYWdlcyk7XFxuYXJjaC94ODYvbW0vbWVtX2VuY3J5cHRfYW1kLmMtNTYyLVxcdFxcdGlmIChyKSB7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGUtMi1cXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGU6MzpvYmoteVxcdFxcdFxcdFxcdDo9IHNldF9tZW1vcnkubyBtZW10eXBlLm9cXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGUtNC1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9tZW10eXBlLmM9NDkyPXN0YXRpYyB1NjQgc2FuaXRpemVfcGh5cyh1NjQgYWRkcmVzcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9tZW10eXBlLmMtNDk2LVxcdCAqIGZvciBhIFxcXCJkZWNveVxcXCIgdmlydHVhbCBhZGRyZXNzIChiaXQgNjMgY2xlYXIpIHBhc3NlZCB0b1xcbmFyY2gveDg2L21tL3BhdC9tZW10eXBlLmM6NDk3OlxcdCAqIHNldF9tZW1vcnlfWCgpLiBfX3BhKCkgb24gYSBcXFwiZGVjb3lcXFwiIGFkZHJlc3MgcmVzdWx0cyBpbiBhXFxuYXJjaC94ODYvbW0vcGF0L21lbXR5cGUuYy00OTgtXFx0ICogcGh5c2ljYWwgYWRkcmVzcyB3aXRoIGJpdCA2MyBzZXQuXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jY19wbGF0Zm9ybS5oXFx1MDAzZVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFxcdTAwM2VcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1yZWdpb24uaFxcdTAwM2VcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9Mjc0PXN0YXRpYyBib29sIF9fY3BhX3Bmbl9pbl9oaWdobWFwKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yODYtICogVUMgdG8gYXZvaWQgc3BlY3VsYXRpdmUgYWNjZXNzIGxvZ2dpbmcgYW5vdGhlciBlcnJvci4gQnV0IHBhc3NpbmcgdGhlXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyODc6ICogYWRkcmVzcyBvZiB0aGUgMToxIG1hcHBpbmcgdG8gc2V0X21lbW9yeV91YygpIGlzIGEgZmluZSB3YXkgdG8gZW5jb3VyYWdlIGFcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI4OC0gKiBzcGVjdWxhdGl2ZSBhY2Nlc3MuIFNvIHdlIGNoZWF0IGFuZCBmbGlwIHRoZSB0b3AgYml0IG9mIHRoZSBhZGRyZXNzLiBUaGlzXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxODc9c3RhdGljIGlubGluZSBpbnQgY3BhX2NsZWFyX3BhZ2VzX2FycmF5KHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcyxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE5My1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIxOTQ6aW50IF9zZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE5NS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxOTgtXFx0ICogSWYgeW91IHJlYWxseSBuZWVkIHN0cm9uZyBVQyB1c2UgaW9yZW1hcF91YygpLCBidXQgbm90ZVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjE5OTpcXHQgKiB0aGF0IHlvdSBjYW5ub3Qgb3ZlcnJpZGUgSU8gYXJlYXMgd2l0aCBzZXRfbWVtb3J5XyooKSBhc1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIwMC1cXHQgKiB0aGVzZSBoZWxwZXJzIGNhbm5vdCB3b3JrIHdpdGggSU8gbWVtb3J5Llxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjA2LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjIwNzppbnQgc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMDgte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjE4LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjIxOTpcXHRyZXQgPSBfc2V0X21lbW9yeV91YyhhZGRyLCBudW1wYWdlcyk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjIwLVxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMjktfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjIzMDpFWFBPUlRfU1lNQk9MKHNldF9tZW1vcnlfdWMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIzMS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyMzI6aW50IF9zZXRfbWVtb3J5X3djKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjIzMy17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNDctXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjQ4OmludCBzZXRfbWVtb3J5X3djKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI0OS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNTYtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjU3OlxcdHJldCA9IF9zZXRfbWVtb3J5X3djKGFkZHIsIG51bXBhZ2VzKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNTgtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI2Mi19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjYzOkVYUE9SVF9TWU1CT0woc2V0X21lbW9yeV93Yyk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjY0LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI2NTppbnQgX3NldF9tZW1vcnlfd3QodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjY2LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI3MC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyNzE6aW50IF9zZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI3Mi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNzctXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjc4OmludCBzZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI3OS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyODEtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjgyOlxcdHJldCA9IF9zZXRfbWVtb3J5X3diKGFkZHIsIG51bXBhZ2VzKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyODMtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI4OC19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjg5OkVYUE9SVF9TWU1CT0woc2V0X21lbW9yeV93Yik7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjkwLVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjkzPWludCBzZXRfbWNlX25vc3BlYyh1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMwMi1cXHQgKiBXZSB3b3VsZCBsaWtlIHRvIGp1c3QgY2FsbDpcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzMDM6XFx0ICogICAgICBzZXRfbWVtb3J5X1hYKCh1bnNpZ25lZCBsb25nKXBmbl90b19rYWRkcihwZm4pLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMDQtXFx0ICogYnV0IGRvaW5nIHRoYXQgd291bGQgcmFkaWNhbGx5IGluY3JlYXNlIHRoZSBvZGRzIG9mIGFcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMwOS1cXHQgKiB0aGF0IGxvb2tzIGp1c3QgbGlrZSB0aGUgb25lIHdlIHdhbnQsIGJ1dCBoYXMgYml0IDYzIGZsaXBwZWQuXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzEwOlxcdCAqIFRoaXMgcmVsaWVzIG9uIHNldF9tZW1vcnlfWFgoKSBwcm9wZXJseSBzYW5pdGl6aW5nIGFueSBfX3BhKClcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMTEtXFx0ICogcmVzdWx0cyB3aXRoIF9fUEhZU0lDQUxfTUFTSyBvciBQVEVfUEZOX01BU0suXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMTQtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzE1OlxcdHJjID0gc2V0X21lbW9yeV9ucChkZWNveV9hZGRyLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMTYtXFx0aWYgKHJjKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzIzPWludCBjbGVhcl9tY2Vfbm9zcGVjKHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzI2LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMyNzpcXHRyZXR1cm4gc2V0X21lbW9yeV9wKGFkZHIsIDEpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMyOC19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzI5PUVYUE9SVF9TWU1CT0xfR1BMKGNsZWFyX21jZV9ub3NwZWMpO1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzMxLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjMzMjppbnQgc2V0X21lbW9yeV94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMy17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzktXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQwOmludCBzZXRfbWVtb3J5X254KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0MS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDctXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQ4OmludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0OS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNTItXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzUzOmludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNTQte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzYzLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2NDppbnQgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjUte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzY4LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2OTppbnQgc2V0X21lbW9yeV9ucCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNzAte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzczLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM3NDppbnQgc2V0X21lbW9yeV9ucF9ub2FsaWFzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3NS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODAtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzgxOmludCBzZXRfbWVtb3J5X3AodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzgyLXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4NS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzODY6aW50IHNldF9tZW1vcnlfNGsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg3LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5Mi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzOTM6aW50IHNldF9tZW1vcnlfbm9uZ2xvYmFsKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5NC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTgtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzk5OmludCBzZXRfbWVtb3J5X2dsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDAte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDA1LS8qXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDA2OiAqIF9fc2V0X21lbW9yeV9lbmNfcGd0YWJsZSgpIGlzIHVzZWQgZm9yIHRoZSBoeXBlcnZpc29ycyB0aGF0IGdldFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQwNy0gKiBpbmZvcm1lZCBhYm91dCBcXFwiZW5jcnlwdGlvblxcXCIgc3RhdHVzIHZpYSBwYWdlIHRhYmxlcy5cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDgtICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDA5OnN0YXRpYyBpbnQgX19zZXRfbWVtb3J5X2VuY19wZ3RhYmxlKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLCBib29sIGVuYylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MTAte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNDczPXN0YXRpYyBERUNMQVJFX1JXU0VNKG1lbV9lbmNfbG9jayk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0ODAtICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDgxOmJvb2wgc2V0X21lbW9yeV9lbmNfc3RvcF9jb252ZXJzaW9uKHZvaWQpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDgyLXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQ5NC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI0OTU6c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX2RlYyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgYm9vbCBlbmMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDk2LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUwMi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MDM6XFx0XFx0cmV0ID0gX19zZXRfbWVtb3J5X2VuY19wZ3RhYmxlKGFkZHIsIG51bXBhZ2VzLCBlbmMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUwNC1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUxMC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MTE6aW50IHNldF9tZW1vcnlfZW5jcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUxMi17XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTEzOlxcdHJldHVybiBfX3NldF9tZW1vcnlfZW5jX2RlYyhhZGRyLCBudW1wYWdlcywgdHJ1ZSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTE0LX1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MTU6RVhQT1JUX1NZTUJPTF9HUEwoc2V0X21lbW9yeV9lbmNyeXB0ZWQpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUxNi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MTc6aW50IHNldF9tZW1vcnlfZGVjcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUxOC17XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTE5OlxcdHJldHVybiBfX3NldF9tZW1vcnlfZW5jX2RlYyhhZGRyLCBudW1wYWdlcywgZmFsc2UpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyMC19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTIxOkVYUE9SVF9TWU1CT0xfR1BMKHNldF9tZW1vcnlfZGVjcnlwdGVkKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MjItXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNTIzPWludCBzZXRfcGFnZXNfdWMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyNi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1Mjc6XFx0cmV0dXJuIHNldF9tZW1vcnlfdWMoYWRkciwgbnVtcGFnZXMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyOC19XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1ODk9aW50IHNldF9wYWdlc193YihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTkyLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjU5MzpcXHRyZXR1cm4gc2V0X21lbW9yeV93YihhZGRyLCBudW1wYWdlcyk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTk0LX1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjYyMj1pbnQgc2V0X3BhZ2VzX3JvKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MjUtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjI2OlxcdHJldHVybiBzZXRfbWVtb3J5X3JvKGFkZHIsIG51bXBhZ2VzKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MjctfVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjI5PWludCBzZXRfcGFnZXNfcncoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjYzMi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2MzM6XFx0cmV0dXJuIHNldF9tZW1vcnlfcncoYWRkciwgbnVtcGFnZXMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjYzNC19XFxuLS1cXG5hcmNoL3g4Ni9tbS9wdGkuYy00MC0jaW5jbHVkZSBcXHUwMDNjYXNtL3NlY3Rpb25zLmhcXHUwMDNlXFxuYXJjaC94ODYvbW0vcHRpLmM6NDE6I2luY2x1ZGUgXFx1MDAzY2FzbS9zZXRfbWVtb3J5LmhcXHUwMDNlXFxuYXJjaC94ODYvbW0vcHRpLmMtNDItI2luY2x1ZGUgXFx1MDAzY2FzbS9idWdzLmhcXHUwMDNlXFxuLS1cXG5hcmNoL3g4Ni9tbS9wdGkuYz01NzE9c3RhdGljIHZvaWQgcHRpX2Nsb25lX2tlcm5lbF90ZXh0KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wdGkuYy02MDAtXFx0LyogU2V0IHRoZSBnbG9iYWwgYml0IGZvciBub3JtYWwgbm9uLV9faW5pdCBrZXJuZWwgdGV4dDogKi9cXG5hcmNoL3g4Ni9tbS9wdGkuYzo2MDE6XFx0c2V0X21lbW9yeV9nbG9iYWwoc3RhcnQsIChlbmRfZ2xvYmFsIC0gc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbmFyY2gveDg2L21tL3B0aS5jLTYwMi19XFxuLS1cXG5hcmNoL3g4Ni9tbS9wdGkuYz02MDQ9c3RhdGljIHZvaWQgcHRpX3NldF9rZXJuZWxfaW1hZ2Vfbm9uZ2xvYmFsKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wdGkuYy02MTktXFx0ICovXFxuYXJjaC94ODYvbW0vcHRpLmM6NjIwOlxcdHNldF9tZW1vcnlfbm9uZ2xvYmFsKHN0YXJ0LCAoZW5kIC0gc3RhcnQpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbmFyY2gveDg2L21tL3B0aS5jLTYyMS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjE0Ljk2NDQxODk5NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDU3NTg2OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIHg4NiBNZW1vcnkgUHJvdGVjdGlvbiBDb2RlKipcblxuT2theSwgc28gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGlzICphbHdheXMqIGNvbXBpbGVkIGludG8gdGhlIHg4NiBrZXJuZWw7IHRoYXQncyBnb29kIHRvIGtub3cg4oCTIGl0J3MgZnVuZGFtZW50YWwuIFRoZSBgTWFrZWZpbGVgIGNvbmZpcm1zIHRoaXMgKGBvYmoteSA6PSBzZXRfbWVtb3J5Lm8gbWVtdHlwZS5vYCkuIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgaXRzIGJlaGF2aW91ciBpcyB0aWVkIHRvIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gc2VlIGlmIGBTVFJJQ1RfS0VSTkVMX1JXWGAgb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gQ29udHJvbC1GbG93IEF0dGVudWF0aW9uIChDUEEpLCBsaWtlIHRoZSBgQ1BBYCBtYWNybywgaGFzIGFueSBpbmZsdWVuY2Ugb24gaXRzIG9wZXJhdGlvbi4gQSBxdWljayBpbnNwZWN0aW9uIG9mIGBhcmNoL3g4Ni9LY29uZmlnYCBzaG91bGQgcmV2ZWFsIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhbmQgd2hldGhlciBJIG5lZWQgdG8gY29uc2lkZXIgdGhvc2UgaW4gbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NDA1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MTguMDIyMDA4MDU4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzAwOTAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTVFJJQ1RfS0VSTkVMX1JXWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTA3LVxcdHNlbGVjdCBBUkNIX0hBU19TRVRfRElSRUNUX01BUFxcbmFyY2gveDg2L0tjb25maWc6MTA4OlxcdHNlbGVjdCBBUkNIX0hBU19TVFJJQ1RfS0VSTkVMX1JXWFxcbmFyY2gveDg2L0tjb25maWctMTA5LVxcdHNlbGVjdCBBUkNIX0hBU19TVFJJQ1RfTU9EVUxFX1JXWFxcbi0tXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9MTcyPXN0YXRpYyB2b2lkIGl0c19maW5pX2NvcmUodm9pZClcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xNzMte1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjE3NDpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gpKVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTE3NS1cXHRcXHRpdHNfcGFnZXNfcHJvdGVjdChcXHUwMDI2aXRzX3BhZ2VzKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NjcxPXN0YXRpYyBpbmxpbmUgcGdwcm90X3QgdmVyaWZ5X3J3eChwZ3Byb3RfdCBvbGQsIHBncHJvdF90IG5ldywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNzAzLVxcdCAqIGZhbHNlIHBvc2l0aXZlLlxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NzA0OlxcdCAqIE9uY2UgZGVidWdfY2hlY2t3eCgpIGJlY29tZXMgbWFuZGF0b3J5IGZvciBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03MDUtXFx0ICogdGhlIHdhcm5pbmcgY2FuIGJlIHJlbW92ZWQgY29tcGxldGVseS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MTguMDg5MDIyMjcyWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3OTE1OTkyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYFNUUklDVF9LRVJORUxfUldYYCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBkZWVwIGVuZCwgbGV0J3MganVzdCBxdWlja2x5IGNvbmZpcm0gd2hlcmUgYFNUUklDVF9LRVJORUxfUldYYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEkgc3VzcGVjdCBpdCdzIGVpdGhlciBpbiB0aGUgZ2VuZXJhbCBpbml0aWFsaXphdGlvbiBjb25maWcsIGBpbml0L0tjb25maWdgLCBvciBwZXJoYXBzIGEgbW9yZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZSwgbGlrZSBgYXJjaC9LY29uZmlnYC4gSXQncyBjcml0aWNhbCB0byBrbm93ICpleGFjdGx5KiB3aGVyZSB0aGlzIGNvbmZpZyBvcHRpb24gaXMgZGVmaW5lZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaG93IGl0J3MgaGFuZGxlZCBkdXJpbmcgYnVpbGQgYW5kIGNvbmZpZ3VyYXRpb24gdGltZS4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiB0byBwcm9wZXJseSBhc3Nlc3MgaXRzIGltcGFjdCBhbmQgaG93IEkgY2FuLCBpZiBuZWNlc3NhcnksIGN1c3RvbWl6ZSBvciBvdmVycmlkZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aG9zZSBLY29uZmlnIGZpbGVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTA2NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjIwLjg4MDYyMzk2OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NDc3NTE5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1RSSUNUX0tFUk5FTF9SV1hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTE1OTU9Y29uZmlnIEFSQ0hfSEFTX1NUUklDVF9LRVJORUxfUldYXFxuLS1cXG5hcmNoL0tjb25maWctMTU5Ny1cXG5hcmNoL0tjb25maWc6MTU5ODpjb25maWcgU1RSSUNUX0tFUk5FTF9SV1hcXG5hcmNoL0tjb25maWctMTU5OS1cXHRib29sIFxcXCJNYWtlIGtlcm5lbCB0ZXh0IGFuZCByb2RhdGEgcmVhZC1vbmx5XFxcIiBpZiBBUkNIX09QVElPTkFMX0tFUk5FTF9SV1hcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MjIuNTc1NDA3MTAxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODUyNjM1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgbXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgaXQncyBsaWtlbHkgaG91c2VkIGluIGBhcmNoL0tjb25maWdgLiBJJ20gcmVhc29uYWJseSBzdXJlIG9mIHRoYXQgZGlyZWN0b3J5LCBpdCdzIHdoZXJlIHRoZSBhcmNoaXRlY3R1cmFsLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHVzdWFsbHkgbGl2ZS4gSSdsbCBmb2N1cyBteSBzZWFyY2ggYXJvdW5kIGxpbmUgMTU5OC4gTm8gbmVlZCB0byBnZXQgZGlzdHJhY3RlZCBieSBhIHdpZGVyIHNlYXJjaCB3aGVuIEkgaGF2ZSBhIGdvb2QgaWRlYSB3aGVyZSB0byBzdGFydCBkaWdnaW5nLiBMZXQncyBzZWUgd2hhdCdzIGJyZXdpbmcgaW4gdGhhdCBwYXJ0aWN1bGFyIGFyZWEgb2YgdGhlIGNvbmZpZyBmaWxlLiBUaW1lIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5Mzg2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MjQuNDYwNjcyODY4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjcwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTU5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU5NTpcXHRjb25maWcgQVJDSF9IQVNfU1RSSUNUX0tFUk5FTF9SV1hcXG4xNTk2OlxcdFxcdGRlZl9ib29sIG5cXG4xNTk3OlxcdFxcbjE1OTg6XFx0Y29uZmlnIFNUUklDVF9LRVJORUxfUldYXFxuMTU5OTpcXHRcXHRib29sIFxcXCJNYWtlIGtlcm5lbCB0ZXh0IGFuZCByb2RhdGEgcmVhZC1vbmx5XFxcIiBpZiBBUkNIX09QVElPTkFMX0tFUk5FTF9SV1hcXG4xNjAwOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9IQVNfU1RSSUNUX0tFUk5FTF9SV1hcXG4xNjAxOlxcdFxcdGRlZmF1bHQgIUFSQ0hfT1BUSU9OQUxfS0VSTkVMX1JXWCB8fCBBUkNIX09QVElPTkFMX0tFUk5FTF9SV1hfREVGQVVMVFxcbjE2MDI6XFx0XFx0aGVscFxcbjE2MDM6XFx0XFx0ICBJZiB0aGlzIGlzIHNldCwga2VybmVsIHRleHQgYW5kIHJvZGF0YSBtZW1vcnkgd2lsbCBiZSBtYWRlIHJlYWQtb25seSxcXG4xNjA0OlxcdFxcdCAgYW5kIG5vbi10ZXh0IG1lbW9yeSB3aWxsIGJlIG1hZGUgbm9uLWV4ZWN1dGFibGUuIFRoaXMgcHJvdmlkZXNcXG4xNjA1OlxcdFxcdCAgcHJvdGVjdGlvbiBhZ2FpbnN0IGNlcnRhaW4gc2VjdXJpdHkgZXhwbG9pdHMgKGUuZy4gZXhlY3V0aW5nIHRoZSBoZWFwXFxuMTYwNjpcXHRcXHQgIG9yIG1vZGlmeWluZyB0ZXh0KVxcbjE2MDc6XFx0XFxuMTYwODpcXHRcXHQgIFRoZXNlIGZlYXR1cmVzIGFyZSBjb25zaWRlcmVkIHN0YW5kYXJkIHNlY3VyaXR5IHByYWN0aWNlIHRoZXNlIGRheXMuXFxuMTYwOTpcXHRcXHQgIFlvdSBzaG91bGQgc2F5IFkgaGVyZSBpbiBhbG1vc3QgYWxsIGNhc2VzLlxcbjE2MTA6XFx0XFxuMTYxMTpcXHRjb25maWcgQVJDSF9IQVNfU1RSSUNUX01PRFVMRV9SV1hcXG4xNjEyOlxcdFxcdGRlZl9ib29sIG5cXG4xNjEzOlxcdFxcbjE2MTQ6XFx0Y29uZmlnIFNUUklDVF9NT0RVTEVfUldYXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjI0LjQ2MTE2NjAwOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NDI0ODcxNzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFdeWCBWZXJpZmljYXRpb24gTG9naWMgaW4geDg2IE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgU1RSSUNUX0tFUk5FTF9SV1hgIGRlZmF1bHRzIHRvIGB5YCwgc28gd2UncmUgZ29vZCB0aGVyZS4gVGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBpcyBjcnVjaWFsOiB3ZSdyZSBkZWFsaW5nIHdpdGggYEVuYWJsZUNvbmZpZ3NgOiBgW1wiU1RSSUNUX0tFUk5FTF9SV1hcIl1gLlxuXG5Ob3csIGxldCdzIGhvbmUgaW4gb24gdGhlIGNvcmUgb2YgdGhlIG1hdHRlci4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjYXJlZnVsbHkgc2VsZWN0ZWQgdG8gYXZvaWQgdGhlIG5vaXNlIG9mIHViaXF1aXRvdXMgZnVuY3Rpb25zIGxpa2UgYHZmcmVlYCBvciBga21hbGxvY2AuIEluc3RlYWQsIEknbSBjb25jZW50cmF0aW5nIG9uIHRoZSBzcGVjaWZpYyBlbnRyeSBwb2ludHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCwgYF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCwgYF9fY2hhbmdlX3BhZ2VfYXR0cmAsIGBfX3Nob3VsZF9zcGxpdF9sYXJnZV9wYWdlYCwgYHNldF9tZW1vcnlfcm9gLCBgc2V0X21lbW9yeV9yd2AsIGBzZXRfbWVtb3J5X3JveGAsIGBzZXRfbWVtb3J5X3hgLCBhbmQgYHNldF9tZW1vcnlfbnhgLiBUaGVzZSBhcmUgYWxsIHJlbGV2YW50IGZ1bmN0aW9ucyBpbiB0aGUgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGZpbGUuXG5cblRoZSBnaXQgZGlmZiBjb25maXJtcyB0aGUgY2hhbmdlcy4gV2UncmUgbW9kaWZ5aW5nIHRoZSBXXlggdmVyaWZpY2F0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGB2ZXJpZnlfcnd4YCBmdW5jdGlvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjb25kaXRpb25hbCB3YXJuaW5nIHJlbGF0ZWQgdG8gYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIGFuZCByb2RhdGEgcHJvdGVjdGlvbi4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IHByb3ZpZGVzIGEgbWVjaGFuaXNtIHRvIGhhbmRsZSBwb3RlbnRpYWwgZmFsc2UgcG9zaXRpdmVzLCBwYXJ0aWN1bGFybHkgYmVmb3JlIHRoZSBgZGVidWdfY2hlY2t3eCgpYCBiZWNvbWVzIG1hbmRhdG9yeS5cblxuVGhlIHN1YnN5c3RlbSBpcyBjbGVhcmx5IHg4NiBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBDaGFuZ2UgUGFnZSBBdHRyaWJ1dGVzIChDUEEpLiBUaGUgcmVhY2hhYmlsaXR5IGlzIHdlbGwtZGVmaW5lZDogdGhpcyBjb2RlIHBhdGggaXMgZnVsbHkgcmVhY2hhYmxlIG9uIHg4Nl82NCB3aGVuZXZlciBwYWdlIHByb3RlY3Rpb24gYXR0cmlidXRlcyBhcmUgbW9kaWZpZWQsIHdoaWNoIGhhcHBlbnMgZnJlcXVlbnRseSAobW9kdWxlcywgQlBGIEpJVCwga3Byb2Jlcy9mdHJhY2UsIGRpcmVjdCBtYXAgbWFuaXB1bGF0aW9uKS4gVGhpcyBtYWtlcyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhcmUgYXBwcm9wcmlhdGUuIFRoZSBwYXRjaCBtb2RpZmllcyBXXlggdmVyaWZpY2F0aW9uLCBhbmQgdGhpcyBtYWtlcyBpdCBhIHN1aXRhYmxlIGFyZWEgZm9yIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTEyLCJPdXRwdXRUb2tlbnMiOjIxMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjozOTozMi44ODYwNDAxNzVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzI0MDY4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1RSSUNUX0tFUk5FTF9SV1hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2NoYW5nZV9wYWdlX2F0dHJcIixcbiAgICBcIl9fc2hvdWxkX3NwbGl0X2xhcmdlX3BhZ2VcIixcbiAgICBcImNoYW5nZV9wYWdlX2F0dHJfc2V0X2NsclwiLFxuICAgIFwic2V0X21lbW9yeV9yb1wiLFxuICAgIFwic2V0X21lbW9yeV9yd1wiLFxuICAgIFwic2V0X21lbW9yeV9yb3hcIixcbiAgICBcInNldF9tZW1vcnlfbnhcIixcbiAgICBcInNldF9tZW1vcnlfeFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXXlggcGVybWlzc2lvbiB2ZXJpZmljYXRpb24gbG9naWMgKHZlcmlmeV9yd3gpIHdpdGhpbiB4ODYgQ2hhbmdlIFBhZ2UgQXR0cmlidXRlcyAoQ1BBKSBpbiBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgZXhlY3V0ZWQgd2hlbmV2ZXIga2VybmVsIHBhZ2UgcHJvdGVjdGlvbnMgYXJlIGFkanVzdGVkIChzdWNoIGFzIHZpYSBCUEYgSklULCBmdHJhY2UsIG1vZHVsZSBsb2FkaW5nL3VubG9hZGluZywgb3IgZHJpdmVyIG1lbW9yeSBhdHRyaWJ1dGUgY2hhbmdlcykuIEl0IGludHJvZHVjZXMgbmV3IGNvbmRpdGlvbmFsIHdhcm5pbmcgYmVoYXZpb3Igd2hlbiBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5IGlzIGZhbHNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNUUklDVF9LRVJORUxfUldYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19jaGFuZ2VfcGFnZV9hdHRyXCIsXG4gICAgXCJfX3Nob3VsZF9zcGxpdF9sYXJnZV9wYWdlXCIsXG4gICAgXCJjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJcIixcbiAgICBcInNldF9tZW1vcnlfcm9cIixcbiAgICBcInNldF9tZW1vcnlfcndcIixcbiAgICBcInNldF9tZW1vcnlfcm94XCIsXG4gICAgXCJzZXRfbWVtb3J5X254XCIsXG4gICAgXCJzZXRfbWVtb3J5X3hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV15YIHBlcm1pc3Npb24gdmVyaWZpY2F0aW9uIGxvZ2ljICh2ZXJpZnlfcnd4KSB3aXRoaW4geDg2IENoYW5nZSBQYWdlIEF0dHJpYnV0ZXMgKENQQSkgaW4gYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGV4ZWN1dGVkIHdoZW5ldmVyIGtlcm5lbCBwYWdlIHByb3RlY3Rpb25zIGFyZSBhZGp1c3RlZCAoc3VjaCBhcyB2aWEgQlBGIEpJVCwgZnRyYWNlLCBtb2R1bGUgbG9hZGluZy91bmxvYWRpbmcsIG9yIGRyaXZlciBtZW1vcnkgYXR0cmlidXRlIGNoYW5nZXMpLiBJdCBpbnRyb2R1Y2VzIG5ldyBjb25kaXRpb25hbCB3YXJuaW5nIGJlaGF2aW9yIHdoZW4ga2VybmVsX3NldF90b19yZWFkb25seSBpcyBmYWxzZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6MzIuOTU5Mjg4MDI2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc1MTYzNzA4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjMyLjk1OTc0NTU3NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0NzUxMTc0NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdmVyaWZ5X3J3eCgpYCBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgdG8gbG9nIGEgd2FybmluZyB2aWEgYHByX3dhcm5fb25jZWAgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgZnVsbCBgV0FSTl9PTkNFYCB3aGVuIGEgV15YIHZpb2xhdGlvbiBpcyBkZXRlY3RlZCBiZWZvcmUga2VybmVsIHRleHQgaGFzIGJlZW4gbWFya2VkIHJlYWQtb25seSAoYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIGlzIGZhbHNlKS4gXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSB0b3VjaGVzIGxvZ2dpbmcgYW5kIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBhbiBleGlzdGluZyBnbG9iYWwgYm9vbGVhbiBmbGFnIGFuZCBzY2FsYXIgcGFnZS10YWJsZSBwcm90ZWN0aW9uIHZhbHVlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmRkNmQ0ZWVkYWFmNDMyZjdmYmEzN2MyZWZjODhiODQ1OWFmODAyMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjM3OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGIzMDYwMDAwZGE4ZDEuLmE0ZjdmZTY5ZTY5MjIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5AQCAtNjk3LDYgKzY5NywyMSBAQCBzdGF0aWMgaW5saW5lIHBncHJvdF90IHZlcmlmeV9yd3gocGdwcm90X3Qgb2xkLCBwZ3Byb3RfdCBuZXcsIHVuc2lnbmVkIGxvbmcgc3RhclxuIFx0XHRyZXR1cm4gbmV3O1xuIFxuIFx0ZW5kID0gc3RhcnQgKyBucGcgKiBQQUdFX1NJWkUgLSAxO1xuK1xuK1x0LypcbitcdCAqIElmIHRoZSBrZXJuZWwgdGV4dCBpcyBzdGlsbCBSV1gsIGdlbnRseSBjb21wbGFpbiwgdGhpcyBjb3VsZCBiZSBhXG4rXHQgKiBmYWxzZSBwb3NpdGl2ZS5cbitcdCAqIE9uY2UgZGVidWdfY2hlY2t3eCgpIGJlY29tZXMgbWFuZGF0b3J5IGZvciBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gsXG4rXHQgKiB0aGUgd2FybmluZyBjYW4gYmUgcmVtb3ZlZCBjb21wbGV0ZWx5LlxuK1x0ICovXG4rXHRpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpIHtcbitcdFx0cHJfd2Fybl9vbmNlKDEsIFwiQ1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXG5cIixcbitcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwob2xkKSxcbitcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwobmV3KSxcbitcdFx0ICBzdGFydCwgZW5kLCBwZm4pO1xuK1x0XHRyZXR1cm4gbmV3O1xuK1x0fVxuK1xuIFx0V0FSTl9PTkNFKDEsIFwiQ1BBIGRldGVjdGVkIFdeWCB2aW9sYXRpb246ICUwMTZsbHggLVx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXG5cIixcbiBcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwob2xkKSxcbiBcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwobmV3KSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjMyLjk1OTc0NjM5NloiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTkzOTY2NDI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIHRoZSBOZWVkIGZvciBLTVNBTiBGdXp6aW5nIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCoqXG5cbk9rYXksIGhlcmUncyB0aGUgZGVhbC4gSSdtIGJlaW5nIGFza2VkIHRvIGZpZ3VyZSBvdXQgd2hldGhlciBhIHBhdGNoIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCB3YXJyYW50cyBLTVNBTiBmdXp6aW5nLCBvciBpZiBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIGRldGVjdG9ycyBhcmUgZ29vZCBlbm91Z2guIExldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS5cblxuRmlyc3QsIHRoZSByaXNrIGFuYWx5c2lzLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCByZXF1ZXN0OiBpdCdzIGEgZGVmZW5zaXZlIHNlY3VyaXR5IGVuZ2luZWVyaW5nIHF1ZXN0aW9uIHdpdGhpbiBMaW51eCBrZXJuZWwgUUEgdHJpYWdlLiBUaGUgc2V2ZXJpdHkgaXNuJ3QgY3JpdGljYWw7IHdlJ3JlIGp1c3QgbWFraW5nIHN1cmUgb3VyIGJhc2VzIGFyZSBjb3ZlcmVkLiBTbywgbXkgYWN0aW9uIGlzIHRvIHByb3ZpZGUgYSBjb21wbGV0ZSBldmFsdWF0aW9uLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBhcHBlYXJzIHRvIGJlIGFkZGluZyBhIHdhcm5pbmcgcmVsYXRlZCB0byBXXlggdmlvbGF0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBwYXRjaCBjaGVja3MgaWYgY29kZSBpcyBiZWluZyBtYWRlIHdyaXRhYmxlIGFmdGVyIGJlaW5nIHJlYWQtb25seSBpbiB0aGUga2VybmVsIHRleHQuIFRoZXJlJ3MgYSBjb25kaXRpb25hbCBjaGVjayBoZXJlOiBJZiB0aGUga2VybmVsIGlzbid0IGNvbmZpZ3VyZWQgZm9yIHN0cmljdCByZWFkLW9ubHkgdGV4dCwgYSB3YXJuaW5nIGlzIHByaW50ZWQuIE90aGVyd2lzZSwgYFdBUk5fT05DRWAgaXMgdXNlZC4gVGhpcyBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gcHJvdGVjdGluZyBhZ2FpbnN0IGNvZGUgaW5qZWN0aW9uIHZ1bG5lcmFiaWxpdGllcy5cblxuSSdsbCBuZWVkIHRvIGdvIGRlZXBlciB0aGFuIGp1c3QgZ2xhbmNpbmcgYXQgdGhlIGRpZmYuIEknbGwgdXNlIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IHRoZSBicm9hZGVyIGNvbnRleHQgd2l0aGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhpcyBgc2V0X21lbW9yeS5jYCBjb2RlIGlzIGRvaW5nIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGEgY29uY2VybiBpbiB0aGUgcGF0Y2hlZCBjb2RlLiBPbmNlIEkgZ2V0IHRoZSB3aWRlciBwaWN0dXJlLCBJJ2xsIGJlIGluIGEgYmV0dGVyIHBvc2l0aW9uIHRvIGRldGVybWluZSBpZiBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeSwgb3IgaWYgc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBhZGVxdWF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjM5OjQ4Ljg5OTQxMzYxNloiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2OTA6XFx0XFx0XFx0cmV0dXJuIG5ldztcXG4gNjkxOlxcdFxcbiA2OTI6XFx0XFx0aWYgKChwZ3Byb3RfdmFsKG5ldykgXFx1MDAyNiAoX1BBR0VfUlcgfCBfUEFHRV9OWCkpICE9IF9QQUdFX1JXKVxcbiA2OTM6XFx0XFx0XFx0cmV0dXJuIG5ldztcXG4gNjk0OlxcdFxcbiA2OTU6XFx0XFx0LyogTm9uLWxlYWYgdHJhbnNsYXRpb24gZW50cmllcyBjYW4gZGlzYWJsZSB3cml0aW5nIG9yIGV4ZWN1dGlvbi4gKi9cXG4gNjk2OlxcdFxcdGlmICghcncgfHwgbngpXFxuIDY5NzpcXHRcXHRcXHRyZXR1cm4gbmV3O1xcbiA2OTg6XFx0XFxuIDY5OTpcXHRcXHRlbmQgPSBzdGFydCArIG5wZyAqIFBBR0VfU0laRSAtIDE7XFxuIDcwMDpcXHRcXG4gNzAxOlxcdFxcdC8qXFxuIDcwMjpcXHRcXHQgKiBJZiB0aGUga2VybmVsIHRleHQgaXMgc3RpbGwgUldYLCBnZW50bHkgY29tcGxhaW4sIHRoaXMgY291bGQgYmUgYVxcbiA3MDM6XFx0XFx0ICogZmFsc2UgcG9zaXRpdmUuXFxuIDcwNDpcXHRcXHQgKiBPbmNlIGRlYnVnX2NoZWNrd3goKSBiZWNvbWVzIG1hbmRhdG9yeSBmb3IgQ09ORklHX1NUUklDVF9LRVJORUxfUldYLFxcbiA3MDU6XFx0XFx0ICogdGhlIHdhcm5pbmcgY2FuIGJlIHJlbW92ZWQgY29tcGxldGVseS5cXG4gNzA2OlxcdFxcdCAqL1xcbiA3MDc6XFx0XFx0aWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KSB7XFxuIDcwODpcXHRcXHRcXHRwcl93YXJuX29uY2UoMSwgXFxcIkNQQSBkZXRlY3RlZCBXXlggdmlvbGF0aW9uOiAlMDE2bGx4IC1cXHUwMDNlICUwMTZsbHggcmFuZ2U6IDB4JTAxNmx4IC0gMHglMDE2bHggUEZOICVseFxcXFxuXFxcIixcXG4gNzA5OlxcdFxcdFxcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylwZ3Byb3RfdmFsKG9sZCksXFxuIDcxMDpcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChuZXcpLFxcbiA3MTE6XFx0XFx0XFx0ICBzdGFydCwgZW5kLCBwZm4pO1xcbiA3MTI6XFx0XFx0XFx0cmV0dXJuIG5ldztcXG4gNzEzOlxcdFxcdH1cXG4gNzE0OlxcdFxcbiA3MTU6XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJDUEEgZGV0ZWN0ZWQgV15YIHZpb2xhdGlvbjogJTAxNmxseCAtXFx1MDAzZSAlMDE2bGx4IHJhbmdlOiAweCUwMTZseCAtIDB4JTAxNmx4IFBGTiAlbHhcXFxcblxcXCIsXFxuIDcxNjpcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpcGdwcm90X3ZhbChvbGQpLFxcbiA3MTc6XFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKXBncHJvdF92YWwobmV3KSxcXG4gNzE4OlxcdFxcdFxcdCAgc3RhcnQsIGVuZCwgcGZuKTtcXG4gNzE5OlxcdFxcbiA3MjA6XFx0XFx0LypcXG4gNzIxOlxcdFxcdCAqIEZvciBub3csIGFsbG93IGFsbCBwZXJtaXNzaW9uIGNoYW5nZSBhdHRlbXB0cyBieSByZXR1cm5pbmcgdGhlXFxuIDcyMjpcXHRcXHQgKiBhdHRlbXB0ZWQgcGVybWlzc2lvbnMuICBUaGlzIGNhbiAncmV0dXJuIG9sZCcgdG8gYWN0aXZlbHlcXG4gNzIzOlxcdFxcdCAqIHJlZnVzZSB0aGUgcGVybWlzc2lvbiBjaGFuZ2UgYXQgYSBsYXRlciB0aW1lLlxcbiA3MjQ6XFx0XFx0ICovXFxuIDcyNTpcXHRcXHRyZXR1cm4gbmV3O1xcbiA3MjY6XFx0fVxcbiA3Mjc6XFx0XFxuIDcyODpcXHQvKlxcbiA3Mjk6XFx0ICogTG9va3VwIHRoZSBwYWdlIHRhYmxlIGVudHJ5IGZvciBhIHZpcnR1YWwgYWRkcmVzcyBpbiBhIHNwZWNpZmljIHBnZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6NDguODk5NTQ5NDY3WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4MTEzNDg5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQW5hbHlzaXMgb2YgdGhlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBwcl93YXJuX29uY2VgIHVzYWdlIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUg4oCTIHRoZSBmaXJzdCBhcmd1bWVudCBsb29rcyBzdXNwaWNpb3VzLiBJcyBpdCBhIHR5cG8gb3IgYSBtYWNybz8gSW4gYW55IGNhc2UsIGl0J3Mgbm90IHRoZSBzdGFuZGFyZCBwYXR0ZXJuLCBzbyBJJ20gZmlsaW5nIHRoYXQgYXdheSBmb3Igbm93LiBNeSBpbW1lZGlhdGUgZm9jdXMsIGhvd2V2ZXIsIGlzIG9uIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBhbnl0aGluZyBLTVNBTiB3b3VsZCBmbGFnLlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgYHZlcmlmeV9yd3goKWAgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBSaWdodCwgc28gSSByYW4gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OlxuXG4qICAgKipBbGxvY2F0aW9uPyoqIE5vcGUsIG5vIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbiB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuXG4qICAgKipVc2VyIHNwYWNlIGNvcHk/KiogTm90IGF0IGFsbC5cbiogICAqKlVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzPyoqIE5vLCB0aGUgYXJndW1lbnRzIHRvIGB2ZXJpZnlfcnd4KClgIOKAkyBgb2xkYCwgYG5ld2AsIGBzdGFydGAsIGBlbmRgLCBgcGZuYCwgYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIOKAkyBhcmUgYWxsIHNjYWxhciB2YWx1ZXMsIGJvb2xlYW5zLCBvciBgcGdwcm90X3RgIHBhc3NlZCBieSB2YWx1ZS4gVGhpcyBpcyBhIGNsZWFuIGJpbGwgb2YgaGVhbHRoLlxuKiAgICoqQnVmZmVyIG1hbmlwdWxhdGlvbiBvciBib3VuZHMgY2hlY2tzPyoqIE5vdGhpbmcgaGVyZS5cbiogICAqKktlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzPyoqIE5vLlxuXG5HaXZlbiBhbGwgb2YgdGhhdCwgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBcIk5lZWRzS01TQU4gPSBmYWxzZS5cIlxuXG5Ob3csIGxldCdzIHNvbGlkaWZ5IHRoZSByZWFzb25pbmcgZm9yIHRoZSByZWNvcmQuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBhIGBXQVJOX09OQ0VgIHRvIGEgYHByX3dhcm5fb25jZWAgaW4gYHZlcmlmeV9yd3goKWAuIFRoZSBjaGFuZ2Ugb25seSBkb3duZ3JhZGVzIHRoZSB3YXJuaW5nIGlmIGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBpcyBmYWxzZSBkdXJpbmcgZWFybHkgYm9vdCwgd2hlbiB0aGUga2VybmVsIHRleHQgcGVybWlzc2lvbnMgYXJlIHN0aWxsIFJXWC4gSXQncyBlc3NlbnRpYWxseSBqdXN0IGEgY29uZGl0aW9uYWwgbG9nZ2luZyBjaGFuZ2UuIFRoZSBjb2RlIGlzIG9ubHkgd29ya2luZyB3aXRoIHNjYWxhciB2YXJpYWJsZXMg4oCTIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcywgbm8gd3JpdGVzIG9yIGNvcGllcyB0byB1c2Vyc3BhY2UsIG5vIGNoYW5nZXMgdG8gYnVmZmVyIGxlbmd0aHMgb3IgY2FsY3VsYXRpb25zLiBBbGwgdGhlIGluZm9ybWF0aW9uIGZvciBLTVNBTiB0byBhbmFseXplIGlzIHNjYWxhciBhbmQgcGFzc2VkIGJ5IHZhbHVlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggYWJzb2x1dGVseSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IEtNU0FOLXJlbGV2YW50IGlzc3VlcyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzIsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6Mzk6NTcuNzEwOTAyNzI3WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdmVyaWZ5X3J3eCgpYCBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgdG8gbG9nIGEgd2FybmluZyB2aWEgYHByX3dhcm5fb25jZWAgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgZnVsbCBgV0FSTl9PTkNFYCB3aGVuIGEgV15YIHZpb2xhdGlvbiBpcyBkZXRlY3RlZCBiZWZvcmUga2VybmVsIHRleHQgaGFzIGJlZW4gbWFya2VkIHJlYWQtb25seSAoYGtlcm5lbF9zZXRfdG9fcmVhZG9ubHlgIGlzIGZhbHNlKS4gXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSB0b3VjaGVzIGxvZ2dpbmcgYW5kIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiBhbiBleGlzdGluZyBnbG9iYWwgYm9vbGVhbiBmbGFnIGFuZCBzY2FsYXIgcGFnZS10YWJsZSBwcm90ZWN0aW9uIHZhbHVlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHRvdWNoIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcsIGFuZCBkb2VzIG5vdCBleHBvc2UgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHZlcmlmeV9yd3goKWAgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIHRvIGxvZyBhIHdhcm5pbmcgdmlhIGBwcl93YXJuX29uY2VgIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIGZ1bGwgYFdBUk5fT05DRWAgd2hlbiBhIFdeWCB2aW9sYXRpb24gaXMgZGV0ZWN0ZWQgYmVmb3JlIGtlcm5lbCB0ZXh0IGhhcyBiZWVuIG1hcmtlZCByZWFkLW9ubHkgKGBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5YCBpcyBmYWxzZSkuIFxcblxcblRoaXMgY2hhbmdlIG9ubHkgdG91Y2hlcyBsb2dnaW5nIGFuZCBjb250cm9sIGZsb3cgYmFzZWQgb24gYW4gZXhpc3RpbmcgZ2xvYmFsIGJvb2xlYW4gZmxhZyBhbmQgc2NhbGFyIHBhZ2UtdGFibGUgcHJvdGVjdGlvbiB2YWx1ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCB0b3VjaCB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nLCBhbmQgZG9lcyBub3QgZXhwb3NlIGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowpzgs9[1] Phase: Succeeded StartedAt: 2026-09-11 12:40:08 +0000 UTC FinishedAt: 2026-09-11 12:40:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpzgs9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 12:40:08 +0000 UTC FinishedAt: 2026-09-11 12:40:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpzgs9[2] Phase: Succeeded StartedAt: 2026-09-11 12:40:08 +0000 UTC FinishedAt: 2026-09-11 13:16:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-11 12:40:08 +0000 UTC FinishedAt: 2026-09-11 13:16:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 12:40:08 +0000 UTC FinishedAt: 2026-09-11 12:40:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 12:40:08 +0000 UTC FinishedAt: 2026-09-11 12:40:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowpzgs9/series-workflowpzgs9-convert-artifact-1468977273/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 12:40:18 +0000 UTC FinishedAt: 2026-09-11 13:00:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 12:40:18 +0000 UTC FinishedAt: 2026-09-11 13:00:14 +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:*4e2306eb-c8bf-475d-9800-af42d320739f,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-workflowpzgs9/series-workflowpzgs9-convert-artifact-1468977273/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": "198b8836-dc72-4ac2-bd4d-218f527c39e1", "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-workflowpzgs9/series-workflowpzgs9-build-action-4121389463/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 12:40:18 +0000 UTC FinishedAt: 2026-09-11 12:59:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4e2306eb-c8bf-475d-9800-af42d320739f,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-workflowpzgs9/series-workflowpzgs9-convert-artifact-1468977273/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": "198b8836-dc72-4ac2-bd4d-218f527c39e1", "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-workflowpzgs9/series-workflowpzgs9-build-action-4121389463/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 13:00:14 +0000 UTC FinishedAt: 2026-09-11 13:00:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 13:00:14 +0000 UTC FinishedAt: 2026-09-11 13:00:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 13:00:14 +0000 UTC FinishedAt: 2026-09-11 13:00:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 13:00:14 +0000 UTC FinishedAt: 2026-09-11 13:00:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowpzgs9/series-workflowpzgs9-convert-artifact-402296140/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 13:00:24 +0000 UTC FinishedAt: 2026-09-11 13:02:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 13:00:24 +0000 UTC FinishedAt: 2026-09-11 13:02:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*198b8836-dc72-4ac2-bd4d-218f527c39e1,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-workflowpzgs9/series-workflowpzgs9-build-action-4121389463/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-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 13:02:31 +0000 UTC FinishedAt: 2026-09-11 13:02:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 13:02:31 +0000 UTC FinishedAt: 2026-09-11 13:02:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 13:02:31 +0000 UTC FinishedAt: 2026-09-11 13:16:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 13:02:31 +0000 UTC FinishedAt: 2026-09-11 13:16:31 +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:*4e2306eb-c8bf-475d-9800-af42d320739f,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-workflowpzgs9/series-workflowpzgs9-convert-artifact-402296140/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": "ea743f94-aa34-4a2c-926f-acaefc7db8a0", "success": false },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-workflowpzgs9/series-workflowpzgs9-build-action-4199865192/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 13:02:31 +0000 UTC FinishedAt: 2026-09-11 13:16:21 +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:*4e2306eb-c8bf-475d-9800-af42d320739f,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-workflowpzgs9/series-workflowpzgs9-convert-artifact-402296140/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": "ea743f94-aa34-4a2c-926f-acaefc7db8a0", "success": false },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-workflowpzgs9/series-workflowpzgs9-build-action-4199865192/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Failed StartedAt: 2026-09-11 13:16:31 +0000 UTC FinishedAt: 2026-09-11 13:16:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpzgs9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__change_page_attr","__should_split_large_page","change_page_attr_set_clr","set_memory_ro","set_memory_rw","set_memory_rox","set_memory_nx","set_memory_x"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ebaf7c9bbb1e16523d7036e7e1225ad2dfcc6482","config_name":"upstream-apparmor-kasan.config","enable_configs":["STRICT_KERNEL_RWX"],"series_id":"28ec0797-ca6e-4150-9b75-cd4e2a6de68e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Failed StartedAt: 2026-09-11 13:16:31 +0000 UTC FinishedAt: 2026-09-11 13:16:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}