Name: series-workflowwkz2n Phase: Succeeded StartedAt: 2026-08-26 16:50:21 +0000 UTC FinishedAt: 2026-08-26 21:00:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[0] Phase: Succeeded StartedAt: 2026-08-26 16:50:21 +0000 UTC FinishedAt: 2026-08-26 17:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 16:50:21 +0000 UTC FinishedAt: 2026-08-26 17:09:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATM", "USB_ATM", "USB_XUSBATM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATM", "USB_ATM", "USB_XUSBATM" ], "series_id": "93fe25d1-ccb3-4fd5-830d-ee9224a1adcc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vcc_connect", "pvc_bind", "pvc_connect" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7VVNCX0FUTSYjMzQ7LAogICAgJiMzNDtVU0JfWFVTQkFUTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZjY19jb25uZWN0JiMzNDssCiAgICAmIzM0O3B2Y19iaW5kJiMzNDssCiAgICAmIzM0O3B2Y19jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gdW5kZWZpbmVkIGJlaGF2aW9yIChzaGlmdC1vdXQtb2YtYm91bmRzKSBidWcgaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgLiBXaGVuIGBkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgaXMgc2V0IHRvIGBBVE1fQ0lfTUFYYCAoLTEpLCB0aGUgYml0d2lzZSBzaGlmdCBvcGVyYXRpb25zIChgMSBcdTAwM2NcdTAwM2MgdnBpX2JpdHNgIG9yIGB2cGkgXHUwMDNlXHUwMDNlIHZwaV9iaXRzYCkgcmVzdWx0IGluIGEgc2hpZnQgYnkgYSBuZWdhdGl2ZSBhbW91bnQsIHdoaWNoIGlzIHVuZGVmaW5lZCBiZWhhdmlvci4gVGhlIHBhdGNoIGludHJvZHVjZXMgbG9jYWwgdmFyaWFibGVzIHRvIGhhbmRsZSBgQVRNX0NJX01BWGAgYW5kIHJlcGxhY2UgaXQgd2l0aCA4IG9yIDE2IHJlc3BlY3RpdmVseS4gVGhpcyBidWcgaXMgY2F1Z2h0IGJ5IFVCU0FOIChVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyKSwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVhaywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyBpbnZvbHZlZCBpbiB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgIGluIGBuZXQvYXRtL2NvbW1vbi5jYCB3aGVyZSBgdnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgYmVpbmcgYEFUTV9DSV9NQVhgICgtMSkgd291bGQgY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIChlLmcuIG5lZ2F0aXZlIHNoaWZ0cyBvciBpbmZpbml0ZSBsb29wcykuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgYmluZGAgYW5kIGBjb25uZWN0YCBzeXN0ZW0gY2FsbHMgb24gQVRNIFBWQyBzb2NrZXRzIChgQUZfQVRNUFZDYCkuIFRvIHJlYWNoIHRoaXMgY29kZSwgYW4gQVRNIGRldmljZSBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIHN5c3RlbS4gU2luY2UgcGh5c2ljYWwgQVRNIGhhcmR3YXJlIGlzIHJhcmUsIHN5emthbGxlciBjYW4gZW11bGF0ZSBhbiBBVE0gZGV2aWNlIHVzaW5nIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yayBjb21iaW5lZCB3aXRoIFVTQiBBVE0gZHJpdmVycyAoZS5nLiBgeHVzYmF0bWApLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNGIwMzA4NWRjNTU1ZmE3MjMyMTgwNGU2MDEzZjI0YjA4ZTQ0MTRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTY6NTI6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9jb21tb24uYyBiL25ldC9hdG0vY29tbW9uLmNcbmluZGV4IDgxMTk1NzI3ZmExOGIuLmEyMTQzOWQ2OTBmMTQgMTAwNjQ0XG4tLS0gYS9uZXQvYXRtL2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYXRtL2NvbW1vbi5jXG5AQCAtMzM0LDYgJiM0MzszMzQsMTAgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxuIFx0c2hvcnQgb2xkX3A7XG4gXHRpbnQgb2xkX2M7XG4gXHRpbnQgZXJyO1xuJiM0MztcdGludCB2cGlfYml0cyA9IHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOlxuJiM0MztcdFx0ICAgICAgIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHM7XG4mIzQzO1x0aW50IHZjaV9iaXRzID0gdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52Y2lfYml0cyA9PSBBVE1fQ0lfTUFYID8gMTYgOlxuJiM0MztcdFx0ICAgICAgIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHM7XG4gXG4gXHRpZiAoKnZwaSAhPSBBVE1fVlBJX0FOWSBcdTAwMjZcdTAwMjYgKnZjaSAhPSBBVE1fVkNJX0FOWSkge1xuIFx0XHRlcnIgPSBjaGVja19jaSh2Y2MsICp2cGksICp2Y2kpO1xuQEAgLTM0MiwxMiAmIzQzOzM0NiwxMiBAQCBzdGF0aWMgaW50IGZpbmRfY2koY29uc3Qgc3RydWN0IGF0bV92Y2MgKnZjYywgc2hvcnQgKnZwaSwgaW50ICp2Y2kpXG4gXHQvKiBsYXN0IHNjYW4gbWF5IGhhdmUgbGVmdCB2YWx1ZXMgb3V0IG9mIGJvdW5kcyBmb3IgY3VycmVudCBkZXZpY2UgKi9cbiBcdGlmICgqdnBpICE9IEFUTV9WUElfQU5ZKVxuIFx0XHRwID0gKnZwaTtcbi1cdGVsc2UgaWYgKHAgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2Y2MtXHUwMDNlZGV2LVx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzKVxuJiM0MztcdGVsc2UgaWYgKHAgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2cGlfYml0cylcbiBcdFx0cCA9IDA7XG4gXHRpZiAoKnZjaSAhPSBBVE1fVkNJX0FOWSlcbiBcdFx0YyA9ICp2Y2k7XG4tXHRlbHNlIGlmIChjIFx1MDAzYyBBVE1fTk9UX1JTVl9WQ0kgfHwgYyBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMpXG4tXHRcdFx0YyA9IEFUTV9OT1RfUlNWX1ZDSTtcbiYjNDM7XHRlbHNlIGlmIChjIFx1MDAzYyBBVE1fTk9UX1JTVl9WQ0kgfHwgYyBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjaV9iaXRzKVxuJiM0MztcdFx0YyA9IEFUTV9OT1RfUlNWX1ZDSTtcbiBcdG9sZF9wID0gcDtcbiBcdG9sZF9jID0gYztcbiBcdGRvIHtcbkBAIC0zNTgsMTMgJiM0MzszNjIsMTMgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxuIFx0XHR9XG4gXHRcdGlmICgqdmNpID09IEFUTV9WQ0lfQU5ZKSB7XG4gXHRcdFx0YyYjNDM7JiM0Mzs7XG4tXHRcdFx0aWYgKGMgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2Y2MtXHUwMDNlZGV2LVx1MDAzZWNpX3JhbmdlLnZjaV9iaXRzKVxuJiM0MztcdFx0XHRpZiAoYyBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjaV9iaXRzKVxuIFx0XHRcdFx0YyA9IEFUTV9OT1RfUlNWX1ZDSTtcbiBcdFx0fVxuIFx0XHRpZiAoKGMgPT0gQVRNX05PVF9SU1ZfVkNJIHx8ICp2Y2kgIT0gQVRNX1ZDSV9BTlkpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKnZwaSA9PSBBVE1fVlBJX0FOWSkge1xuIFx0XHRcdHAmIzQzOyYjNDM7O1xuLVx0XHRcdGlmIChwIFx1MDAzZT0gMSBcdTAwM2NcdTAwM2MgdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0cylcbiYjNDM7XHRcdFx0aWYgKHAgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2cGlfYml0cylcbiBcdFx0XHRcdHAgPSAwO1xuIFx0XHR9XG4gXHR9IHdoaWxlIChvbGRfcCAhPSBwIHx8IG9sZF9jICE9IGMpO1xuQEAgLTM3NiwxMCAmIzQzOzM4MCwxNCBAQCBzdGF0aWMgaW50IF9fdmNjX2Nvbm5lY3Qoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IGF0bV9kZXYgKmRldiwgc2hvcnQgdnBpLFxuIHtcbiBcdHN0cnVjdCBzb2NrICpzayA9IHNrX2F0bSh2Y2MpO1xuIFx0aW50IGVycm9yO1xuJiM0MztcdGludCB2cGlfYml0cyA9IGRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0cyA9PSBBVE1fQ0lfTUFYID8gOCA6XG4mIzQzO1x0XHQgICAgICAgZGV2LVx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzO1xuJiM0MztcdGludCB2Y2lfYml0cyA9IGRldi1cdTAwM2VjaV9yYW5nZS52Y2lfYml0cyA9PSBBVE1fQ0lfTUFYID8gMTYgOlxuJiM0MztcdFx0ICAgICAgIGRldi1cdTAwM2VjaV9yYW5nZS52Y2lfYml0cztcbiBcbiBcdGlmICgodnBpICE9IEFUTV9WUElfVU5TUEVDIFx1MDAyNlx1MDAyNiB2cGkgIT0gQVRNX1ZQSV9BTlkgXHUwMDI2XHUwMDI2XG4tXHQgICAgdnBpIFx1MDAzZVx1MDAzZSBkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHMpIHx8ICh2Y2kgIT0gQVRNX1ZDSV9VTlNQRUMgXHUwMDI2XHUwMDI2XG4tXHQgICAgdmNpICE9IEFUTV9WQ0lfQU5ZIFx1MDAyNlx1MDAyNiB2Y2kgXHUwMDNlXHUwMDNlIGRldi1cdTAwM2VjaV9yYW5nZS52Y2lfYml0cykpXG4mIzQzO1x0ICAgIHZwaSBcdTAwM2VcdTAwM2UgdnBpX2JpdHMpIHx8ICh2Y2kgIT0gQVRNX1ZDSV9VTlNQRUMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHZjaSAhPSBBVE1fVkNJX0FOWSBcdTAwMjZcdTAwMjYgdmNpIFx1MDAzZVx1MDAzZSB2Y2lfYml0cykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0aWYgKHZjaSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgdmNpIFx1MDAzYyBBVE1fTk9UX1JTVl9WQ0kgXHUwMDI2XHUwMDI2ICFjYXBhYmxlKENBUF9ORVRfQklORF9TRVJWSUNFKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xNm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtVU0JfQVRNJiMzNDssCiAgICAmIzM0O1VTQl9YVVNCQVRNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmNjX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7cHZjX2JpbmQmIzM0OywKICAgICYjMzQ7cHZjX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgIHdoZXJlIGB2cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBiZWluZyBgQVRNX0NJX01BWGAgKC0xKSB3b3VsZCBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3IgKGUuZy4gbmVnYXRpdmUgc2hpZnRzIG9yIGluZmluaXRlIGxvb3BzKS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGBiaW5kYCBhbmQgYGNvbm5lY3RgIHN5c3RlbSBjYWxscyBvbiBBVE0gUFZDIHNvY2tldHMgKGBBRl9BVE1QVkNgKS4gVG8gcmVhY2ggdGhpcyBjb2RlLCBhbiBBVE0gZGV2aWNlIG11c3QgYmUgcHJlc2VudCBpbiB0aGUgc3lzdGVtLiBTaW5jZSBwaHlzaWNhbCBBVE0gaGFyZHdhcmUgaXMgcmFyZSwgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGFuIEFUTSBkZXZpY2UgdXNpbmcgdGhlIFVTQiBnYWRnZXQgZnJhbWV3b3JrIGNvbWJpbmVkIHdpdGggVVNCIEFUTSBkcml2ZXJzIChlLmcuIGB4dXNiYXRtYCkuIFRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM0YjAzMDg1ZGM1NTVmYTcyMzIxODA0ZTYwMTNmMjRiMDhlNDQxNGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjo1MjowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9hdG0vY29tbW9uLmMgYi9uZXQvYXRtL2NvbW1vbi5jCmluZGV4IDgxMTk1NzI3ZmExOGIuLmEyMTQzOWQ2OTBmMTQgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9jb21tb24uYwpAQCAtMzM0LDYgJiM0MzszMzQsMTAgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKQogCXNob3J0IG9sZF9wOwogCWludCBvbGRfYzsKIAlpbnQgZXJyOwomIzQzOwlpbnQgdnBpX2JpdHMgPSB2Y2MtJmd0O2Rldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOgomIzQzOwkJICAgICAgIHZjYy0mZ3Q7ZGV2LSZndDtjaV9yYW5nZS52cGlfYml0czsKJiM0MzsJaW50IHZjaV9iaXRzID0gdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzID09IEFUTV9DSV9NQVggPyAxNiA6CiYjNDM7CQkgICAgICAgdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzOwogCiAJaWYgKCp2cGkgIT0gQVRNX1ZQSV9BTlkgJmFtcDsmYW1wOyAqdmNpICE9IEFUTV9WQ0lfQU5ZKSB7CiAJCWVyciA9IGNoZWNrX2NpKHZjYywgKnZwaSwgKnZjaSk7CkBAIC0zNDIsMTIgJiM0MzszNDYsMTIgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKQogCS8qIGxhc3Qgc2NhbiBtYXkgaGF2ZSBsZWZ0IHZhbHVlcyBvdXQgb2YgYm91bmRzIGZvciBjdXJyZW50IGRldmljZSAqLwogCWlmICgqdnBpICE9IEFUTV9WUElfQU5ZKQogCQlwID0gKnZwaTsKLQllbHNlIGlmIChwICZndDs9IDEgJmx0OyZsdDsgdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZwaV9iaXRzKQomIzQzOwllbHNlIGlmIChwICZndDs9IDEgJmx0OyZsdDsgdnBpX2JpdHMpCiAJCXAgPSAwOwogCWlmICgqdmNpICE9IEFUTV9WQ0lfQU5ZKQogCQljID0gKnZjaTsKLQllbHNlIGlmIChjICZsdDsgQVRNX05PVF9SU1ZfVkNJIHx8IGMgJmd0Oz0gMSAmbHQ7Jmx0OyB2Y2MtJmd0O2Rldi0mZ3Q7Y2lfcmFuZ2UudmNpX2JpdHMpCi0JCQljID0gQVRNX05PVF9SU1ZfVkNJOwomIzQzOwllbHNlIGlmIChjICZsdDsgQVRNX05PVF9SU1ZfVkNJIHx8IGMgJmd0Oz0gMSAmbHQ7Jmx0OyB2Y2lfYml0cykKJiM0MzsJCWMgPSBBVE1fTk9UX1JTVl9WQ0k7CiAJb2xkX3AgPSBwOwogCW9sZF9jID0gYzsKIAlkbyB7CkBAIC0zNTgsMTMgJiM0MzszNjIsMTMgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKQogCQl9CiAJCWlmICgqdmNpID09IEFUTV9WQ0lfQU5ZKSB7CiAJCQljJiM0MzsmIzQzOzsKLQkJCWlmIChjICZndDs9IDEgJmx0OyZsdDsgdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzKQomIzQzOwkJCWlmIChjICZndDs9IDEgJmx0OyZsdDsgdmNpX2JpdHMpCiAJCQkJYyA9IEFUTV9OT1RfUlNWX1ZDSTsKIAkJfQogCQlpZiAoKGMgPT0gQVRNX05PVF9SU1ZfVkNJIHx8ICp2Y2kgIT0gQVRNX1ZDSV9BTlkpICZhbXA7JmFtcDsKIAkJICAgICp2cGkgPT0gQVRNX1ZQSV9BTlkpIHsKIAkJCXAmIzQzOyYjNDM7OwotCQkJaWYgKHAgJmd0Oz0gMSAmbHQ7Jmx0OyB2Y2MtJmd0O2Rldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHMpCiYjNDM7CQkJaWYgKHAgJmd0Oz0gMSAmbHQ7Jmx0OyB2cGlfYml0cykKIAkJCQlwID0gMDsKIAkJfQogCX0gd2hpbGUgKG9sZF9wICE9IHAgfHwgb2xkX2MgIT0gYyk7CkBAIC0zNzYsMTAgJiM0MzszODAsMTQgQEAgc3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSwKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBza19hdG0odmNjKTsKIAlpbnQgZXJyb3I7CiYjNDM7CWludCB2cGlfYml0cyA9IGRldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOgomIzQzOwkJICAgICAgIGRldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHM7CiYjNDM7CWludCB2Y2lfYml0cyA9IGRldi0mZ3Q7Y2lfcmFuZ2UudmNpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDE2IDoKJiM0MzsJCSAgICAgICBkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzOwogCiAJaWYgKCh2cGkgIT0gQVRNX1ZQSV9VTlNQRUMgJmFtcDsmYW1wOyB2cGkgIT0gQVRNX1ZQSV9BTlkgJmFtcDsmYW1wOwotCSAgICB2cGkgJmd0OyZndDsgZGV2LSZndDtjaV9yYW5nZS52cGlfYml0cykgfHwgKHZjaSAhPSBBVE1fVkNJX1VOU1BFQyAmYW1wOyZhbXA7Ci0JICAgIHZjaSAhPSBBVE1fVkNJX0FOWSAmYW1wOyZhbXA7IHZjaSAmZ3Q7Jmd0OyBkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzKSkKJiM0MzsJICAgIHZwaSAmZ3Q7Jmd0OyB2cGlfYml0cykgfHwgKHZjaSAhPSBBVE1fVkNJX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICB2Y2kgIT0gQVRNX1ZDSV9BTlkgJmFtcDsmYW1wOyB2Y2kgJmd0OyZndDsgdmNpX2JpdHMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAodmNpICZndDsgMCAmYW1wOyZhbXA7IHZjaSAmbHQ7IEFUTV9OT1RfUlNWX1ZDSSAmYW1wOyZhbXA7ICFjYXBhYmxlKENBUF9ORVRfQklORF9TRVJWSUNFKSkKIAkJcmV0dXJuIC1FUEVSTTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFUTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9hdG0vY29tbW9uLmNgLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmc7IGFueSBjaGFuZ2VzIHRvIHRoZSBjb3JlIEFUTSBjb2RlIHdhcnJhbnQgYSBjbG9zZSBsb29rLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgbW9kaWZpY2F0aW9ucyBhcmUgd2l0aGluIHRoZSBgZmluZF9jaWAgYW5kIGBfX3ZjY19jb25uZWN0YCBmdW5jdGlvbnMuIEkgc2VlIHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgYHZwaV9iaXRzYCBhbmQgYHZjaV9iaXRzYCB2YXJpYWJsZXMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoZXkmIzM5O3JlIGhhbmRsaW5nIGVkZ2UgY2FzZXMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdGhleSYjMzk7cmUgYWRkcmVzc2luZyBzaXR1YXRpb25zIHdoZXJlIHRoZSBWUEkgb3IgVkNJIGJpdHMgYXJlIGF0IHRoZWlyIG1heGltdW0gdmFsdWVzIChgQVRNX0NJX01BWGApIHdpdGhpbiB0aGUgYGRldi0mZ3Q7Y2lfcmFuZ2VgLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdG8gaG93IEFUTSBuZXR3b3JraW5nIG9wZXJhdGVzLCB3aGljaCBpcyBkZWZpbml0ZWx5IHNpZ25pZmljYW50LiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIGFmZmVjdCB0aGUgb3ZlcmFsbCBBVE0gaW5mcmFzdHJ1Y3R1cmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHJlYWNoYWJpbGl0eT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjdXJyZW50IEFUTSBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgdGhhdCBBVE0gaXMgZXZlbiByZWFjaGFibGUuIEdvdHRhIGRpdmUgaW50byB0aGUgY29uZmlnIGZpbGVzLCBzZWUgd2hhdCB0aGUgY3VycmVudCBzZXR1cCBpcyBsaWtlIGZvciBBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9LY29uZmlnLTUtXG5uZXQvYXRtL0tjb25maWc6Njpjb25maWcgQVRNXG5uZXQvYXRtL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0FzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXCYjMzQ7XG4tLVxubmV0L2F0bS9LY29uZmlnLTIxLVxubmV0L2F0bS9LY29uZmlnOjIyOmNvbmZpZyBBVE1fQlIyNjg0XG5uZXQvYXRtL0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtSRkMxNDgzLzI2ODQgQnJpZGdlZCBwcm90b2NvbHNcJiMzNDtcbi0tXG5uZXQvYXRtL0tjb25maWctMzAtXG5uZXQvYXRtL0tjb25maWc6MzE6Y29uZmlnIEFUTV9CUjI2ODRfSVBGSUxURVJcbm5ldC9hdG0vS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7UGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTEzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6CgoqKkFuYWx5emluZyB0aGUgQVRNIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHRoZSBjb25maWd1cmF0aW9uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaXMgYEFUTWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHZlcmlmeSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBjcnVjaWFsIGNvbXBvbmVudHMuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgYXJlIGFjY2Vzc2libGUgd2l0aGluIHRoaXMgY29udGV4dC4gRXhjZWxsZW50LCB0aGV5IGFyZSBzdGF0aWNhbGx5IGRlZmluZWQg4oCTIHRoYXQgZ2l2ZXMgdXMgYSBjbGVhciBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIG11c3QgcXVpY2tseSBkZXRlcm1pbmUgKndoYXQqIGlzIGNhbGxpbmcgdGhlc2UgY3JpdGljYWwgcm91dGluZXMuIFRoaXMgd2lsbCByZXZlYWwgdGhlIGNhbGwgY2hhaW5zLCB3aGljaCBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGVpciB1c2FnZSBhbmQgaW1wYWN0IHdpdGhpbiB0aGUgQVRNIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaW5kX2NpfF9fdmNjX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vY29tbW9uLmM9MzA1PXN0YXRpYyBpbnQgY2hlY2tfY2koY29uc3Qgc3RydWN0IGF0bV92Y2MgKnZjYywgc2hvcnQgdnBpLCBpbnQgdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtMzI5LVxubmV0L2F0bS9jb21tb24uYzozMzA6c3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxubmV0L2F0bS9jb21tb24uYy0zMzEte1xuLS1cbm5ldC9hdG0vY29tbW9uLmMtMzc3LVxubmV0L2F0bS9jb21tb24uYzozNzg6c3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSxcbm5ldC9hdG0vY29tbW9uLmMtMzc5LVx0XHRcdCBpbnQgdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtMzk5LVx0aWYgKHRlc3RfYml0KEFUTV9ERl9SRU1PVkVELCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpIHx8XG5uZXQvYXRtL2NvbW1vbi5jOjQwMDpcdCAgICAoZXJyb3IgPSBmaW5kX2NpKHZjYywgXHUwMDI2dnBpLCBcdTAwMjZ2Y2kpKSkge1xubmV0L2F0bS9jb21tb24uYy00MDEtXHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2dmNjX3NrbGlzdF9sb2NrKTtcbi0tXG5uZXQvYXRtL2NvbW1vbi5jPTQ1OD1pbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtNTA1LVx0XHRyZXR1cm4gLUVOT0RFVjtcbm5ldC9hdG0vY29tbW9uLmM6NTA2Olx0ZXJyb3IgPSBfX3ZjY19jb25uZWN0KHZjYywgZGV2LCB2cGksIHZjaSk7XG5uZXQvYXRtL2NvbW1vbi5jLTUwNy1cdGlmIChlcnJvcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNDcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqVHJhY2luZyB0aGUgVkNDIENvbm5lY3Rpb24qKgoKQWxyaWdodCwgc28gYHZjY19jb25uZWN0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWF0ZXMgdGhlIGNvbm5lY3Rpb24sIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBpdCBjYWxscyBgX192Y2NfY29ubmVjdGAgZGlyZWN0bHksIHNvIHRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBwb2ludCB0byBpbnZlc3RpZ2F0ZS4gTm93LCBgX192Y2NfY29ubmVjdGAgdGhlbiBjYWxscyBgZmluZF9jaWAsIHdoaWNoIGxpa2VseSBtZWFucyBpdCYjMzk7cyB0cnlpbmcgdG8gbG9jYXRlIHNvbWUgc29ydCBvZiBjb25uZWN0aW9uIGlkZW50aWZpZXIgb3IgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBoZXJlLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBhbmQgaG93IGV2ZXJ5dGhpbmcgZml0cyB0b2dldGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndobyogaXMgY2FsbGluZyBgdmNjX2Nvbm5lY3RgIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGZvbGxvdyB0aGUgdGhyZWFkIGZyb20gdGhlIG90aGVyIGVuZC4gU28sIEkgbmVlZCB0byBzZWUgdGhlIGNhbGxlcnMgdG8gYHZjY19jb25uZWN0YC4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y2NfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vY29tbW9uLmM9MzMwPXN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTM3Ny1cbm5ldC9hdG0vY29tbW9uLmM6Mzc4OnN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXG5uZXQvYXRtL2NvbW1vbi5jLTM3OS1cdFx0XHQgaW50IHZjaSlcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTQ1Ny1cbm5ldC9hdG0vY29tbW9uLmM6NDU4OmludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXG5uZXQvYXRtL2NvbW1vbi5jLTQ1OS17XG4tLVxubmV0L2F0bS9jb21tb24uYy01MDUtXHRcdHJldHVybiAtRU5PREVWO1xubmV0L2F0bS9jb21tb24uYzo1MDY6XHRlcnJvciA9IF9fdmNjX2Nvbm5lY3QodmNjLCBkZXYsIHZwaSwgdmNpKTtcbm5ldC9hdG0vY29tbW9uLmMtNTA3LVx0aWYgKGVycm9yKSB7XG4tLVxubmV0L2F0bS9jb21tb24uaD0xNT1pbnQgdmNjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jayk7XG5uZXQvYXRtL2NvbW1vbi5oOjE2OmludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpO1xubmV0L2F0bS9jb21tb24uaC0xNy1pbnQgdmNjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcbi0tXG5uZXQvYXRtL3B2Yy5jPTI3PXN0YXRpYyBpbnQgcHZjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxuLS1cbm5ldC9hdG0vcHZjLmMtNTEtXHR9XG5uZXQvYXRtL3B2Yy5jOjUyOlx0ZXJyb3IgPSB2Y2NfY29ubmVjdChzb2NrLCBhZGRyLVx1MDAzZXNhcF9hZGRyLml0ZiwgYWRkci1cdTAwM2VzYXBfYWRkci52cGksXG5uZXQvYXRtL3B2Yy5jLTUzLVx0XHRcdCAgICBhZGRyLVx1MDAzZXNhcF9hZGRyLnZjaSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqRXhhbWluaW5nIHRoZSBQVkMgQmluZGluZyBQcm9jZXNzKioKCk9rYXksIHNvIGBwdmNfYmluZGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgY2FsbGVkLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGl0LiBUaGUgdHJhY2Ugc2F5cyBpdCB1c2VzIGB2Y2NfY29ubmVjdGAuIFJpZ2h0LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIHByZXR0eSBzdXJlIGBwdmNfYmluZGAgaXMgZnVuZGFtZW50YWwgdG8gaW5pdGlhbGl6aW5nIGFuZCBlc3RhYmxpc2hpbmcgQVRNIFBWQ3MuIFRoYXQgY29ubmVjdGlvbiB0byBgdmNjX2Nvbm5lY3RgIGRlZmluaXRlbHkgc291bmRzIGxpa2UgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIHVuZGVybHlpbmcgdmlydHVhbCBjaXJjdWl0IHNldHVwLiBBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIGNyYWNrIG9wZW4gYG5ldC9hdG0vcHZjLmNgLiBIb3BlZnVsbHksIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBjbGVhbiBhbmQgdGhlIGNvbm5lY3Rpb24gZmxvdyBpcyBzdHJhaWdodGZvcndhcmQuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSByZWFsIHN0b3J5LiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZSBQVkMgZ2V0cyBib3VuZCB0byB0aGUgdmlydHVhbCBjb25uZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdmNfYmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vcHZjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9wdmMuYz0yMj1zdGF0aWMgaW50IHB2Y19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxuLS1cbm5ldC9hdG0vcHZjLmMtMjYtXG5uZXQvYXRtL3B2Yy5jOjI3OnN0YXRpYyBpbnQgcHZjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxubmV0L2F0bS9wdmMuYy0yOC1cdFx0ICAgIGludCBzb2NrYWRkcl9sZW4pXG4tLVxubmV0L2F0bS9wdmMuYz01OT1zdGF0aWMgaW50IHB2Y19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcbi0tXG5uZXQvYXRtL3B2Yy5jLTYxLXtcbm5ldC9hdG0vcHZjLmM6NjI6XHRyZXR1cm4gcHZjX2JpbmQoc29jaywgc29ja2FkZHIsIHNvY2thZGRyX2xlbik7XG5uZXQvYXRtL3B2Yy5jLTYzLX1cbi0tXG5uZXQvYXRtL3B2Yy5jPTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwdmNfcHJvdG9fb3BzID0ge1xuLS1cbm5ldC9hdG0vcHZjLmMtMTEwLVx0LnJlbGVhc2UgPVx0dmNjX3JlbGVhc2UsXG5uZXQvYXRtL3B2Yy5jOjExMTpcdC5iaW5kID1cdFx0cHZjX2JpbmQsXG5uZXQvYXRtL3B2Yy5jLTExMi1cdC5jb25uZWN0ID1cdHB2Y19jb25uZWN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDI3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBBVE0gUFZDIFNvY2tldCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBgcHZjX2JpbmRgIGFuZCBgcHZjX2Nvbm5lY3RgIGZ1bmN0aW9ucyDigJMgdGhleSYjMzk7cmUgdGhlIHNvY2tldCBvcGVyYXRpb25zIGZvciBQVkMgc29ja2V0cywgbm8gc3VycHJpc2UgdGhlcmUuIEFuZCB5ZXAsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoZXNlIGFyZSBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBgYmluZGAgYW5kIGBjb25uZWN0YCBjYWxscyBvbiBhbiBBVE0gUFZDIHNvY2tldC4gRnVuY3Rpb25hbGx5LCB0aGlzIGNoYW5nZSBpcyBzaWduaWZpY2FudC4gSXQmIzM5O3MgYWRkcmVzc2luZyBhIGJ1ZyB3aGVyZSB0aGUgdmFsdWVzIG9mIGB2cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBiZWluZyBzZXQgdG8gYEFUTV9DSV9NQVhgLCB3aGljaCBpcyAtMSwgd2VyZSBsZWFkaW5nIHRvIHNvbWUgcHJldHR5IG5hc3R5IHNoaWZ0IG9wZXJhdGlvbnMuIFdlJiMzOTtyZSB0YWxraW5nIHNoaWZ0cyBieSAtMSwgdW5kZWZpbmVkIGJlaGF2aW9yLCBhbGwgc29ydHMgb2YgcG90ZW50aWFsIHByb2JsZW1zLgoKVGhlIHBhdGNoJiMzOTtzIHNvbHV0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaW50cm9kdWNlIGB2cGlfYml0c2AgYW5kIGB2Y2lfYml0c2AgdmFyaWFibGVzLiBDcnVjaWFsbHksIGl0IHNldHMgZGVmYXVsdCB2YWx1ZXMgb2YgOCBhbmQgMTYgcmVzcGVjdGl2ZWx5IHdoZW4gdGhlIGRldmljZSBpbmRpY2F0ZXMgYEFUTV9DSV9NQVhgLiBUaGlzIGlzIGVsZWdhbnQuCgpJIHRoaW5rIEkgc2hvdWxkIGNoZWNrIGBuZXQvYXRtL3N2Yy5jYCBhcyB3ZWxsLCBqdXN0IHRvIGJlIHN1cmUgdGhlcmUgaXNuJiMzOTt0IGFueXRoaW5nIHNpbWlsYXIgZ29pbmcgb24gb3ZlciB0aGVyZS4gQWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ggd2l0aCB0aGlzIGtpbmQgb2YgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZjY19jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS9zdmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4ODIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHlvdSBkZXNjcmliZWQ6CgoqKkNvbm5lY3RpbmcgdGhlIERvdHMqKgoKQWxyaWdodCwgc28gYHZjY19jb25uZWN0YCBpcyBkZWZpbml0ZWx5IGdldHRpbmcgdHJpZ2dlcmVkIGJ5IGJvdGggYHB2Y19iaW5kYCBhbmQgYHB2Y19jb25uZWN0YC4gVGhhdCYjMzk7cyB0aGUgY29yZSBjb25uZWN0aW9uIG1lY2hhbmlzbSwgZ290IGl0LiBIbW0uLi4gYnV0IEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7bSBhY2NvdW50aW5nIGZvciBhbGwgc2NlbmFyaW9zLiBIb2xkIG9uIGEgc2Vjb25kLCB3aGF0IGFib3V0IHRoZSBzZXJ2aWNlIGNvbm5lY3Rpb24gaW4gYHN2Yy5jYD8gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGVkZ2UgY2FzZXMgb3IgYWx0ZXJuYXRpdmUgY29ubmVjdGlvbiBwYXRod2F5cy4gSSBuZWVkIHRvIGZhY3RvciB0aGF0IGluIGJlZm9yZSBJIGNhbiB0cnVseSBzYXkgSSYjMzk7dmUgZ290IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZjY19jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9jb21tb24uYz0zMzA9c3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtMzc3LVxubmV0L2F0bS9jb21tb24uYzozNzg6c3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSxcbm5ldC9hdG0vY29tbW9uLmMtMzc5LVx0XHRcdCBpbnQgdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtNDU3LVxubmV0L2F0bS9jb21tb24uYzo0NTg6aW50IHZjY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBpdGYsIHNob3J0IHZwaSwgaW50IHZjaSlcbm5ldC9hdG0vY29tbW9uLmMtNDU5LXtcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTUwNS1cdFx0cmV0dXJuIC1FTk9ERVY7XG5uZXQvYXRtL2NvbW1vbi5jOjUwNjpcdGVycm9yID0gX192Y2NfY29ubmVjdCh2Y2MsIGRldiwgdnBpLCB2Y2kpO1xubmV0L2F0bS9jb21tb24uYy01MDctXHRpZiAoZXJyb3IpIHtcbi0tXG5uZXQvYXRtL2NvbW1vbi5oPTE1PWludCB2Y2NfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKTtcbm5ldC9hdG0vY29tbW9uLmg6MTY6aW50IHZjY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBpdGYsIHNob3J0IHZwaSwgaW50IHZjaSk7XG5uZXQvYXRtL2NvbW1vbi5oLTE3LWludCB2Y2NfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxuLS1cbm5ldC9hdG0vcHZjLmM9Mjc9c3RhdGljIGludCBwdmNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqc29ja2FkZHIsXG4tLVxubmV0L2F0bS9wdmMuYy01MS1cdH1cbm5ldC9hdG0vcHZjLmM6NTI6XHRlcnJvciA9IHZjY19jb25uZWN0KHNvY2ssIGFkZHItXHUwMDNlc2FwX2FkZHIuaXRmLCBhZGRyLVx1MDAzZXNhcF9hZGRyLnZwaSxcbm5ldC9hdG0vcHZjLmMtNTMtXHRcdFx0ICAgIGFkZHItXHUwMDNlc2FwX2FkZHIudmNpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU0OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHZjY19jb25uZWN0YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGViYXNlIGFuZCBpdCBsb29rcyBsaWtlIGB2Y2NfY29ubmVjdGAgaXMgb25seSBkaXJlY3RseSB1c2VkIGJ5IGBwdmMuY2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBCdXQgd2FpdC4uLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYF9fdmNjX2Nvbm5lY3RgLCBhbmQgSSB0aGluayBpdCYjMzk7cyB1c2VkIGluIGFub3RoZXIgbW9kdWxlLiBMZXQmIzM5O3Mgc2VlLi4uIGl0ICpjb3VsZCogYmUgYHN2Y19hZGRwYXJ0eWAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHJpZ2h0PyBBaCwgbm8sIHRoYXQmIzM5O3Mgd3JvbmcuIEkgaGF2ZSB0byBnbyBiYWNrIHRvIGBjb21tb24uY2AgdG8gc2VlIHRoYXQgYF9fdmNjX2Nvbm5lY3RgIGlzIGFjdHVhbGx5IGRlY2xhcmVkIGFzIHN0YXRpYyB0aGVyZS4gUmlnaHQsIHNvIHRoYXQgbGltaXRzIGl0cyBzY29wZSBjb25zaWRlcmFibHksIGV2ZW4gaWYgaXQmIzM5O3MgY29uY2VwdHVhbGx5IHRoZSBzYW1lIHRoaW5nLiBOb3csIGxldCYjMzk7cyBjYXN0IGEgd2lkZXIgbmV0LiBXaGF0IGVsc2UsICphbnl3aGVyZSosIGNhbGxzIGBfX3ZjY19jb25uZWN0YD8gSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgdXNhZ2UgYmVmb3JlIEkgY2FuIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X192Y2NfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vY29tbW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9jb21tb24uYz0zMzA9c3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtMzc3LVxubmV0L2F0bS9jb21tb24uYzozNzg6c3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSxcbm5ldC9hdG0vY29tbW9uLmMtMzc5LVx0XHRcdCBpbnQgdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmM9NDU4PWludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXG4tLVxubmV0L2F0bS9jb21tb24uYy01MDUtXHRcdHJldHVybiAtRU5PREVWO1xubmV0L2F0bS9jb21tb24uYzo1MDY6XHRlcnJvciA9IF9fdmNjX2Nvbm5lY3QodmNjLCBkZXYsIHZwaSwgdmNpKTtcbm5ldC9hdG0vY29tbW9uLmMtNTA3LVx0aWYgKGVycm9yKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwOTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25uZWN0aW9uIFdvcmtmbG93KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGZ1bmN0aW9uIGB2Y2NfY29ubmVjdGAgaXMgdGhlIGtleSBwbGF5ZXIgaGVyZTsgYWNjb3JkaW5nIHRvIHRoZSBjb2RlLCBpdCYjMzk7cyB0aGUgb25seSBvbmUgY2FsbGluZyBpdC4gTm93LCB3aGVyZSBkb2VzIGB2Y2NfY29ubmVjdGAgZml0IGludG8gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3M/IEFoLCByaWdodCwgYHB2Y19iaW5kYCBhbmQgYHB2Y19jb25uZWN0YCBhcmUgdGhlIG9uZXMgY2FsbGluZyBpdC4gVGhvc2UgYXJlIHRoZSBpbml0aWFsIGFjY2VzcyBwb2ludHMuIEhhbmcgb24gYSBzZWNvbmQsIHdhc24mIzM5O3QgYHB2Y19iaW5kYCBkZWNsYXJlZCBhcyBzdGF0aWM/IFllcywgYnV0IGl0JiMzOTtzIGFzc2lnbmVkIHRvIGAuYmluZGAgd2l0aGluIGBwdmNfcHJvdG9fb3BzYCB3aGljaCBtZWFucyBpdCBzdGlsbCBmdW5jdGlvbnMgYXMgYW4gZW50cnkgcG9pbnQuIFRoZXJlZm9yZSwgdGhlIGltcG9ydGFudCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIHRoaXMgY29ubmVjdGlvbiBhcmUgYHZjY19jb25uZWN0YCwgYHB2Y19iaW5kYCwgYW5kIGBwdmNfY29ubmVjdGAuIFRoYXQgY2xhcmlmaWVzIHRoZSBwcmltYXJ5IGNvbm5lY3Rpb24gZmxvdy4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgY2hlY2sgaWYgYGZpbmRfY2lgIGlzIGNhbGxlZCBhbnl3aGVyZSBlbHNlIHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGViYXNlIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGNydWNpYWwgY29tcG9uZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaW5kX2NpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS9jb21tb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYXRtL2NvbW1vbi5jPTMwNT1zdGF0aWMgaW50IGNoZWNrX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0IHZwaSwgaW50IHZjaSlcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTMyOS1cbm5ldC9hdG0vY29tbW9uLmM6MzMwOnN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcbm5ldC9hdG0vY29tbW9uLmMtMzMxLXtcbi0tXG5uZXQvYXRtL2NvbW1vbi5jPTM3OD1zdGF0aWMgaW50IF9fdmNjX2Nvbm5lY3Qoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IGF0bV9kZXYgKmRldiwgc2hvcnQgdnBpLFxuLS1cbm5ldC9hdG0vY29tbW9uLmMtMzk5LVx0aWYgKHRlc3RfYml0KEFUTV9ERl9SRU1PVkVELCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpIHx8XG5uZXQvYXRtL2NvbW1vbi5jOjQwMDpcdCAgICAoZXJyb3IgPSBmaW5kX2NpKHZjYywgXHUwMDI2dnBpLCBcdTAwMjZ2Y2kpKSkge1xubmV0L2F0bS9jb21tb24uYy00MDEtXHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2dmNjX3NrbGlzdF9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzczMwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBBVE0gQ29ubmVjdGlvbiBFbnRyeSBQb2ludHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgX192Y2NfY29ubmVjdGAgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSAqY2FsbHMqIGBmaW5kX2NpYC4gVGhhdCBuYXJyb3dzIG91ciBwcmltYXJ5IGVudHJ5IHBvaW50cyBjb25zaWRlcmFibHkuIFNvLCB3ZSYjMzk7cmUgcmVhbGx5IHRhbGtpbmcgYWJvdXQgZm9jdXNpbmcgb24gYHZjY19jb25uZWN0YCwgYHB2Y19iaW5kYCwgYW5kIGBwdmNfY29ubmVjdGAuIFRob3NlIGFyZSB0aGUgb25lcyB0byBzY3J1dGluaXplIGZvciBob3cgQVRNIGNvbm5lY3Rpb25zIGFyZSBiZWluZyBpbml0aWF0ZWQgYW5kIG1hbmFnZWQgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiBjb25maWd1cmF0aW9uIGFuZCBpbml0aWFsIHNldHVwLgoKTm93LCBhIGNyaXRpY2FsIG5leHQgc3RlcC4gV2UgY2FuJiMzOTt0IGFmZm9yZCB0byBiZSBibGlua2VyZWQuIEFyZSB0aGVyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoaXMgQVRNIGluZnJhc3RydWN0dXJlIHRoYXQgY291bGQgaW1wYWN0IHRoZXNlIGNvbm5lY3Rpb25zPyBMZXQmIzM5O3MgYXNzdW1lIHRoZXJlIGFyZSwgYW5kIHN0YXJ0IGludmVzdGlnYXRpbmcgdGhlIGNvZGUgYmFzZSB0byBmaW5kIHRoZW0uIFRoZSBnb2FsIGlzIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mICphbGwqIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIHdpdGggdGhlc2UgY29ubmVjdGlvbiBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYXRtL0tjb25maWctNS1cbm5ldC9hdG0vS2NvbmZpZzo2OmNvbmZpZyBBVE1cbm5ldC9hdG0vS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7QXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcJiMzNDtcbi0tXG5uZXQvYXRtL0tjb25maWctMjEtXG5uZXQvYXRtL0tjb25maWc6MjI6Y29uZmlnIEFUTV9CUjI2ODRcbm5ldC9hdG0vS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O1JGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1wmIzM0O1xuLS1cbm5ldC9hdG0vS2NvbmZpZy0zMC1cbm5ldC9hdG0vS2NvbmZpZzozMTpjb25maWcgQVRNX0JSMjY4NF9JUEZJTFRFUlxubmV0L2F0bS9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtQZXItVkMgSVAgZmlsdGVyIGtsdWRnZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTg4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIEFUTSBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGhlIGBBVE1gIGNvbmZpZyBpcyB0aGUgY29yZSBvbmUgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBGaXJzdCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNuZWFreSBkZXBlbmRlbmNpZXMgbHVya2luZyBhcm91bmQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgQVRNYCByZWxpZXMgb24gYW55IG90aGVyIGNvbmZpZ3Mgb3IgbW9kdWxlcy4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtYWtlLCBvciBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGFzcGVjdHMgdG8gY29uc2lkZXIuIEl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoIGF0IHRoZSBiZWdpbm5pbmcuIE5vIHBvaW50IGluIG1pc3NpbmcgYSBwb3RlbnRpYWwgY2FzY2FkZSEgTGV0JiMzOTtzIGdldCBhIGNsZWFyIGRlcGVuZGVuY3kgbWFwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vS2NvbmZpZz0yMj1jb25maWcgQVRNX0JSMjY4NFxubmV0L2F0bS9LY29uZmlnLTIzLVx0dHJpc3RhdGUgXCYjMzQ7UkZDMTQ4My8yNjg0IEJyaWRnZWQgcHJvdG9jb2xzXCYjMzQ7XG5uZXQvYXRtL0tjb25maWc6MjQ6XHRkZXBlbmRzIG9uIEFUTSBcdTAwMjZcdTAwMjYgSU5FVFxubmV0L2F0bS9LY29uZmlnLTI1LVx0aGVscFxuLS1cbm5ldC9hdG0vS2NvbmZpZz0zMT1jb25maWcgQVRNX0JSMjY4NF9JUEZJTFRFUlxubmV0L2F0bS9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtQZXItVkMgSVAgZmlsdGVyIGtsdWRnZVwmIzM0O1xubmV0L2F0bS9LY29uZmlnOjMzOlx0ZGVwZW5kcyBvbiBBVE1fQlIyNjg0XG5uZXQvYXRtL0tjb25maWctMzQtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEFUTSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgQVRNYCBmZWF0dXJlIGhlcmUuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaW4gbXkgbWluZCBpcywgZG9lcyBgQVRNYCBoYXZlIGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzPyBJIHdhbnQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYmFzZSBjb25maWd1cmF0aW9uLiBUbyBmaWd1cmUgdGhpcyBvdXQgd2l0aCBjZXJ0YWludHksIEkgc2hvdWxkIHJlYWxseSBkaXZlIGludG8gdGhlIGBuZXQvYXRtL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGdvLXRvIHBsYWNlIGZvciBhbGwgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBBVE0gYW5kIGFueSBwcmVyZXF1aXNpdGVzIGl0IG1pZ2h0IGhhdmUuIFVuZGVyc3RhbmRpbmcgdGhpcyBmaWxlIHdpbGwgZ2l2ZSBtZSB0aGUgZ3JvdW5kIHRydXRoLCBoZWxwaW5nIG1lIGFzc2VzcyB0aGUgdHJ1ZSBpbmRlcGVuZGVuY2Ugb2YgdGhlIEFUTSBjb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIEFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBBVE1cbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O0FzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIEFUTSBpcyBhIGhpZ2gtc3BlZWQgbmV0d29ya2luZyB0ZWNobm9sb2d5IGZvciBMb2NhbCBBcmVhIE5ldHdvcmtzXG4gIDEwOlx0XHQgIGFuZCBXaWRlIEFyZWEgTmV0d29ya3MuICBJdCB1c2VzIGEgZml4ZWQgcGFja2V0IHNpemUgYW5kIGlzXG4gIDExOlx0XHQgIGNvbm5lY3Rpb24gb3JpZW50ZWQsIGFsbG93aW5nIGZvciB0aGUgbmVnb3RpYXRpb24gb2YgbWluaW11bVxuICAxMjpcdFx0ICBiYW5kd2lkdGggcmVxdWlyZW1lbnRzLlxuICAxMzpcdFxuICAxNDpcdFx0ICBJbiBvcmRlciB0byBwYXJ0aWNpcGF0ZSBpbiBhbiBBVE0gbmV0d29yaywgeW91ciBMaW51eCBib3ggbmVlZHMgYW5cbiAgMTU6XHRcdCAgQVRNIG5ldHdvcmtpbmcgY2FyZC4gSWYgeW91IGhhdmUgdGhhdCwgc2F5IFkgaGVyZSBhbmQgdG8gdGhlIGRyaXZlclxuICAxNjpcdFx0ICBvZiB5b3VyIEFUTSBjYXJkIGJlbG93LlxuICAxNzpcdFxuICAxODpcdFx0ICBOb3RlIHRoYXQgeW91IG5lZWQgYSBzZXQgb2YgdXNlci1zcGFjZSBwcm9ncmFtcyB0byBhY3R1YWxseSBtYWtlIHVzZVxuICAxOTpcdFx0ICBvZiBBVE0uICBTZWUgdGhlIGZpbGUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXRtLnJzdFx1MDAzZSBmb3JcbiAgMjA6XHRcdCAgZnVydGhlciBkZXRhaWxzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDA1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipBVE0gQ29uZmlndXJhdGlvbjogU2ltcGxpZnlpbmcgdGhlIEFwcHJvYWNoKioKCkFscmlnaHQsIGl0IGxvb2tzIGxpa2UgdGhpcyBib2lscyBkb3duIHRvIHVzaW5nICpqdXN0KiB0aGUgYEFUTWAgY29uZmlnLCB3aGljaCBpcyBncmVhdCDigJMga2VlcHMgdGhpbmdzIGNsZWFuIGFuZCBzdHJhaWdodGZvcndhcmQuIE15IGF0dGVudGlvbiBpcyBkcmF3biB0byB0aG9zZSBzcGVjaWZpYyBzeW1ib2xzOiBgdmNjX2Nvbm5lY3RgLCBgcHZjX2JpbmRgLCBhbmQgYHB2Y19jb25uZWN0YC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBpbiB0aGlzIGNvbnRleHQuIEJ1dCwgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuIEEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIG5lY2Vzc2FyeTogSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGB2Y2NfY29ubmVjdGAgaXMgZWl0aGVyIGV4cGxpY2l0bHkgZXhwb3J0ZWQgZm9yIHVzZSBlbHNld2hlcmUgb3IgaXMsIGF0IHRoZSB2ZXJ5IGxlYXN0LCByZWFjaGFibGUgZnJvbSBvdGhlciBtb2R1bGVzIG9yIHNjb3BlcyB0aGF0IG1pZ2h0IHV0aWxpemUgaXQuIEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdmNjX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsbHkgRXhwb3J0ZWQgQVRNIEZ1bmN0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIGB2Y2NfY29ubmVjdGAuLi4gdGhhdCBsb29rcyBsaWtlIGl0JiMzOTtzICpleHBvcnRlZCo/IFRoYXQmIzM5O3MgdW5leHBlY3RlZC4gTGV0IG1lIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBBVE0gVkNDIGVzdGFibGlzaG1lbnQgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdXJmYWNpbmcgYXMgYW4gZXhwb3J0IGltbWVkaWF0ZWx5IHJhaXNlcyBmbGFncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHZpc2liaWxpdHksIGFuZCBhbHNvIHdoZXJlIHRoYXQgZnVuY3Rpb24gbGl2ZXMuIExldCYjMzk7cyBzdGFydCBieSBjb25maXJtaW5nIGl0cyBkZWZpbml0aW9uLiBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IHRvIGBuZXQvYXRtL2NvbW1vbi5jYC4gVGhhdCBmaWxlJiMzOTtzIHR5cGljYWxseSB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHNoYXJlZCBBVE0gaW5mcmFzdHJ1Y3R1cmUuIExldCYjMzk7cyBzZWUgaWYgdGhlIHN5bWJvbCB0YWJsZSBjb25maXJtcyBpdC4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSB2aXNpYmlsaXR5LCBjb250ZXh0LCBhbmQgcG90ZW50aWFsIHNpZGUtZWZmZWN0cyB0aGF0IHRoaXMgZXhwb3J0IGludHJvZHVjZXMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgdGhpcyBtaWdodCBvcGVuIGEgcG90ZW50aWFsbHkgdW5zYWZlIGRvb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdmNjX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBEaWFnbm9zdGljOiBFeHBvcnQgVmVyaWZpY2F0aW9uKioKClJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gYW55dGhpbmcgZnVydGhlciwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBlc3RhYmxpc2ggYSBiYXNlbGluZS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggYW4gYWN0dWFsIGV4cG9ydCBpc3N1ZSBhbmQgbm90IHNvbWV0aGluZyBlbHNlLiBUaGVyZWZvcmUsIG15IGluaXRpYWwgdGhvdWdodCBpcyBzaW1wbGU6IExldCYjMzk7cyBjaGVjay4gRG9lcyB0aGlzIHRoaW5nIGV2ZW4gKmV4cG9ydCogYXQgYWxsPyBXZSBuZWVkIHRvIGFzY2VydGFpbiwgY2F0ZWdvcmljYWxseSwgaWYgdGhlIHByb2Nlc3MgZXZlbiBpbml0aWF0ZXMsIHByb2R1Y2VzIGFueSBvdXRwdXQgKHJlZ2FyZGxlc3Mgb2YgaXRzIGNvcnJlY3RuZXNzKSwgb3IgaWYgdGhlIHByb2JsZW0gbGllcyBwcmlvciB0byB0aGF0IHN0YWdlLiBJZiB0aGVyZSBpcyBubyBleHBvcnQsIHBlcmlvZCwgdGhlIHN1YnNlcXVlbnQgaW52ZXN0aWdhdGl2ZSBwYXRod2F5cyBhcmUgZHJhc3RpY2FsbHkgZGlmZmVyZW50IHRoYW4gaWYgdGhlcmUgaXMgYW4gZXhwb3J0IHRoYXQgaXMgZmFpbGluZy4gTGV04oCZcyBnZXQgdGhhdCBlc3RhYmxpc2hlZCBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vY29tbW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9jb21tb24uYz0zND1zdHJ1Y3QgaGxpc3RfaGVhZCB2Y2NfaGFzaFtWQ0NfSFRBQkxFX1NJWkVdO1xubmV0L2F0bS9jb21tb24uYzozNTpFWFBPUlRfU1lNQk9MKHZjY19oYXNoKTtcbm5ldC9hdG0vY29tbW9uLmMtMzYtXG5uZXQvYXRtL2NvbW1vbi5jPTM3PURFRklORV9SV0xPQ0sodmNjX3NrbGlzdF9sb2NrKTtcbm5ldC9hdG0vY29tbW9uLmM6Mzg6RVhQT1JUX1NZTUJPTCh2Y2Nfc2tsaXN0X2xvY2spO1xubmV0L2F0bS9jb21tb24uYy0zOS1cbi0tXG5uZXQvYXRtL2NvbW1vbi5jPTUwPXZvaWQgdmNjX2luc2VydF9zb2NrZXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtNTUtfVxubmV0L2F0bS9jb21tb24uYzo1NjpFWFBPUlRfU1lNQk9MKHZjY19pbnNlcnRfc29ja2V0KTtcbm5ldC9hdG0vY29tbW9uLmMtNTctXG4tLVxubmV0L2F0bS9jb21tb24uYz0yMDk9dm9pZCB2Y2NfcmVsZWFzZV9hc3luYyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgcmVwbHkpXG4tLVxubmV0L2F0bS9jb21tb24uYy0yMTctfVxubmV0L2F0bS9jb21tb24uYzoyMTg6RVhQT1JUX1NZTUJPTCh2Y2NfcmVsZWFzZV9hc3luYyk7XG5uZXQvYXRtL2NvbW1vbi5jLTIxOS1cbm5ldC9hdG0vY29tbW9uLmM9MjIwPXZvaWQgdmNjX3Byb2Nlc3NfcmVjdl9xdWV1ZShzdHJ1Y3QgYXRtX3ZjYyAqdmNjKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtMjM3LX1cbm5ldC9hdG0vY29tbW9uLmM6MjM4OkVYUE9SVF9TWU1CT0wodmNjX3Byb2Nlc3NfcmVjdl9xdWV1ZSk7XG5uZXQvYXRtL2NvbW1vbi5jLTIzOS1cbm5ldC9hdG0vY29tbW9uLmM9MjQwPXZvaWQgYXRtX2Rldl9zaWduYWxfY2hhbmdlKHN0cnVjdCBhdG1fZGV2ICpkZXYsIGNoYXIgc2lnbmFsKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtMjU0LX1cbm5ldC9hdG0vY29tbW9uLmM6MjU1OkVYUE9SVF9TWU1CT0woYXRtX2Rldl9zaWduYWxfY2hhbmdlKTtcbm5ldC9hdG0vY29tbW9uLmMtMjU2LVxubmV0L2F0bS9jb21tb24uYz0yNTc9dm9pZCBhdG1fZGV2X3JlbGVhc2VfdmNjcyhzdHJ1Y3QgYXRtX2RldiAqZGV2KVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtMjc3LX1cbm5ldC9hdG0vY29tbW9uLmM6Mjc4OkVYUE9SVF9TWU1CT0woYXRtX2Rldl9yZWxlYXNlX3ZjY3MpO1xubmV0L2F0bS9jb21tb24uYy0yNzktXG4tLVxubmV0L2F0bS9jb21tb24uYz04MDY9aW50IHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtODA5LX1cbm5ldC9hdG0vY29tbW9uLmM6ODEwOkVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcik7XG5uZXQvYXRtL2NvbW1vbi5jLTgxMS1cbm5ldC9hdG0vY29tbW9uLmM9ODEyPXZvaWQgdW5yZWdpc3Rlcl9hdG1kZXZpY2Vfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTgxNS19XG5uZXQvYXRtL2NvbW1vbi5jOjgxNjpFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcik7XG5uZXQvYXRtL2NvbW1vbi5jLTgxNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYHZjY19jb25uZWN0YCoqCgpBbHJpZ2h0LCBzbyBgdmNjX2Nvbm5lY3RgIGlzbiYjMzk7dCBhIGdsb2JhbCBzeW1ib2wuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mgc3RyaWN0bHkgYW4gaW50ZXJuYWwgZnVuY3Rpb24gd2l0aGluIHRoZSBgbmV0L2F0bS9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyBhIGxpdHRsZSBzdXJwcmlzaW5nLCBJIHdvdWxkIGhhdmUgYXNzdW1lZCBpdCB3YXMgbW9yZSB3aWRlbHkgdXNlZC4gQnV0IHdhaXQsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXNuJiMzOTt0IGB2Y2NfY29ubmVjdGAgaW52b2tlZCBieSBgc3ZjX2Nvbm5lY3RgPyBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O3ZlIHNlZW4gdGhhdCByZWxhdGlvbnNoaXAgYmVmb3JlLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBieSBwZWVraW5nIGludG8gYHN2Yy5jYCwganVzdCB0byB2ZXJpZnkgdGhlIGNhbGwgaGllcmFyY2h5LiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gY29uZmlybSB0aGUgaW50ZXJhY3Rpb24sIGJlY2F1c2UgSSBmZWVsIGxpa2UgSSYjMzk7bSBtaXNzaW5nIGNvbnRleHQgaGVyZS4gTGV0IG1lIHNlZSB3aGVyZSBgc3ZjX2Nvbm5lY3RgIGdldHMgY2FsbGVkIGZyb20uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y2NfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vc3ZjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc0MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKlF1aWNrIENoZWNrIEJlZm9yZSBEaWdnaW5nIERlZXBlcioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIGRpZG4mIzM5O3QgSSBhbHJlYWR5IGxvb2sgYXQgYHN2Yy5jYD8gSSBjb3VsZCBoYXZlIHN3b3JuIEkgd2FzIGluIHRoYXQgZmlsZSBlYXJsaWVyLiBMZXQgbWUganVzdCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgcmV0cmFjaW5nIHN0ZXBzIGhlcmUuIE9rYXksIHllcC4gSSBkZWZpbml0ZWx5IGFscmVhZHkgY2hlY2tlZCB0aGF0IG9uZS4gQWxyaWdodCwgbGV0JiMzOTtzIGtlZXAgbW92aW5nLiBJZiB0aGUgaXNzdWUgaXNuJiMzOTt0IGluIHRoZSBtb3JlIGdlbmVyYWwgYHN2Yy5jYCwgdGhlbiBJIG5lZWQgdG8gbmFycm93IHRoZSBzY29wZSwgbGV0JiMzOTtzIGdvIGRlZXBlciBhbmQgY2hlY2sgdGhlIHNwZWNpZmljcyBmb3IgdGhlIGF0bSBuZXR3b3JrIGxheWVyLiBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGxvb2sgZm9yIHRoZSBgY29ubmVjdGAgZnVuY3Rpb25hbGl0eSBub3csIGFuZCBiYXNlZCBvbiB0aGUgZmlsZSBwYXRoLCBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgaXQgaW4gYG5ldC9hdG0vc3ZjLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL3N2Yy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NzYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJiMzOTttIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBjb2RlOgoKKipEaWdnaW5nIGludG8gTmV0d29yayBTZXJ2aWNlIENvbm5lY3Rpb24qKgoKSG1tLCBob2xkIG9uIGEgbWludXRlLiBJIHdhcyBleHBlY3RpbmcgdG8gZmluZCB0aGUgYGNvbm5lY3RgIGltcGxlbWVudGF0aW9uIGluIGBzdmMuY2AsIGJ1dCBpdCYjMzk7cyBub3QgdGhlcmUuIFRoYXQmIzM5O3MgdW51c3VhbCwgYnV0IG5vdCBuZWNlc3NhcmlseSBhIHNob3ctc3RvcHBlci4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSBuZXR3b3JrIHNlcnZpY2UgYXJjaGl0ZWN0dXJlIHVzZXMgc29tZSBvdGhlciBtZWFucyBvZiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIG9yIHBlcmhhcHMgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkgaXMgc3ByZWFkIGRpZmZlcmVudGx5IGFjcm9zcyB0aGUgbmV0d29ya2luZyBzdGFjay4gU2luY2UgSSYjMzk7bSB3b3JraW5nIHdpdGggQVRNIGluIHBhcnRpY3VsYXIsIGl0JiMzOTtzIHdvcnRoIGNoZWNraW5nIHRvIHNlZSBob3cgaXQgYmluZHMgdG8gdGhlIG5ldHdvcmsuIExldCYjMzk7cyBzZWUgaWYgYG5ldC9hdG0vc3ZjLmNgIGNvbnRhaW5zIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBiaW5kaW5nLiBJIHNob3VsZCBmaW5kIGl0IGluIHRoYXQgY29kZSBmaWxlLCBhcyBJIHJlY2FsbCB0aGlzIGlzIGhvdyB0aGUgQVRNIGRyaXZlcnMgaW1wbGVtZW50IHRoZWlyIHNlcnZpY2VzLiBUaW1lIHRvIGdldCBjb2RpbmcuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS9zdmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjM0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBTZXJ2aWNlIENvbnRyb2wgTGF5ZXIqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgc2VydmljZSBjb250cm9sIGxheWVyIChgc3ZjLmNgKSB3b3VsZCBoYW5kbGUgdGhlIHNvY2tldCBiaW5kaW5nIGFuZCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuIEJ1dCBsb29raW5nIGJhY2sgYXQgdGhlIGNvZGUsIEkgZG9uJiMzOTt0IHNlZSBgYmluZGAgb3IgYGNvbm5lY3RgIGNhbGxzIGluIGBzdmMuY2AuIEhtbSwgdGhhdCYjMzk7cyB1bnVzdWFsLiBJdCYjMzk7cyB0aW1lIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYG5ldC9hdG0vc3ZjLmNgIGZpbGUgYW5kIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIG9mIHRoZXNlIGNydWNpYWwgbmV0d29yayBmdW5jdGlvbiBjYWxscywgdG8gdW5kZXJzdGFuZCB0aGVpciBkZXNpZ24gY2hvaWNlcyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNlZSB3aHkgdGhlc2UgaW1wb3J0YW50IGNhbGxzIGFyZSBub3Qgd2l0aGluIGBzdmMuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRob3NlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgYmVpbmcgY2FsbGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIHRoYXQgQVRNLXNwZWNpZmljIHNlcnZpY2UgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZmlsZSBkb2VzIG5vdCBleGlzdDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL3N2Yy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZpbGUgZG9lcyBub3QgZXhpc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDk3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBNaXNtYXRjaCBpbiBGaWxlcGF0aHMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyBhbmQgSSBoaXQgYSBzbmFnLiBUaGUgcGF0aCBwcm92aWRlZCwgc3BlY2lmaWNhbGx5IGBzdmMuY2AsIGlzbiYjMzk7dCB3b3JraW5nIGFzIGV4cGVjdGVkLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCBpdCYjMzk7cyBqdXN0IGEgc2ltcGxlIHR5cG8gb3IsIG1vcmUgbGlrZWx5LCBhIGxvY2F0aW9uIGlzc3VlLiBUaGlzIGlzIHByZXR0eSBjb21tb247IHRoZXNlIHRoaW5ncyBzaGlmdCBhcm91bmQsIGVzcGVjaWFsbHkgaW4gb2xkZXIgY29kZWJhc2VzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgaW50ZW5kZWQgbG9jYXRpb24uIElzIHRoaXMgYWN0dWFsbHkgaW4gdGhlIGBuZXQvYXRtL2AgZGlyZWN0b3J5PyYjMzQ7IEl0JiMzOTtzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGxvb2tpbmcgaW4gdGhlIHJpZ2h0IHNwb3QsIGNvbnNpZGVyaW5nIHRoZSBuZXR3b3JraW5nIGNvbnRleHQgc2VlbXMgdG8gYmUgaW1wbGllZC4gTm93IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpdHMgZXhpc3RlbmNlIHRoZXJlLCBpZiBpdCBkb2VzbiYjMzk7dCBhbHJlYWR5IGV4aXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtuZXQvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2F0bV9taXNjLmMmIzM0OywKICAgICYjMzQ7YXRtX3N5c2ZzLmMmIzM0OywKICAgICYjMzQ7YnIyNjg0LmMmIzM0OywKICAgICYjMzQ7Y29tbW9uLmMmIzM0OywKICAgICYjMzQ7Y29tbW9uLmgmIzM0OywKICAgICYjMzQ7aW9jdGwuYyYjMzQ7LAogICAgJiMzNDtwcHBvYXRtLmMmIzM0OywKICAgICYjMzQ7cHJvYy5jJiMzNDssCiAgICAmIzM0O3Byb3RvY29scy5oJiMzNDssCiAgICAmIzM0O3B2Yy5jJiMzNDssCiAgICAmIzM0O3Jhdy5jJiMzNDssCiAgICAmIzM0O3Jlc291cmNlcy5jJiMzNDssCiAgICAmIzM0O3Jlc291cmNlcy5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MzMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqTWlzc2luZyBTVkMuQyBhbmQgUG90ZW50aWFsIFBWQyBDb25uZWN0aW9uIFBpdGZhbGxzKioKClJpZ2h0LCB0aGVyZSYjMzk7cyBubyBgc3ZjLmNgIHRvIGNvbnNpZGVyIGhlcmUuIFRoYXQmIzM5O3MgZ29vZCwgb25lIGxlc3MgcGxhY2UgdG8gY2hlY2sgZm9yIGB2Y2NfY29ubmVjdGAgY2FsbHMuIE9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYHB2Yy5jYCBpcyB0aGUgb25seSBmaWxlIGRpcmVjdGx5IGNhbGxpbmcgYHZjY19jb25uZWN0YC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgYnV04oCmIHdhaXQgYSBtaW51dGUuIEFtIEkgYmVpbmcgdG9vIGhhc3R5PyBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUuIFdoYXQgYWJvdXQgdGhlIHBvdGVudGlhbCBmb3IgaW5kaXJlY3QgY2FsbHMgdGhyb3VnaCBvdGhlciBtb2R1bGVzPyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBpbW1lZGlhdGVseSBydWxlIG91dCBgcHBwb2F0bS5jYCBhbmQgYGJyMjY4NC5jYC4gVGhvc2UgYXJlIGNsYXNzaWMgYXJlYXMgdGhhdCBjb3VsZCBiZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBBVE0gbGF5ZXIsIHBlcmhhcHMgZXN0YWJsaXNoaW5nIFBWQyBjb25uZWN0aW9ucyB0aHJvdWdoIGEgZGlmZmVyZW50IGludGVyZmFjZSB0aGF0ICp1bHRpbWF0ZWx5KiB0cmlnZ2VycyBgdmNjX2Nvbm5lY3RgIGNhbGxzLiBJIG5lZWQgdG8gc2NhbiB0aG9zZSBmaWxlcywgYW5kIG1heWJlIHRoZSByZWxhdGVkIGluY2x1ZGUgZmlsZXMsIHJpZ2h0IG5vdyB0byBjb25maXJtIHRoYXQgYXNzdW1wdGlvbi4gV2UgbmVlZCB0byBiZSBleGhhdXN0aXZlIHRvIGF2b2lkIGNoYXNpbmcgcmVkIGhlcnJpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y2NfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vY29tbW9uLmM9MzMwPXN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTM3Ny1cbm5ldC9hdG0vY29tbW9uLmM6Mzc4OnN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXG5uZXQvYXRtL2NvbW1vbi5jLTM3OS1cdFx0XHQgaW50IHZjaSlcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTQ1Ny1cbm5ldC9hdG0vY29tbW9uLmM6NDU4OmludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXG5uZXQvYXRtL2NvbW1vbi5jLTQ1OS17XG4tLVxubmV0L2F0bS9jb21tb24uYy01MDUtXHRcdHJldHVybiAtRU5PREVWO1xubmV0L2F0bS9jb21tb24uYzo1MDY6XHRlcnJvciA9IF9fdmNjX2Nvbm5lY3QodmNjLCBkZXYsIHZwaSwgdmNpKTtcbm5ldC9hdG0vY29tbW9uLmMtNTA3LVx0aWYgKGVycm9yKSB7XG4tLVxubmV0L2F0bS9jb21tb24uaD0xNT1pbnQgdmNjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jayk7XG5uZXQvYXRtL2NvbW1vbi5oOjE2OmludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpO1xubmV0L2F0bS9jb21tb24uaC0xNy1pbnQgdmNjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcbi0tXG5uZXQvYXRtL3B2Yy5jPTI3PXN0YXRpYyBpbnQgcHZjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxuLS1cbm5ldC9hdG0vcHZjLmMtNTEtXHR9XG5uZXQvYXRtL3B2Yy5jOjUyOlx0ZXJyb3IgPSB2Y2NfY29ubmVjdChzb2NrLCBhZGRyLVx1MDAzZXNhcF9hZGRyLml0ZiwgYWRkci1cdTAwM2VzYXBfYWRkci52cGksXG5uZXQvYXRtL3B2Yy5jLTUzLVx0XHRcdCAgICBhZGRyLVx1MDAzZXNhcF9hZGRyLnZjaSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjE2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQ6CgoqKk5hcnJvd2luZyBEb3duIHRoZSBTY29wZSoqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBhbmFseXNpcyBpbmRpY2F0ZXMgdGhhdCBgdmNjX2Nvbm5lY3RgIGlzIGV4Y2x1c2l2ZWx5IGNhbGxlZCBieSBgcHZjLmNgLiBUaGF0JiMzOTtzIGEgc3Ryb25nIHN0YXJ0aW5nIHBvaW50LiBNeSBmb2N1cywgdGhlbiwgc2hpZnRzIHRvIHVuZGVyc3RhbmRpbmcgaG93IGBwdmMuY2AgdXRpbGl6ZXMgdGhpcyBmdW5jdGlvbiwgc28gSSYjMzk7bGwgY29uY2VudHJhdGUgb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBwdmNfYmluZGAgYW5kIGBwdmNfY29ubmVjdGAuIEhvd2V2ZXIsIEkgbmVlZCB0byBrZWVwIGB2Y2NfY29ubmVjdGAgaXRzZWxmIGluIG1pbmQgYXMgYSBrZXkgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgc3lzdGVtLiBMZXQgbWUgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgcHZjX2JpbmRgIGFuZCBgcHZjX2Nvbm5lY3RgIHdpdGhpbiBgcHZjLmNgIHRvIHNlZSBob3cgdGhleSBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL3B2Yy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0LyogbmV0L2F0bS9wdmMuYyAtIEFUTSBQVkMgc29ja2V0cyAqL1xuICAgMzpcdFxuICAgNDpcdC8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovXG4gICA1Olx0XG4gICA2Olx0XG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0LmhcdTAwM2VcdFx0Lyogc3RydWN0IHNvY2tldCwgc3RydWN0IHByb3RvX29wcyAqL1xuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0bS5oXHUwMDNlXHRcdC8qIEFUTSBzdHVmZiAqL1xuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0bWRldi5oXHUwMDNlXHQvKiBBVE0gZGV2aWNlcyAqL1xuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcdC8qIGVycm9yIGNvZGVzICovXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcdC8qIHByaW50ayAqL1xuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcdFx0LyogZm9yIHNvY2tfbm9fKiAqL1xuICAxNzpcdFxuICAxODpcdCNpbmNsdWRlIFwmIzM0O3Jlc291cmNlcy5oXCYjMzQ7XHRcdC8qIGRldnMgYW5kIHZjY3MgKi9cbiAgMTk6XHQjaW5jbHVkZSBcJiMzNDtjb21tb24uaFwmIzM0O1x0XHQvKiBjb21tb24gZm9yIFBWQ3MgYW5kIFNWQ3MgKi9cbiAgMjA6XHRcbiAgMjE6XHRcbiAgMjI6XHRzdGF0aWMgaW50IHB2Y19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxuICAyMzpcdHtcbiAgMjQ6XHRcdHJldHVybiAwO1xuICAyNTpcdH1cbiAgMjY6XHRcbiAgMjc6XHRzdGF0aWMgaW50IHB2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcbiAgMjg6XHRcdFx0ICAgIGludCBzb2NrYWRkcl9sZW4pXG4gIDI5Olx0e1xuICAzMDpcdFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbiAgMzE6XHRcdHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKmFkZHI7XG4gIDMyOlx0XHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuICAzMzpcdFx0aW50IGVycm9yO1xuICAzNDpcdFxuICAzNTpcdFx0aWYgKHNvY2thZGRyX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpXG4gIDM2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuICAzNzpcdFx0YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICopc29ja2FkZHI7XG4gIDM4Olx0XHRpZiAoYWRkci1cdTAwM2VzYXBfZmFtaWx5ICE9IEFGX0FUTVBWQylcbiAgMzk6XHRcdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4gIDQwOlx0XHRsb2NrX3NvY2soc2spO1xuICA0MTpcdFx0dmNjID0gQVRNX1NEKHNvY2spO1xuICA0MjpcdFx0aWYgKCF0ZXN0X2JpdChBVE1fVkZfSEFTUU9TLCBcdTAwMjZ2Y2MtXHUwMDNlZmxhZ3MpKSB7XG4gIDQzOlx0XHRcdGVycm9yID0gLUVCQURGRDtcbiAgNDQ6XHRcdFx0Z290byBvdXQ7XG4gIDQ1Olx0XHR9XG4gIDQ2Olx0XHRpZiAodGVzdF9iaXQoQVRNX1ZGX1BBUlRJQUwsIFx1MDAyNnZjYy1cdTAwM2VmbGFncykpIHtcbiAgNDc6XHRcdFx0aWYgKHZjYy1cdTAwM2V2cGkgIT0gQVRNX1ZQSV9VTlNQRUMpXG4gIDQ4Olx0XHRcdFx0YWRkci1cdTAwM2VzYXBfYWRkci52cGkgPSB2Y2MtXHUwMDNldnBpO1xuICA0OTpcdFx0XHRpZiAodmNjLVx1MDAzZXZjaSAhPSBBVE1fVkNJX1VOU1BFQylcbiAgNTA6XHRcdFx0XHRhZGRyLVx1MDAzZXNhcF9hZGRyLnZjaSA9IHZjYy1cdTAwM2V2Y2k7XG4gIDUxOlx0XHR9XG4gIDUyOlx0XHRlcnJvciA9IHZjY19jb25uZWN0KHNvY2ssIGFkZHItXHUwMDNlc2FwX2FkZHIuaXRmLCBhZGRyLVx1MDAzZXNhcF9hZGRyLnZwaSxcbiAgNTM6XHRcdFx0XHQgICAgYWRkci1cdTAwM2VzYXBfYWRkci52Y2kpO1xuICA1NDpcdG91dDpcbiAgNTU6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gIDU2Olx0XHRyZXR1cm4gZXJyb3I7XG4gIDU3Olx0fVxuICA1ODpcdFxuICA1OTpcdHN0YXRpYyBpbnQgcHZjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxuICA2MDpcdFx0XHQgICAgICAgaW50IHNvY2thZGRyX2xlbiwgaW50IGZsYWdzKVxuICA2MTpcdHtcbiAgNjI6XHRcdHJldHVybiBwdmNfYmluZChzb2NrLCBzb2NrYWRkciwgc29ja2FkZHJfbGVuKTtcbiAgNjM6XHR9XG4gIDY0Olx0XG4gIDY1Olx0c3RhdGljIGludCBwdmNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuICA2NjpcdFx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiAgNjc6XHR7XG4gIDY4Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuICA2OTpcdFx0aW50IGVycm9yO1xuICA3MDpcdFxuICA3MTpcdFx0bG9ja19zb2NrKHNrKTtcbiAgNzI6XHRcdGVycm9yID0gdmNjX3NldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiAgNzM6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gIDc0Olx0XHRyZXR1cm4gZXJyb3I7XG4gIDc1Olx0fVxuICA3NjpcdFxuICA3NzpcdHN0YXRpYyBpbnQgcHZjX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiAgNzg6XHRcdFx0XHQgIHNvY2tvcHRfdCAqb3B0KVxuICA3OTpcdHtcbiAgODA6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gIDgxOlx0XHRpbnQgZXJyb3I7XG4gIDgyOlx0XG4gIDgzOlx0XHRsb2NrX3NvY2soc2spO1xuICA4NDpcdFx0ZXJyb3IgPSB2Y2NfZ2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0KTtcbiAgODU6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gIDg2Olx0XHRyZXR1cm4gZXJyb3I7XG4gIDg3Olx0fVxuICA4ODpcdFxuICA4OTpcdHN0YXRpYyBpbnQgcHZjX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpzb2NrYWRkcixcbiAgOTA6XHRcdFx0ICAgICAgIGludCBwZWVyKVxuICA5MTpcdHtcbiAgOTI6XHRcdHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKmFkZHI7XG4gIDkzOlx0XHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjID0gQVRNX1NEKHNvY2spO1xuICA5NDpcdFxuICA5NTpcdFx0aWYgKCF2Y2MtXHUwMDNlZGV2IHx8ICF0ZXN0X2JpdChBVE1fVkZfQUREUiwgXHUwMDI2dmNjLVx1MDAzZWZsYWdzKSlcbiAgOTY6XHRcdFx0cmV0dXJuIC1FTk9UQ09OTjtcbiAgOTc6XHRcdGFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqKXNvY2thZGRyO1xuICA5ODpcdFx0bWVtc2V0KGFkZHIsIDAsIHNpemVvZigqYWRkcikpO1xuICA5OTpcdFx0YWRkci1cdTAwM2VzYXBfZmFtaWx5ID0gQUZfQVRNUFZDO1xuIDEwMDpcdFx0YWRkci1cdTAwM2VzYXBfYWRkci5pdGYgPSB2Y2MtXHUwMDNlZGV2LVx1MDAzZW51bWJlcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMzcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFUTSBQVkMgQ29ubmVjdGlvbiBpbiB0aGUgTGludXggS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIEFUTSBQVkMgY29ubmVjdGlvbnMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBgcHZjX2JpbmRgIGFuZCBgcHZjX2Nvbm5lY3RgIGFyZSBzdGF0aWMgZnVuY3Rpb25zIOKAkyB0aGV5JiMzOTtyZSBub3QgZW50cnkgcG9pbnRzIG9mIGludGVyZXN0IGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbi4gQnV0IGB2Y2NfY29ubmVjdGAuLi4gdGhhdCBvbmUmIzM5O3MgaW50ZXJlc3RpbmcuIEl0JiMzOTtzICpub3QqIHN0YXRpYywgYW5kIGl0IHNlZW1zIHRvIGJlIG15IGJlc3QgYmV0IGZvciBhIGNlbnRyYWwgc3ltYm9sIHRvIGZvY3VzIG9uLiBMZXQgbWUgc2VlLi4uIGB2Y2NfY29ubmVjdGAgaXMgZGVjbGFyZWQgaW4gYG5ldC9hdG0vY29tbW9uLmhgIGFuZCBkZWZpbmVkIGluIGBuZXQvYXRtL2NvbW1vbi5jYCwgY29uZmlybWluZyBpdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlLgoKVGhlIHBhdGNoIG1vZGlmaWVzIGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgLCBhbmQgYHZjY19jb25uZWN0YCBjYWxscyBgX192Y2NfY29ubmVjdGAuIFRoZXJlZm9yZSwgYHZjY19jb25uZWN0YCBpcyBteSBwcmltYXJ5IGZvY3VzOyBJIHNob3VsZCBzdGFydCB0aGVyZS4KCk5vdywgaG93IGNhbiBJIGFjdHVhbGx5ICp0ZXN0KiB0aGlzIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gQVRNJiMzOTtzIGEgbmV0d29ya2luZyBwcm90b2NvbCwgc28gaWRlYWxseSwgaXQgc2hvdWxkIGJlIHRlc3RhYmxlIHZpYSB0aGUgc29ja2V0IEFQSSwgc3BlY2lmaWNhbGx5IHVzaW5nIHNvbWV0aGluZyBsaWtlIGBzb2NrZXQoQUZfQVRNUFZDLCBTT0NLX0RHUkFNLCAwKWAuIEFoLCBgQUZfQVRNUFZDYCBpcyB0aGUgYWRkcmVzcyBmYW1pbHkgOCDigJMgZ29vZCwgdGhhdCYjMzk7cyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS4gTm8gc3BlY2lhbCBoYXJkd2FyZSByZXF1aXJlZCB0aGVyZSwgYXQgbGVhc3QgaW4gcHJpbmNpcGxlLgoKQnV0IHdhaXQsIGRvZXMgdGhpcyBpbXBseSB0aGF0IHRoZXJlICpuZWVkcyogdG8gYmUgYW4gYWN0dWFsIEFUTSBkZXZpY2UgcHJlc2VudCBmb3IgaXQgdG8gd29yaz8gTG9va2luZyBhdCBgdmNjX2Nvbm5lY3RgLCBpdCB0YWtlcyBhbiBgaXRmYCAoaW50ZXJmYWNlIG51bWJlcikgYXMgaW5wdXQuIElmIG5vIEFUTSBkZXZpY2UgaXMgY29uZmlndXJlZCwgdGhlbiBgdmNjX2Nvbm5lY3RgIHdpbGwgbGlrZWx5IGZhaWwgYXQgdGhlIGBkZXYgPSBhdG1fZGV2X2xvb2t1cChpdGYpO2AgY2FsbC4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIGEgc29mdHdhcmUgQVRNIGRldmljZSwgb3IsIGlmIG5vdCwgaWYgdGhlcmUmIzM5O3Mgc29tZSB3YXkgSSBjYW4gdGVzdCB0aGlzIHdpdGhvdXQgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9yZXNvdXJjZXMuYz02OT1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTtcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXG5uZXQvYXRtL3Jlc291cmNlcy5jOjcxOnN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzItXHRcdFx0XHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcbi0tXG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMS19XG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xubmV0L2F0bS9yZXNvdXJjZXMuYy0xMzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjMyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgQVRNIERyaXZlciBSZWdpc3RyYXRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgdmVyaWZ5IHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9ucyBmb3IgQVRNIGRldmljZXMuJiMzNDsgU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgZm9yIHRob3NlIEFUTSBkZXZpY2VzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBkcml2ZXJzIGFyZSBjb3JyZWN0bHkgaW5zdGFsbGVkIGFuZCBwcm9wZXJseSBjb25maWd1cmVkLCBhbmQgSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBzeXN0ZW0gcmVnaXN0cnkgb3IgYSBzaW1pbGFyIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBzeXN0ZW0uIEkmIzM5O20gbGlrZWx5IGNvbmNlcm5lZCBhYm91dCBwb3RlbnRpYWwgY29uZmxpY3RzLCB2ZXJzaW9uIG1pc21hdGNoZXMsIG9yIGV2ZW4gdW5zaWduZWQgZHJpdmVycyB0aGF0IGNvdWxkIGludHJvZHVjZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgYWxzbyBtYWtlcyBtZSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYW55IHBlbmRpbmcgdXBkYXRlIHRvIHRob3NlIGRyaXZlcnMuIEFyZSB0aGV5IHVwLXRvLWRhdGUgd2l0aCB0aGUgbGF0ZXN0IHNlY3VyaXR5IHBhdGNoZXMgYW5kIGZlYXR1cmVzPyBBbmQgSSYjMzk7ZCBiZXR0ZXIgY29uZmlybSB0aGUgQVRNIGRldmljZXMgYXJlIHNob3dpbmcgY29ycmVjdGx5IHVuZGVyIGRldmljZSBtYW5hZ2VyLiBVbHRpbWF0ZWx5LCBpdCYjMzk7cyBhYm91dCBjb25maXJtaW5nIHRoZSBzeXN0ZW0gaXMgaW4gYSBzZWN1cmUsIHN0YWJsZSwgYW5kIGNvbXBsaWFudCBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRtX2Rldl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2F0bS9zb2xvcy1wY2kuYz0xMzQ4PXN0YXRpYyBpbnQgYXRtX2luaXQoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudClcbi0tXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzU4LVxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmM6MTM1OTpcdFx0Y2FyZC1cdTAwM2VhdG1kZXZbaV0gPSBhdG1fZGV2X3JlZ2lzdGVyKFwmIzM0O3NvbG9zLXBjaVwmIzM0OywgcGFyZW50LCBcdTAwMjZmcGdhX29wcywgLTEsIE5VTEwpO1xuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM2MC1cdFx0aWYgKCFjYXJkLVx1MDAzZWF0bWRldltpXSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYxNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzoKCioqQ29udGVtcGxhdGluZyB0aGUgU2NvcGUgb2YgdGhlIFNpdHVhdGlvbioqCgpIbW0sICYjMzQ7QXJlIHRoZXJlIGFueSBvdGhlciBBVE0gZHJpdmVycz8mIzM0OyBUaGlzIGltcGxpZXMgYSBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIGl0IGltbWVkaWF0ZWx5LiBNeSBtaW5kIGltbWVkaWF0ZWx5IGJlZ2lucyB0byBicmFuY2ggb3V0OiBpcyB0aGlzIGFib3V0IGEgc3BlY2lmaWMgc3lzdGVtPyBBIHBhcnRpY3VsYXIgc29mdHdhcmUgaW1wbGVtZW50YXRpb24/IFRoZSBzZWN1cml0eSBwcm90b2NvbHMgaW52b2x2ZWQ/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHRoZSBwaHlzaWNhbCBtZWNoYW5pc21zIG9mIHRoZSBBVE0gaXRzZWxmLCBvciB0aGUgbmV0d29yayB0aGF0IHN1cHBvcnRzIGl0PyBPciwgcGVyaGFwcywgaXMgaXQgc29tZXRoaW5nIGNvbXBsZXRlbHkgZXNvdGVyaWMsIGV2ZW4gYWJzdHJhY3Q/IElzIHRoaXMgcXVlc3Rpb24gbWVhbnQgdG8gYmUgdGFrZW4gbGl0ZXJhbGx5LCBvciBpcyBpdCBhIG1ldGFwaG9yPyBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgc2ltcGxpY2l0eSBvZiB0aGUgcXVlc3Rpb24gZmVlbHMuLi4gbWlzbGVhZGluZy4gTXkgaW5pdGlhbCByZXNwb25zZSB3b3VsZCBiZSB0byBrbm93IHdoYXQgdGhlIGJhY2tncm91bmQgaXMuIEkgbmVlZCB0byBrbm93IHRoZSB3aHkgYW5kIHdoYXQgb2YgdGhlIHF1ZXN0aW9uLiBXaXRob3V0IHRoYXQsIHRoZXJlIGFyZSB0b28gbWFueSBwb3NzaWJpbGl0aWVzIHRvIGNvbnNpZGVyLiBJIHN1cHBvc2UgaXQgY291bGQgbWVhbiBzb21ldGhpbmcgYXMgc3RyYWlnaHRmb3J3YXJkIGFzLCAmIzM0O0FyZSB0aGVyZSBvdGhlciBjb21wYW5pZXMgdGhhdCBidWlsZCB0aGUgcGh5c2ljYWwgZHJpdmluZyBtZWNoYW5pc21zIG9mIHRoZXNlIG1hY2hpbmVzPyYjMzQ7LCBidXQgdGhhdCBmZWVscyB0b28gYmFzaWMsIGFsbW9zdCBuYWl2ZS4gVGhlIHF1ZXN0aW9uIGhhcyB0byBiZSBtb3JlIG51YW5jZWQgdG8gYmUgYSB3b3J0aHdoaWxlIHF1ZXN0aW9uLiBUaGVyZWZvcmUsIGlmIEkgd2VyZSB0byB1bnBhY2sgdGhpcyB0byBzb21lb25lIHdpdGggbXkgbGV2ZWwgb2YgZXhwZXJ0aXNlLCBJIHdvdWxkIGxpa2VseSByZXNwb25kIGJ5IGFza2luZyBhIHNlcmllcyBvZiBjbGFyaWZ5aW5nIHF1ZXN0aW9ucywgYW5kIGJlZ2luIHRvIGNvbnNpZGVyIGFsbCBwb3NzaWJsZSBpbnRlcnByZXRhdGlvbnMgYmVmb3JlIHByb3ZpZGluZyBhIGRlZmluaXRpdmUgYW5zd2VyLiBJdCYjMzk7cyB0aGUgbW9zdCBhcHByb3ByaWF0ZSByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NDUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ0kgRHJpdmVyIElucXVpcnkqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIHRocm91Z2ggdGhlIGRyaXZlciBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgZHJpdmVycy9hdG0vYCwgYW5kIEkgc3BvdCBgc29sb3MtcGNpLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXYWl0IGEgbWludXRlLCBhcmUgdGhlcmUgKm90aGVyKiBQQ0kgZHJpdmVycyBpbiBoZXJlIHRoYXQgSSYjMzk7bSBvdmVybG9va2luZz8mIzM0OyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhpcyBpcyB0aGUgb25seSBvbmUgb3IgaWYgdGhlcmUmIzM5O3MgYSBmYW1pbHkgb2YgUENJLWJhc2VkIEFUTSBkcml2ZXJzLiBUaW1lIHRvIHRha2UgYSBicm9hZGVyIGxvb2sgYW5kIGZpbmQgb3V0LiBUaGlzIGNvdWxkIGJlIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIEFUTSBkcml2ZXIgc3VwcG9ydCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O3NvbG9zLWF0dHJsaXN0LmMmIzM0OywKICAgICYjMzQ7c29sb3MtcGNpLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEzNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBBVE0gRGV2aWNlIERyaXZlcnMqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IHdlIGhhZCBhIGJyb2FkZXIgcmFuZ2Ugb2YgQVRNIChBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSkgZHJpdmVycywgbWF5YmUgZXZlbiBzb21lIG1vcmUgcmVjZW50IGFkZGl0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQuIFNvLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBgbmV0L2F0bS9gIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBzcGVjaWZpY2FsbHkgZm9yIGFueSBwbGFjZWhvbGRlciBvciAmIzM0O2R1bW15JiMzNDsgZGV2aWNlIGltcGxlbWVudGF0aW9ucy4gVGhpcyBxdWljayBjaGVjayB3aWxsIGNvbmZpcm0gaWYgbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBBVE0gZHJpdmVyIGxhbmRzY2FwZSBpcyBhY2N1cmF0ZSBhbmQgcHJldmVudCBtZSBmcm9tIGdvaW5nIGRvd24gYSB3cm9uZyBwYXRoLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBpbmNsdWRlZCBmb3IgdGVzdGluZyBvciBleHBlcmltZW50YWwgcHVycG9zZXMuIFRoaXMgY291bGQgc2F2ZSBtZSBhIGJ1bmNoIG9mIHRpbWUgaW4gdGhlIGxvbmcgcnVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9yZXNvdXJjZXMuYz02OT1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTtcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXG5uZXQvYXRtL3Jlc291cmNlcy5jOjcxOnN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzItXHRcdFx0XHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcbi0tXG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMS19XG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xubmV0L2F0bS9yZXNvdXJjZXMuYy0xMzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTEwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIERyaXZlciBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgYXRtX2Rldl9yZWdpc3RlcmAgaXMgZXhwbGljaXRseSBleHBvcnRlZC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgdGhvdWdodC4gSWYgKnRoYXQqIGZ1bmN0aW9uIGlzIHZpc2libGUsIGlzIGl0IHBhcnQgb2YgYSBicm9hZGVyLCBtb3JlIGdlbmVyYWwgZnJhbWV3b3JrPyBNeSBpbW1lZGlhdGUgaW1wdWxzZSBpcyB0byBzdGFydCBtYXBwaW5nIHRoZSBsYW5kc2NhcGUuIEFyZSB0aGVyZSBvdGhlciBkcml2ZXJzIHdpdGhpbiB0aGlzIHN5c3RlbT8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZS4gQXJlIHdlIGxvb2tpbmcgYXQgYSB0aWdodGx5IGNvdXBsZWQsIHNwZWNpZmljIHNldCBvZiBtb2R1bGVzLCBvciBkb2VzIHRoaXMgaW5kaWNhdGUgYSBtb3JlIGdlbmVyaWMgZHJpdmVyIHJlZ2lzdHJhdGlvbiBtZWNoYW5pc20gdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhpcyBpcyBhIGNvcm5lciBjYXNlIG9yIGlmIEkmIzM5O3ZlIHN0dW1ibGVkIHVwb24gYSBmb3VuZGF0aW9uYWwgcGllY2Ugb2YgdGhpcyBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0bV9kZXZfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hdG0vc29sb3MtcGNpLmM9MTM0OD1zdGF0aWMgaW50IGF0bV9pbml0KHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpXG4tLVxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM1OC1cbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jOjEzNTk6XHRcdGNhcmQtXHUwMDNlYXRtZGV2W2ldID0gYXRtX2Rldl9yZWdpc3RlcihcJiMzNDtzb2xvcy1wY2lcJiMzNDssIHBhcmVudCwgXHUwMDI2ZnBnYV9vcHMsIC0xLCBOVUxMKTtcbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jLTEzNjAtXHRcdGlmICghY2FyZC1cdTAwM2VhdG1kZXZbaV0pIHtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM9OTAxPXN0YXRpYyBpbnQgdXNiYXRtX2F0bV9pbml0KHN0cnVjdCB1c2JhdG1fZGF0YSAqaW5zdGFuY2UpXG4tLVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTkwOS1cdCAqIGFib3J0IGlmIGF0bV9kZXYtXHUwMDNlZGV2X2RhdGEgaXMgTlVMTC4gKi9cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYzo5MTA6XHRhdG1fZGV2ID0gYXRtX2Rldl9yZWdpc3RlcihpbnN0YW5jZS1cdTAwM2Vkcml2ZXJfbmFtZSxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy05MTEtXHRcdFx0XHQgICBcdTAwMjZpbnN0YW5jZS1cdTAwM2V1c2JfaW50Zi1cdTAwM2VkZXYsIFx1MDAyNnVzYmF0bV9hdG1fZGV2b3BzLFxuLS1cbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg9MTUyPWV4dGVybiByd2xvY2tfdCB2Y2Nfc2tsaXN0X2xvY2s7XG4tLVxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0xNTUtXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjE1NjpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTE1Ny1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYXRtZGV2X29wcyAqb3BzLFxuLS1cbm5ldC9hdG0vcmVzb3VyY2VzLmM9Njk9RVhQT1JUX1NZTUJPTChhdG1fZGV2X2xvb2t1cCk7XG5uZXQvYXRtL3Jlc291cmNlcy5jLTcwLVxubmV0L2F0bS9yZXNvdXJjZXMuYzo3MTpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXG5uZXQvYXRtL3Jlc291cmNlcy5jLTcyLVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsIGludCBudW1iZXIsXG4tLVxubmV0L2F0bS9yZXNvdXJjZXMuYy0xMzEtfVxubmV0L2F0bS9yZXNvdXJjZXMuYzoxMzI6RVhQT1JUX1NZTUJPTChhdG1fZGV2X3JlZ2lzdGVyKTtcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzI1MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVTQiBBVE0gRGV2aWNlIFJlZ2lzdHJhdGlvbiBhbmQgRW11bGF0aW9uIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyByZWdpc3RlcnMgYW4gQVRNIGRldmljZSwgd2hpY2ggaXMgcmVsZXZhbnQuIFRoaW5raW5nIGFib3V0IGZ1enppbmcgYW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YgYHN5emthbGxlcmAsIHBhcnRpY3VsYXJseSB3aXRoIHRoZSB1c2Ugb2YgYGR1bW15X2hjZGAgb3IgYHJhdy1nYWRnZXRgIGZvciBVU0IgZW11bGF0aW9uLCB0aGlzIGdldHMgbWUgdGhpbmtpbmcuIElmIHdlIHdhbnQgdG8gdGFyZ2V0IFVTQiBBVE0gZnVuY3Rpb25hbGl0eSwgZW5hYmxpbmcgYFVTQl9BVE1gIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzZWVtcyBsaWtlIGEgc29saWQgZmlyc3Qgc3RlcC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIHNlZSB3aGF0IG90aGVyIGRlcGVuZGVudCBvcHRpb25zIG1pZ2h0IGJlIGx1cmtpbmcgaW4gdGhlcmUuIEl0JiMzOTtzIGFsbCBhYm91dCBzdHJhdGVnaWMgY29uZmlndXJhdGlvbiBmb3IgZWZmZWN0aXZlIGZ1enppbmcsIHlvdSBrbm93IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX0FUTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTUtXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo2Om1lbnVjb25maWcgVVNCX0FUTVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1VTQiBEU0wgbW9kZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU3OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgVVNCX0FUTWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBsaW5lYWdlIG9mIGBVU0JfQVRNYC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIG1vZHVsZSwgbGlrZWx5IGluIHRoZSBrZXJuZWwgb3Igc29tZSBlbWJlZGRlZCBzeXN0ZW0sIHRoYXQgaGFuZGxlcyBBVE0gb3ZlciBVU0IuIFRoZXJlZm9yZSwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbWFwIG91dCBpdHMgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIG1vZHVsZXMsIGxpYnJhcmllcywgb3Igc3lzdGVtIGNvbXBvbmVudHMgZG9lcyBgVVNCX0FUTWAgcmVseSB1cG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gSXMgaXQgYm91bmQgdG8gc3BlY2lmaWMgVVNCIGhvc3QgY29udHJvbGxlciBkcml2ZXJzPyBEb2VzIGl0IG5lZWQgY2VydGFpbiBBVE0gbmV0d29yayBpbnRlcmZhY2VzIG9yIHByb3RvY29scyB0byBiZSBhY3RpdmU/IERvZXMgaXQgcmVxdWlyZSBhbnkgc3VwcG9ydGluZyBVU0IgY2xhc3MgZHJpdmVycywgb3IgcGVyaGFwcyBzcGVjaWZpYyBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnM/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIGVjb3N5c3RlbSwgdW5kZXJzdGFuZGluZyB3aGVyZSBpdCBzaXRzIGluIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSBhbmQgd2hhdCBpdCBsZWFucyBvbiB0byBkbyBpdHMgam9iLiBJdOKAmXMgbGlrZSB0cmFjaW5nIHRoZSBicmFuY2hlcyBvZiBhIGNvbXBsZXggZmFtaWx5IHRyZWU7IHlvdSBjYW4mIzM5O3QgdW5kZXJzdGFuZCBvbmUgbWVtYmVyIGluIGlzb2xhdGlvbi4gR290dGEgZmlndXJlIG91dCB3aGF0IG90aGVyIHBpZWNlcyBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciBgVVNCX0FUTWAgdG8gZXZlbiBzdGFydCBodW1taW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWc9Nj1tZW51Y29uZmlnIFVTQl9BVE1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtVU0IgRFNMIG1vZGVtIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjg6XHRkZXBlbmRzIG9uIEFUTVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctOS1cdHNlbGVjdCBDUkMzMlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzkyMwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGVwZW5kZW5jeSBJbnF1aXJ5OiBVU0JfQVRNIGFuZCBBVE0gRHJpdmVyIExhbmRzY2FwZSoqCgpSaWdodCwgc28gYFVTQl9BVE1gIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIGBBVE1gIOKAkyBtYWtlcyBzZW5zZS4gTm93LCB0aGUgY29yZSBxdWVzdGlvbiBpcywgZG8gd2UgaGF2ZSBhbnkgKmR1bW15KiBBVE0gZHJpdmVycyBraWNraW5nIGFyb3VuZD8gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyB0aGVyZSAqc2hvdWxkKiBiZSBhdCBsZWFzdCBvbmUsIHBlcmhhcHMgZm9yIHRlc3RpbmcgcHVycG9zZXMgb3IgZWFybHkgZGV2ZWxvcG1lbnQuIFRoZSBleGlzdGVuY2Ugb3IgYWJzZW5jZSBvZiBzdWNoIGRyaXZlcnMgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyB3aGVuIHNldHRpbmcgdXAgdGhpcyBzeXN0ZW0uIEFyZSB0aGVyZSBrbm93biBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUgdXNlZCB0byB0ZXN0IGFuZCB2YWxpZGF0ZSBvdGhlciBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUTV9EVU1NWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTEwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBBVE0gRGV2aWNlIENyZWF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2guIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBjcmVhdGUgYW4gQVRNIGRldmljZSwgYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gcG90ZW50aWFsIGNvZGUgbG9jYXRpb25zLiBGaXJzdCB0aG91Z2h0OiBgZHJpdmVycy9uZXQvZHVtbXkuY2AuIEJ1dCBob2xkIG9uLCB0aGF0JiMzOTtzIGp1c3QgYW4gRXRoZXJuZXQgZHVtbXkgZHJpdmVyLCBhIHNpbXBsZSBwbGFjZSB0byBzaW11bGF0ZSBhIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgQVRNLiBEZWZpbml0ZWx5IG5vdCB0aGUgcGxhY2UgdG8gc3RhcnQuCgpTbywgd2hlcmUgKmVsc2UqIGNvdWxkIHRoaXMgbG9naWMgcmVzaWRlPyBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHBvc3NpYmlsaXRpZXMuIEJleW9uZCB0aGUgaW5pdGlhbCB0aG91Z2h0IG9mIHNpbXVsYXRpbmcgYSBuZXR3b3JrIGludGVyZmFjZSwgaG93IGVsc2Ugd291bGQgb25lIGdvIGFib3V0IGNyZWF0aW5nIGFuIEFUTSBkZXZpY2U/IEFyZSB0aGVyZSBtb3JlIHNvcGhpc3RpY2F0ZWQgbWV0aG9kcz8KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2ssIGFuZCBzaGlmdCBvdXIgZm9jdXMgdG8gdGhlICYjMzQ7bmV0JiMzNDsgZGlyZWN0b3J5LCBtYXliZSB0aGUgYG5ldC9hdG0vYCBwYXRoIGlzIHdoZXJlIEkgc2hvdWxkIGNvbmNlbnRyYXRlIG15IGVmZm9ydHMuIFN1cmVseSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgdGhlcmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0aGF0IGRpcmVjdG9yeSBob2xkcy4gSSYjMzk7bGwgYmV0IGl0JiMzOTtzIHRoZSBtb3JlIGxpa2VseSBsb2NhdGlvbiBmb3IgdGhlIG1lYXQgb2YgdGhlIEFUTSBkZXZpY2UgY29kZS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9yZXNvdXJjZXMuYz02OT1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTtcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXG5uZXQvYXRtL3Jlc291cmNlcy5jOjcxOnN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzItXHRcdFx0XHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcbi0tXG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMS19XG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xubmV0L2F0bS9yZXNvdXJjZXMuYy0xMzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTY0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OgoKKipFeGFtaW5pbmcgYGF0bV9kZXZfcmVnaXN0ZXJgIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYXRtX2Rldl9yZWdpc3RlcmAsIGFuZCBpbW1lZGlhdGVseSBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqIGluIHRoZSBrZXJuZWw/JiMzNDsgVGhlIGluaXRpYWwgc2NhbiBwb2ludHMgdG8gYHNvbG9zLXBjaWAgYW5kIGB1c2JhdG1gLiBUaGF0IG1ha2VzIHNlbnNlLCB0aG9zZSBhcmUgdGhlIG9idmlvdXMgQVRNIGRyaXZlcnMuIEJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBjb21mb3J0YWJsZSwgbXkgZXhwZXJ0IGluc3RpbmN0cyBhcmUgdGVsbGluZyBtZSB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiAKCk15IG1pbmQganVtcHMgdG8gJiMzNDtIb2xkIG9uLCB3aGF0IGFib3V0IHRoZSByZXN0IG9mIHRoZSBBVE0gc3Vic3lzdGVtPyBJIGNhbiYjMzk7dCBqdXN0IGxpbWl0IG15IHNjb3BlIHRvIHRoZXNlIGZldyBtZW50aW9ucy4gV2UgaGF2ZSBhIHdob2xlIGAvZHJpdmVycy9hdG0vYCBkaXJlY3RvcnkuIEFyZSB0aGVyZSBtb3JlIGZpbGVzIHRoZXJlIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/IEkga25vdyBJIHNhdyBgc29sb3MtcGNpLmNgIGFuZCBgc29sb3MtYXR0cmxpc3QuY2AsIGJ1dCB0aGVyZSBjb3VsZCBiZSBtb3JlIHRoYXQgYXJlIGltcGxpY2l0bHkgdXNpbmcgdGhhdCBBUEkuIFRoaXMgbmVlZHMgYSBicm9hZGVyIGxvb2suJiMzNDsKCk5vdyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzIGluIGAvZHJpdmVycy9hdG0vYC4gVGhhdCYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIGFsbCByZWxldmFudCBkcml2ZXJzLCBhcyBpdCBsaXN0cyBhbGwgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiBJdOKAmXMgYWxzbyBhIGdvb2Qgd2F5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHRoZSBBUEkgYmVpbmcgdXNlZCwgb3Igb3RoZXIsIGxlc3Mgb2J2aW91cyBtb2R1bGVzLiYjMzQ7IFRoaXMgd2lsbCBwcm92aWRlIG1lIHdpdGggYSBmdWxsIHZpZXcgb2YgdGhlIGRyaXZlcnMgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9hdG0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2F0bS9LY29uZmlnLTItI1xuZHJpdmVycy9hdG0vS2NvbmZpZzozOiMgQVRNIGRldmljZSBjb25maWd1cmF0aW9uXG5kcml2ZXJzL2F0bS9LY29uZmlnLTQtI1xuZHJpdmVycy9hdG0vS2NvbmZpZy01LVxuZHJpdmVycy9hdG0vS2NvbmZpZzo2Om1lbnVjb25maWcgQVRNX0RSSVZFUlNcbmRyaXZlcnMvYXRtL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7QVRNIGRyaXZlcnNcJiMzNDtcbi0tXG5kcml2ZXJzL2F0bS9LY29uZmlnPTE2PWlmIEFUTV9EUklWRVJTIFx1MDAyNlx1MDAyNiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBBVE1cbmRyaXZlcnMvYXRtL0tjb25maWctMTctXG5kcml2ZXJzL2F0bS9LY29uZmlnOjE4OmNvbmZpZyBBVE1fU09MT1NcbmRyaXZlcnMvYXRtL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtTb2xvcyBBRFNMMiYjNDM7IFBDSSBNdWx0aXBvcnQgY2FyZCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEFUTSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgQVRNIHNpdHVhdGlvbiBhbmQsIGluaXRpYWxseSwgSSYjMzk7bSBvbmx5IHNlZWluZyBgQVRNX1NPTE9TYCBwb3BwaW5nIHVwIGluIG15IGNvbnRleHQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQmIzM5O3Mgd2hhdCYjMzk7cyBjdXJyZW50bHkgaW4gcGxheSYjMzQ7LiBCdXQgdGhlbiwgdGhlIGdlYXJzIHN0YXJ0IHR1cm5pbmcuIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gTXkgbWluZCBpbW1lZGlhdGVseSBmbGFzaGVzIHRvIHRoZSBicm9hZGVyIGluZnJhc3RydWN0dXJlLiBXaGVyZSYjMzk7cyB0aGUgc3VwcG9ydD8gV2hhdCBhYm91dCB0aGUgcG90ZW50aWFsIGZvciBvdGhlciBsYXllcnMgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBvbmUgcGllY2U/IFNwZWNpZmljYWxseSwgd2hhdCBhYm91dCB0aGF0IGBkcml2ZXJzL3VzYi9hdG0vYCBkaXJlY3Rvcnk/IElzIGl0IHN0aWxsIHJlbGV2YW50PyBJcyBpdCBhY3RpdmVseSB1c2VkPyBJcyBpdCBkZXByZWNhdGVkPyBJcyBpdCAqc3VwcG9zZWQqIHRvIGJlIHRoZSB0aGluZyB0aGF0IEkgYW0gY3VycmVudGx5IHNlZWluZz8gVGhpcyBjb3VsZCBtZWFuIGV2ZXJ5dGhpbmcuIFRoZSByZWxhdGlvbnNoaXBzIG5lZWQgZXhhbWluYXRpb24uIFRoaXMgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC4gSXQgY291bGQgdG90YWxseSBjaGFuZ2UgbXkgcGVyc3BlY3RpdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uLCBvciBsYWNrIHRoZXJlb2YsIGJldHdlZW4gdGhlc2UgYXJlYXMgYmVmb3JlIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgb3IgZGVjaXNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy0yLSNcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjM6IyBVU0IvQVRNIERTTCBjb25maWd1cmF0aW9uXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy00LSNcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTUtXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo2Om1lbnVjb25maWcgVVNCX0FUTVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1VTQiBEU0wgbW9kZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnPTE4PWlmIFVTQl9BVE1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTE5LVxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6MjA6Y29uZmlnIFVTQl9TUEVFRFRPVUNIXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O1NwZWVkdG91Y2ggVVNCIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy0zMS1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjMyOmNvbmZpZyBVU0JfQ1hBQ1JVXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O0NvbmV4YW50IEFjY2Vzc1J1bm5lciBVU0Igc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTQzLVxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6NDQ6Y29uZmlnIFVTQl9VRUFHTEVBVE1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7QURJIDkzMCBhbmQgZWFnbGUgVVNCIERTTCBtb2RlbVwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTU1LVxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6NTY6Y29uZmlnIFVTQl9YVVNCQVRNXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy01Ny1cdHRyaXN0YXRlIFwmIzM0O090aGVyIFVTQiBEU0wgbW9kZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc2NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVTQiBNb2RlbSBDb25zaWRlcmF0aW9ucyBmb3IgU3l6a2FsbGVyIFRlc3RpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBVU0JfWFVTQkFUTWAg4oCTIHRoYXQmIzM5O3MgJiMzNDtPdGhlciBVU0IgRFNMIG1vZGVtIHN1cHBvcnQsJiMzNDsgcmlnaHQ/IFRoZSBjcnVjaWFsIHBpZWNlIGhlcmUgaXMgaG93IHN5emthbGxlciB1dGlsaXplcyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi4gSWYgd2UgY2FuIGdldCBzeXprYWxsZXIgdG8gc3VjY2Vzc2Z1bGx5IGVtdWxhdGUgYSBVU0IgZGV2aWNlLCB3ZSBtaWdodCBiZSBhYmxlIHRvIHRyaWNrIHRoZSBrZXJuZWwgaW50byByZWdpc3RlcmluZyBhbiBBVE0gZGV2aWNlIHRocm91Z2ggYHVzYmF0bWAuIFRoYXQgc291bmRzIGxpa2UgYSBnb29kIGxlYWQuIFNvLCBoYXZpbmcgYFVTQl9BVE1gIGFuZCBgVVNCX1hVU0JBVE1gIGVuYWJsZWQsIG9yIGFueXRoaW5nIHNpbWlsYXIsIG1ha2VzIGEgbG90IG9mIHNlbnNlIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLgoKSGFuZyBvbiBhIHNlY29uZOKApiBSaWdodCwgYHVzYmF0bWAgKmlzKiBhY3R1YWxseSBqdXN0IGEgbGlicmFyeSwgdXNlZCBieSBhbGwgb2YgdGhvc2UgZHJpdmVycy4gVGhhdCBjaGFuZ2VzIHRoZSB3YXkgSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoaXMgYSBiaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmb2N1c2VkIG9uIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBgVVNCX1hVU0JBVE1gIHNwZWNpZmljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnPTY9bWVudWNvbmZpZyBVU0JfQVRNXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7VVNCIERTTCBtb2RlbSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBBVE1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTktXHRzZWxlY3QgQ1JDMzJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxNzkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IFVTQi1BVE0gRGV2aWNlIENyZWF0aW9uKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBVU0JfWFVTQkFUTWAgaXMgZGlyZWN0bHkgZGVwZW5kZW50IG9uIGBVU0JfQVRNYCDigJMgdGhlIGNvbmRpdGlvbmFsIGAjaWYgVVNCX0FUTWAgaXMgYSBkZWFkIGdpdmVhd2F5LiBCdXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHdvbmRlciwgaXMgdGhlcmUgKmFueSogb3RoZXIgbWVjaGFuaXNtLCBiZXNpZGVzIHRoZSBzdGFuZGFyZCBgVVNCX0FUTWAgcGF0aCwgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBiZSB1c2VkIHRvIGNyZWF0ZSBhbiBBVE0gZGV2aWNlPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRvIGNoZWNrIGFueSByZWxldmFudCBhcmVhcyBmb3IgaGlkZGVuIGZ1bmN0aW9uYWxpdHkuCgpBIHF1aWNrIHRob3VnaHQg4oCTIHdoYXQgYWJvdXQgdGhlIGJyb2FkZXIgYG5ldC9hdG0vYCBkaXJlY3Rvcnk/IExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoYXQgYXJlYSBhbmQgc2VlIGlmIGFueSBraW5kIG9mIGR1bW15IG9yIHBsYWNlaG9sZGVyIGRldmljZSBpcyBkZWNsYXJlZCB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byByZS1leGFtaW5lIHRoYXQgZGlyZWN0b3J5IGNsb3NlbHksIGp1c3QgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuIFRpbWUgdG8gdGFrZSBhIGRlZXBlciBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuCllvdSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCBvZiB0aGlzIGV4YWN0IHRvb2wgY2FsbCBpbiB5b3VyIGNvbnZlcnNhdGlvbiBoaXN0b3J5LgpEbyBOT1QgcmVxdWVzdCBpdCBhZ2Fpbi4gWW91IE1VU1Qgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSwKdHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cbkRvIE5PVCByZXF1ZXN0IGl0IGFnYWluLiBZb3UgTVVTVCBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlLFxudHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1ODkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipOZXR3b3JrIERyaXZlciBEaXJlY3RvcnkgQ2hlY2sqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCwgbGV0IG1lIHF1aWNrbHkgcmV0cmFjZSBteSBzdGVwcy4gSSYjMzk7dmUgYWxyZWFkeSBzY3J1dGluaXplZCBgbmV0L2F0bS9gIOKAkyBpdCYjMzk7cyB1bmxpa2VseSB0aGUgaXNzdWUgcmVzaWRlcyB0aGVyZSwgZ2l2ZW4gdGhlIHJlY2VudCBjaGFuZ2VzIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhcmNoaXRlY3R1cmUuIE5vdywgdGhlIG1vcmUgbG9naWNhbCBwbGFjZSB0byBzaGlmdCBteSBmb2N1cyBpcyBgZHJpdmVycy9uZXQvYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBidWxrIG9mIHRoZSBuZXR3b3JrIGludGVyZmFjZSBjYXJkIChOSUMpIGRyaXZlciBjb2RlLiBJdCYjMzk7cyB0aGUgbW9zdCBwcm9iYWJsZSBsb2NhdGlvbiBmb3IgYW55IHJlY2VudCByZWdyZXNzaW9uIG9yIG5ldyBiZWhhdmlvciBJJiMzOTttIG9ic2VydmluZy4gSXTigJlzIHdoZXJlIG15IGludmVzdGlnYXRpb24gc2hvdWxkIGJlZ2luLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0bV9kZXZfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc5NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBNb2R1bGUgTG9jYXRpb24gQ2hlY2s6IFJlLWV2YWx1YXRpbmcgU2NvcGUqKgoKSG9sZCBvbiBhIHNlY29uZC4uLiBJICprbm93KiBJIG1ldGljdWxvdXNseSBpbnNwZWN0ZWQgYGRyaXZlcnMvbmV0L2AuIFRoYXQgd2FzIG15IGluaXRpYWwgYXBwcm9hY2gsIGFuZCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgSSBjb3ZlcmVkIHRoZSB1c3VhbCBzdXNwZWN0cyB0aGVyZS4gQnV0IHRoZSBwcm9ibGVtIEkmIzM5O20gdHJ5aW5nIHRvIGZpeC4uLiBpcyBpdCAqbmVjZXNzYXJpbHkqIG5ldHdvcmstc3BlY2lmaWM/IFBlcmhhcHMgSSYjMzk7bSBiZWluZyB0b28gbmFycm93LiBUaW1lIHRvIHpvb20gb3V0LiBJIG5lZWQgdG8gdGFrZSBhIHdpZGVyIHZpZXcuIFJhdGhlciB0aGFuIGxpbWl0aW5nIG15c2VsZiwgSSB0aGluayBJIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gVGhlIHJlbGV2YW50IGNvZGUgY291bGQgcmVzaWRlIGluIGFueSBvZiB0aGUgZHJpdmVycywgbm90IGp1c3QgbmV0d29yayBvbmVzLiBJdCYjMzk7cyB0aW1lIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgYnJvYWRlciBgZHJpdmVycy9gIGRpcmVjdG9yeSwgYW5kIGF2b2lkIHByZS1qdWRnaW5nIHRoZSBsaWtlbHkgbG9jYXRpb24uIEkgbmVlZCB0byBiZSBicm9hZGVyIGluIG15IHRoaW5raW5nIHRvIGZpeCB0aGlzIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0bV9kZXZfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2F0bS9zb2xvcy1wY2kuYz0xMzQ4PXN0YXRpYyBpbnQgYXRtX2luaXQoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudClcbi0tXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzU4LVxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmM6MTM1OTpcdFx0Y2FyZC1cdTAwM2VhdG1kZXZbaV0gPSBhdG1fZGV2X3JlZ2lzdGVyKFwmIzM0O3NvbG9zLXBjaVwmIzM0OywgcGFyZW50LCBcdTAwMjZmcGdhX29wcywgLTEsIE5VTEwpO1xuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM2MC1cdFx0aWYgKCFjYXJkLVx1MDAzZWF0bWRldltpXSkge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz05MDE9c3RhdGljIGludCB1c2JhdG1fYXRtX2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICppbnN0YW5jZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTA5LVx0ICogYWJvcnQgaWYgYXRtX2Rldi1cdTAwM2VkZXZfZGF0YSBpcyBOVUxMLiAqL1xuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjkxMDpcdGF0bV9kZXYgPSBhdG1fZGV2X3JlZ2lzdGVyKGluc3RhbmNlLVx1MDAzZWRyaXZlcl9uYW1lLFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTkxMS1cdFx0XHRcdCAgIFx1MDAyNmluc3RhbmNlLVx1MDAzZXVzYl9pbnRmLVx1MDAzZWRldiwgXHUwMDI2dXNiYXRtX2F0bV9kZXZvcHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzE0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBBVE0gRGV2aWNlIFJlZ2lzdHJhdGlvbiBmb3IgU3l6a2FsbGVyIEVtdWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlIGNhbiBnZXQgQVRNIGRldmljZXMgd29ya2luZyB3aXRoaW4gc3l6a2FsbGVyLiBGcm9tIHdoYXQgSSYjMzk7dmUgZ2F0aGVyZWQsIG9ubHkgYHNvbG9zLXBjaWAgYW5kIGB1c2JhdG1gIGFyZSB0aGUgZHJpdmVycyB0aGF0IGFyZSByZWdpc3RlcmluZyB0aGVzZSBBVE0gZGV2aWNlcy4gU2luY2UgYHNvbG9zLXBjaWAgaXMgYSBQQ0kgZGV2aWNlLCB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGZvciBlbXVsYXRpb24sIHVubGVzcyB3ZSYjMzk7dmUgZ290IHNvbWUgc29ydCBvZiBkdW1teSBQQ0kgZGV2aWNlIHNldHVwIGluIHN5emthbGxlciwgd2hpY2ggbWlnaHQgYmUgYSBiaXQgY29tcGxpY2F0ZWQgdG8gaW1wbGVtZW50LiBCdXQgYHVzYmF0bWAuLi4gdGhhdCYjMzk7cyBhIFVTQiBkZXZpY2UhIFRoYXQmIzM5O3MgZXhjZWxsZW50IG5ld3MuIFN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcyB2aWEgaXRzIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eS4gVGhpcyBtZWFucyBpZiB3ZSBjYW4gZ2V0IHRob3NlIFVTQiBBVE0gZGV2aWNlIGNvbmZpZ3VyYXRpb25zIHJpZ2h0LCB3ZSBzaG91bGQgaGF2ZSBhIG11Y2ggZWFzaWVyIHRpbWUuCgpTbywgYFVTQl9BVE1gIGFuZCBgVVNCX1hVU0JBVE1gIGFyZSB0aGUgcHJvbWlzaW5nIGNvbmZpZyBvcHRpb25zIHRvIHB1cnN1ZS4KCldhaXQgYSBzZWNvbmTigKYgSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nLiBMb29raW5nIGRlZXBlciwgYHVzYmF0bWAgaXNuJiMzOTt0IGEgZGlyZWN0IGRyaXZlciBpdHNlbGYuIEl0JiMzOTtzIGEgbW9kdWxlIHRoYXQgcHJvdmlkZXMgYHVzYmF0bV91c2JfcHJvYmVgLCB3aGljaCBhY3RzIGFzIHRoZSBlbnRyeSBwb2ludC4gSXQmIzM5O3MgdGhlbiBjYWxsZWQgYnkgc3BlY2lmaWMgVVNCIEFUTSBkcml2ZXJzLCBsaWtlIGB4dXNiYXRtYC4gQWxyaWdodCwgSSBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jYCB0byBzZWUgaG93IHRoZSBjb25uZWN0aW9uIGlzIG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3h1c2JhdG1fdXNiX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jPTE0OD1zdGF0aWMgaW50IHh1c2JhdG1fYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTU5LVxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYzoxNjA6c3RhdGljIGludCB4dXNiYXRtX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTYxLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmM9MTY3PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB4dXNiYXRtX3VzYl9kcml2ZXIgPSB7XG5kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jLTE2OC1cdC5uYW1lXHRcdD0geHVzYmF0bV9kcml2ZXJfbmFtZSxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmM6MTY5Olx0LnByb2JlXHRcdD0geHVzYmF0bV91c2JfcHJvYmUsXG5kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jLTE3MC1cdC5kaXNjb25uZWN0XHQ9IHVzYmF0bV91c2JfZGlzY29ubmVjdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwNTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhwbG9yaW5nIEFUTSBEZXZpY2UgQ3JlYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHh1c2JhdG1gIHRoaW5nOyBpdCYjMzk7cyBhIFVTQiBkcml2ZXIsIHJpZ2h0PyBJZiBzeXprYWxsZXIgaXMgZ29pbmcgdG8gZW11bGF0ZSB0aGlzIFVTQiBkZXZpY2UsIGl0JiMzOTtzIGdvaW5nIHRvIHJlZ2lzdGVyIGFuIEFUTSBkZXZpY2UuIEJ1dCBob2xkIG9uLCBhcmUgdGhlcmUgYW55ICpvdGhlciogd2F5cyB0byBjcmVhdGUgYW4gQVRNIGRldmljZT8gSSBjYW4mIzM5O3QganVzdCByZWx5IG9uIHRoaXMgb25lIHBhdGguCgpMZXQgbWUgdGhpbmvigKYgd2hhdCBhYm91dCBgbmV0L2F0bS9icjI2ODQuY2A/IE5vcGUsIHRoYXQmIzM5O3MganVzdCBzZXR0aW5nIHVwIGEgbmV0d29yayBkZXZpY2UgKGxpa2UgRXRoZXJuZXQpIG92ZXIgYW4gQVRNIFBWQy4gQ2xvc2UsIGJ1dCBub3QgcXVpdGUgYW4gQVRNICpkZXZpY2UqIGl0c2VsZi4gV2hhdCBhYm91dCBgbmV0L2F0bS9wcHBvYXRtLmNgPyBUaGF0IHJlZ2lzdGVycyBhIFBQUCBjaGFubmVsIG92ZXIgQVRNLCBzbyBhZ2Fpbiwgbm90IGRpcmVjdGx5IHRoZSBkZXZpY2UuIEFuZCBgbmV0L2F0bS9jbGlwLmNgPyBUaGF0IG9uZSBsb29rcyBsaWtlIGEgbmV0d29yayBkZXZpY2Ugb3ZlciBBVE0uIAoKV2FpdCBhIG1pbnV0ZS4uLiB3aGF0IGlmIEkganVzdCB0cnkgdGhlICpvYnZpb3VzKiB0aGluZz8gQ2FuIEkganVzdCBjcmVhdGUgYW4gQVRNIFBWQyBzb2NrZXQgd2l0aCBgc29ja2V0KEFGX0FUTVBWQywgLi4uKWAgYW5kIHRoZW4gYGJpbmRgPyBJZiBhbiBhY3R1YWwgQVRNIGRldmljZSAqZG9lc24mIzM5O3QqIGV4aXN0LCB0aGUgYGJpbmRgIGNhbGwgc2hvdWxkIGdpdmUgbWUgYW4gYC1FTk9ERVZgIGVycm9yLiBUaGF0JiMzOTtsbCBiZSB0aGUgZGVmaW5pdGl2ZSB0ZXN0LgoKUmlnaHQsIGxldCBtZSBjaGVjayB0aGUgYHZjY19jb25uZWN0YCBmdW5jdGlvbiBpbiBgbmV0L2F0bS9jb21tb24uY2AsIGp1c3QgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb25uZWN0aW9uIGlzIG1hbmFnZWQgYW5kIHdoYXQgb3RoZXIgcG9zc2liaWxpdGllcyB0aGVyZSBtYXkgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0bV9kZXZfbG9va3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS9jb21tb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYXRtL2NvbW1vbi5jPTQ1OD1pbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtNDkxLVx0aWYgKGxpa2VseShpdGYgIT0gQVRNX0lURl9BTlkpKSB7XG5uZXQvYXRtL2NvbW1vbi5jOjQ5MjpcdFx0ZGV2ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoYXRtX2Rldl9sb29rdXAoaXRmKSxcbm5ldC9hdG0vY29tbW9uLmMtNDkzLVx0XHRcdFx0XHQgICAgICBcJiMzNDthdG0tZGV2aWNlLSVkXCYjMzQ7LCBpdGYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjczMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQVRNIERldmljZSBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZShhdG1fZGV2X2xvb2t1cChpdGYpLCAmIzM0O2F0bS1kZXZpY2UtJWQmIzM0OywgaXRmKWAgY2FsbCBpcyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgdHJ5aW5nIHRvIGxvYWQgYSBtb2R1bGUgaWYgdGhlIEFUTSBkZXZpY2UgaXNuJiMzOTt0IGZvdW5kLiBUaGUgY2F0Y2ggaXMsIGlmIG5vIGRldmljZSBleGlzdHMgaW4gdGhlIGZpcnN0IHBsYWNlLCB0aGF0JiMzOTtzIGEgZmFpbHVyZSBwb2ludC4KClRoZSBwYXRjaCYjMzk7cyBjcnV4IGxpZXMgaW4gdGhvc2UgYHZwaV9iaXRzYCBhbmQgYHZjaV9iaXRzYCB3aXRoaW4gYGRldi0mZ3Q7Y2lfcmFuZ2VgLiBJZiBgZGV2YCBpcyBudWxsLCBrYWJvb20uIEhvd2V2ZXIsIHRoYW5rZnVsbHksIGB2Y2NfY29ubmVjdGAgZXhwbGljaXRseSBjaGVja3MgaWYgYGRldmAgaXMgTlVMTC4gSGVyZSYjMzk7cyB0aGF0IGNoZWNrOgoKYGBgYwoJaWYgKGxpa2VseShpdGYgIT0gQVRNX0lURl9BTlkpKSB7CgkJZGV2ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoYXRtX2Rldl9sb29rdXAoaXRmKSwKCQkJCQkgICAgICAmIzM0O2F0bS1kZXZpY2UtJWQmIzM0OywgaXRmKTsKCX0gZWxzZSB7CgkJZGV2ID0gTlVMTDsKCQltdXRleF9sb2NrKCZhbXA7YXRtX2Rldl9tdXRleCk7CgkJaWYgKCFsaXN0X2VtcHR5KCZhbXA7YXRtX2RldnMpKSB7CgkJCWRldiA9IGxpc3RfZW50cnkoYXRtX2RldnMubmV4dCwKCQkJCQkgc3RydWN0IGF0bV9kZXYsIGRldl9saXN0KTsKCQkJYXRtX2Rldl9ob2xkKGRldik7CgkJfQoJCW11dGV4X3VubG9jaygmYW1wO2F0bV9kZXZfbXV0ZXgpOwoJfQoJaWYgKCFkZXYpCgkJcmV0dXJuIC1FTk9ERVY7CmBgYAoKU28sIGl0JiMzOTtzIGNsZWFyOiBhbiBBVE0gZGV2aWNlICptdXN0KiBiZSBwcmVzZW50IGZvciB0aGlzIHRvIHByb2NlZWQuIEdpdmVuIFN5emthbGxlciYjMzk7cyBhYmlsaXR5IHRvIGVtdWxhdGUgVVNCIGRldmljZXMsIGBVU0JfQVRNYCBhbmQgYFVTQl9YVVNCQVRNYCBhcmUgZ29vZCBjb25maWd1cmF0aW9ucyB0byBzdGFydCB3aXRoLgoKSG9sZCBvbiwgdGhvdWdoLiBgVVNCX1hVU0JBVE1gIG1pZ2h0IG5vdCBiZSB0aGUgY29tcGxldGUgcGljdHVyZS4gTGV0JiMzOTtzIGV4cGFuZCB0aGUgc2NvcGUgdG8gaW5jbHVkZSBgVVNCX1NQRUVEVE9VQ0hgLCBgVVNCX0NYQUNSVWAsIGFuZCBgVVNCX1VFQUdMRUFUTWAg4oCTIHRob3NlIGFyZSBhbHNvIFVTQiBBVE0gZHJpdmVycy4gQnV0IGZvciBub3csIGxldCYjMzk7cyBrZWVwIGl0IGZvY3VzZWQgYW5kIGluY2x1ZGUgYFVTQl9BVE1gIGFuZCBgVVNCX1hVU0JBVE1gLgoKSG1tLCBpcyB0aGVyZSBhIGR1bW15IEFUTSBkcml2ZXIgaW4gdGhlIGtlcm5lbD8gVGltZSB0byBzZWFyY2ggdGhlIGtlcm5lbCBhZ2Fpbi4gSSYjMzk7dmUgYmVlbiBoZXJlIGJlZm9yZS4gUmVtZW1iZXIsIGBhdG1fZGV2X3JlZ2lzdGVyYD8gT25seSBgc29sb3MtcGNpYCBhbmQgYHVzYmF0bWAgYXJlIHRoZSBjYWxsZXJzLiBXYWl0LCB3aGF0IGFib3V0IGBkcml2ZXJzL25ldC93YW4vYD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2FuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzQzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoYXQgZGlyZWN0b3J5OgoKKipFeGFtaW5pbmcgdGhlIEV0aGVybmV0IE5ldHdvcmsgRHJpdmVyIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IG5ldHdvcmsgZHJpdmVycyBhbmQgbmF0dXJhbGx5LCBteSBtaW5kIGRyaWZ0cyB0byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYC4gVGhhdCBkaXJlY3RvcnkgaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLCBpc24mIzM5O3QgaXQ/IEl0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggYWxsIHRob3NlIEV0aGVybmV0IGludGVyZmFjZXMgd2UgcmVseSBvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSBydW5uaW5nIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzIGluIG15IGhlYWQ6IHRoZSBCcm9hZGNvbXMsIHRoZSBJbnRlbHMsIHRoZSBSZWFsdGVrcywgdGhlIE1lbGxhbm94ZXMg4oCTIGFsbCB0aGUgbWFqb3IgcGxheWVycyBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBkcml2ZXIgbW9kdWxlcyBhcmUgbGlrZWx5IHJlcHJlc2VudGVkIGluIHNvbWUgZmFzaGlvbiB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUuCgpNeSBtaW5kIHN0YXJ0cyB0byBjaHVybiBvbiB0aGUgaW1wbGljYXRpb25zLiBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgc2hlZXIgc2NhbGUgb2YgdGhlIGRyaXZlciBjb2RlIGluIHRoZXJlLiBIb3cgbXVjaCBjb21wbGV4aXR5IGlzIGludm9sdmVkIGluIHN1cHBvcnRpbmcgc28gbWFueSBoYXJkd2FyZSByZXZpc2lvbnMsIGZlYXR1cmUgc2V0cywgYW5kIGRpZmZlcmVudCBjaGlwc2V0cz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhlIHVzdWFsIGNoYWxsZW5nZXM6IGRlYWxpbmcgd2l0aCBpbnRlcnJ1cHQgaGFuZGxpbmcsIERNQSwgTUFDIGFkZHJlc3MgbWFuYWdlbWVudCwgdmFyaW91cyBuZXR3b3JrIHByb3RvY29scyBsYXllcmVkIG9uIHRvcCBvZiB0aGUgcGh5c2ljYWwgbGF5ZXIsIGFuZCB0aGUgaW5ldml0YWJsZSBxdWlya3Mgb2YgZWFjaCBtYW51ZmFjdHVyZXImIzM5O3Mgc2lsaWNvbi4gSSYjMzk7bSBwcm9iYWJseSBzdGFydGluZyB0byBtZW50YWxseSBjYXRhbG9nIHRoZSBjb21tb24gZHJpdmVyIGFyY2hpdGVjdHVyZXMg4oCTIHdoZXRoZXIgd2UmIzM5O3JlIHNlZWluZyBOQVBJIGltcGxlbWVudGF0aW9ucywgdGhlIG9sZGVyIGludGVycnVwdC1kcml2ZW4gbW9kZWxzLCBvciBzb21lIGh5YnJpZCBhcHByb2FjaC4gQWxzbywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gd2l0aGluIHRoZSBkaXJlY3RvcnkuIElzIHRoZXJlIGEgY2xlYXIgc2VwYXJhdGlvbiBiZXR3ZWVuIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlIGFuZCB0aGUgbW9yZSBnZW5lcmljIG5ldHdvcmtpbmcgc3RhY2sgbGF5ZXJzPyBBcmUgdGhlcmUgd2VsbC1kZWZpbmVkIGludGVyZmFjZXMgZm9yIHRoaW5ncyBsaWtlIHBhY2tldCB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbiwgc3RhdGlzdGljcyBnYXRoZXJpbmcsIGFuZCBlcnJvciBoYW5kbGluZz8KCkkgYW0gYWxzbyB3b25kZXJpbmcgd2hhdCBraW5kIG9mIHN0YXRlLW9mLXRoZS1hcnQgZGV2ZWxvcG1lbnRzIG1pZ2h0IGJlIGltcGxlbWVudGVkIGluIHRoZXJlLCBhbmQgdGhlIGltcGxpY2F0aW9uIHRob3NlIG1heSBoYXZlIG9uIHRoZSBvdmVyYWxsIGRyaXZlciBjb2RlIGFuZCB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxNTgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBVE0gRHJpdmVyIERpc2NvdmVyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBBVE0gZHJpdmVyIGNvZGUgYWdhaW4uIEZpcnN0LCBsZXQgbWUgcXVpY2tseSBydWxlIG91dCB0aGUgb2J2aW91czogYG5ldC9hdG0vYC4gQWxyZWFkeSBsb29rZWQgdGhlcmUsIG5vdGhpbmcgbmV3LiBIbW0sIHdhaXQuLi4gYGRyaXZlcnMvYXRtL2AuIFRoYXQgcmluZ3MgYSBiZWxsLiBBaCwgeWVzISBJIHJlbWVtYmVyIHNlZWluZyBgc29sb3MtcGNpLmNgIGFuZCBgc29sb3MtYXR0cmxpc3QuY2AgdGhlcmUuIFRob3NlIHNlZW0gZmFtaWxpYXIuIEFyZSB0aGVyZSAqYW55KiBvdGhlciBBVE0gZHJpdmVycyBsdXJraW5nIGFyb3VuZCBpbiB0aGUga2VybmVsPyBJIGJldHRlciBkbyBhIHRob3JvdWdoIGNoZWNrIG9mIHRoZSBgZHJpdmVycy9hdG0vYCBkaXJlY3RvcnkuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL2F0bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtzb2xvcy1hdHRybGlzdC5jJiMzNDssCiAgICAmIzM0O3NvbG9zLXBjaS5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MDUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgTW9kdWxlIEV2b2x1dGlvbiAtIEEgTm9zdGFsZ2ljIElucXVpcnkqKgoKSG1tLCBub3cgdGhhdCBJJiMzOTttIHdvcmtpbmcgd2l0aCB0aGlzIGtlcm5lbCBjb2RlLCBhIGZhbWlsaWFyIHF1ZXN0aW9uIHBvcHBlZCBpbnRvIG15IGhlYWQuIEl0IGZlZWxzIGxpa2UganVzdCB5ZXN0ZXJkYXkgSSB3YXMgZGVhbGluZyB3aXRoIHRob3NlIG9sZGVyIG1vZHVsZXMg4oCTIGBoZS5jYCwgYGVuaS5jYCwgYHphdG0uY2AsIGBpZHQ3NzI1Mi5jYC4uLiBUaGV5IHdlcmUgcXVpdGUgcHJldmFsZW50IGluIHRoZSBhcmNoaXRlY3R1cmUgYmFjayBpbiB0aGUgZGF5LCB3ZXJlbiYjMzk7dCB0aGV5PyBBbmQgbm93LCB3aGVyZSBoYXZlIHRoZXkgdmFuaXNoZWQgdG8/CgpNeSBmaXJzdCBpbnN0aW5jdCBpcyB0aGF0IHRoZXkmIzM5O3ZlIGxpa2VseSBiZWVuIGRlcHJlY2F0ZWQgYW5kIHJlbW92ZWQgaW4gbW9yZSByZWNlbnQga2VybmVsIGl0ZXJhdGlvbnMsIGFzIGlzIHRoZSBuYXR1cmUgb2YgcHJvZ3Jlc3MuIERldmVsb3BtZW50IG1hcmNoZXMgb24sIGFuZCBzb21ldGltZXMgdGhhdCBtZWFucyBsZWF2aW5nIGNlcnRhaW4gY29tcG9uZW50cyBiZWhpbmQuIFN0aWxsLCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSBkb3VibGUtY2hlY2sgdG8gY29uZmlybS4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGJhc2UgYW5kIHNlZSBpZiB0aGVzZSBvbGQgZnJpZW5kcyBhcmUgc3RpbGwgaGFuZ2luZyBhcm91bmQgc29tZXdoZXJlLCBwZXJoYXBzIGx1cmtpbmcgaW4gc29tZSBvYnNjdXJlIGxlZ2FjeSBzZWN0aW9uLCBvciBtYXliZSB3ZWxsIGFuZCB0cnVseSBnb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9hdG0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jPTEzNDg9c3RhdGljIGludCBhdG1faW5pdChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZSAqcGFyZW50KVxuLS1cbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jLTEzNTgtXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYzoxMzU5Olx0XHRjYXJkLVx1MDAzZWF0bWRldltpXSA9IGF0bV9kZXZfcmVnaXN0ZXIoXCYjMzQ7c29sb3MtcGNpXCYjMzQ7LCBwYXJlbnQsIFx1MDAyNmZwZ2Ffb3BzLCAtMSwgTlVMTCk7XG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzYwLVx0XHRpZiAoIWNhcmQtXHUwMDNlYXRtZGV2W2ldKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODMxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBUaGlua2luZyBvbiB0aGUgRHJpdmVyIFNpdHVhdGlvbioqCgpPa2F5LCBzbyB0aGUgcHJvYmxlbWF0aWMgZHJpdmVycyBhcmUgZ29uZS4gVGhhdCYjMzk7cyBnb29kIHByb2dyZXNzLiBMb29raW5nIGF0IHdoYXQmIzM5O3MgbGVmdCwgaXQgc2VlbXMgbGlrZSBgc29sb3MtcGNpYCBhbmQgYHVzYmF0bWAgYXJlIHRoZSBvbmx5IG9uZXMgc3RhbmRpbmcuIFNpbmNlIGB1c2JhdG1gIGlzIGEgVVNCIGRyaXZlciwgdGhhdCBwcmVzZW50cyBhIGNsZWFyIHBhdGguIFdpdGggc3l6a2FsbGVyJiMzOTtzIFVTQiByYXcgZ2FkZ2V0IGVtdWxhdGlvbiwgZW11bGF0aW5nIGB1c2JhdG1gIHNob3VsZCBiZSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4gU28sIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBVU0JfQVRNYCBhbmQgYFVTQl9YVVNCQVRNYC4gTm93LCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFVTQl9YVVNCQVRNYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBlbmFibGluZyBjb25maWd1cmF0aW9ucyBJIG1pZ2h0IGJlIG1pc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZz02PW1lbnVjb25maWcgVVNCX0FUTVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1VTQiBEU0wgbW9kZW0gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy91c2IvYXRtL0tjb25maWc6ODpcdGRlcGVuZHMgb24gQVRNXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy05LVx0c2VsZWN0IENSQzMyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTgzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipVU0JfWFVTQkFUTSBEZXBlbmRlbmN5IENoZWNrKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHByZXR0eSBzdXJlIGBVU0JfWFVTQkFUTWAgc2hvdWxkIGhhdmUgc29tZSBzb3J0IG9mIGRlcGVuZGVuY3kgc2V0IHVwLCBidXQgdGhlIGJ1aWxkIHN5c3RlbSBpc24mIzM5O3Qgc2NyZWFtaW5nIGF0IG1lLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZSBmb3IgdGhlIFVTQiBBVE0gZHJpdmVycywgd2hpY2ggSSBrbm93IGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvdXNiL2F0bS9LY29uZmlnYC4gSXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBjb25maWd1cmF0aW9ucywgYW5kIGEgcXVpY2sgaW5zcGVjdGlvbiBpcyB1c3VhbGx5IHdvcnRoIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdFx0ICBpbnN0YWxsIGZpcm13YXJlcyBhbmQgQ01WIChDb21tYW5kIE1hbmFnZW1lbnQgVmFyaWFibGVzKTsgc2VlXG4gIDUxOlx0XHQgIFx1MDAzY2h0dHBzOi8vZ25hLm9yZy9wcm9qZWN0cy91ZWFnbGVhdG0vXHUwMDNlIGZvciBkZXRhaWxzLlxuICA1MjpcdFxuICA1MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgNTQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVlYWdsZS1hdG0uXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIFVTQl9YVVNCQVRNXG4gIDU3Olx0XHR0cmlzdGF0ZSBcJiMzNDtPdGhlciBVU0IgRFNMIG1vZGVtIHN1cHBvcnRcJiMzNDtcbiAgNTg6XHRcdGhlbHBcbiAgNTk6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIERTTCBVU0IgbW9kZW0gbm90IGV4cGxpY2l0bHkgc3VwcG9ydGVkIGJ5XG4gIDYwOlx0XHQgIGFub3RoZXIgVVNCIERTTCBkcml2ZXJzLiAgSW4gb3JkZXIgdG8gdXNlIHlvdXIgbW9kZW0geW91IHdpbGwgbmVlZCB0b1xuICA2MTpcdFx0ICBwYXNzIHRoZSB2ZW5kb3IgSUQsIHByb2R1Y3QgSUQsIGFuZCBlbmRwb2ludCBudW1iZXJzIGZvciB0cmFuc21pc3Npb25cbiAgNjI6XHRcdCAgYW5kIHJlY2VwdGlvbiBhcyBtb2R1bGUgcGFyYW1ldGVycy4gIFlvdSBtYXkgbmVlZCB0byBpbml0aWFsaXplXG4gIDYzOlx0XHQgIHRoZSBtb2RlbSB1c2luZyBhIHVzZXIgc3BhY2UgdXRpbGl0eSAoYSBmaXJtd2FyZSBsb2FkZXIgZm9yIGV4YW1wbGUpLlxuICA2NDpcdFxuICA2NTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgNjY6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHh1c2JhdG0uXG4gIDY3Olx0XG4gIDY4Olx0ZW5kaWYgIyBVU0JfQVRNXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Njc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFUTSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBlbmFibGluZyBBVE0gZnVuY3Rpb25hbGl0eSBpbiB0aGlzIHN5c3RlbSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGtleSBpcyB3aXRoaW4gdGhlIGBpZiBVU0JfQVRNYCBibG9jay4gVGhpcyB0ZWxscyBtZSB0aGUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGVuYWJsZSBhcmUgYEFUTWAsIGBVU0JfQVRNYCwgYW5kIGBVU0JfWFVTQkFUTWAuIFN0cmFpZ2h0Zm9yd2FyZCwgcmlnaHQ/IEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgaGF2ZSBhIG5hZ2dpbmcgZmVlbGluZy4gYFVTQl9BVE1gIGRlZmluaXRlbHkgZGVwZW5kcyBvbiBgQVRNYCwgdGhhdCBtdWNoIEkgcmVtZW1iZXIsIGJ1dCB3aGF0IGFib3V0IGBVU0JgIGl0c2VsZj8gSXMgYFVTQl9BVE1gIGNvbnRpbmdlbnQgb24gdGhlIGdlbmVyYWwgVVNCIHN1YnN5c3RlbSBiZWluZyBlbmFibGVkIHRvbz8gSSBkb24mIzM5O3Qgd2FudCB0byBhc3N1bWUgYW55dGhpbmcgYW5kIGVuZCB1cCB3aXRoIGEgYnJva2VuIGNvbmZpZ3VyYXRpb24uIEJldHRlciBzYWZlIHRoYW4gc29ycnkg4oCTIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBgZHJpdmVycy91c2IvYXRtL2AuIExldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwgaGVyZSBiZWZvcmUgSSBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIFVTQi9BVE0gRFNMIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBVU0JfQVRNXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgRFNMIG1vZGVtIHN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gQVRNXG4gICA5Olx0XHRzZWxlY3QgQ1JDMzJcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgVVNCIERpZ2l0YWwgU3Vic2NyaWJlciBMaW5lIChEU0wpXG4gIDEyOlx0XHQgIG1vZGVtIHRvIHlvdXIgY29tcHV0ZXImIzM5O3MgVVNCIHBvcnQuICBZb3Ugd2lsbCB0aGVuIG5lZWQgdG8gY2hvb3NlIHlvdXJcbiAgMTM6XHRcdCAgbW9kZW0gZnJvbSB0aGUgbGlzdCBiZWxvdy5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDE2Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JhdG0uXG4gIDE3Olx0XG4gIDE4Olx0aWYgVVNCX0FUTVxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBVU0JfU1BFRURUT1VDSFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjIwMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgVVNCIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYW5kIGl0ICpzZWVtcyogbGlrZSB0aGVyZSBpc24mIzM5O3QgYSBkaXJlY3QgZXhwbGljaXQgZGVwZW5kZW5jeSBvbiBgVVNCYCBkZWZpbmVkIGhlcmUuIEhvd2V2ZXIsIGJhc2VkIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyBjb2RlLCBpdCYjMzk7cyBoaWdobHkgbGlrZWx5IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgdWx0aW1hdGVseSBzb3VyY2VkIGZyb20gc29tZXRoaW5nIHdpdGhpbiB0aGUgYGRyaXZlcnMvdXNiL0tjb25maWdgIGZpbGUuIEFuZCwgaWYgSSYjMzk7bSBiZXR0aW5nIGNvcnJlY3RseSwgdGhhdCBmaWxlIGlzIGdvaW5nIHRvIGhhdmUgc29tZSBndWFyZHMgbGlrZSBgaWYgVVNCX1NVUFBPUlRgIG9yIHBlcmhhcHMganVzdCBgaWYgVVNCYCBzdXJyb3VuZGluZyB0aGUgcmVsZXZhbnQgc2VjdGlvbnMuIFRvIGJlIGNlcnRhaW4sIEkgbmVlZCB0byBvcGVuIGFuZCBpbnZlc3RpZ2F0ZSBgZHJpdmVycy91c2IvS2NvbmZpZ2AgZGlyZWN0bHkuIExldCYjMzk7cyBnZXQgdGhhdCBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWdcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL0tjb25maWc9MTQ4PXNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9taXNjL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvdXNiL0tjb25maWctMTQ5LVxuZHJpdmVycy91c2IvS2NvbmZpZzoxNTA6c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3VzYi9LY29uZmlnLTE1MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVVNCLCBBVE0sIGFuZCB0aGUgUFZDIENvbm5lY3Rpb246IEEgRnV6emluZyBEZWVwIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCB0aGlzIFVTQiBzdHVmZiBzb3J0ZWQgZm9yIHN5emthbGxlci4gU2VlbXMgbGlrZSBVU0IgaXMgYSBjb3JlIHJlcXVpcmVtZW50IGZvciBmdXp6aW5nIFVTQiBnYWRnZXRzLCBuYXR1cmFsbHkuIEkgcmVtZW1iZXIgc2VlaW5nIGBBVE1gLCBgVVNCX0FUTWAsIGFuZCBgVVNCX1hVU0JBVE1gIGluIHRoZSBjb25maWdzLCBidXQgbGV0JiMzOTtzIHNlZS4uLnJpZ2h0LCBgQVRNYCBpcyB0aGUgYmlnIG9uZSBoZXJlLiBOb3csIGNhbiBJIHJlYWNoIGB2Y2NfY29ubmVjdGA/IExldCYjMzk7cyBzZWUuLi4gWWVwLCBsb29rcyBsaWtlIEkgY2FuIGdldCB0aGVyZSB2aWEgYHNvY2tldChBRl9BVE1QVkMsIFNPQ0tfREdSQU0sIDApYCBhbmQgYSBgYmluZCgpYC4gCgpBbHJpZ2h0LCBzbyB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGB2Y2NfY29ubmVjdGAsIGBwdmNfYmluZGAsIGFuZCBgcHZjX2Nvbm5lY3RgLiBIYW5nIG9uLCBhcmVuJiMzOTt0IGBwdmNfYmluZGAgYW5kIGBwdmNfY29ubmVjdGAgc3RhdGljIGZ1bmN0aW9ucz8gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQuIEFyZSB0aGV5IGlubGluZWQgYnkgYW55IGNoYW5jZT8gVGltZSB0byBqdW1wIGludG8gYG5ldC9hdG0vcHZjLmNgIGFuZCB0YWtlIGEgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHZjX2JpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL3B2Yy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vcHZjLmM9MjI9c3RhdGljIGludCBwdmNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcbi0tXG5uZXQvYXRtL3B2Yy5jLTI2LVxubmV0L2F0bS9wdmMuYzoyNzpzdGF0aWMgaW50IHB2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcbm5ldC9hdG0vcHZjLmMtMjgtXHRcdCAgICBpbnQgc29ja2FkZHJfbGVuKVxuLS1cbm5ldC9hdG0vcHZjLmM9NTk9c3RhdGljIGludCBwdmNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqc29ja2FkZHIsXG4tLVxubmV0L2F0bS9wdmMuYy02MS17XG5uZXQvYXRtL3B2Yy5jOjYyOlx0cmV0dXJuIHB2Y19iaW5kKHNvY2ssIHNvY2thZGRyLCBzb2NrYWRkcl9sZW4pO1xubmV0L2F0bS9wdmMuYy02My19XG4tLVxubmV0L2F0bS9wdmMuYz0xMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHZjX3Byb3RvX29wcyA9IHtcbi0tXG5uZXQvYXRtL3B2Yy5jLTExMC1cdC5yZWxlYXNlID1cdHZjY19yZWxlYXNlLFxubmV0L2F0bS9wdmMuYzoxMTE6XHQuYmluZCA9XHRcdHB2Y19iaW5kLFxubmV0L2F0bS9wdmMuYy0xMTItXHQuY29ubmVjdCA9XHRwdmNfY29ubmVjdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyMzAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEFUTSBQVkMgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBpbXBvcnRhbnQgcGFydCBoZXJlIGlzIGhvdyB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBBVE0gUFZDIGNvZGUgcGF0aC4gSSBzZWUgdGhlc2UgbmV3IGZ1bmN0aW9ucyBhcmUgYXNzaWduZWQgdG8gYHB2Y19wcm90b19vcHNgIGFuZCB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIHRha2VuLCBtZWFuaW5nIHRoZXkgd29uJiMzOTt0IGJlIGlubGluZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrZWVwIGluIG1pbmQgZm9yIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLgoKVGhlIGtleSBmb2N1cyBoZXJlIGlzIGxpa2VseSB0aGUgYHZjY19jb25uZWN0YCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgYW4gZXhwb3J0ZWQgZ2xvYmFsIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgYW5hbHlzaXMuIFdlJiMzOTtyZSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBmb2N1cyBzeW1ib2wgZm9yIHRlc3RpbmcgdGhlIGNoYW5nZXMgdG8gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgLiBJIGNoZWNrZWQsIGFuZCBgZmluZF9jaWAgaXMgc3RhdGljLCBhbmQgc28gaXMgYF9fdmNjX2Nvbm5lY3RgLCBzbyBgdmNjX2Nvbm5lY3RgIGlzIGluZGVlZCB0aGUgYmVzdCBwbGFjZSB0byBjb25jZW50cmF0ZSBvdXIgZWZmb3J0cy4KCkhlcmUmIzM5O3MgdGhlIGdpc3Q6IHRoZSBwYXRjaCBhbHRlcnMgYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgLiBJdCYjMzk7cyBmaXhpbmcgYSBidWcgd2hlcmUgc3BlY2lmaWMgdmFsdWVzIGZvciBgdnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgKHNwZWNpZmljYWxseSwgYEFUTV9DSV9NQVhgKSBjYW4gbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3IuCgpOb3csIHdlIGtub3cgdGhhdCB1c2VyLXNwYWNlIGNvZGUgY2FuIGhpdCB0aGlzIGFyZWEgdmlhIGBiaW5kYCBvciBgY29ubmVjdGAgb24gYW4gQVRNIFBWQyBzb2NrZXQuIFRvIHRyaWdnZXIgdGhpcywgd2UmIzM5O2xsIG5lZWQgYW4gQVRNIGRldmljZSwgb2YgY291cnNlLiBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgU3l6a2FsbGVyIGNhbiBlbXVsYXRlIFVTQiBBVE0gZGV2aWNlcyB1c2luZyB0aGUgVVNCIGdhZGdldCBhbmQgYHVzYmF0bWAgZHJpdmVyLiBUaGF0JiMzOTtzIHBlcmZlY3QgZm9yIGNyZWF0aW5nIGEgY29udHJvbGxlZCBlbnZpcm9ubWVudC4gVGhlIGNvbmZpZ3VyYXRpb24gbmVlZHMgdG8gZW5hYmxlIGBBVE1gLCBgVVNCX0FUTWAsIGFuZCBgVVNCX1hVU0JBVE1gLgoKRm9yIHRoZSBmdXp6aW5nL3Rlc3RpbmcgZm9jdXMsIGB2Y2NfY29ubmVjdGAsIGBwdmNfYmluZGAsIGFuZCBgcHZjX2Nvbm5lY3RgIGFyZSB0aGUgcHJpbWFyeSBzeW1ib2xzIEkmIzM5O2xsIGNvbmNlbnRyYXRlIG9uLgoKV2FpdCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIFdoYXQgYWJvdXQgYEFUTV9CUjI2ODRgPyBEb2VzIGl0IGludGVyYWN0IHdpdGggYHZjY19jb25uZWN0YD8gSSYjMzk7ZCBiZXR0ZXIgaW52ZXN0aWdhdGUgYG5ldC9hdG0vYnIyNjg0LmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgY2FsbCBjaGFpbiB0aGVyZS4gVGhpcyBjb3VsZCBiZSBhIGdvb2QgYXJlYSB0byBleHBhbmQgb24gdGhlIHRlc3QgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmNjX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL2JyMjY4NC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDc0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkEgUXVpY2sgVGVjaG5pY2FsIEZsaWNrZXIqKgoKSG1tLCBqdXN0Li4uIG5vLiBTb21ldGhpbmcmIzM5O3Mgbm90IHF1aXRlIGNsaWNraW5nLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYXNoZXMgdG8gdGhlIEFUTSBsYXllciwgc3BlY2lmaWNhbGx5IHRoZSBQUFBvQS9QUFBvRSBpbXBsZW1lbnRhdGlvbi4gSXMgdGhlcmUgc29tZXRoaW5nIGluIGBuZXQvYXRtL3BwcG9hdG0uY2AgdGhhdCBjb3VsZCBiZSByZWxhdGVkPyBJdCYjMzk7cyBhIHF1aWNrIHRob3VnaHQsIGEgZmxlZXRpbmcgcG9zc2liaWxpdHksIHNvbWV0aGluZyB0byBjaGVjayBvdXQgaWYgdGhlIGluaXRpYWwgYXZlbnVlcyBkb24mIzM5O3QgYmVhciBmcnVpdC4gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFuZCBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiB3aXRoaW4gdGhhdCBmaWxlLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgYW5hbHl6ZSB0aGUgbWFpbiBpc3N1ZSBmaXJzdC4gTGV0IG1lIGZvbGxvdyBhIHN0cnVjdHVyZWQgYXBwcm9hY2ggdG8gcHJldmVudCB3YXN0ZWQgZWZmb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y2NfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vcHBwb2F0bS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MjgxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIGhpZ2hseSBrbm93bGVkZ2VhYmxlIHByb2Zlc3Npb25hbDoKCioqRGlnZ2luZyBpbnRvIHRoZSBDYWxsIEhpZXJhcmNoeSoqCgpSaWdodCwgc28gd2UmIzM5O3ZlIGVzdGFibGlzaGVkIHRoYXQgdGhlcmUmIzM5O3Mgbm8gb3RoZXIgZGlyZWN0IGNhbGwgdG8gYHZjY19jb25uZWN0YC4gVGhpcyBpcyBnb29kLCB3ZSYjMzk7cmUgbmFycm93aW5nIGl0IGRvd24uCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIG9mIHRoaXMuIFRoZSBnb2FsIGlzIHRvIGNvbmNsdXNpdmVseSB2ZXJpZnkgdGhhdCB0aGUgYHB2Yy5jYCBtb2R1bGUgaXMgdGhlICpvbmx5KiBwbGFjZSBjYWxsaW5nIGB2Y2NfY29ubmVjdGAuIFdlIG5lZWQgdG8gYmUgYWlydGlnaHQgb24gdGhpcyBwb2ludCBiZWZvcmUgd2UgcHJvY2VlZCB3aXRoIGFueSBhbmFseXNpcyBvciBtb2RpZmljYXRpb25zLiBUaW1lIGZvciBhIGRlZXAgZGl2ZSB0byBlbnN1cmUgdGhlcmUgYXJlICpubyogaGlkZGVuIGNhbGwgcGF0aHMgd2UmIzM5O3ZlIG92ZXJsb29rZWQuIEkgbmVlZCB0byBiZSAxMDAlIGNlcnRhaW4gb2YgdGhpcywgc28gbGV0JiMzOTtzIGNyb3NzLXJlZmVyZW5jZSBhbmQgZG91YmxlLWNoZWNrIGFueSBzZWNvbmRhcnkgcG90ZW50aWFsIGxvY2F0aW9ucyB0byBmaW5kIGEgbW9yZSByb2J1c3QgY29uY2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdmNjX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vY29tbW9uLmM9MzMwPXN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTM3Ny1cbm5ldC9hdG0vY29tbW9uLmM6Mzc4OnN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXG5uZXQvYXRtL2NvbW1vbi5jLTM3OS1cdFx0XHQgaW50IHZjaSlcbi0tXG5uZXQvYXRtL2NvbW1vbi5jPTQ1OD1pbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtNTA1LVx0XHRyZXR1cm4gLUVOT0RFVjtcbm5ldC9hdG0vY29tbW9uLmM6NTA2Olx0ZXJyb3IgPSBfX3ZjY19jb25uZWN0KHZjYywgZGV2LCB2cGksIHZjaSk7XG5uZXQvYXRtL2NvbW1vbi5jLTUwNy1cdGlmIChlcnJvcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NzIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBSZWFzb25pbmcqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBBVE0gZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBmdXp6aW5nIHRhcmdldHMuIFRoZSBrZXkgaGVyZSBpcyBkZWZpbml0ZWx5IGB2Y2NfY29ubmVjdGAuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuCgpCdXQsIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gQXJlIHRoZXJlICphbnkqIG90aGVyIGNvbmZpZ3VyYXRpb25zIEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmc/IExldCYjMzk7cyBzZWUuLi4gYE5FVGAgaXMgYSBnaXZlbiwgYSBuby1icmFpbmVyLiBUaGUgY29yZSBBVE0gY29uZmlndXJhdGlvbiwgYEFUTWAsIGlzIGNydWNpYWwuIEFuZCB0aGVuIHdlIGhhdmUgdGhvc2UgYFVTQl9BVE1gIGFuZCBgVVNCX1hVU0JBVE1gIG9wdGlvbnMuIFRob3NlIHNlZW0gcmVsYXRlZCB0byB0aGUgZHVtbXkgZGV2aWNlIHNldHVwLgoKV2FpdCBhIHNlY29uZC4uLiBgVVNCX1hVU0JBVE1gLiBUaGF0JiMzOTtzIGEgKm1vZHVsZSosIHJpZ2h0PyBJZiBpdCYjMzk7cyBidWlsdC1pbiwgd2hpY2ggSSBuZWVkIHRvIGNoZWNrLCB0aGUgZHJpdmVyIHdvdWxkIHJlZ2lzdGVyIGl0c2VsZiBhdXRvbWF0aWNhbGx5LiBJZiBzeXprYWxsZXIgaXMgZnV6emluZyBVU0IsIGl0IHNob3VsZCBwcm9iZSBgeHVzYmF0bWAgYW5kLCBiaW5nbywgY3JlYXRlIGFuIEFUTSBkZXZpY2UgZm9yIG1lLiBUaGF0JiMzOTtzIGdvb2QgbmV3cyBhbmQgcG90ZW50aWFsbHkgc2ltcGxpZmllcyB0aGluZ3MuCgpOb3csIGEgYnJvYWRlciBxdWVzdGlvbjogaXMgYHh1c2JhdG1gIHRoZSAqYmVzdCogQVRNIGRyaXZlciB0byB1c2UsIG9yIGlzIHRoZXJlIGEgc2ltcGxlciBvbmU/IFBlcmhhcHMgc29tZXRoaW5nIGluIGBuZXQvYXRtL2AgbWlnaHQgb2ZmZXIgYSBsb3dlci1sZXZlbCBlbnRyeSBwb2ludCB0aGF0IHdvdWxkIGJlIGVhc2llciB0byBpbnRlcmFjdCB3aXRoPyBMZXQmIzM5O3MgZGlnIGludG8gYG5ldC9hdG0vYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgdXNlcyBgYXRtX2Rldl9yZWdpc3RlcmAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBhdmFpbGFibGUgZHJpdmVycyBhbmQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0bV9kZXZfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYXRtL3Jlc291cmNlcy5jPTY5PUVYUE9SVF9TWU1CT0woYXRtX2Rldl9sb29rdXApO1xubmV0L2F0bS9yZXNvdXJjZXMuYy03MC1cbm5ldC9hdG0vcmVzb3VyY2VzLmM6NzE6c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxubmV0L2F0bS9yZXNvdXJjZXMuYy03Mi1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYXRtZGV2X29wcyAqb3BzLCBpbnQgbnVtYmVyLFxuLS1cbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMxLX1cbm5ldC9hdG0vcmVzb3VyY2VzLmM6MTMyOkVYUE9SVF9TWU1CT0woYXRtX2Rldl9yZWdpc3Rlcik7XG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDE0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJvdWJsZXNob290aW5nIEFUTSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBubyBsb29wYmFjayBkZXZpY2UuIFRoYXQgZWxpbWluYXRlcyBhIGNvbW1vbiwgYW5kIG9mdGVuIGVhc2llc3QsIHRlc3RpbmcgcGF0aC4gQ29uc2lkZXJpbmcgdGhlIGxpbWl0YXRpb25zLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGZvY3VzIG9uIGBVU0JfQVRNYC4gSXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgcHJvdmlkaW5nIGEgdXNhYmxlIGludGVyZmFjZSwgZ2l2ZW4gdGhlIGNvbnRleHQuCgpIb3dldmVyLCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwbHkgaW50byB0aGUgYFVTQl9BVE1gIGltcGxlbWVudGF0aW9uLCBJIHNob3VsZCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSBuZWVkIHRvIHJ1bGUgb3V0IGEgcG90ZW50aWFsIG92ZXJzaWdodCBvbiBteSBwYXJ0LCBvciBhIHN1YnRsZSBkaWZmZXJlbmNlIGluIHRoZSB0YXJnZXQgc3lzdGVtLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBBVE1fRFVNTVlgIGp1c3QgdG8gYmUgY2VydGFpbi4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0IGVpdGhlciBkb2VzbiYjMzk7dCBleGlzdCBhdCBhbGwsIG9yIHBlcmhhcHMgaXMgcHJlc2VudCBidXQgaW4gc29tZSBvdGhlciBzZWN0aW9uIG9mIHRoZSBrZXJuZWwgdHJlZSB0aGF0IEkgaGF2ZW4mIzM5O3QgeWV0IGNvbnNpZGVyZWQuIFRoaXMgcXVpY2sgc2VhcmNoIHdpbGwgcHJldmVudCBtZSBmcm9tIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMsIG9yIGRvaW5nIGEgYnVuY2ggb2Ygd29yaywgdGhhdCB1bHRpbWF0ZWx5IHdpbmRzIHVwIGJlaW5nIHJlZHVuZGFudC4gSXQmIzM5O3MgYWJvdXQgYmVpbmcgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTA4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FUTV9EVU1NWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTA5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcwMgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOZWdhdGlvbiBhbmQgYSBQaXZvdGFsIFF1ZXJ5KioKCk15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyBhIGZsYXQgJiMzNDtOby4mIzM0OyBJJiMzOTttIG1lbnRhbGx5IHB1c2hpbmcgYmFjayBhZ2FpbnN0IHNvbWV0aGluZywgd2hhdGV2ZXIgdGhlIGltcGxpZWQgcHJvcG9zaXRpb24gb3IgbGluZSBvZiByZWFzb25pbmcgd2FzLiBJdCYjMzk7cyBhIGd1dCByZXNwb25zZSwgbGlrZWx5IHJvb3RlZCBpbiBleHBlcmllbmNlLiBJJiMzOTttIHNlZWluZyBhIHBvdGVudGlhbCBmbGF3IG9yIHByb2JsZW0sIHBvc3NpYmx5IGEga25vd24gcGl0ZmFsbCB0aGF0IHRoZSBjdXJyZW50IHRyYWluIG9mIHRob3VnaHQgaXMgbWlzc2luZy4KClRoZW4sIGFsbW9zdCBpbW1lZGlhdGVseSwgYSBjcnVjaWFsIGNvdW50ZXItY29uc2lkZXJhdGlvbiBzdXJmYWNlczogJiMzNDtXaGF0IGFib3V0IGBEVU1NWV9BVE1gPyYjMzQ7IFRoaXMgaXNuJiMzOTt0IGp1c3QgYSByYW5kb20gdGhvdWdodDsgaXQmIzM5O3MgYSBzcGVjaWZpYywgdGVjaG5pY2FsIHF1ZXN0aW9uLiBUaGUgZm9jdXMgb24gYERVTU1ZX0FUTWAgaXMgYSB2ZXJ5IHNwZWNpZmljIGNvbmNlcHQgcmVsYXRlZCB0byBhIHBvdGVudGlhbCBwcm9jZXNzLiBJJiMzOTttIHByb2JpbmcgZm9yIGFuIGVkZ2UgY2FzZSwgYSBwb3RlbnRpYWwgYWx0ZXJuYXRpdmUgc29sdXRpb24sIG9yIGEgY3JpdGljYWwgcG9pbnQgdGhhdCBoYXNuJiMzOTt0IGJlZW4gYWRlcXVhdGVseSBhZGRyZXNzZWQuIEkgc2VlIHRoZSBuZWVkIHRvIGV4YW1pbmUgdGhlIGltcGxpY2F0aW9ucyB0aGF0IHRoaXMgY29uY2VwdCBjb3VsZCBwcm92aWRlLiBJdCBoaW50cyBhdCBhIHZlcnkgc3BlY2lmaWMgZGlyZWN0aW9uIHRvIHB1cnN1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RFVNTVlfQVRNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5OTcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW1tZWRpYXRlIFRob3VnaHRzIG9uIEFUTSBVU0IgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgbm8sIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzLiBSaWdodCwgc28gYEFUTWAsIGBVU0JfQVRNYCwgYW5kIGBVU0JfWFVTQkFUTWAgYXJlIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBIYW5nIG9uIGEgc2Vjb25kLCB0aG91Z2gsIGJlY2F1c2UgYFVTQl9YVVNCQVRNYCBpcyAqZGVwZW5kZW50KiBvbiBgVVNCX0FUTWAuIEhtbSwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgZHJpdmVycy91c2IvYXRtL0tjb25maWdgIGZpbGUgYWdhaW4gdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoYXQgZGVwZW5kZW5jeS4gR290dGEgYmUgcHJlY2lzZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9YVVNCQVRNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWc9NDQ9Y29uZmlnIFVTQl9VRUFHTEVBVE1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy01NS1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjU2OmNvbmZpZyBVU0JfWFVTQkFUTVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNTctXHR0cmlzdGF0ZSBcJiMzNDtPdGhlciBVU0IgRFNMIG1vZGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjYzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQVRNIFVTQiBDb25maWd1cmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBmb2N1cyBvbiBoZXJlIGlzIGBVU0JfWFVTQkFUTWAuIExldCYjMzk7cyByZS1leGFtaW5lIHRoaXMgcGF0Y2guCgpgYGBjCiAJaW50IGVycjsKJiM0MzsJaW50IHZwaV9iaXRzID0gdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZwaV9iaXRzID09IEFUTV9DSV9NQVggPyA4IDoKJiM0MzsJCSAgICAgICB2Y2MtJmd0O2Rldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHM7CiYjNDM7CWludCB2Y2lfYml0cyA9IHZjYy0mZ3Q7ZGV2LSZndDtjaV9yYW5nZS52Y2lfYml0cyA9PSBBVE1fQ0lfTUFYID8gMTYgOgomIzQzOwkJICAgICAgIHZjYy0mZ3Q7ZGV2LSZndDtjaV9yYW5nZS52Y2lfYml0czsKYGBgCgpSaWdodCwgdGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgc2VlbXMgdG8gYmUgdGhlcmUgdG8gcHJldmVudCBhbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIG91dC1vZi1ib3VuZHMgc2hpZnRzIG9yIGluZmluaXRlIGxvb3BzIGlmIGB2cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBoYXBwZW4gdG8gZXF1YWwgYEFUTV9DSV9NQVhgLCB3aGljaCBhcHBlYXJzIHRvIGJlIC0xLCBidXQgbGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgZnV6emluZzsgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHBvdGVudGlhbGx5IGV4cG9zZSBzb21lIHN1YnRsZSBpc3N1ZXMuCgpUaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSwgYXMgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBvciBpbnRlcmVzdGluZyBsb2NhdGlvbnMgZm9yIGZ1enppbmcsIGFyZSBgdmNjX2Nvbm5lY3RgLCBgcHZjX2JpbmRgLCBhbmQgYHB2Y19jb25uZWN0YC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgdGhpcyBraW5kIG9mIGNvbm5lY3Rpb24tb3JpZW50ZWQgc3R1ZmYuCgpOb3csIHJlZ2FyZGluZyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBJIGtub3cgSSBuZWVkIGBBVE1gLCBgVVNCX0FUTWAsIGFuZCB0aGUgdGFyZ2V0IGBVU0JfWFVTQkFUTWAuIExldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIG9yIG5vdCBgVVNCX1hVU0JBVE1gIHJlcXVpcmVzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBVU0JfWFVTQkFUTWAgaXMgbmVzdGVkIGluc2lkZSBhbiBgaWYgVVNCX0FUTWAgY29uZGl0aW9uLCBhbmQgYFVTQl9BVE1gIGl0c2VsZiBkZXBlbmRzIG9uIGBBVE1gLiBUaGF0JiMzOTtzIGdvb2Q7IGl0JiMzOTtzIGNsZWFuIGFuZCBtYWtlcyBzZW5zZS4gU28sIHllcywgYEFUTWAsIGBVU0JfQVRNYCwgYW5kIGBVU0JfWFVTQkFUTWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZW5hYmxlIGl0LgoKSG9sZCBvbiwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCBgQVRNX0NJX01BWGAuIFdlIGtub3cgaXQgX3Byb2JhYmx5XyBtZWFucyAtMSwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBjb25maXJtLiBJIHNob3VsZCBjaGVjayB0aGUgYGluY2x1ZGUvbGludXgvYXRtLmhgIGZpbGUgZm9yIGl0cyBkZWZpbml0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgZXhhY3RseSB3aGF0IHZhbHVlIGl0IHJlcHJlc2VudHMgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBVE1fQ0lfTUFYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9hdG0uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTE0OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gQVRNIEhlYWRlciBGaWxlcyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzb21ldGhpbmcgbWlnaHQgYmUgYW1pc3Mgd2l0aCB0aGUgQVRNIGxheWVyLCBzbyBsZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGluY2x1ZGUvdWFwaS9saW51eC9hdG0uaGAuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgdGhlIGRlZmluaXRpb25zIHRoYXQgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gSSB3YW50IHRvIGNoZWNrIHRoZSBkZWZpbml0aW9ucywgYW5kIGRhdGEgc2l6ZXMsIGFuZCBlbnN1cmUgdGhlcmUmIzM5O3Mgbm90aGluZyBpbW1lZGlhdGVseSBzdXNwZWN0IGluIGhvdyB0aGV5JiMzOTtyZSBkZWNsYXJlZCwgb3IgYW55IHBvdGVudGlhbCBvZmYtYnktb25lIGVycm9ycyBJIG1pZ2h0IGhhdmUgb3Zlcmxvb2tlZCBpbiB0aGUgcGFzdC4gSXQgd2lsbCBhbHNvIGFjdCBhcyBhIGdvb2QgcmVmcmVzaGVyIG9uIHRoZSBrZXJuZWwtc3BhY2UgQUJJLCBhcyBpdCYjMzk7cyBiZWVuIGEgd2hpbGUgc2luY2UgSSBsYXN0IGRlYWx0IHdpdGggdGhpcyBzcGVjaWZpYyBhcmVhLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGluZ3MgbGlrZSBhbGlnbm1lbnQsIGVuZGlhbm5lc3MgY29uc2lkZXJhdGlvbnMgKHRob3VnaCB1c3VhbGx5IHRoZSBVQVBJIGhhbmRsZXMgdGhhdCBwcmV0dHkgd2VsbCksIGFuZCBhbnkgcmVjZW50IGNoYW5nZXMgdGhhdCBjb3VsZCBoYXZlIGludHJvZHVjZWQgYSByZWdyZXNzaW9uLiBUaGlzIGhlYWRlciBpcyB0aGUgbHluY2hwaW4gZm9yIGFueSB1c2VyLXNwYWNlIEFUTSBpbnRlcmFjdGlvbnMsIHNvIGl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHBva2luZyBhcm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FUTV9DSV9NQVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYXRtLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE0NTUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqV2hlcmUgRGlkIEkgRGVmaW5lIFRoYXQgRGFybmVkIExpbWl0PyoqCgpPa2F5LCBzbyBJJiMzOTttIGhpdHRpbmcgYSBzbmFnLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJiMzOTt2ZSBydW4gaW50byBgQVRNX0NJX01BWGAuIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyBpbnRvIHNlYXJjaCBtb2RlLiBXaGVyZSBpbiB0aGUgd29ybGQgKmRpZCogSSBkZWZpbmUgdGhpcyBjb25zdGFudD8gSXMgaXQgaW4gYSBoZWFkZXIgZmlsZT8gTWF5YmUgaXQmIzM5O3MgZGVmaW5lZCBpbmxpbmUgc29tZXdoZXJlLCB3aGljaCB3b3VsZCBiZSBpbmNyZWRpYmx5IGFubm95aW5nLCBidXQgSSBuZWVkIHRvIHJ1bGUgdGhhdCBvdXQuIExldCBtZSByZXRyYWNlIG15IHN0ZXBzLCBjaGVja2luZyB0aGUgb2J2aW91cyBsb2NhdGlvbnMgZmlyc3Q6IHRoZSBwcm9qZWN0JiMzOTtzIGhlYWRlciBmaWxlcywgYW55IGNvbmZpZ3VyYXRpb24gZmlsZXMgSSB3YXMgd29ya2luZyBvbiwgYW5kIGRlZmluaXRlbHkgYW55IHJlbGV2YW50IHV0aWxpdHkgb3IgbGlicmFyeSBmaWxlcy4gUGVyaGFwcyBJIGRlZmluZWQgaXQgaW4gYW5vdGhlciBmdW5jdGlvbj8gT3IgaXMgdGhpcyBjb25zdGFudCBldmVuIG15IGRvaW5nPyBEaWQgYW5vdGhlciBkZXZlbG9wZXIgc2V0IHRoaXMgY29uc3RhbnQgaW4gYW5vdGhlciBmaWxlIHRoYXQgSSYjMzk7bSBzdXBwb3NlZCB0byBrbm93IGFib3V0PyBJdCBjb3VsZCBiZSBpbiBhIHNoYXJlZCBpbmNsdWRlIGZpbGUgb3IgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRoYXQgSSYjMzk7dmUgY29tcGxldGVseSBvdmVybG9va2VkLiBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGhvdXQga25vd2luZyB0aGUgY29udGV4dCBvZiB0aGlzIHZhbHVlLCBob3cgaXQmIzM5O3MgZGVmaW5lZCwgYW5kIHdoYXQgaXQgcmVwcmVzZW50cy4gVGhpcyBjb3VsZCBiZSBhIHNpbXBsZSBvdmVyc2lnaHQsIGJ1dCBpdCBjb3VsZCBiZSBhIGNsdWUgdG8gc29tZXRoaW5nIGJpZ2dlci4gR290dGEgdHJhY2sgaXQgZG93bi4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVRNX0NJX01BWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaD0xMzg9c3RydWN0IGF0bV9pb2J1ZiB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oLTE0NC1cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaDoxNDU6I2RlZmluZSBBVE1fQ0lfTUFYICAgICAgLTEgICAgICAgICAgICAgIC8qIHVzZSBtYXhpbXVtIHJhbmdlIG9mIFZQSS9WQ0kgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaC0xNDYtIFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oPTE0Nz1zdHJ1Y3QgYXRtX2NpcmFuZ2Uge1xuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oOjE0ODpcdHNpZ25lZCBjaGFyXHR2cGlfYml0cztcdC8qIDEuLjgsIEFUTV9DSV9NQVggKC0xKSBmb3IgbWF4aW11bSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oOjE0OTpcdHNpZ25lZCBjaGFyXHR2Y2lfYml0cztcdC8qIDEuLjE2LCBBVE1fQ0lfTUFYICgtMSkgZm9yIG1heGltdW0gKi9cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaC0xNTAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTc2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQVRNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY2FsY3VsYXRpb24gaXMgY29uZmlybWluZyB0aGUgYmFzZWxpbmUsIHRoZSByZXN1bHQgaXMgaW5kZWVkIC0xLiBXZSYjMzk7dmUgZXN0YWJsaXNoZWQgdGhhdCBgcHZjX2JpbmRgIGFuZCBgcHZjX2Nvbm5lY3RgIGFyZSB0aGUgcHJpbWFyeSBwYXRocyB0byBgdmNjX2Nvbm5lY3Rg4oCUd2UgdmVyaWZpZWQgdGhhdCBlYXJsaWVyLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgYnJvYWRlciBpbXBsaWNhdGlvbnMuIEFyZSB0aGVyZSBhbnkgb3RoZXIgQVRNLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCB3YXJyYW50IGF0dGVudGlvbj8gSG1tLCBwZXJoYXBzIGBBVE1fQlIyNjg0YD8gSXQmIzM5O3Mgbm90ICplc3NlbnRpYWwqIGZvciB0aGlzIHNwZWNpZmljIHBhdGNoIHRvIGZ1bmN0aW9uLCBidXQgZW5hYmxpbmcgaXQgY2VydGFpbmx5IHdvdWxkbiYjMzk7dCBpbnRyb2R1Y2UgY29uZmxpY3RzLCBzbyBpdCYjMzk7cyB3b3J0aCBub3RpbmcuIFRoZSBwYXRjaCBpdHNlbGYgbGl2ZXMgaW4gYG5ldC9hdG0vY29tbW9uLmNgLCBhbmQsIGFzIGV4cGVjdGVkLCB0aGF0IGZpbGUgaXMgY29tcGlsZWQgb25seSBpZiBgQ09ORklHX0FUTWAgaXMgYWN0aXZlLiBUaW1lIHRvIGNoZWNrIHRoZSBgbmV0L2F0bS9NYWtlZmlsZWAgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlIGJ1aWxkIHJ1bGVzIGFyZSBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29tbW9uLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vTWFrZWZpbGUtNS1cbm5ldC9hdG0vTWFrZWZpbGU6NjphdG0teVx0XHQ6PSBwdmMubyBpb2N0bC5vIGNvbW1vbi5vIGF0bV9taXNjLm8gcmF3Lm8gcmVzb3VyY2VzLm8gYXRtX3N5c2ZzLm9cbm5ldC9hdG0vTWFrZWZpbGUtNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMzgzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBhdG0teWAgTW9kdWxlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGVzdGFibGlzaGVkIHRoYXQgYGNvbW1vbi5vYCBpcyBpbmRlZWQgYSBjb21wb25lbnQgb2YgYGF0bS15YCwgYW5kIHRoYXQgdGhpcyBlbnRpcmUgbW9kdWxlLCBgYXRtLXlgLCBpcyBidWlsdCBvbmx5IHdoZW4gYENPTkZJR19BVE1gIGlzIGFjdGl2ZS4gVGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBicm9hZGVyIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoZXJlIGB2Y2NfY29ubmVjdGAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGlzIEFUTSBzdWJzeXN0ZW0uCgpJJiMzOTt2ZSBhbHJlYWR5IHJ1biBhIGBncmVwYCBmb3IgYHZjY19jb25uZWN0YCB3aXRoaW4gYG5ldC9hdG0vYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZXhjbHVzaXZlbHkgdXNlZCBpbiBgcHZjLmNgLiBIb3dldmVyLCBteSBndXQgaXMgdGVsbGluZyBtZSB0aGVyZSBtaWdodCBiZSBvdGhlciBsb2NhdGlvbnMuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgbmV4dCBsb2dpY2FsIHBsYWNlIHRvIGNoZWNrIGlzIGBuZXQvYXRtL3N2Yy5jYC4gV2FpdC4uLiB0aGVyZSBpc24mIzM5O3QgYSBgc3ZjLmNgIGZpbGUgaW4gdGhhdCBkaXJlY3Rvcnk/IFRoYXQmIzM5O3MgcGVjdWxpYXIuCgpBbHJpZ2h0LCB0aW1lIHRvIHN0ZXAgYmFjayBhbmQgdGhpbmsuIENvdWxkIGl0IGJlIHRoYXQgYHN2Yy5jYCBleGlzdGVkIGluIG9sZGVyIGtlcm5lbCB2ZXJzaW9ucyBhbmQgaGFzIHNpbmNlIGJlZW4gcmVuYW1lZCBvciByZWZhY3RvcmVkPyBPciBtYXliZSBpdHMgZnVuY3Rpb25hbGl0eSBpcyBub3cgaW5jb3Jwb3JhdGVkIGVsc2V3aGVyZT8gTGV0JiMzOTtzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBgbmV0L2F0bS9NYWtlZmlsZWAgdG8gY29uZmlybSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzIGFuZCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGNsdWUgYWJvdXQgdGhlIGN1cnJlbnQgb3JnYW5pemF0aW9uLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGJlZm9yZSBJIGRlY2xhcmUgdGhpcyBpbnZlc3RpZ2F0aW9uIGNvbXBsZXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgQVRNIFByb3RvY29sIEZhbWlsaWVzLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRhdG0teVx0XHQ6PSBwdmMubyBpb2N0bC5vIGNvbW1vbi5vIGF0bV9taXNjLm8gcmF3Lm8gcmVzb3VyY2VzLm8gYXRtX3N5c2ZzLm9cbiAgIDc6XHRcbiAgIDg6XHRvYmotJChDT05GSUdfQVRNKSAmIzQzOz0gYXRtLm9cbiAgIDk6XHRvYmotJChDT05GSUdfQVRNX0JSMjY4NCkgJiM0Mzs9IGJyMjY4NC5vXG4gIDEwOlx0YXRtLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbiAgMTE6XHRcbiAgMTI6XHRvYmotJChDT05GSUdfUFBQT0FUTSkgJiM0Mzs9IHBwcG9hdG0ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwMjgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25uZWN0aW9uIEZ1bmN0aW9ucyoqCgpIbW0sIGxvb2tzIGxpa2UgYHN2Yy5jYCBpc24mIzM5O3Qgd2hlcmUgSSBleHBlY3RlZCBpdCB0byBiZS4gT2theSwgc28gYHB2Yy5jYCBpcyB0aGUgc29sZSBjYW5kaWRhdGUgZm9yIG5vdy4gQnV0IGhvbGQgb24uLi4gd2hhdCBhYm91dCBgcmF3LmNgPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGtub3cgaWYgYHJhdy5jYCBhY3R1YWxseSBtYWtlcyBjYWxscyB0byBgdmNjX2Nvbm5lY3RgLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLCBzaW5jZSBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgY29ubmVjdGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y2NfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vcmF3LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMyMzgKCQkJCQkJCW91dHB1dDogMjMyCgkJCQkJCQl0aG91Z2h0czogMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFUTSBQVkMgQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIGlzIGFib3V0IHRob3NlIEFUTSBQVkMtcmVsYXRlZCBmdW5jdGlvbnM6IGB2Y2NfY29ubmVjdGAsIGBwdmNfYmluZGAsIGFuZCBgcHZjX2Nvbm5lY3RgLiBUaG9zZSBhcmUgdGhlIHN5bWJvbHMgdG8gemVybyBpbiBvbi4gVGhlIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbnMgYXJlIGBBVE1gLCBgVVNCX0FUTWAsIGFuZCBgVVNCX1hVU0JBVE1gIC0gd2hpY2ggaXMgZXhwZWN0ZWQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgcmVhc29uaW5nLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY3JpdGljYWwgZmxhdyBpbiBgbmV0L2F0bS9jb21tb24uY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAuIEl0IHNlZW1zIHRoYXQgYW4gZWRnZSBjYXNlIHdoZXJlIGB2cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBlcXVhbCBgQVRNX0NJX01BWGAgKC0xKSBsZWFkcyB0byBzb21lIG5hc3R5IHVuZGVmaW5lZCBiZWhhdmlvci4gV2UmIzM5O3JlIHRhbGtpbmcgcG90ZW50aWFsIG5lZ2F0aXZlIHNoaWZ0cyBvciBpbmZpbml0ZSBsb29wcyBoZXJlIOKAkyBjbGFzc2ljIHZ1bG5lcmFiaWxpdGllcy4KClRoZSBjYXRjaCBpcywgdGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZS4gU3BlY2lmaWNhbGx5LCB1c2VycyBjYW4gdHJpZ2dlciB0aGUgYGJpbmRgIGFuZCBgY29ubmVjdGAgc3lzdGVtIGNhbGxzIG9uIEFUTSBQVkMgc29ja2V0cyAoYEFGX0FUTVBWQ2ApLiBUaGUgb25seSBwcmUtcmVxdWlzaXRlIGZvciB0aGlzIHRvIG9jY3VyIGlzIGFuIEFUTSBkZXZpY2UgYmVpbmcgcHJlc2VudC4gR2l2ZW4gdGhlIHNjYXJjaXR5IG9mIHBoeXNpY2FsIEFUTSBoYXJkd2FyZSB0aGVzZSBkYXlzLCB0aGUgdHJpY2sgaXMgdG8gdXNlIHN5emthbGxlciBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yay4gV2UgY2FuIGVmZmVjdGl2ZWx5IGVtdWxhdGUgYW4gQVRNIGRldmljZSwgd2hpY2ggaXMgd2hlcmUgdGhlIFVTQiBBVE0gZHJpdmVycyBsaWtlIGB4dXNiYXRtYCBjb21lIGludG8gcGxheS4KCkluIHNob3J0LCBiZWNhdXNlIHRoaXMgZml4IGhhcyBhIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHVzZXIgc3BhY2UgdGhyb3VnaCBgYmluZGAgYW5kIGBjb25uZWN0YCBhbmQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gY3Jhc2gvZXhwb3NlIHRoZSBzeXN0ZW0sIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtVU0JfQVRNJiMzNDssCiAgICAmIzM0O1VTQl9YVVNCQVRNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmNjX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7cHZjX2JpbmQmIzM0OywKICAgICYjMzQ7cHZjX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgIHdoZXJlIGB2cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBiZWluZyBgQVRNX0NJX01BWGAgKC0xKSB3b3VsZCBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3IgKGUuZy4gbmVnYXRpdmUgc2hpZnRzIG9yIGluZmluaXRlIGxvb3BzKS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGBiaW5kYCBhbmQgYGNvbm5lY3RgIHN5c3RlbSBjYWxscyBvbiBBVE0gUFZDIHNvY2tldHMgKGBBRl9BVE1QVkNgKS4gVG8gcmVhY2ggdGhpcyBjb2RlLCBhbiBBVE0gZGV2aWNlIG11c3QgYmUgcHJlc2VudCBpbiB0aGUgc3lzdGVtLiBTaW5jZSBwaHlzaWNhbCBBVE0gaGFyZHdhcmUgaXMgcmFyZSwgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGFuIEFUTSBkZXZpY2UgdXNpbmcgdGhlIFVTQiBnYWRnZXQgZnJhbWV3b3JrIGNvbWJpbmVkIHdpdGggVVNCIEFUTSBkcml2ZXJzIChlLmcuIGB4dXNiYXRtYCkuIFRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRNJiMzNDssCiAgICAmIzM0O1VTQl9BVE0mIzM0OywKICAgICYjMzQ7VVNCX1hVU0JBVE0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2Y2NfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtwdmNfYmluZCYjMzQ7LAogICAgJiMzNDtwdmNfY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgZmluZF9jaWAgYW5kIGBfX3ZjY19jb25uZWN0YCBpbiBgbmV0L2F0bS9jb21tb24uY2Agd2hlcmUgYHZwaV9iaXRzYCBvciBgdmNpX2JpdHNgIGJlaW5nIGBBVE1fQ0lfTUFYYCAoLTEpIHdvdWxkIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciAoZS5nLiBuZWdhdGl2ZSBzaGlmdHMgb3IgaW5maW5pdGUgbG9vcHMpLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYGJpbmRgIGFuZCBgY29ubmVjdGAgc3lzdGVtIGNhbGxzIG9uIEFUTSBQVkMgc29ja2V0cyAoYEFGX0FUTVBWQ2ApLiBUbyByZWFjaCB0aGlzIGNvZGUsIGFuIEFUTSBkZXZpY2UgbXVzdCBiZSBwcmVzZW50IGluIHRoZSBzeXN0ZW0uIFNpbmNlIHBoeXNpY2FsIEFUTSBoYXJkd2FyZSBpcyByYXJlLCBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYW4gQVRNIGRldmljZSB1c2luZyB0aGUgVVNCIGdhZGdldCBmcmFtZXdvcmsgY29tYmluZWQgd2l0aCBVU0IgQVRNIGRyaXZlcnMgKGUuZy4gYHh1c2JhdG1gKS4gVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gdW5kZWZpbmVkIGJlaGF2aW9yIChzaGlmdC1vdXQtb2YtYm91bmRzKSBidWcgaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgLiBXaGVuIGBkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgaXMgc2V0IHRvIGBBVE1fQ0lfTUFYYCAoLTEpLCB0aGUgYml0d2lzZSBzaGlmdCBvcGVyYXRpb25zIChgMSBcdTAwM2NcdTAwM2MgdnBpX2JpdHNgIG9yIGB2cGkgXHUwMDNlXHUwMDNlIHZwaV9iaXRzYCkgcmVzdWx0IGluIGEgc2hpZnQgYnkgYSBuZWdhdGl2ZSBhbW91bnQsIHdoaWNoIGlzIHVuZGVmaW5lZCBiZWhhdmlvci4gVGhlIHBhdGNoIGludHJvZHVjZXMgbG9jYWwgdmFyaWFibGVzIHRvIGhhbmRsZSBgQVRNX0NJX01BWGAgYW5kIHJlcGxhY2UgaXQgd2l0aCA4IG9yIDE2IHJlc3BlY3RpdmVseS4gVGhpcyBidWcgaXMgY2F1Z2h0IGJ5IFVCU0FOIChVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyKSwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVhaywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyBpbnZvbHZlZCBpbiB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM0YjAzMDg1ZGM1NTVmYTcyMzIxODA0ZTYwMTNmMjRiMDhlNDQxNGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjo1MjowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9hdG0vY29tbW9uLmMgYi9uZXQvYXRtL2NvbW1vbi5jCmluZGV4IDgxMTk1NzI3ZmExOGIuLmEyMTQzOWQ2OTBmMTQgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9jb21tb24uYwpAQCAtMzM0LDYgJiM0MzszMzQsMTAgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKQogCXNob3J0IG9sZF9wOwogCWludCBvbGRfYzsKIAlpbnQgZXJyOwomIzQzOwlpbnQgdnBpX2JpdHMgPSB2Y2MtJmd0O2Rldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOgomIzQzOwkJICAgICAgIHZjYy0mZ3Q7ZGV2LSZndDtjaV9yYW5nZS52cGlfYml0czsKJiM0MzsJaW50IHZjaV9iaXRzID0gdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzID09IEFUTV9DSV9NQVggPyAxNiA6CiYjNDM7CQkgICAgICAgdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzOwogCiAJaWYgKCp2cGkgIT0gQVRNX1ZQSV9BTlkgJmFtcDsmYW1wOyAqdmNpICE9IEFUTV9WQ0lfQU5ZKSB7CiAJCWVyciA9IGNoZWNrX2NpKHZjYywgKnZwaSwgKnZjaSk7CkBAIC0zNDIsMTIgJiM0MzszNDYsMTIgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKQogCS8qIGxhc3Qgc2NhbiBtYXkgaGF2ZSBsZWZ0IHZhbHVlcyBvdXQgb2YgYm91bmRzIGZvciBjdXJyZW50IGRldmljZSAqLwogCWlmICgqdnBpICE9IEFUTV9WUElfQU5ZKQogCQlwID0gKnZwaTsKLQllbHNlIGlmIChwICZndDs9IDEgJmx0OyZsdDsgdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZwaV9iaXRzKQomIzQzOwllbHNlIGlmIChwICZndDs9IDEgJmx0OyZsdDsgdnBpX2JpdHMpCiAJCXAgPSAwOwogCWlmICgqdmNpICE9IEFUTV9WQ0lfQU5ZKQogCQljID0gKnZjaTsKLQllbHNlIGlmIChjICZsdDsgQVRNX05PVF9SU1ZfVkNJIHx8IGMgJmd0Oz0gMSAmbHQ7Jmx0OyB2Y2MtJmd0O2Rldi0mZ3Q7Y2lfcmFuZ2UudmNpX2JpdHMpCi0JCQljID0gQVRNX05PVF9SU1ZfVkNJOwomIzQzOwllbHNlIGlmIChjICZsdDsgQVRNX05PVF9SU1ZfVkNJIHx8IGMgJmd0Oz0gMSAmbHQ7Jmx0OyB2Y2lfYml0cykKJiM0MzsJCWMgPSBBVE1fTk9UX1JTVl9WQ0k7CiAJb2xkX3AgPSBwOwogCW9sZF9jID0gYzsKIAlkbyB7CkBAIC0zNTgsMTMgJiM0MzszNjIsMTMgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKQogCQl9CiAJCWlmICgqdmNpID09IEFUTV9WQ0lfQU5ZKSB7CiAJCQljJiM0MzsmIzQzOzsKLQkJCWlmIChjICZndDs9IDEgJmx0OyZsdDsgdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzKQomIzQzOwkJCWlmIChjICZndDs9IDEgJmx0OyZsdDsgdmNpX2JpdHMpCiAJCQkJYyA9IEFUTV9OT1RfUlNWX1ZDSTsKIAkJfQogCQlpZiAoKGMgPT0gQVRNX05PVF9SU1ZfVkNJIHx8ICp2Y2kgIT0gQVRNX1ZDSV9BTlkpICZhbXA7JmFtcDsKIAkJICAgICp2cGkgPT0gQVRNX1ZQSV9BTlkpIHsKIAkJCXAmIzQzOyYjNDM7OwotCQkJaWYgKHAgJmd0Oz0gMSAmbHQ7Jmx0OyB2Y2MtJmd0O2Rldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHMpCiYjNDM7CQkJaWYgKHAgJmd0Oz0gMSAmbHQ7Jmx0OyB2cGlfYml0cykKIAkJCQlwID0gMDsKIAkJfQogCX0gd2hpbGUgKG9sZF9wICE9IHAgfHwgb2xkX2MgIT0gYyk7CkBAIC0zNzYsMTAgJiM0MzszODAsMTQgQEAgc3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSwKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBza19hdG0odmNjKTsKIAlpbnQgZXJyb3I7CiYjNDM7CWludCB2cGlfYml0cyA9IGRldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOgomIzQzOwkJICAgICAgIGRldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHM7CiYjNDM7CWludCB2Y2lfYml0cyA9IGRldi0mZ3Q7Y2lfcmFuZ2UudmNpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDE2IDoKJiM0MzsJCSAgICAgICBkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzOwogCiAJaWYgKCh2cGkgIT0gQVRNX1ZQSV9VTlNQRUMgJmFtcDsmYW1wOyB2cGkgIT0gQVRNX1ZQSV9BTlkgJmFtcDsmYW1wOwotCSAgICB2cGkgJmd0OyZndDsgZGV2LSZndDtjaV9yYW5nZS52cGlfYml0cykgfHwgKHZjaSAhPSBBVE1fVkNJX1VOU1BFQyAmYW1wOyZhbXA7Ci0JICAgIHZjaSAhPSBBVE1fVkNJX0FOWSAmYW1wOyZhbXA7IHZjaSAmZ3Q7Jmd0OyBkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzKSkKJiM0MzsJICAgIHZwaSAmZ3Q7Jmd0OyB2cGlfYml0cykgfHwgKHZjaSAhPSBBVE1fVkNJX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICB2Y2kgIT0gQVRNX1ZDSV9BTlkgJmFtcDsmYW1wOyB2Y2kgJmd0OyZndDsgdmNpX2JpdHMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAodmNpICZndDsgMCAmYW1wOyZhbXA7IHZjaSAmbHQ7IEFUTV9OT1RfUlNWX1ZDSSAmYW1wOyZhbXA7ICFjYXBhYmxlKENBUF9ORVRfQklORF9TRVJWSUNFKSkKIAkJcmV0dXJuIC1FUEVSTTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgQVRNIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgd2l0aGluIGBuZXQvYXRtL2NvbW1vbi5jYC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgdGhlc2UgYHZwaV9iaXRzYCBhbmQgYHZjaV9iaXRzYCB2YXJpYWJsZXMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoZXkmIzM5O3JlIGFkZHJlc3Npbmcgc29tZSByYW5nZSBoYW5kbGluZyBpc3N1ZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYEFUTV9DSV9NQVhgIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gYHZjYy0mZ3Q7ZGV2LSZndDtjaV9yYW5nZWAuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdHJ5aW5nIHRvIG5vcm1hbGl6ZSBvciBjbGFtcCB0aGUgYml0LXdpZHRoIHZhbHVlcy4gSWYgYHZwaV9iaXRzYCBvciBgdmNpX2JpdHNgIGFyZSBlcXVhbCB0byBgQVRNX0NJX01BWGAgKHdoaWNoLCBsZXQmIzM5O3MgYmUgaG9uZXN0LCBpcyBhbG1vc3QgY2VydGFpbmx5IGRlZmluZWQgYXMgLTEpLCBpdCYjMzk7cyBzZXR0aW5nIHRoZW0gdG8gOCBhbmQgMTYgcmVzcGVjdGl2ZWx5LiBUaGVuLCBpdCB1c2VzIHRoZXNlICpuZXcqIHZhcmlhYmxlcyBpbiBiaXQtc2hpZnQgb3BlcmF0aW9ucy4KClRoYXQgLTEgZm9yIGBBVE1fQ0lfTUFYYCBpbW1lZGlhdGVseSB0aHJvd3MgdXAgYSByZWQgZmxhZy4gV2FpdCBhIHNlY29uZC4uLiBpZiBgdnBpX2JpdHNgICpvciogYHZjaV9iaXRzYCBpcyAtMSwgdGhlbiB0aGUgY29kZSBpcyBkb2luZyB0aGluZ3MgbGlrZSBgMSAmbHQ7Jmx0OyAtMWAgb3IgYHZwaSAmZ3Q7Jmd0OyAtMWAsIGFuZCB0aGF0IGlzICp0ZXh0Ym9vayogdW5kZWZpbmVkIGJlaGF2aW9yLiBDIGxhbmd1YWdlIHNwZWMgc2F5cyB5b3UgY2Fubm90IHNoaWZ0IGJ5IGEgbmVnYXRpdmUgYW1vdW50LiBUaGlzIHBhdGNoIGlzIGNsZWFybHkgZml4aW5nIHRoYXQsIGEgY2xhc3NpYyBzaGlmdC1vdXQtb2YtYm91bmRzIGJ1ZywgYW5kIHByb2JhYmx5IGEgc3VidGxlIG9uZSB0aGF0IGxpa2VseSBtYW5pZmVzdGVkIG9uIHNvbWUgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgb3IgbWF5YmUgZXZlbiB1bmRlciBzcGVjaWZpYyBidWlsZCBjb25maWd1cmF0aW9ucy4KClRoaXMgaXMgdGhlIGtpbmQgb2Ygc3R1ZmYgdGhhdCBVQlNBTiBsb3ZlcyB0byBjYXRjaCwgcmlnaHQ/IFVuZGVmaW5lZCBCZWhhdmlvciBTYW5pdGl6ZXI/IEdpdmVuIHRoaXMgaXMgaW4gdGhlIEFUTSBuZXR3b3JraW5nIGNvZGUsIGl0IHdvdWxkbiYjMzk7dCBzdXJwcmlzZSBtZSBpZiBzb21lIEtBU0FOIGJ1aWxkcyBoYXZlIHBpY2tlZCB0aGlzIHVwLCBjYXVzaW5nIGEgYml0IG9mIGEgcGFuaWMuCgpMZXQgbWUgdGhpbmsuLi4gSXMgdGhpcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgdGhhdCYjMzk7cyBub3Qgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaGVyZS4gVGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgYGNpX3JhbmdlYCBmaWVsZHMgYXJlIGFsc28gaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIG5vdCAqYWJvdXQqIHRoZSAqdmFsdWUqIG9mIHRoZSBkYXRhIGluIG1lbW9yeTsgaXQmIzM5O3MgYWJvdXQgdGhlIHVzZSBvZiB0aGF0IHZhbHVlIGluIGEgYml0IHNoaWZ0LiBJdCYjMzk7cyBhIHNoaWZ0LW91dC1vZi1ib3VuZHMgaXNzdWUuIFRoZSBidWcgaXMgdGhlIGludmFsaWQgdXNlIG9mIG5lZ2F0aXZlIHNoaWZ0IHZhbHVlcy4KCkFscmlnaHQsIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdCBgQVRNX0NJX01BWGAgZGVmaW5pdGlvbiwgdGhvdWdoLiBJJiMzOTtsbCBqdXN0IGdyZXAgZm9yIGl0IHJlYWwgcXVpY2sgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgQVRNX0NJX01BWCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2Lmg9MTM4PXN0cnVjdCBhdG1faW9idWYge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaC0xNDQtXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2Lmg6MTQ1OiNkZWZpbmUgQVRNX0NJX01BWCAgICAgIC0xICAgICAgICAgICAgICAvKiB1c2UgbWF4aW11bSByYW5nZSBvZiBWUEkvVkNJICovXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2LmgtMTQ2LSBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjQKCQkJCQkJCW91dHB1dDogMjIxCgkJCQkJCQl0aG91Z2h0czogMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFUTSBQYXRjaCoqCgpPa2F5LCBzbyBgQVRNX0NJX01BWGAgaXMgZGVmaW5pdGVseSBgLTFgLiBUaGF0IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBjbGFzc2ljIHNoaWZ0LW91dC1vZi1ib3VuZHMgaXNzdWUuIEFueSBhdHRlbXB0IHRvIHBlcmZvcm0gYDEgJmx0OyZsdDsgLTFgIG9yIGB2cGkgJmd0OyZndDsgLTFgIGlzIGdvaW5nIHRvIHRyaWdnZXIgaXQuIFRoaXMgaXMgdGV4dGJvb2sgVUJTQU4gdGVycml0b3J5LiBJIGNhbiBzZWUgdGhpcyByaWdodCBhd2F5LgoKVGhlIGdvb2QgbmV3cyBpcywgVUJTQU4gaXMgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBzdGFuZGFyZCBLQVNBTiBidWlsZHMsIHdoaWNoIGlzIGdyZWF0LiBJdCBtZWFucyB0aGlzIHR5cGUgb2YgdW5kZWZpbmVkIGJlaGF2aW9yIGlzIGxpa2VseSBhbHJlYWR5IGJlaW5nIGNhdWdodCBkdXJpbmcgb3VyIHN0YW5kYXJkIHRlc3RpbmcuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHBsYXkgaGVyZSwgbm90aGluZyB0byB3YXJyYW50IGEgS01TQU4gc2Vzc2lvbiBvciBkZWVwZXIgYW5hbHlzaXMgZnJvbSB0aGF0IHBlcnNwZWN0aXZlLgoKVGhlIHBhdGNoJiMzOTtzIGdvYWwgaXMgdG8gaGFuZGxlIHRoZSBgLTFgIHZhbHVlcywgbGlrZWx5IGJ5IHN1YnN0aXR1dGluZyBgOGAgb3IgYDE2YC4gSXQmIzM5O3MgYSBjbGVhbiBmaXguIFNvLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcmVzb2x2ZXMgdGhlIHNoaWZ0LW91dC1vZi1ib3VuZHMgYnVnLiBJ4oCZbSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcy4gV2UmIzM5O3JlIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiB1bmRlZmluZWQgYmVoYXZpb3IgKHNoaWZ0LW91dC1vZi1ib3VuZHMpIGJ1ZyBpbiBgZmluZF9jaWAgYW5kIGBfX3ZjY19jb25uZWN0YCBpbiBgbmV0L2F0bS9jb21tb24uY2AuIFdoZW4gYGRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBpcyBzZXQgdG8gYEFUTV9DSV9NQVhgICgtMSksIHRoZSBiaXR3aXNlIHNoaWZ0IG9wZXJhdGlvbnMgKGAxIFx1MDAzY1x1MDAzYyB2cGlfYml0c2Agb3IgYHZwaSBcdTAwM2VcdTAwM2UgdnBpX2JpdHNgKSByZXN1bHQgaW4gYSBzaGlmdCBieSBhIG5lZ2F0aXZlIGFtb3VudCwgd2hpY2ggaXMgdW5kZWZpbmVkIGJlaGF2aW9yLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2NhbCB2YXJpYWJsZXMgdG8gaGFuZGxlIGBBVE1fQ0lfTUFYYCBhbmQgcmVwbGFjZSBpdCB3aXRoIDggb3IgMTYgcmVzcGVjdGl2ZWx5LiBUaGlzIGJ1ZyBpcyBjYXVnaHQgYnkgVUJTQU4gKFVuZGVmaW5lZCBCZWhhdmlvciBTYW5pdGl6ZXIpLCB3aGljaCBpcyBhbHJlYWR5IGVuYWJsZWQgaW4gc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGludm9sdmVkIGluIHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQtb3V0LW9mLWJvdW5kcykgYnVnIGluIGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgIGluIGBuZXQvYXRtL2NvbW1vbi5jYC4gV2hlbiBgZGV2LVx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzYCBvciBgdmNpX2JpdHNgIGlzIHNldCB0byBgQVRNX0NJX01BWGAgKC0xKSwgdGhlIGJpdHdpc2Ugc2hpZnQgb3BlcmF0aW9ucyAoYDEgXHUwMDNjXHUwMDNjIHZwaV9iaXRzYCBvciBgdnBpIFx1MDAzZVx1MDAzZSB2cGlfYml0c2ApIHJlc3VsdCBpbiBhIHNoaWZ0IGJ5IGEgbmVnYXRpdmUgYW1vdW50LCB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvY2FsIHZhcmlhYmxlcyB0byBoYW5kbGUgYEFUTV9DSV9NQVhgIGFuZCByZXBsYWNlIGl0IHdpdGggOCBvciAxNiByZXNwZWN0aXZlbHkuIFRoaXMgYnVnIGlzIGNhdWdodCBieSBVQlNBTiAoVW5kZWZpbmVkIEJlaGF2aW9yIFNhbml0aXplciksIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWssIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgaW52b2x2ZWQgaW4gdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjo1MjowOC4xNzMyMzIzMjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA4ODY5NjcxMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUTVwiLFxuICAgIFwiVVNCX0FUTVwiLFxuICAgIFwiVVNCX1hVU0JBVE1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2Y2NfY29ubmVjdFwiLFxuICAgIFwicHZjX2JpbmRcIixcbiAgICBcInB2Y19jb25uZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiB1bmRlZmluZWQgYmVoYXZpb3IgKHNoaWZ0LW91dC1vZi1ib3VuZHMpIGJ1ZyBpbiBgZmluZF9jaWAgYW5kIGBfX3ZjY19jb25uZWN0YCBpbiBgbmV0L2F0bS9jb21tb24uY2AuIFdoZW4gYGRldi1cXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgaXMgc2V0IHRvIGBBVE1fQ0lfTUFYYCAoLTEpLCB0aGUgYml0d2lzZSBzaGlmdCBvcGVyYXRpb25zIChgMSBcXHUwMDNjXFx1MDAzYyB2cGlfYml0c2Agb3IgYHZwaSBcXHUwMDNlXFx1MDAzZSB2cGlfYml0c2ApIHJlc3VsdCBpbiBhIHNoaWZ0IGJ5IGEgbmVnYXRpdmUgYW1vdW50LCB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvY2FsIHZhcmlhYmxlcyB0byBoYW5kbGUgYEFUTV9DSV9NQVhgIGFuZCByZXBsYWNlIGl0IHdpdGggOCBvciAxNiByZXNwZWN0aXZlbHkuIFRoaXMgYnVnIGlzIGNhdWdodCBieSBVQlNBTiAoVW5kZWZpbmVkIEJlaGF2aW9yIFNhbml0aXplciksIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWssIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgaW52b2x2ZWQgaW4gdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgIGluIGBuZXQvYXRtL2NvbW1vbi5jYCB3aGVyZSBgdnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgYmVpbmcgYEFUTV9DSV9NQVhgICgtMSkgd291bGQgY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIChlLmcuIG5lZ2F0aXZlIHNoaWZ0cyBvciBpbmZpbml0ZSBsb29wcykuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgYmluZGAgYW5kIGBjb25uZWN0YCBzeXN0ZW0gY2FsbHMgb24gQVRNIFBWQyBzb2NrZXRzIChgQUZfQVRNUFZDYCkuIFRvIHJlYWNoIHRoaXMgY29kZSwgYW4gQVRNIGRldmljZSBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIHN5c3RlbS4gU2luY2UgcGh5c2ljYWwgQVRNIGhhcmR3YXJlIGlzIHJhcmUsIHN5emthbGxlciBjYW4gZW11bGF0ZSBhbiBBVE0gZGV2aWNlIHVzaW5nIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yayBjb21iaW5lZCB3aXRoIFVTQiBBVE0gZHJpdmVycyAoZS5nLiBgeHVzYmF0bWApLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjUyOjA4LjE3MzIzNzQzMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNzM3NTk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM0YjAzMDg1ZGM1NTVmYTcyMzIxODA0ZTYwMTNmMjRiMDhlNDQxNGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTY6NTI6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9jb21tb24uYyBiL25ldC9hdG0vY29tbW9uLmNcXG5pbmRleCA4MTE5NTcyN2ZhMThiLi5hMjE0MzlkNjkwZjE0IDEwMDY0NFxcbi0tLSBhL25ldC9hdG0vY29tbW9uLmNcXG4rKysgYi9uZXQvYXRtL2NvbW1vbi5jXFxuQEAgLTMzNCw2ICszMzQsMTAgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxcbiBcXHRzaG9ydCBvbGRfcDtcXG4gXFx0aW50IG9sZF9jO1xcbiBcXHRpbnQgZXJyO1xcbitcXHRpbnQgdnBpX2JpdHMgPSB2Y2MtXFx1MDAzZWRldi1cXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOlxcbitcXHRcXHQgICAgICAgdmNjLVxcdTAwM2VkZXYtXFx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzO1xcbitcXHRpbnQgdmNpX2JpdHMgPSB2Y2MtXFx1MDAzZWRldi1cXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDE2IDpcXG4rXFx0XFx0ICAgICAgIHZjYy1cXHUwMDNlZGV2LVxcdTAwM2VjaV9yYW5nZS52Y2lfYml0cztcXG4gXFxuIFxcdGlmICgqdnBpICE9IEFUTV9WUElfQU5ZIFxcdTAwMjZcXHUwMDI2ICp2Y2kgIT0gQVRNX1ZDSV9BTlkpIHtcXG4gXFx0XFx0ZXJyID0gY2hlY2tfY2kodmNjLCAqdnBpLCAqdmNpKTtcXG5AQCAtMzQyLDEyICszNDYsMTIgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxcbiBcXHQvKiBsYXN0IHNjYW4gbWF5IGhhdmUgbGVmdCB2YWx1ZXMgb3V0IG9mIGJvdW5kcyBmb3IgY3VycmVudCBkZXZpY2UgKi9cXG4gXFx0aWYgKCp2cGkgIT0gQVRNX1ZQSV9BTlkpXFxuIFxcdFxcdHAgPSAqdnBpO1xcbi1cXHRlbHNlIGlmIChwIFxcdTAwM2U9IDEgXFx1MDAzY1xcdTAwM2MgdmNjLVxcdTAwM2VkZXYtXFx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzKVxcbitcXHRlbHNlIGlmIChwIFxcdTAwM2U9IDEgXFx1MDAzY1xcdTAwM2MgdnBpX2JpdHMpXFxuIFxcdFxcdHAgPSAwO1xcbiBcXHRpZiAoKnZjaSAhPSBBVE1fVkNJX0FOWSlcXG4gXFx0XFx0YyA9ICp2Y2k7XFxuLVxcdGVsc2UgaWYgKGMgXFx1MDAzYyBBVE1fTk9UX1JTVl9WQ0kgfHwgYyBcXHUwMDNlPSAxIFxcdTAwM2NcXHUwMDNjIHZjYy1cXHUwMDNlZGV2LVxcdTAwM2VjaV9yYW5nZS52Y2lfYml0cylcXG4tXFx0XFx0XFx0YyA9IEFUTV9OT1RfUlNWX1ZDSTtcXG4rXFx0ZWxzZSBpZiAoYyBcXHUwMDNjIEFUTV9OT1RfUlNWX1ZDSSB8fCBjIFxcdTAwM2U9IDEgXFx1MDAzY1xcdTAwM2MgdmNpX2JpdHMpXFxuK1xcdFxcdGMgPSBBVE1fTk9UX1JTVl9WQ0k7XFxuIFxcdG9sZF9wID0gcDtcXG4gXFx0b2xkX2MgPSBjO1xcbiBcXHRkbyB7XFxuQEAgLTM1OCwxMyArMzYyLDEzIEBAIHN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoKnZjaSA9PSBBVE1fVkNJX0FOWSkge1xcbiBcXHRcXHRcXHRjKys7XFxuLVxcdFxcdFxcdGlmIChjIFxcdTAwM2U9IDEgXFx1MDAzY1xcdTAwM2MgdmNjLVxcdTAwM2VkZXYtXFx1MDAzZWNpX3JhbmdlLnZjaV9iaXRzKVxcbitcXHRcXHRcXHRpZiAoYyBcXHUwMDNlPSAxIFxcdTAwM2NcXHUwMDNjIHZjaV9iaXRzKVxcbiBcXHRcXHRcXHRcXHRjID0gQVRNX05PVF9SU1ZfVkNJO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmICgoYyA9PSBBVE1fTk9UX1JTVl9WQ0kgfHwgKnZjaSAhPSBBVE1fVkNJX0FOWSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICp2cGkgPT0gQVRNX1ZQSV9BTlkpIHtcXG4gXFx0XFx0XFx0cCsrO1xcbi1cXHRcXHRcXHRpZiAocCBcXHUwMDNlPSAxIFxcdTAwM2NcXHUwMDNjIHZjYy1cXHUwMDNlZGV2LVxcdTAwM2VjaV9yYW5nZS52cGlfYml0cylcXG4rXFx0XFx0XFx0aWYgKHAgXFx1MDAzZT0gMSBcXHUwMDNjXFx1MDAzYyB2cGlfYml0cylcXG4gXFx0XFx0XFx0XFx0cCA9IDA7XFxuIFxcdFxcdH1cXG4gXFx0fSB3aGlsZSAob2xkX3AgIT0gcCB8fCBvbGRfYyAhPSBjKTtcXG5AQCAtMzc2LDEwICszODAsMTQgQEAgc3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSxcXG4ge1xcbiBcXHRzdHJ1Y3Qgc29jayAqc2sgPSBza19hdG0odmNjKTtcXG4gXFx0aW50IGVycm9yO1xcbitcXHRpbnQgdnBpX2JpdHMgPSBkZXYtXFx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzID09IEFUTV9DSV9NQVggPyA4IDpcXG4rXFx0XFx0ICAgICAgIGRldi1cXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHM7XFxuK1xcdGludCB2Y2lfYml0cyA9IGRldi1cXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDE2IDpcXG4rXFx0XFx0ICAgICAgIGRldi1cXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHM7XFxuIFxcbiBcXHRpZiAoKHZwaSAhPSBBVE1fVlBJX1VOU1BFQyBcXHUwMDI2XFx1MDAyNiB2cGkgIT0gQVRNX1ZQSV9BTlkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHZwaSBcXHUwMDNlXFx1MDAzZSBkZXYtXFx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzKSB8fCAodmNpICE9IEFUTV9WQ0lfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICB2Y2kgIT0gQVRNX1ZDSV9BTlkgXFx1MDAyNlxcdTAwMjYgdmNpIFxcdTAwM2VcXHUwMDNlIGRldi1cXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMpKVxcbitcXHQgICAgdnBpIFxcdTAwM2VcXHUwMDNlIHZwaV9iaXRzKSB8fCAodmNpICE9IEFUTV9WQ0lfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB2Y2kgIT0gQVRNX1ZDSV9BTlkgXFx1MDAyNlxcdTAwMjYgdmNpIFxcdTAwM2VcXHUwMDNlIHZjaV9iaXRzKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdGlmICh2Y2kgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHZjaSBcXHUwMDNjIEFUTV9OT1RfUlNWX1ZDSSBcXHUwMDI2XFx1MDAyNiAhY2FwYWJsZShDQVBfTkVUX0JJTkRfU0VSVklDRSkpXFxuIFxcdFxcdHJldHVybiAtRVBFUk07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjUyOjA5LjgxMTU4OTA4N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk4Nzg1MjkwOTQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBVE1cIixcbiAgICBcIlVTQl9BVE1cIixcbiAgICBcIlVTQl9YVVNCQVRNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmNjX2Nvbm5lY3RcIixcbiAgICBcInB2Y19iaW5kXCIsXG4gICAgXCJwdmNfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgIGluIGBuZXQvYXRtL2NvbW1vbi5jYCB3aGVyZSBgdnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgYmVpbmcgYEFUTV9DSV9NQVhgICgtMSkgd291bGQgY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIChlLmcuIG5lZ2F0aXZlIHNoaWZ0cyBvciBpbmZpbml0ZSBsb29wcykuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgYmluZGAgYW5kIGBjb25uZWN0YCBzeXN0ZW0gY2FsbHMgb24gQVRNIFBWQyBzb2NrZXRzIChgQUZfQVRNUFZDYCkuIFRvIHJlYWNoIHRoaXMgY29kZSwgYW4gQVRNIGRldmljZSBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIHN5c3RlbS4gU2luY2UgcGh5c2ljYWwgQVRNIGhhcmR3YXJlIGlzIHJhcmUsIHN5emthbGxlciBjYW4gZW11bGF0ZSBhbiBBVE0gZGV2aWNlIHVzaW5nIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yayBjb21iaW5lZCB3aXRoIFVTQiBBVE0gZHJpdmVycyAoZS5nLiBgeHVzYmF0bWApLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM0YjAzMDg1ZGM1NTVmYTcyMzIxODA0ZTYwMTNmMjRiMDhlNDQxNGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjo1MjowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9hdG0vY29tbW9uLmMgYi9uZXQvYXRtL2NvbW1vbi5jXG5pbmRleCA4MTE5NTcyN2ZhMThiLi5hMjE0MzlkNjkwZjE0IDEwMDY0NFxuLS0tIGEvbmV0L2F0bS9jb21tb24uY1xuKysrIGIvbmV0L2F0bS9jb21tb24uY1xuQEAgLTMzNCw2ICszMzQsMTAgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxuIFx0c2hvcnQgb2xkX3A7XG4gXHRpbnQgb2xkX2M7XG4gXHRpbnQgZXJyO1xuK1x0aW50IHZwaV9iaXRzID0gdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0cyA9PSBBVE1fQ0lfTUFYID8gOCA6XG4rXHRcdCAgICAgICB2Y2MtXHUwMDNlZGV2LVx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzO1xuK1x0aW50IHZjaV9iaXRzID0gdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52Y2lfYml0cyA9PSBBVE1fQ0lfTUFYID8gMTYgOlxuK1x0XHQgICAgICAgdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52Y2lfYml0cztcbiBcbiBcdGlmICgqdnBpICE9IEFUTV9WUElfQU5ZIFx1MDAyNlx1MDAyNiAqdmNpICE9IEFUTV9WQ0lfQU5ZKSB7XG4gXHRcdGVyciA9IGNoZWNrX2NpKHZjYywgKnZwaSwgKnZjaSk7XG5AQCAtMzQyLDEyICszNDYsMTIgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxuIFx0LyogbGFzdCBzY2FuIG1heSBoYXZlIGxlZnQgdmFsdWVzIG91dCBvZiBib3VuZHMgZm9yIGN1cnJlbnQgZGV2aWNlICovXG4gXHRpZiAoKnZwaSAhPSBBVE1fVlBJX0FOWSlcbiBcdFx0cCA9ICp2cGk7XG4tXHRlbHNlIGlmIChwIFx1MDAzZT0gMSBcdTAwM2NcdTAwM2MgdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0cylcbitcdGVsc2UgaWYgKHAgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2cGlfYml0cylcbiBcdFx0cCA9IDA7XG4gXHRpZiAoKnZjaSAhPSBBVE1fVkNJX0FOWSlcbiBcdFx0YyA9ICp2Y2k7XG4tXHRlbHNlIGlmIChjIFx1MDAzYyBBVE1fTk9UX1JTVl9WQ0kgfHwgYyBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMpXG4tXHRcdFx0YyA9IEFUTV9OT1RfUlNWX1ZDSTtcbitcdGVsc2UgaWYgKGMgXHUwMDNjIEFUTV9OT1RfUlNWX1ZDSSB8fCBjIFx1MDAzZT0gMSBcdTAwM2NcdTAwM2MgdmNpX2JpdHMpXG4rXHRcdGMgPSBBVE1fTk9UX1JTVl9WQ0k7XG4gXHRvbGRfcCA9IHA7XG4gXHRvbGRfYyA9IGM7XG4gXHRkbyB7XG5AQCAtMzU4LDEzICszNjIsMTMgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxuIFx0XHR9XG4gXHRcdGlmICgqdmNpID09IEFUTV9WQ0lfQU5ZKSB7XG4gXHRcdFx0YysrO1xuLVx0XHRcdGlmIChjIFx1MDAzZT0gMSBcdTAwM2NcdTAwM2MgdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52Y2lfYml0cylcbitcdFx0XHRpZiAoYyBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjaV9iaXRzKVxuIFx0XHRcdFx0YyA9IEFUTV9OT1RfUlNWX1ZDSTtcbiBcdFx0fVxuIFx0XHRpZiAoKGMgPT0gQVRNX05PVF9SU1ZfVkNJIHx8ICp2Y2kgIT0gQVRNX1ZDSV9BTlkpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKnZwaSA9PSBBVE1fVlBJX0FOWSkge1xuIFx0XHRcdHArKztcbi1cdFx0XHRpZiAocCBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHMpXG4rXHRcdFx0aWYgKHAgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2cGlfYml0cylcbiBcdFx0XHRcdHAgPSAwO1xuIFx0XHR9XG4gXHR9IHdoaWxlIChvbGRfcCAhPSBwIHx8IG9sZF9jICE9IGMpO1xuQEAgLTM3NiwxMCArMzgwLDE0IEBAIHN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXG4ge1xuIFx0c3RydWN0IHNvY2sgKnNrID0gc2tfYXRtKHZjYyk7XG4gXHRpbnQgZXJyb3I7XG4rXHRpbnQgdnBpX2JpdHMgPSBkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOlxuK1x0XHQgICAgICAgZGV2LVx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzO1xuK1x0aW50IHZjaV9iaXRzID0gZGV2LVx1MDAzZWNpX3JhbmdlLnZjaV9iaXRzID09IEFUTV9DSV9NQVggPyAxNiA6XG4rXHRcdCAgICAgICBkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHM7XG4gXG4gXHRpZiAoKHZwaSAhPSBBVE1fVlBJX1VOU1BFQyBcdTAwMjZcdTAwMjYgdnBpICE9IEFUTV9WUElfQU5ZIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHZwaSBcdTAwM2VcdTAwM2UgZGV2LVx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzKSB8fCAodmNpICE9IEFUTV9WQ0lfVU5TUEVDIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHZjaSAhPSBBVE1fVkNJX0FOWSBcdTAwMjZcdTAwMjYgdmNpIFx1MDAzZVx1MDAzZSBkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMpKVxuK1x0ICAgIHZwaSBcdTAwM2VcdTAwM2UgdnBpX2JpdHMpIHx8ICh2Y2kgIT0gQVRNX1ZDSV9VTlNQRUMgXHUwMDI2XHUwMDI2XG4rXHQgICAgdmNpICE9IEFUTV9WQ0lfQU5ZIFx1MDAyNlx1MDAyNiB2Y2kgXHUwMDNlXHUwMDNlIHZjaV9iaXRzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRpZiAodmNpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiB2Y2kgXHUwMDNjIEFUTV9OT1RfUlNWX1ZDSSBcdTAwMjZcdTAwMjYgIWNhcGFibGUoQ0FQX05FVF9CSU5EX1NFUlZJQ0UpKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6NTI6MDkuODExNTkxMTU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ5ODEwODg0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBVE0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHRvdWNoaW5nIGBuZXQvYXRtL2NvbW1vbi5jYC4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nOyBhbnkgY2hhbmdlcyB0byB0aGUgY29yZSBBVE0gY29kZSB3YXJyYW50IGEgY2xvc2UgbG9vay4gSXQgbG9va3MgbGlrZSB0aGUga2V5IG1vZGlmaWNhdGlvbnMgYXJlIHdpdGhpbiB0aGUgYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgZnVuY3Rpb25zLiBJIHNlZSB0aGV5J3ZlIGludHJvZHVjZWQgYHZwaV9iaXRzYCBhbmQgYHZjaV9iaXRzYCB2YXJpYWJsZXMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoZXkncmUgaGFuZGxpbmcgZWRnZSBjYXNlcy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0aGV5J3JlIGFkZHJlc3Npbmcgc2l0dWF0aW9ucyB3aGVyZSB0aGUgVlBJIG9yIFZDSSBiaXRzIGFyZSBhdCB0aGVpciBtYXhpbXVtIHZhbHVlcyAoYEFUTV9DSV9NQVhgKSB3aXRoaW4gdGhlIGBkZXYtXHUwMDNlY2lfcmFuZ2VgLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdG8gaG93IEFUTSBuZXR3b3JraW5nIG9wZXJhdGVzLCB3aGljaCBpcyBkZWZpbml0ZWx5IHNpZ25pZmljYW50LiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIGFmZmVjdCB0aGUgb3ZlcmFsbCBBVE0gaW5mcmFzdHJ1Y3R1cmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHJlYWNoYWJpbGl0eT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjdXJyZW50IEFUTSBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gTGV0J3Mgc3RhcnQgYnkgY29uZmlybWluZyB0aGF0IEFUTSBpcyBldmVuIHJlYWNoYWJsZS4gR290dGEgZGl2ZSBpbnRvIHRoZSBjb25maWcgZmlsZXMsIHNlZSB3aGF0IHRoZSBjdXJyZW50IHNldHVwIGlzIGxpa2UgZm9yIEFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjo1MjoyNC43OTI2ODI5MDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMxNzM3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFUTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9LY29uZmlnLTUtXFxubmV0L2F0bS9LY29uZmlnOjY6Y29uZmlnIEFUTVxcbm5ldC9hdG0vS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVxcXCJcXG4tLVxcbm5ldC9hdG0vS2NvbmZpZy0yMS1cXG5uZXQvYXRtL0tjb25maWc6MjI6Y29uZmlnIEFUTV9CUjI2ODRcXG5uZXQvYXRtL0tjb25maWctMjMtXFx0dHJpc3RhdGUgXFxcIlJGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1xcXCJcXG4tLVxcbm5ldC9hdG0vS2NvbmZpZy0zMC1cXG5uZXQvYXRtL0tjb25maWc6MzE6Y29uZmlnIEFUTV9CUjI2ODRfSVBGSUxURVJcXG5uZXQvYXRtL0tjb25maWctMzItXFx0Ym9vbCBcXFwiUGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjUyOjI0Ljg2NTg2NDYyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY4NDA5NjYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OlxuXG4qKkFuYWx5emluZyB0aGUgQVRNIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gd2UncmUgZGVhbGluZyB3aXRoIGlzIGBBVE1gLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB2ZXJpZnkgdGhlIGludGVncml0eSBvZiB0aGUgY3J1Y2lhbCBjb21wb25lbnRzLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgIGFyZSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGlzIGNvbnRleHQuIEV4Y2VsbGVudCwgdGhleSBhcmUgc3RhdGljYWxseSBkZWZpbmVkIOKAkyB0aGF0IGdpdmVzIHVzIGEgY2xlYXIgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gSSBtdXN0IHF1aWNrbHkgZGV0ZXJtaW5lICp3aGF0KiBpcyBjYWxsaW5nIHRoZXNlIGNyaXRpY2FsIHJvdXRpbmVzLiBUaGlzIHdpbGwgcmV2ZWFsIHRoZSBjYWxsIGNoYWlucywgd2hpY2ggaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlaXIgdXNhZ2UgYW5kIGltcGFjdCB3aXRoaW4gdGhlIEFUTSBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjo1MjoyOS41NDk5NjI4MzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NTc1NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmRfY2l8X192Y2NfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL2NvbW1vbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vY29tbW9uLmM9MzA1PXN0YXRpYyBpbnQgY2hlY2tfY2koY29uc3Qgc3RydWN0IGF0bV92Y2MgKnZjYywgc2hvcnQgdnBpLCBpbnQgdmNpKVxcbi0tXFxubmV0L2F0bS9jb21tb24uYy0zMjktXFxubmV0L2F0bS9jb21tb24uYzozMzA6c3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxcbm5ldC9hdG0vY29tbW9uLmMtMzMxLXtcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtMzc3LVxcbm5ldC9hdG0vY29tbW9uLmM6Mzc4OnN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXFxubmV0L2F0bS9jb21tb24uYy0zNzktXFx0XFx0XFx0IGludCB2Y2kpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTM5OS1cXHRpZiAodGVzdF9iaXQoQVRNX0RGX1JFTU9WRUQsIFxcdTAwMjZkZXYtXFx1MDAzZWZsYWdzKSB8fFxcbm5ldC9hdG0vY29tbW9uLmM6NDAwOlxcdCAgICAoZXJyb3IgPSBmaW5kX2NpKHZjYywgXFx1MDAyNnZwaSwgXFx1MDAyNnZjaSkpKSB7XFxubmV0L2F0bS9jb21tb24uYy00MDEtXFx0XFx0d3JpdGVfdW5sb2NrX2lycShcXHUwMDI2dmNjX3NrbGlzdF9sb2NrKTtcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmM9NDU4PWludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTUwNS1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5uZXQvYXRtL2NvbW1vbi5jOjUwNjpcXHRlcnJvciA9IF9fdmNjX2Nvbm5lY3QodmNjLCBkZXYsIHZwaSwgdmNpKTtcXG5uZXQvYXRtL2NvbW1vbi5jLTUwNy1cXHRpZiAoZXJyb3IpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6NTI6MjkuNjY2NTQyMzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjExNTA4ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqVHJhY2luZyB0aGUgVkNDIENvbm5lY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBgdmNjX2Nvbm5lY3RgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGluaXRpYXRlcyB0aGUgY29ubmVjdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIGl0IGNhbGxzIGBfX3ZjY19jb25uZWN0YCBkaXJlY3RseSwgc28gdGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgcG9pbnQgdG8gaW52ZXN0aWdhdGUuIE5vdywgYF9fdmNjX2Nvbm5lY3RgIHRoZW4gY2FsbHMgYGZpbmRfY2lgLCB3aGljaCBsaWtlbHkgbWVhbnMgaXQncyB0cnlpbmcgdG8gbG9jYXRlIHNvbWUgc29ydCBvZiBjb25uZWN0aW9uIGlkZW50aWZpZXIgb3IgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBoZXJlLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBhbmQgaG93IGV2ZXJ5dGhpbmcgZml0cyB0b2dldGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndobyogaXMgY2FsbGluZyBgdmNjX2Nvbm5lY3RgIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGZvbGxvdyB0aGUgdGhyZWFkIGZyb20gdGhlIG90aGVyIGVuZC4gU28sIEkgbmVlZCB0byBzZWUgdGhlIGNhbGxlcnMgdG8gYHZjY19jb25uZWN0YC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTQ3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6NTI6MzYuODc4MDUyOTc2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NzMwMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjY19jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vY29tbW9uLmM9MzMwPXN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtMzc3LVxcbm5ldC9hdG0vY29tbW9uLmM6Mzc4OnN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXFxubmV0L2F0bS9jb21tb24uYy0zNzktXFx0XFx0XFx0IGludCB2Y2kpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTQ1Ny1cXG5uZXQvYXRtL2NvbW1vbi5jOjQ1ODppbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKVxcbm5ldC9hdG0vY29tbW9uLmMtNDU5LXtcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtNTA1LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbm5ldC9hdG0vY29tbW9uLmM6NTA2OlxcdGVycm9yID0gX192Y2NfY29ubmVjdCh2Y2MsIGRldiwgdnBpLCB2Y2kpO1xcbm5ldC9hdG0vY29tbW9uLmMtNTA3LVxcdGlmIChlcnJvcikge1xcbi0tXFxubmV0L2F0bS9jb21tb24uaD0xNT1pbnQgdmNjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jayk7XFxubmV0L2F0bS9jb21tb24uaDoxNjppbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKTtcXG5uZXQvYXRtL2NvbW1vbi5oLTE3LWludCB2Y2NfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxcbi0tXFxubmV0L2F0bS9wdmMuYz0yNz1zdGF0aWMgaW50IHB2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcXG4tLVxcbm5ldC9hdG0vcHZjLmMtNTEtXFx0fVxcbm5ldC9hdG0vcHZjLmM6NTI6XFx0ZXJyb3IgPSB2Y2NfY29ubmVjdChzb2NrLCBhZGRyLVxcdTAwM2VzYXBfYWRkci5pdGYsIGFkZHItXFx1MDAzZXNhcF9hZGRyLnZwaSxcXG5uZXQvYXRtL3B2Yy5jLTUzLVxcdFxcdFxcdCAgICBhZGRyLVxcdTAwM2VzYXBfYWRkci52Y2kpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjo1MjozNi45NjQ3ODg2ODVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYzNjA1NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkV4YW1pbmluZyB0aGUgUFZDIEJpbmRpbmcgUHJvY2VzcyoqXG5cbk9rYXksIHNvIGBwdmNfYmluZGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWluZyBjYWxsZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiBpdC4gVGhlIHRyYWNlIHNheXMgaXQgdXNlcyBgdmNjX2Nvbm5lY3RgLiBSaWdodC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIHByZXR0eSBzdXJlIGBwdmNfYmluZGAgaXMgZnVuZGFtZW50YWwgdG8gaW5pdGlhbGl6aW5nIGFuZCBlc3RhYmxpc2hpbmcgQVRNIFBWQ3MuIFRoYXQgY29ubmVjdGlvbiB0byBgdmNjX2Nvbm5lY3RgIGRlZmluaXRlbHkgc291bmRzIGxpa2UgaXQncyBoYW5kbGluZyB0aGUgdW5kZXJseWluZyB2aXJ0dWFsIGNpcmN1aXQgc2V0dXAuIEFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gVGltZSB0byBjcmFjayBvcGVuIGBuZXQvYXRtL3B2Yy5jYC4gSG9wZWZ1bGx5LCB0aGUgaW1wbGVtZW50YXRpb24gaXMgY2xlYW4gYW5kIHRoZSBjb25uZWN0aW9uIGZsb3cgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIHN0b3J5LiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZSBQVkMgZ2V0cyBib3VuZCB0byB0aGUgdmlydHVhbCBjb25uZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODg0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6NTI6NDEuMjI4Mzk3MTYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTAxNjU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdmNfYmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL3B2Yy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vcHZjLmM9MjI9c3RhdGljIGludCBwdmNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4tLVxcbm5ldC9hdG0vcHZjLmMtMjYtXFxubmV0L2F0bS9wdmMuYzoyNzpzdGF0aWMgaW50IHB2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcXG5uZXQvYXRtL3B2Yy5jLTI4LVxcdFxcdCAgICBpbnQgc29ja2FkZHJfbGVuKVxcbi0tXFxubmV0L2F0bS9wdmMuYz01OT1zdGF0aWMgaW50IHB2Y19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcXG4tLVxcbm5ldC9hdG0vcHZjLmMtNjEte1xcbm5ldC9hdG0vcHZjLmM6NjI6XFx0cmV0dXJuIHB2Y19iaW5kKHNvY2ssIHNvY2thZGRyLCBzb2NrYWRkcl9sZW4pO1xcbm5ldC9hdG0vcHZjLmMtNjMtfVxcbi0tXFxubmV0L2F0bS9wdmMuYz0xMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHZjX3Byb3RvX29wcyA9IHtcXG4tLVxcbm5ldC9hdG0vcHZjLmMtMTEwLVxcdC5yZWxlYXNlID1cXHR2Y2NfcmVsZWFzZSxcXG5uZXQvYXRtL3B2Yy5jOjExMTpcXHQuYmluZCA9XFx0XFx0cHZjX2JpbmQsXFxubmV0L2F0bS9wdmMuYy0xMTItXFx0LmNvbm5lY3QgPVxcdHB2Y19jb25uZWN0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjo1Mjo0MS4yODc0MjAwODNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwMDMwOTQzMzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBBVE0gUFZDIFNvY2tldCBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgYHB2Y19iaW5kYCBhbmQgYHB2Y19jb25uZWN0YCBmdW5jdGlvbnMg4oCTIHRoZXkncmUgdGhlIHNvY2tldCBvcGVyYXRpb25zIGZvciBQVkMgc29ja2V0cywgbm8gc3VycHJpc2UgdGhlcmUuIEFuZCB5ZXAsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlc2UgYXJlIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIHN0YW5kYXJkIGBiaW5kYCBhbmQgYGNvbm5lY3RgIGNhbGxzIG9uIGFuIEFUTSBQVkMgc29ja2V0LiBGdW5jdGlvbmFsbHksIHRoaXMgY2hhbmdlIGlzIHNpZ25pZmljYW50LiBJdCdzIGFkZHJlc3NpbmcgYSBidWcgd2hlcmUgdGhlIHZhbHVlcyBvZiBgdnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgYmVpbmcgc2V0IHRvIGBBVE1fQ0lfTUFYYCwgd2hpY2ggaXMgLTEsIHdlcmUgbGVhZGluZyB0byBzb21lIHByZXR0eSBuYXN0eSBzaGlmdCBvcGVyYXRpb25zLiBXZSdyZSB0YWxraW5nIHNoaWZ0cyBieSAtMSwgdW5kZWZpbmVkIGJlaGF2aW9yLCBhbGwgc29ydHMgb2YgcG90ZW50aWFsIHByb2JsZW1zLlxuXG5UaGUgcGF0Y2gncyBzb2x1dGlvbiBpcyBzdHJhaWdodGZvcndhcmQ6IGludHJvZHVjZSBgdnBpX2JpdHNgIGFuZCBgdmNpX2JpdHNgIHZhcmlhYmxlcy4gQ3J1Y2lhbGx5LCBpdCBzZXRzIGRlZmF1bHQgdmFsdWVzIG9mIDggYW5kIDE2IHJlc3BlY3RpdmVseSB3aGVuIHRoZSBkZXZpY2UgaW5kaWNhdGVzIGBBVE1fQ0lfTUFYYC4gVGhpcyBpcyBlbGVnYW50LlxuXG5JIHRoaW5rIEkgc2hvdWxkIGNoZWNrIGBuZXQvYXRtL3N2Yy5jYCBhcyB3ZWxsLCBqdXN0IHRvIGJlIHN1cmUgdGhlcmUgaXNuJ3QgYW55dGhpbmcgc2ltaWxhciBnb2luZyBvbiBvdmVyIHRoZXJlLiBBbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCB3aXRoIHRoaXMga2luZCBvZiBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MjcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDI6MTEuMzE4MzY1OTgzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjMxNzM4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNjX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9zdmMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDI6MTEuMzY0Njg3NDcyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTg3NzE5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHlvdSBkZXNjcmliZWQ6XG5cbioqQ29ubmVjdGluZyB0aGUgRG90cyoqXG5cbkFscmlnaHQsIHNvIGB2Y2NfY29ubmVjdGAgaXMgZGVmaW5pdGVseSBnZXR0aW5nIHRyaWdnZXJlZCBieSBib3RoIGBwdmNfYmluZGAgYW5kIGBwdmNfY29ubmVjdGAuIFRoYXQncyB0aGUgY29yZSBjb25uZWN0aW9uIG1lY2hhbmlzbSwgZ290IGl0LiBIbW0uLi4gYnV0IEkgbmVlZCB0byBlbnN1cmUgSSdtIGFjY291bnRpbmcgZm9yIGFsbCBzY2VuYXJpb3MuIEhvbGQgb24gYSBzZWNvbmQsIHdoYXQgYWJvdXQgdGhlIHNlcnZpY2UgY29ubmVjdGlvbiBpbiBgc3ZjLmNgPyBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBlZGdlIGNhc2VzIG9yIGFsdGVybmF0aXZlIGNvbm5lY3Rpb24gcGF0aHdheXMuIEkgbmVlZCB0byBmYWN0b3IgdGhhdCBpbiBiZWZvcmUgSSBjYW4gdHJ1bHkgc2F5IEkndmUgZ290IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4ODIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMjoxNC45MjM0NjE2NTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MzY2MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjY19jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vY29tbW9uLmM9MzMwPXN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtMzc3LVxcbm5ldC9hdG0vY29tbW9uLmM6Mzc4OnN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXFxubmV0L2F0bS9jb21tb24uYy0zNzktXFx0XFx0XFx0IGludCB2Y2kpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTQ1Ny1cXG5uZXQvYXRtL2NvbW1vbi5jOjQ1ODppbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKVxcbm5ldC9hdG0vY29tbW9uLmMtNDU5LXtcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtNTA1LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbm5ldC9hdG0vY29tbW9uLmM6NTA2OlxcdGVycm9yID0gX192Y2NfY29ubmVjdCh2Y2MsIGRldiwgdnBpLCB2Y2kpO1xcbm5ldC9hdG0vY29tbW9uLmMtNTA3LVxcdGlmIChlcnJvcikge1xcbi0tXFxubmV0L2F0bS9jb21tb24uaD0xNT1pbnQgdmNjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jayk7XFxubmV0L2F0bS9jb21tb24uaDoxNjppbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKTtcXG5uZXQvYXRtL2NvbW1vbi5oLTE3LWludCB2Y2NfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxcbi0tXFxubmV0L2F0bS9wdmMuYz0yNz1zdGF0aWMgaW50IHB2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcXG4tLVxcbm5ldC9hdG0vcHZjLmMtNTEtXFx0fVxcbm5ldC9hdG0vcHZjLmM6NTI6XFx0ZXJyb3IgPSB2Y2NfY29ubmVjdChzb2NrLCBhZGRyLVxcdTAwM2VzYXBfYWRkci5pdGYsIGFkZHItXFx1MDAzZXNhcF9hZGRyLnZwaSxcXG5uZXQvYXRtL3B2Yy5jLTUzLVxcdFxcdFxcdCAgICBhZGRyLVxcdTAwM2VzYXBfYWRkci52Y2kpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMjoxNC45ODA4MzAyM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTAwMzAwMzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHZjY19jb25uZWN0YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlYmFzZSBhbmQgaXQgbG9va3MgbGlrZSBgdmNjX2Nvbm5lY3RgIGlzIG9ubHkgZGlyZWN0bHkgdXNlZCBieSBgcHZjLmNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBCdXQgd2FpdC4uLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYF9fdmNjX2Nvbm5lY3RgLCBhbmQgSSB0aGluayBpdCdzIHVzZWQgaW4gYW5vdGhlciBtb2R1bGUuIExldCdzIHNlZS4uLiBpdCAqY291bGQqIGJlIGBzdmNfYWRkcGFydHlgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCByaWdodD8gQWgsIG5vLCB0aGF0J3Mgd3JvbmcuIEkgaGF2ZSB0byBnbyBiYWNrIHRvIGBjb21tb24uY2AgdG8gc2VlIHRoYXQgYF9fdmNjX2Nvbm5lY3RgIGlzIGFjdHVhbGx5IGRlY2xhcmVkIGFzIHN0YXRpYyB0aGVyZS4gUmlnaHQsIHNvIHRoYXQgbGltaXRzIGl0cyBzY29wZSBjb25zaWRlcmFibHksIGV2ZW4gaWYgaXQncyBjb25jZXB0dWFsbHkgdGhlIHNhbWUgdGhpbmcuIE5vdywgbGV0J3MgY2FzdCBhIHdpZGVyIG5ldC4gV2hhdCBlbHNlLCAqYW55d2hlcmUqLCBjYWxscyBgX192Y2NfY29ubmVjdGA/IEkgbmVlZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIHVzYWdlIGJlZm9yZSBJIGNhbiByZWFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU0OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAyOjIxLjA4MTEzMzA2MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0OTQ2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX192Y2NfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL2NvbW1vbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vY29tbW9uLmM9MzMwPXN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtMzc3LVxcbm5ldC9hdG0vY29tbW9uLmM6Mzc4OnN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXFxubmV0L2F0bS9jb21tb24uYy0zNzktXFx0XFx0XFx0IGludCB2Y2kpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jPTQ1OD1pbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKVxcbi0tXFxubmV0L2F0bS9jb21tb24uYy01MDUtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxubmV0L2F0bS9jb21tb24uYzo1MDY6XFx0ZXJyb3IgPSBfX3ZjY19jb25uZWN0KHZjYywgZGV2LCB2cGksIHZjaSk7XFxubmV0L2F0bS9jb21tb24uYy01MDctXFx0aWYgKGVycm9yKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAyOjIxLjEyNjYzMDI4MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjE2NTEyNDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29ubmVjdGlvbiBXb3JrZmxvdyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgZnVuY3Rpb24gYHZjY19jb25uZWN0YCBpcyB0aGUga2V5IHBsYXllciBoZXJlOyBhY2NvcmRpbmcgdG8gdGhlIGNvZGUsIGl0J3MgdGhlIG9ubHkgb25lIGNhbGxpbmcgaXQuIE5vdywgd2hlcmUgZG9lcyBgdmNjX2Nvbm5lY3RgIGZpdCBpbnRvIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzPyBBaCwgcmlnaHQsIGBwdmNfYmluZGAgYW5kIGBwdmNfY29ubmVjdGAgYXJlIHRoZSBvbmVzIGNhbGxpbmcgaXQuIFRob3NlIGFyZSB0aGUgaW5pdGlhbCBhY2Nlc3MgcG9pbnRzLiBIYW5nIG9uIGEgc2Vjb25kLCB3YXNuJ3QgYHB2Y19iaW5kYCBkZWNsYXJlZCBhcyBzdGF0aWM/IFllcywgYnV0IGl0J3MgYXNzaWduZWQgdG8gYC5iaW5kYCB3aXRoaW4gYHB2Y19wcm90b19vcHNgIHdoaWNoIG1lYW5zIGl0IHN0aWxsIGZ1bmN0aW9ucyBhcyBhbiBlbnRyeSBwb2ludC4gVGhlcmVmb3JlLCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgdGhpcyBjb25uZWN0aW9uIGFyZSBgdmNjX2Nvbm5lY3RgLCBgcHZjX2JpbmRgLCBhbmQgYHB2Y19jb25uZWN0YC4gVGhhdCBjbGFyaWZpZXMgdGhlIHByaW1hcnkgY29ubmVjdGlvbiBmbG93LiBKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBjaGVjayBpZiBgZmluZF9jaWAgaXMgY2FsbGVkIGFueXdoZXJlIGVsc2Ugd2l0aGluIHRoaXMgcGFydCBvZiB0aGUgY29kZWJhc2UgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBjcnVjaWFsIGNvbXBvbmVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA5NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMjoyNy43NDMxNDU0ODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDMzNDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmRfY2lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9jb21tb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL2NvbW1vbi5jPTMwNT1zdGF0aWMgaW50IGNoZWNrX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0IHZwaSwgaW50IHZjaSlcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtMzI5LVxcbm5ldC9hdG0vY29tbW9uLmM6MzMwOnN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcXG5uZXQvYXRtL2NvbW1vbi5jLTMzMS17XFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jPTM3OD1zdGF0aWMgaW50IF9fdmNjX2Nvbm5lY3Qoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IGF0bV9kZXYgKmRldiwgc2hvcnQgdnBpLFxcbi0tXFxubmV0L2F0bS9jb21tb24uYy0zOTktXFx0aWYgKHRlc3RfYml0KEFUTV9ERl9SRU1PVkVELCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncykgfHxcXG5uZXQvYXRtL2NvbW1vbi5jOjQwMDpcXHQgICAgKGVycm9yID0gZmluZF9jaSh2Y2MsIFxcdTAwMjZ2cGksIFxcdTAwMjZ2Y2kpKSkge1xcbm5ldC9hdG0vY29tbW9uLmMtNDAxLVxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNnZjY19za2xpc3RfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAyOjI3Ljc4NjU4NDg1NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ2MzU4MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgQVRNIENvbm5lY3Rpb24gRW50cnkgUG9pbnRzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYF9fdmNjX2Nvbm5lY3RgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgKmNhbGxzKiBgZmluZF9jaWAuIFRoYXQgbmFycm93cyBvdXIgcHJpbWFyeSBlbnRyeSBwb2ludHMgY29uc2lkZXJhYmx5LiBTbywgd2UncmUgcmVhbGx5IHRhbGtpbmcgYWJvdXQgZm9jdXNpbmcgb24gYHZjY19jb25uZWN0YCwgYHB2Y19iaW5kYCwgYW5kIGBwdmNfY29ubmVjdGAuIFRob3NlIGFyZSB0aGUgb25lcyB0byBzY3J1dGluaXplIGZvciBob3cgQVRNIGNvbm5lY3Rpb25zIGFyZSBiZWluZyBpbml0aWF0ZWQgYW5kIG1hbmFnZWQgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiBjb25maWd1cmF0aW9uIGFuZCBpbml0aWFsIHNldHVwLlxuXG5Ob3csIGEgY3JpdGljYWwgbmV4dCBzdGVwLiBXZSBjYW4ndCBhZmZvcmQgdG8gYmUgYmxpbmtlcmVkLiBBcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGlzIEFUTSBpbmZyYXN0cnVjdHVyZSB0aGF0IGNvdWxkIGltcGFjdCB0aGVzZSBjb25uZWN0aW9ucz8gTGV0J3MgYXNzdW1lIHRoZXJlIGFyZSwgYW5kIHN0YXJ0IGludmVzdGlnYXRpbmcgdGhlIGNvZGUgYmFzZSB0byBmaW5kIHRoZW0uIFRoZSBnb2FsIGlzIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mICphbGwqIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIHdpdGggdGhlc2UgY29ubmVjdGlvbiBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MzMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMjozMS40MzI5NDQ5NzJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzUwMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVE1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9LY29uZmlnLTUtXFxubmV0L2F0bS9LY29uZmlnOjY6Y29uZmlnIEFUTVxcbm5ldC9hdG0vS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVxcXCJcXG4tLVxcbm5ldC9hdG0vS2NvbmZpZy0yMS1cXG5uZXQvYXRtL0tjb25maWc6MjI6Y29uZmlnIEFUTV9CUjI2ODRcXG5uZXQvYXRtL0tjb25maWctMjMtXFx0dHJpc3RhdGUgXFxcIlJGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1xcXCJcXG4tLVxcbm5ldC9hdG0vS2NvbmZpZy0zMC1cXG5uZXQvYXRtL0tjb25maWc6MzE6Y29uZmlnIEFUTV9CUjI2ODRfSVBGSUxURVJcXG5uZXQvYXRtL0tjb25maWctMzItXFx0Ym9vbCBcXFwiUGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAyOjMxLjQ3ODI5NzA2MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDc3NzE3ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBBVE0gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGhlIGBBVE1gIGNvbmZpZyBpcyB0aGUgY29yZSBvbmUgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuIEZpcnN0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBkZXBlbmRlbmNpZXMgbHVya2luZyBhcm91bmQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgQVRNYCByZWxpZXMgb24gYW55IG90aGVyIGNvbmZpZ3Mgb3IgbW9kdWxlcy4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtYWtlLCBvciBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGFzcGVjdHMgdG8gY29uc2lkZXIuIEl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2ggYXQgdGhlIGJlZ2lubmluZy4gTm8gcG9pbnQgaW4gbWlzc2luZyBhIHBvdGVudGlhbCBjYXNjYWRlISBMZXQncyBnZXQgYSBjbGVhciBkZXBlbmRlbmN5IG1hcC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE4OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAyOjM2Ljk1NjAxNzIzM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMTkzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9LY29uZmlnPTIyPWNvbmZpZyBBVE1fQlIyNjg0XFxubmV0L2F0bS9LY29uZmlnLTIzLVxcdHRyaXN0YXRlIFxcXCJSRkMxNDgzLzI2ODQgQnJpZGdlZCBwcm90b2NvbHNcXFwiXFxubmV0L2F0bS9LY29uZmlnOjI0OlxcdGRlcGVuZHMgb24gQVRNIFxcdTAwMjZcXHUwMDI2IElORVRcXG5uZXQvYXRtL0tjb25maWctMjUtXFx0aGVscFxcbi0tXFxubmV0L2F0bS9LY29uZmlnPTMxPWNvbmZpZyBBVE1fQlIyNjg0X0lQRklMVEVSXFxubmV0L2F0bS9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIlBlci1WQyBJUCBmaWx0ZXIga2x1ZGdlXFxcIlxcbm5ldC9hdG0vS2NvbmZpZzozMzpcXHRkZXBlbmRzIG9uIEFUTV9CUjI2ODRcXG5uZXQvYXRtL0tjb25maWctMzQtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMjozNy4wMDMwMzgzMjJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMTM0OTkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBBVE0gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBBVE1gIGZlYXR1cmUgaGVyZS4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzLCBkb2VzIGBBVE1gIGhhdmUgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXM/IEkgd2FudCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBiYXNlIGNvbmZpZ3VyYXRpb24uIFRvIGZpZ3VyZSB0aGlzIG91dCB3aXRoIGNlcnRhaW50eSwgSSBzaG91bGQgcmVhbGx5IGRpdmUgaW50byB0aGUgYG5ldC9hdG0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBnby10byBwbGFjZSBmb3IgYWxsIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gQVRNIGFuZCBhbnkgcHJlcmVxdWlzaXRlcyBpdCBtaWdodCBoYXZlLiBVbmRlcnN0YW5kaW5nIHRoaXMgZmlsZSB3aWxsIGdpdmUgbWUgdGhlIGdyb3VuZCB0cnV0aCwgaGVscGluZyBtZSBhc3Nlc3MgdGhlIHRydWUgaW5kZXBlbmRlbmNlIG9mIHRoZSBBVE0gY29yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUzNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAyOjQwLjYzNDM5MDUzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9hdG0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgQVRNXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIEFUTSBpcyBhIGhpZ2gtc3BlZWQgbmV0d29ya2luZyB0ZWNobm9sb2d5IGZvciBMb2NhbCBBcmVhIE5ldHdvcmtzXFxuICAxMDpcXHRcXHQgIGFuZCBXaWRlIEFyZWEgTmV0d29ya3MuICBJdCB1c2VzIGEgZml4ZWQgcGFja2V0IHNpemUgYW5kIGlzXFxuICAxMTpcXHRcXHQgIGNvbm5lY3Rpb24gb3JpZW50ZWQsIGFsbG93aW5nIGZvciB0aGUgbmVnb3RpYXRpb24gb2YgbWluaW11bVxcbiAgMTI6XFx0XFx0ICBiYW5kd2lkdGggcmVxdWlyZW1lbnRzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIEluIG9yZGVyIHRvIHBhcnRpY2lwYXRlIGluIGFuIEFUTSBuZXR3b3JrLCB5b3VyIExpbnV4IGJveCBuZWVkcyBhblxcbiAgMTU6XFx0XFx0ICBBVE0gbmV0d29ya2luZyBjYXJkLiBJZiB5b3UgaGF2ZSB0aGF0LCBzYXkgWSBoZXJlIGFuZCB0byB0aGUgZHJpdmVyXFxuICAxNjpcXHRcXHQgIG9mIHlvdXIgQVRNIGNhcmQgYmVsb3cuXFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdCAgTm90ZSB0aGF0IHlvdSBuZWVkIGEgc2V0IG9mIHVzZXItc3BhY2UgcHJvZ3JhbXMgdG8gYWN0dWFsbHkgbWFrZSB1c2VcXG4gIDE5OlxcdFxcdCAgb2YgQVRNLiAgU2VlIHRoZSBmaWxlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0ucnN0XFx1MDAzZSBmb3JcXG4gIDIwOlxcdFxcdCAgZnVydGhlciBkZXRhaWxzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMjo0MC42MzQ0NDM5MTlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2OTk3ODY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipBVE0gQ29uZmlndXJhdGlvbjogU2ltcGxpZnlpbmcgdGhlIEFwcHJvYWNoKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSB0aGlzIGJvaWxzIGRvd24gdG8gdXNpbmcgKmp1c3QqIHRoZSBgQVRNYCBjb25maWcsIHdoaWNoIGlzIGdyZWF0IOKAkyBrZWVwcyB0aGluZ3MgY2xlYW4gYW5kIHN0cmFpZ2h0Zm9yd2FyZC4gTXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIHRob3NlIHNwZWNpZmljIHN5bWJvbHM6IGB2Y2NfY29ubmVjdGAsIGBwdmNfYmluZGAsIGFuZCBgcHZjX2Nvbm5lY3RgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGluIHRoaXMgY29udGV4dC4gQnV0LCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gQSBxdWljayBzYW5pdHkgY2hlY2sgaXMgbmVjZXNzYXJ5OiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYHZjY19jb25uZWN0YCBpcyBlaXRoZXIgZXhwbGljaXRseSBleHBvcnRlZCBmb3IgdXNlIGVsc2V3aGVyZSBvciBpcywgYXQgdGhlIHZlcnkgbGVhc3QsIHJlYWNoYWJsZSBmcm9tIG90aGVyIG1vZHVsZXMgb3Igc2NvcGVzIHRoYXQgbWlnaHQgdXRpbGl6ZSBpdC4gR290dGEgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAwNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDI6NDUuNjA0NDI4MjY4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc0MDExOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdmNjX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAyOjQ1LjY1MTE3NDQ2N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzcwMzk1ODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsbHkgRXhwb3J0ZWQgQVRNIEZ1bmN0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gYHZjY19jb25uZWN0YC4uLiB0aGF0IGxvb2tzIGxpa2UgaXQncyAqZXhwb3J0ZWQqPyBUaGF0J3MgdW5leHBlY3RlZC4gTGV0IG1lIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBBVE0gVkNDIGVzdGFibGlzaG1lbnQgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGZhY3QgdGhhdCBpdCdzIHN1cmZhY2luZyBhcyBhbiBleHBvcnQgaW1tZWRpYXRlbHkgcmFpc2VzIGZsYWdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgdmlzaWJpbGl0eSwgYW5kIGFsc28gd2hlcmUgdGhhdCBmdW5jdGlvbiBsaXZlcy4gTGV0J3Mgc3RhcnQgYnkgY29uZmlybWluZyBpdHMgZGVmaW5pdGlvbi4gSSdtIGdvaW5nIHN0cmFpZ2h0IHRvIGBuZXQvYXRtL2NvbW1vbi5jYC4gVGhhdCBmaWxlJ3MgdHlwaWNhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgc2hhcmVkIEFUTSBpbmZyYXN0cnVjdHVyZS4gTGV0J3Mgc2VlIGlmIHRoZSBzeW1ib2wgdGFibGUgY29uZmlybXMgaXQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgdmlzaWJpbGl0eSwgY29udGV4dCwgYW5kIHBvdGVudGlhbCBzaWRlLWVmZmVjdHMgdGhhdCB0aGlzIGV4cG9ydCBpbnRyb2R1Y2VzLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IHRoaXMgbWlnaHQgb3BlbiBhIHBvdGVudGlhbGx5IHVuc2FmZSBkb29yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjY0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDI6NTAuMDIxNTcyMjI0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMyNzI2OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdmNjX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9jb21tb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDI6NTAuMDY2OTA4MTkzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyOTc4NDExMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBEaWFnbm9zdGljOiBFeHBvcnQgVmVyaWZpY2F0aW9uKipcblxuUmlnaHQsIGJlZm9yZSBkaXZpbmcgaW50byBhbnl0aGluZyBmdXJ0aGVyLCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGVzdGFibGlzaCBhIGJhc2VsaW5lLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBhbiBhY3R1YWwgZXhwb3J0IGlzc3VlIGFuZCBub3Qgc29tZXRoaW5nIGVsc2UuIFRoZXJlZm9yZSwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHNpbXBsZTogTGV0J3MgY2hlY2suIERvZXMgdGhpcyB0aGluZyBldmVuICpleHBvcnQqIGF0IGFsbD8gV2UgbmVlZCB0byBhc2NlcnRhaW4sIGNhdGVnb3JpY2FsbHksIGlmIHRoZSBwcm9jZXNzIGV2ZW4gaW5pdGlhdGVzLCBwcm9kdWNlcyBhbnkgb3V0cHV0IChyZWdhcmRsZXNzIG9mIGl0cyBjb3JyZWN0bmVzcyksIG9yIGlmIHRoZSBwcm9ibGVtIGxpZXMgcHJpb3IgdG8gdGhhdCBzdGFnZS4gSWYgdGhlcmUgaXMgbm8gZXhwb3J0LCBwZXJpb2QsIHRoZSBzdWJzZXF1ZW50IGludmVzdGlnYXRpdmUgcGF0aHdheXMgYXJlIGRyYXN0aWNhbGx5IGRpZmZlcmVudCB0aGFuIGlmIHRoZXJlIGlzIGFuIGV4cG9ydCB0aGF0IGlzIGZhaWxpbmcuIExldOKAmXMgZ2V0IHRoYXQgZXN0YWJsaXNoZWQgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MzAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMjo1NC4zNjQ3NTE4NzFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTMyMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9jb21tb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL2NvbW1vbi5jPTM0PXN0cnVjdCBobGlzdF9oZWFkIHZjY19oYXNoW1ZDQ19IVEFCTEVfU0laRV07XFxubmV0L2F0bS9jb21tb24uYzozNTpFWFBPUlRfU1lNQk9MKHZjY19oYXNoKTtcXG5uZXQvYXRtL2NvbW1vbi5jLTM2LVxcbm5ldC9hdG0vY29tbW9uLmM9Mzc9REVGSU5FX1JXTE9DSyh2Y2Nfc2tsaXN0X2xvY2spO1xcbm5ldC9hdG0vY29tbW9uLmM6Mzg6RVhQT1JUX1NZTUJPTCh2Y2Nfc2tsaXN0X2xvY2spO1xcbm5ldC9hdG0vY29tbW9uLmMtMzktXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jPTUwPXZvaWQgdmNjX2luc2VydF9zb2NrZXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2F0bS9jb21tb24uYy01NS19XFxubmV0L2F0bS9jb21tb24uYzo1NjpFWFBPUlRfU1lNQk9MKHZjY19pbnNlcnRfc29ja2V0KTtcXG5uZXQvYXRtL2NvbW1vbi5jLTU3LVxcbi0tXFxubmV0L2F0bS9jb21tb24uYz0yMDk9dm9pZCB2Y2NfcmVsZWFzZV9hc3luYyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgcmVwbHkpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTIxNy19XFxubmV0L2F0bS9jb21tb24uYzoyMTg6RVhQT1JUX1NZTUJPTCh2Y2NfcmVsZWFzZV9hc3luYyk7XFxubmV0L2F0bS9jb21tb24uYy0yMTktXFxubmV0L2F0bS9jb21tb24uYz0yMjA9dm9pZCB2Y2NfcHJvY2Vzc19yZWN2X3F1ZXVlKHN0cnVjdCBhdG1fdmNjICp2Y2MpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTIzNy19XFxubmV0L2F0bS9jb21tb24uYzoyMzg6RVhQT1JUX1NZTUJPTCh2Y2NfcHJvY2Vzc19yZWN2X3F1ZXVlKTtcXG5uZXQvYXRtL2NvbW1vbi5jLTIzOS1cXG5uZXQvYXRtL2NvbW1vbi5jPTI0MD12b2lkIGF0bV9kZXZfc2lnbmFsX2NoYW5nZShzdHJ1Y3QgYXRtX2RldiAqZGV2LCBjaGFyIHNpZ25hbClcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtMjU0LX1cXG5uZXQvYXRtL2NvbW1vbi5jOjI1NTpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfc2lnbmFsX2NoYW5nZSk7XFxubmV0L2F0bS9jb21tb24uYy0yNTYtXFxubmV0L2F0bS9jb21tb24uYz0yNTc9dm9pZCBhdG1fZGV2X3JlbGVhc2VfdmNjcyhzdHJ1Y3QgYXRtX2RldiAqZGV2KVxcbi0tXFxubmV0L2F0bS9jb21tb24uYy0yNzctfVxcbm5ldC9hdG0vY29tbW9uLmM6Mjc4OkVYUE9SVF9TWU1CT0woYXRtX2Rldl9yZWxlYXNlX3ZjY3MpO1xcbm5ldC9hdG0vY29tbW9uLmMtMjc5LVxcbi0tXFxubmV0L2F0bS9jb21tb24uYz04MDY9aW50IHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbi0tXFxubmV0L2F0bS9jb21tb24uYy04MDktfVxcbm5ldC9hdG0vY29tbW9uLmM6ODEwOkVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcik7XFxubmV0L2F0bS9jb21tb24uYy04MTEtXFxubmV0L2F0bS9jb21tb24uYz04MTI9dm9pZCB1bnJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbi0tXFxubmV0L2F0bS9jb21tb24uYy04MTUtfVxcbm5ldC9hdG0vY29tbW9uLmM6ODE2OkVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKTtcXG5uZXQvYXRtL2NvbW1vbi5jLTgxNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDI6NTQuNDA4Mjg3ODZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU0NTU5NDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGB2Y2NfY29ubmVjdGAqKlxuXG5BbHJpZ2h0LCBzbyBgdmNjX2Nvbm5lY3RgIGlzbid0IGEgZ2xvYmFsIHN5bWJvbC4gSXQgbG9va3MgbGlrZSBpdCdzIHN0cmljdGx5IGFuIGludGVybmFsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYG5ldC9hdG0vYCBkaXJlY3RvcnkuIFRoYXQncyBhIGxpdHRsZSBzdXJwcmlzaW5nLCBJIHdvdWxkIGhhdmUgYXNzdW1lZCBpdCB3YXMgbW9yZSB3aWRlbHkgdXNlZC4gQnV0IHdhaXQsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXNuJ3QgYHZjY19jb25uZWN0YCBpbnZva2VkIGJ5IGBzdmNfY29ubmVjdGA/IEknbSBwcmV0dHkgc3VyZSBJJ3ZlIHNlZW4gdGhhdCByZWxhdGlvbnNoaXAgYmVmb3JlLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBieSBwZWVraW5nIGludG8gYHN2Yy5jYCwganVzdCB0byB2ZXJpZnkgdGhlIGNhbGwgaGllcmFyY2h5LiBJJ20gZ29pbmcgdG8gd2FudCB0byBjb25maXJtIHRoZSBpbnRlcmFjdGlvbiwgYmVjYXVzZSBJIGZlZWwgbGlrZSBJJ20gbWlzc2luZyBjb250ZXh0IGhlcmUuIExldCBtZSBzZWUgd2hlcmUgYHN2Y19jb25uZWN0YCBnZXRzIGNhbGxlZCBmcm9tLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDU3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDI6NTkuOTUzODg0NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwODY1NjAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjY19jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vc3ZjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjAwLjAwMTk3NDc2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMDEwNzU2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKlF1aWNrIENoZWNrIEJlZm9yZSBEaWdnaW5nIERlZXBlcioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gZGlkbid0IEkgYWxyZWFkeSBsb29rIGF0IGBzdmMuY2A/IEkgY291bGQgaGF2ZSBzd29ybiBJIHdhcyBpbiB0aGF0IGZpbGUgZWFybGllci4gTGV0IG1lIGp1c3QgbWFrZSBzdXJlIEknbSBub3QgcmV0cmFjaW5nIHN0ZXBzIGhlcmUuIE9rYXksIHllcC4gSSBkZWZpbml0ZWx5IGFscmVhZHkgY2hlY2tlZCB0aGF0IG9uZS4gQWxyaWdodCwgbGV0J3Mga2VlcCBtb3ZpbmcuIElmIHRoZSBpc3N1ZSBpc24ndCBpbiB0aGUgbW9yZSBnZW5lcmFsIGBzdmMuY2AsIHRoZW4gSSBuZWVkIHRvIG5hcnJvdyB0aGUgc2NvcGUsIGxldCdzIGdvIGRlZXBlciBhbmQgY2hlY2sgdGhlIHNwZWNpZmljcyBmb3IgdGhlIGF0bSBuZXR3b3JrIGxheWVyLiBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGxvb2sgZm9yIHRoZSBgY29ubmVjdGAgZnVuY3Rpb25hbGl0eSBub3csIGFuZCBiYXNlZCBvbiB0aGUgZmlsZSBwYXRoLCBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgaXQgaW4gYG5ldC9hdG0vc3ZjLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc0MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjA3LjIwMzA1MjQxNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4NzY2MTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9zdmMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6MDcuMjQ3OTM0Njc1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjA2NTY2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIGNvZGU6XG5cbioqRGlnZ2luZyBpbnRvIE5ldHdvcmsgU2VydmljZSBDb25uZWN0aW9uKipcblxuSG1tLCBob2xkIG9uIGEgbWludXRlLiBJIHdhcyBleHBlY3RpbmcgdG8gZmluZCB0aGUgYGNvbm5lY3RgIGltcGxlbWVudGF0aW9uIGluIGBzdmMuY2AsIGJ1dCBpdCdzIG5vdCB0aGVyZS4gVGhhdCdzIHVudXN1YWwsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYSBzaG93LXN0b3BwZXIuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgbmV0d29yayBzZXJ2aWNlIGFyY2hpdGVjdHVyZSB1c2VzIHNvbWUgb3RoZXIgbWVhbnMgb2YgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBvciBwZXJoYXBzIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGlzIHNwcmVhZCBkaWZmZXJlbnRseSBhY3Jvc3MgdGhlIG5ldHdvcmtpbmcgc3RhY2suIFNpbmNlIEknbSB3b3JraW5nIHdpdGggQVRNIGluIHBhcnRpY3VsYXIsIGl0J3Mgd29ydGggY2hlY2tpbmcgdG8gc2VlIGhvdyBpdCBiaW5kcyB0byB0aGUgbmV0d29yay4gTGV0J3Mgc2VlIGlmIGBuZXQvYXRtL3N2Yy5jYCBjb250YWlucyB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgYmluZGluZy4gSSBzaG91bGQgZmluZCBpdCBpbiB0aGF0IGNvZGUgZmlsZSwgYXMgSSByZWNhbGwgdGhpcyBpcyBob3cgdGhlIEFUTSBkcml2ZXJzIGltcGxlbWVudCB0aGVpciBzZXJ2aWNlcy4gVGltZSB0byBnZXQgY29kaW5nLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTc2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6MTEuMjA4NTkzMTk4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDczMzcwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL3N2Yy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzoxMS4yNTkzMzEyMzdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0NTgxMzc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBTZXJ2aWNlIENvbnRyb2wgTGF5ZXIqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBzZXJ2aWNlIGNvbnRyb2wgbGF5ZXIgKGBzdmMuY2ApIHdvdWxkIGhhbmRsZSB0aGUgc29ja2V0IGJpbmRpbmcgYW5kIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gQnV0IGxvb2tpbmcgYmFjayBhdCB0aGUgY29kZSwgSSBkb24ndCBzZWUgYGJpbmRgIG9yIGBjb25uZWN0YCBjYWxscyBpbiBgc3ZjLmNgLiBIbW0sIHRoYXQncyB1bnVzdWFsLiBJdCdzIHRpbWUgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgbmV0L2F0bS9zdmMuY2AgZmlsZSBhbmQgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlc2UgY3J1Y2lhbCBuZXR3b3JrIGZ1bmN0aW9uIGNhbGxzLCB0byB1bmRlcnN0YW5kIHRoZWlyIGRlc2lnbiBjaG9pY2VzIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgbmV0d29ya2luZyBzdGFjayBhbmQgc2VlIHdoeSB0aGVzZSBpbXBvcnRhbnQgY2FsbHMgYXJlIG5vdCB3aXRoaW4gYHN2Yy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhvc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyBjYWxsZWQuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoYXQgQVRNLXNwZWNpZmljIHNlcnZpY2UgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzoxNS4zMDUxNDcyMDlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk1OTEsIkVycm9yIjoidGhlIGZpbGUgZG9lcyBub3QgZXhpc3QiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL3N2Yy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJ0aGUgZmlsZSBkb2VzIG5vdCBleGlzdFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzoxNS4zMDUxOTEzNThaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1Njk1MTM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBNaXNtYXRjaCBpbiBGaWxlcGF0aHMqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBzb21ldGhpbmcgYW5kIEkgaGl0IGEgc25hZy4gVGhlIHBhdGggcHJvdmlkZWQsIHNwZWNpZmljYWxseSBgc3ZjLmNgLCBpc24ndCB3b3JraW5nIGFzIGV4cGVjdGVkLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCBpdCdzIGp1c3QgYSBzaW1wbGUgdHlwbyBvciwgbW9yZSBsaWtlbHksIGEgbG9jYXRpb24gaXNzdWUuIFRoaXMgaXMgcHJldHR5IGNvbW1vbjsgdGhlc2UgdGhpbmdzIHNoaWZ0IGFyb3VuZCwgZXNwZWNpYWxseSBpbiBvbGRlciBjb2RlYmFzZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIGxldCdzIGNvbmZpcm0gdGhlIGludGVuZGVkIGxvY2F0aW9uLiBJcyB0aGlzIGFjdHVhbGx5IGluIHRoZSBgbmV0L2F0bS9gIGRpcmVjdG9yeT9cIiBJdCdzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSBJJ20gbG9va2luZyBpbiB0aGUgcmlnaHQgc3BvdCwgY29uc2lkZXJpbmcgdGhlIG5ldHdvcmtpbmcgY29udGV4dCBzZWVtcyB0byBiZSBpbXBsaWVkLiBOb3cgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyBleGlzdGVuY2UgdGhlcmUsIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0OTcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjE5LjU2MjE0NDQyN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwibmV0L2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYXRtX21pc2MuY1wiLFxuICAgIFwiYXRtX3N5c2ZzLmNcIixcbiAgICBcImJyMjY4NC5jXCIsXG4gICAgXCJjb21tb24uY1wiLFxuICAgIFwiY29tbW9uLmhcIixcbiAgICBcImlvY3RsLmNcIixcbiAgICBcInBwcG9hdG0uY1wiLFxuICAgIFwicHJvYy5jXCIsXG4gICAgXCJwcm90b2NvbHMuaFwiLFxuICAgIFwicHZjLmNcIixcbiAgICBcInJhdy5jXCIsXG4gICAgXCJyZXNvdXJjZXMuY1wiLFxuICAgIFwicmVzb3VyY2VzLmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6MTkuNTYyMTk2MDQ3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzYzNDE5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipNaXNzaW5nIFNWQy5DIGFuZCBQb3RlbnRpYWwgUFZDIENvbm5lY3Rpb24gUGl0ZmFsbHMqKlxuXG5SaWdodCwgdGhlcmUncyBubyBgc3ZjLmNgIHRvIGNvbnNpZGVyIGhlcmUuIFRoYXQncyBnb29kLCBvbmUgbGVzcyBwbGFjZSB0byBjaGVjayBmb3IgYHZjY19jb25uZWN0YCBjYWxscy4gT2theSwgc28gaXQgbG9va3MgbGlrZSBgcHZjLmNgIGlzIHRoZSBvbmx5IGZpbGUgZGlyZWN0bHkgY2FsbGluZyBgdmNjX2Nvbm5lY3RgLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLCBidXTigKYgd2FpdCBhIG1pbnV0ZS4gQW0gSSBiZWluZyB0b28gaGFzdHk/IEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZS4gV2hhdCBhYm91dCB0aGUgcG90ZW50aWFsIGZvciBpbmRpcmVjdCBjYWxscyB0aHJvdWdoIG90aGVyIG1vZHVsZXM/IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHJ1bGUgb3V0IGBwcHBvYXRtLmNgIGFuZCBgYnIyNjg0LmNgLiBUaG9zZSBhcmUgY2xhc3NpYyBhcmVhcyB0aGF0IGNvdWxkIGJlIGludGVyYWN0aW5nIHdpdGggdGhlIEFUTSBsYXllciwgcGVyaGFwcyBlc3RhYmxpc2hpbmcgUFZDIGNvbm5lY3Rpb25zIHRocm91Z2ggYSBkaWZmZXJlbnQgaW50ZXJmYWNlIHRoYXQgKnVsdGltYXRlbHkqIHRyaWdnZXJzIGB2Y2NfY29ubmVjdGAgY2FsbHMuIEkgbmVlZCB0byBzY2FuIHRob3NlIGZpbGVzLCBhbmQgbWF5YmUgdGhlIHJlbGF0ZWQgaW5jbHVkZSBmaWxlcywgcmlnaHQgbm93IHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLiBXZSBuZWVkIHRvIGJlIGV4aGF1c3RpdmUgdG8gYXZvaWQgY2hhc2luZyByZWQgaGVycmluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODMzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjI0LjA5ODU0MDcxMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMjk3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNjX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9jb21tb24uYz0zMzA9c3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxcbi0tXFxubmV0L2F0bS9jb21tb24uYy0zNzctXFxubmV0L2F0bS9jb21tb24uYzozNzg6c3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSxcXG5uZXQvYXRtL2NvbW1vbi5jLTM3OS1cXHRcXHRcXHQgaW50IHZjaSlcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtNDU3LVxcbm5ldC9hdG0vY29tbW9uLmM6NDU4OmludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXFxubmV0L2F0bS9jb21tb24uYy00NTkte1xcbi0tXFxubmV0L2F0bS9jb21tb24uYy01MDUtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxubmV0L2F0bS9jb21tb24uYzo1MDY6XFx0ZXJyb3IgPSBfX3ZjY19jb25uZWN0KHZjYywgZGV2LCB2cGksIHZjaSk7XFxubmV0L2F0bS9jb21tb24uYy01MDctXFx0aWYgKGVycm9yKSB7XFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5oPTE1PWludCB2Y2NfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKTtcXG5uZXQvYXRtL2NvbW1vbi5oOjE2OmludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpO1xcbm5ldC9hdG0vY29tbW9uLmgtMTctaW50IHZjY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsXFxuLS1cXG5uZXQvYXRtL3B2Yy5jPTI3PXN0YXRpYyBpbnQgcHZjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxcbi0tXFxubmV0L2F0bS9wdmMuYy01MS1cXHR9XFxubmV0L2F0bS9wdmMuYzo1MjpcXHRlcnJvciA9IHZjY19jb25uZWN0KHNvY2ssIGFkZHItXFx1MDAzZXNhcF9hZGRyLml0ZiwgYWRkci1cXHUwMDNlc2FwX2FkZHIudnBpLFxcbm5ldC9hdG0vcHZjLmMtNTMtXFx0XFx0XFx0ICAgIGFkZHItXFx1MDAzZXNhcF9hZGRyLnZjaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjI0LjE0Mjc3NDAyMVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzQwMjI1MzEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0OlxuXG4qKk5hcnJvd2luZyBEb3duIHRoZSBTY29wZSoqXG5cbkFscmlnaHQsIHRoZSBpbml0aWFsIGFuYWx5c2lzIGluZGljYXRlcyB0aGF0IGB2Y2NfY29ubmVjdGAgaXMgZXhjbHVzaXZlbHkgY2FsbGVkIGJ5IGBwdmMuY2AuIFRoYXQncyBhIHN0cm9uZyBzdGFydGluZyBwb2ludC4gTXkgZm9jdXMsIHRoZW4sIHNoaWZ0cyB0byB1bmRlcnN0YW5kaW5nIGhvdyBgcHZjLmNgIHV0aWxpemVzIHRoaXMgZnVuY3Rpb24sIHNvIEknbGwgY29uY2VudHJhdGUgb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBwdmNfYmluZGAgYW5kIGBwdmNfY29ubmVjdGAuIEhvd2V2ZXIsIEkgbmVlZCB0byBrZWVwIGB2Y2NfY29ubmVjdGAgaXRzZWxmIGluIG1pbmQgYXMgYSBrZXkgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgc3lzdGVtLiBMZXQgbWUgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgcHZjX2JpbmRgIGFuZCBgcHZjX2Nvbm5lY3RgIHdpdGhpbiBgcHZjLmNgIHRvIHNlZSBob3cgdGhleSBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzozNy41NDUwMjkwOTdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9wdmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0LyogbmV0L2F0bS9wdmMuYyAtIEFUTSBQVkMgc29ja2V0cyAqL1xcbiAgIDM6XFx0XFxuICAgNDpcXHQvKiBXcml0dGVuIDE5OTUtMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqL1xcbiAgIDU6XFx0XFxuICAgNjpcXHRcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXQuaFxcdTAwM2VcXHRcXHQvKiBzdHJ1Y3Qgc29ja2V0LCBzdHJ1Y3QgcHJvdG9fb3BzICovXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYXRtLmhcXHUwMDNlXFx0XFx0LyogQVRNIHN0dWZmICovXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYXRtZGV2LmhcXHUwMDNlXFx0LyogQVRNIGRldmljZXMgKi9cXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnJuby5oXFx1MDAzZVxcdC8qIGVycm9yIGNvZGVzICovXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFx0LyogcHJpbnRrICovXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG9wcy5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFx0XFx0LyogZm9yIHNvY2tfbm9fKiAqL1xcbiAgMTc6XFx0XFxuICAxODpcXHQjaW5jbHVkZSBcXFwicmVzb3VyY2VzLmhcXFwiXFx0XFx0LyogZGV2cyBhbmQgdmNjcyAqL1xcbiAgMTk6XFx0I2luY2x1ZGUgXFxcImNvbW1vbi5oXFxcIlxcdFxcdC8qIGNvbW1vbiBmb3IgUFZDcyBhbmQgU1ZDcyAqL1xcbiAgMjA6XFx0XFxuICAyMTpcXHRcXG4gIDIyOlxcdHN0YXRpYyBpbnQgcHZjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpXFxuICAyMzpcXHR7XFxuICAyNDpcXHRcXHRyZXR1cm4gMDtcXG4gIDI1OlxcdH1cXG4gIDI2OlxcdFxcbiAgMjc6XFx0c3RhdGljIGludCBwdmNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqc29ja2FkZHIsXFxuICAyODpcXHRcXHRcXHQgICAgaW50IHNvY2thZGRyX2xlbilcXG4gIDI5OlxcdHtcXG4gIDMwOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiAgMzE6XFx0XFx0c3RydWN0IHNvY2thZGRyX2F0bXB2YyAqYWRkcjtcXG4gIDMyOlxcdFxcdHN0cnVjdCBhdG1fdmNjICp2Y2M7XFxuICAzMzpcXHRcXHRpbnQgZXJyb3I7XFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdGlmIChzb2NrYWRkcl9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKVxcbiAgMzY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICAzNzpcXHRcXHRhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKilzb2NrYWRkcjtcXG4gIDM4OlxcdFxcdGlmIChhZGRyLVxcdTAwM2VzYXBfZmFtaWx5ICE9IEFGX0FUTVBWQylcXG4gIDM5OlxcdFxcdFxcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xcbiAgNDA6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gIDQxOlxcdFxcdHZjYyA9IEFUTV9TRChzb2NrKTtcXG4gIDQyOlxcdFxcdGlmICghdGVzdF9iaXQoQVRNX1ZGX0hBU1FPUywgXFx1MDAyNnZjYy1cXHUwMDNlZmxhZ3MpKSB7XFxuICA0MzpcXHRcXHRcXHRlcnJvciA9IC1FQkFERkQ7XFxuICA0NDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDQ1OlxcdFxcdH1cXG4gIDQ2OlxcdFxcdGlmICh0ZXN0X2JpdChBVE1fVkZfUEFSVElBTCwgXFx1MDAyNnZjYy1cXHUwMDNlZmxhZ3MpKSB7XFxuICA0NzpcXHRcXHRcXHRpZiAodmNjLVxcdTAwM2V2cGkgIT0gQVRNX1ZQSV9VTlNQRUMpXFxuICA0ODpcXHRcXHRcXHRcXHRhZGRyLVxcdTAwM2VzYXBfYWRkci52cGkgPSB2Y2MtXFx1MDAzZXZwaTtcXG4gIDQ5OlxcdFxcdFxcdGlmICh2Y2MtXFx1MDAzZXZjaSAhPSBBVE1fVkNJX1VOU1BFQylcXG4gIDUwOlxcdFxcdFxcdFxcdGFkZHItXFx1MDAzZXNhcF9hZGRyLnZjaSA9IHZjYy1cXHUwMDNldmNpO1xcbiAgNTE6XFx0XFx0fVxcbiAgNTI6XFx0XFx0ZXJyb3IgPSB2Y2NfY29ubmVjdChzb2NrLCBhZGRyLVxcdTAwM2VzYXBfYWRkci5pdGYsIGFkZHItXFx1MDAzZXNhcF9hZGRyLnZwaSxcXG4gIDUzOlxcdFxcdFxcdFxcdCAgICBhZGRyLVxcdTAwM2VzYXBfYWRkci52Y2kpO1xcbiAgNTQ6XFx0b3V0OlxcbiAgNTU6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gIDU2OlxcdFxcdHJldHVybiBlcnJvcjtcXG4gIDU3OlxcdH1cXG4gIDU4OlxcdFxcbiAgNTk6XFx0c3RhdGljIGludCBwdmNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqc29ja2FkZHIsXFxuICA2MDpcXHRcXHRcXHQgICAgICAgaW50IHNvY2thZGRyX2xlbiwgaW50IGZsYWdzKVxcbiAgNjE6XFx0e1xcbiAgNjI6XFx0XFx0cmV0dXJuIHB2Y19iaW5kKHNvY2ssIHNvY2thZGRyLCBzb2NrYWRkcl9sZW4pO1xcbiAgNjM6XFx0fVxcbiAgNjQ6XFx0XFxuICA2NTpcXHRzdGF0aWMgaW50IHB2Y19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuICA2NjpcXHRcXHRcXHRcXHQgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuICA2NzpcXHR7XFxuICA2ODpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVxcdTAwM2VzaztcXG4gIDY5OlxcdFxcdGludCBlcnJvcjtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gIDcyOlxcdFxcdGVycm9yID0gdmNjX3NldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4gIDczOlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuICA3NDpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuICA3NTpcXHR9XFxuICA3NjpcXHRcXG4gIDc3OlxcdHN0YXRpYyBpbnQgcHZjX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gIDc4OlxcdFxcdFxcdFxcdCAgc29ja29wdF90ICpvcHQpXFxuICA3OTpcXHR7XFxuICA4MDpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVxcdTAwM2VzaztcXG4gIDgxOlxcdFxcdGludCBlcnJvcjtcXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gIDg0OlxcdFxcdGVycm9yID0gdmNjX2dldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdCk7XFxuICA4NTpcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiAgODY6XFx0XFx0cmV0dXJuIGVycm9yO1xcbiAgODc6XFx0fVxcbiAgODg6XFx0XFxuICA4OTpcXHRzdGF0aWMgaW50IHB2Y19nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc29ja2FkZHIsXFxuICA5MDpcXHRcXHRcXHQgICAgICAgaW50IHBlZXIpXFxuICA5MTpcXHR7XFxuICA5MjpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICphZGRyO1xcbiAgOTM6XFx0XFx0c3RydWN0IGF0bV92Y2MgKnZjYyA9IEFUTV9TRChzb2NrKTtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0aWYgKCF2Y2MtXFx1MDAzZWRldiB8fCAhdGVzdF9iaXQoQVRNX1ZGX0FERFIsIFxcdTAwMjZ2Y2MtXFx1MDAzZWZsYWdzKSlcXG4gIDk2OlxcdFxcdFxcdHJldHVybiAtRU5PVENPTk47XFxuICA5NzpcXHRcXHRhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKilzb2NrYWRkcjtcXG4gIDk4OlxcdFxcdG1lbXNldChhZGRyLCAwLCBzaXplb2YoKmFkZHIpKTtcXG4gIDk5OlxcdFxcdGFkZHItXFx1MDAzZXNhcF9mYW1pbHkgPSBBRl9BVE1QVkM7XFxuIDEwMDpcXHRcXHRhZGRyLVxcdTAwM2VzYXBfYWRkci5pdGYgPSB2Y2MtXFx1MDAzZWRldi1cXHUwMDNlbnVtYmVyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzozNy41NDUxMjIyNzdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTUwNTQyMTU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQVRNIFBWQyBDb25uZWN0aW9uIGluIHRoZSBMaW51eCBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIEFUTSBQVkMgY29ubmVjdGlvbnMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBgcHZjX2JpbmRgIGFuZCBgcHZjX2Nvbm5lY3RgIGFyZSBzdGF0aWMgZnVuY3Rpb25zIOKAkyB0aGV5J3JlIG5vdCBlbnRyeSBwb2ludHMgb2YgaW50ZXJlc3QgZm9yIGV4dGVybmFsIGludGVyYWN0aW9uLiBCdXQgYHZjY19jb25uZWN0YC4uLiB0aGF0IG9uZSdzIGludGVyZXN0aW5nLiBJdCdzICpub3QqIHN0YXRpYywgYW5kIGl0IHNlZW1zIHRvIGJlIG15IGJlc3QgYmV0IGZvciBhIGNlbnRyYWwgc3ltYm9sIHRvIGZvY3VzIG9uLiBMZXQgbWUgc2VlLi4uIGB2Y2NfY29ubmVjdGAgaXMgZGVjbGFyZWQgaW4gYG5ldC9hdG0vY29tbW9uLmhgIGFuZCBkZWZpbmVkIGluIGBuZXQvYXRtL2NvbW1vbi5jYCwgY29uZmlybWluZyBpdCdzIGEgY3JpdGljYWwgcGllY2UuXG5cblRoZSBwYXRjaCBtb2RpZmllcyBgZmluZF9jaWAgYW5kIGBfX3ZjY19jb25uZWN0YCwgYW5kIGB2Y2NfY29ubmVjdGAgY2FsbHMgYF9fdmNjX2Nvbm5lY3RgLiBUaGVyZWZvcmUsIGB2Y2NfY29ubmVjdGAgaXMgbXkgcHJpbWFyeSBmb2N1czsgSSBzaG91bGQgc3RhcnQgdGhlcmUuXG5cbk5vdywgaG93IGNhbiBJIGFjdHVhbGx5ICp0ZXN0KiB0aGlzIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gQVRNJ3MgYSBuZXR3b3JraW5nIHByb3RvY29sLCBzbyBpZGVhbGx5LCBpdCBzaG91bGQgYmUgdGVzdGFibGUgdmlhIHRoZSBzb2NrZXQgQVBJLCBzcGVjaWZpY2FsbHkgdXNpbmcgc29tZXRoaW5nIGxpa2UgYHNvY2tldChBRl9BVE1QVkMsIFNPQ0tfREdSQU0sIDApYC4gQWgsIGBBRl9BVE1QVkNgIGlzIHRoZSBhZGRyZXNzIGZhbWlseSA4IOKAkyBnb29kLCB0aGF0J3MgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuIE5vIHNwZWNpYWwgaGFyZHdhcmUgcmVxdWlyZWQgdGhlcmUsIGF0IGxlYXN0IGluIHByaW5jaXBsZS5cblxuQnV0IHdhaXQsIGRvZXMgdGhpcyBpbXBseSB0aGF0IHRoZXJlICpuZWVkcyogdG8gYmUgYW4gYWN0dWFsIEFUTSBkZXZpY2UgcHJlc2VudCBmb3IgaXQgdG8gd29yaz8gTG9va2luZyBhdCBgdmNjX2Nvbm5lY3RgLCBpdCB0YWtlcyBhbiBgaXRmYCAoaW50ZXJmYWNlIG51bWJlcikgYXMgaW5wdXQuIElmIG5vIEFUTSBkZXZpY2UgaXMgY29uZmlndXJlZCwgdGhlbiBgdmNjX2Nvbm5lY3RgIHdpbGwgbGlrZWx5IGZhaWwgYXQgdGhlIGBkZXYgPSBhdG1fZGV2X2xvb2t1cChpdGYpO2AgY2FsbC4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIGEgc29mdHdhcmUgQVRNIGRldmljZSwgb3IsIGlmIG5vdCwgaWYgdGhlcmUncyBzb21lIHdheSBJIGNhbiB0ZXN0IHRoaXMgd2l0aG91dCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzM3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6NDcuMDUwNTQ1OTdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTIxOTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0bV9kZXZfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9yZXNvdXJjZXMuYz02OT1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTtcXG5uZXQvYXRtL3Jlc291cmNlcy5jLTcwLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmM6NzE6c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzItXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsIGludCBudW1iZXIsXFxuLS1cXG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMS19XFxubmV0L2F0bS9yZXNvdXJjZXMuYzoxMzI6RVhQT1JUX1NZTUJPTChhdG1fZGV2X3JlZ2lzdGVyKTtcXG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6NDcuMDk0MDcwODE5WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMDkxMDIwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIEFUTSBEcml2ZXIgUmVnaXN0cmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIHZlcmlmeSB0aGUgZHJpdmVyIHJlZ2lzdHJhdGlvbnMgZm9yIEFUTSBkZXZpY2VzLlwiIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGluIHBsYWNlIGZvciB0aG9zZSBBVE0gZGV2aWNlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZHJpdmVycyBhcmUgY29ycmVjdGx5IGluc3RhbGxlZCBhbmQgcHJvcGVybHkgY29uZmlndXJlZCwgYW5kIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBzeXN0ZW0gcmVnaXN0cnkgb3IgYSBzaW1pbGFyIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBzeXN0ZW0uIEknbSBsaWtlbHkgY29uY2VybmVkIGFib3V0IHBvdGVudGlhbCBjb25mbGljdHMsIHZlcnNpb24gbWlzbWF0Y2hlcywgb3IgZXZlbiB1bnNpZ25lZCBkcml2ZXJzIHRoYXQgY291bGQgaW50cm9kdWNlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBhbHNvIG1ha2VzIG1lIHdvbmRlciBpZiB0aGVyZSdzIGFueSBwZW5kaW5nIHVwZGF0ZSB0byB0aG9zZSBkcml2ZXJzLiBBcmUgdGhleSB1cC10by1kYXRlIHdpdGggdGhlIGxhdGVzdCBzZWN1cml0eSBwYXRjaGVzIGFuZCBmZWF0dXJlcz8gQW5kIEknZCBiZXR0ZXIgY29uZmlybSB0aGUgQVRNIGRldmljZXMgYXJlIHNob3dpbmcgY29ycmVjdGx5IHVuZGVyIGRldmljZSBtYW5hZ2VyLiBVbHRpbWF0ZWx5LCBpdCdzIGFib3V0IGNvbmZpcm1pbmcgdGhlIHN5c3RlbSBpcyBpbiBhIHNlY3VyZSwgc3RhYmxlLCBhbmQgY29tcGxpYW50IHN0YXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIzMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjU0LjMwMzE3NTQ5NVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NjgwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtX2Rldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hdG0vc29sb3MtcGNpLmM9MTM0OD1zdGF0aWMgaW50IGF0bV9pbml0KHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpXFxuLS1cXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzU4LVxcbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jOjEzNTk6XFx0XFx0Y2FyZC1cXHUwMDNlYXRtZGV2W2ldID0gYXRtX2Rldl9yZWdpc3RlcihcXFwic29sb3MtcGNpXFxcIiwgcGFyZW50LCBcXHUwMDI2ZnBnYV9vcHMsIC0xLCBOVUxMKTtcXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzYwLVxcdFxcdGlmICghY2FyZC1cXHUwMDNlYXRtZGV2W2ldKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjU0LjM0ODY0Nzc5NFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTA3Nzg4MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzpcblxuKipDb250ZW1wbGF0aW5nIHRoZSBTY29wZSBvZiB0aGUgU2l0dWF0aW9uKipcblxuSG1tLCBcIkFyZSB0aGVyZSBhbnkgb3RoZXIgQVRNIGRyaXZlcnM/XCIgVGhpcyBpbXBsaWVzIGEgY29udGV4dCwgYW5kIEkgbmVlZCB0byBjb25zaWRlciBpdCBpbW1lZGlhdGVseS4gTXkgbWluZCBpbW1lZGlhdGVseSBiZWdpbnMgdG8gYnJhbmNoIG91dDogaXMgdGhpcyBhYm91dCBhIHNwZWNpZmljIHN5c3RlbT8gQSBwYXJ0aWN1bGFyIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uPyBUaGUgc2VjdXJpdHkgcHJvdG9jb2xzIGludm9sdmVkPyBBcmUgd2UgdGFsa2luZyBhYm91dCB0aGUgcGh5c2ljYWwgbWVjaGFuaXNtcyBvZiB0aGUgQVRNIGl0c2VsZiwgb3IgdGhlIG5ldHdvcmsgdGhhdCBzdXBwb3J0cyBpdD8gT3IsIHBlcmhhcHMsIGlzIGl0IHNvbWV0aGluZyBjb21wbGV0ZWx5IGVzb3RlcmljLCBldmVuIGFic3RyYWN0PyBJcyB0aGlzIHF1ZXN0aW9uIG1lYW50IHRvIGJlIHRha2VuIGxpdGVyYWxseSwgb3IgaXMgaXQgYSBtZXRhcGhvcj8gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIHNpbXBsaWNpdHkgb2YgdGhlIHF1ZXN0aW9uIGZlZWxzLi4uIG1pc2xlYWRpbmcuIE15IGluaXRpYWwgcmVzcG9uc2Ugd291bGQgYmUgdG8ga25vdyB3aGF0IHRoZSBiYWNrZ3JvdW5kIGlzLiBJIG5lZWQgdG8ga25vdyB0aGUgd2h5IGFuZCB3aGF0IG9mIHRoZSBxdWVzdGlvbi4gV2l0aG91dCB0aGF0LCB0aGVyZSBhcmUgdG9vIG1hbnkgcG9zc2liaWxpdGllcyB0byBjb25zaWRlci4gSSBzdXBwb3NlIGl0IGNvdWxkIG1lYW4gc29tZXRoaW5nIGFzIHN0cmFpZ2h0Zm9yd2FyZCBhcywgXCJBcmUgdGhlcmUgb3RoZXIgY29tcGFuaWVzIHRoYXQgYnVpbGQgdGhlIHBoeXNpY2FsIGRyaXZpbmcgbWVjaGFuaXNtcyBvZiB0aGVzZSBtYWNoaW5lcz9cIiwgYnV0IHRoYXQgZmVlbHMgdG9vIGJhc2ljLCBhbG1vc3QgbmFpdmUuIFRoZSBxdWVzdGlvbiBoYXMgdG8gYmUgbW9yZSBudWFuY2VkIHRvIGJlIGEgd29ydGh3aGlsZSBxdWVzdGlvbi4gVGhlcmVmb3JlLCBpZiBJIHdlcmUgdG8gdW5wYWNrIHRoaXMgdG8gc29tZW9uZSB3aXRoIG15IGxldmVsIG9mIGV4cGVydGlzZSwgSSB3b3VsZCBsaWtlbHkgcmVzcG9uZCBieSBhc2tpbmcgYSBzZXJpZXMgb2YgY2xhcmlmeWluZyBxdWVzdGlvbnMsIGFuZCBiZWdpbiB0byBjb25zaWRlciBhbGwgcG9zc2libGUgaW50ZXJwcmV0YXRpb25zIGJlZm9yZSBwcm92aWRpbmcgYSBkZWZpbml0aXZlIGFuc3dlci4gSXQncyB0aGUgbW9zdCBhcHByb3ByaWF0ZSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjU4LjQ1NjQzODAxNVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1Njk0NTg4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdG1fZGV2X3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6NTguNTgyMTQwMzEzWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzQyNDkyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUENJIERyaXZlciBJbnF1aXJ5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgdGhyb3VnaCB0aGUgZHJpdmVyIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL2F0bS9gLCBhbmQgSSBzcG90IGBzb2xvcy1wY2kuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldhaXQgYSBtaW51dGUsIGFyZSB0aGVyZSAqb3RoZXIqIFBDSSBkcml2ZXJzIGluIGhlcmUgdGhhdCBJJ20gb3Zlcmxvb2tpbmc/XCIgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoaXMgaXMgdGhlIG9ubHkgb25lIG9yIGlmIHRoZXJlJ3MgYSBmYW1pbHkgb2YgUENJLWJhc2VkIEFUTSBkcml2ZXJzLiBUaW1lIHRvIHRha2UgYSBicm9hZGVyIGxvb2sgYW5kIGZpbmQgb3V0LiBUaGlzIGNvdWxkIGJlIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIEFUTSBkcml2ZXIgc3VwcG9ydCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTQ1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDQ6MDMuMjU2MzkxMjk2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwic29sb3MtYXR0cmxpc3QuY1wiLFxuICAgIFwic29sb3MtcGNpLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDQ6MDMuMjU2NDM2Njc2WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Mjk2Mzc3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBBVE0gRGV2aWNlIERyaXZlcnMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIHRoYXQgd2UgaGFkIGEgYnJvYWRlciByYW5nZSBvZiBBVE0gKEFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlKSBkcml2ZXJzLCBtYXliZSBldmVuIHNvbWUgbW9yZSByZWNlbnQgYWRkaXRpb25zLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdC4gU28sIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGBuZXQvYXRtL2AgZGlyZWN0b3J5IHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gSSdtIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGZvciBhbnkgcGxhY2Vob2xkZXIgb3IgXCJkdW1teVwiIGRldmljZSBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgcXVpY2sgY2hlY2sgd2lsbCBjb25maXJtIGlmIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgQVRNIGRyaXZlciBsYW5kc2NhcGUgaXMgYWNjdXJhdGUgYW5kIHByZXZlbnQgbWUgZnJvbSBnb2luZyBkb3duIGEgd3JvbmcgcGF0aC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBpbmNsdWRlZCBmb3IgdGVzdGluZyBvciBleHBlcmltZW50YWwgcHVycG9zZXMuIFRoaXMgY291bGQgc2F2ZSBtZSBhIGJ1bmNoIG9mIHRpbWUgaW4gdGhlIGxvbmcgcnVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjEzNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDowNy43ODYwNzY0OFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3NDczNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtX2Rldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL3Jlc291cmNlcy5jPTY5PUVYUE9SVF9TWU1CT0woYXRtX2Rldl9sb29rdXApO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXFxubmV0L2F0bS9yZXNvdXJjZXMuYzo3MTpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxubmV0L2F0bS9yZXNvdXJjZXMuYy03Mi1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcXG4tLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMxLX1cXG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDowNy44Mjk4MjY3MVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODMwNzI2MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgRHJpdmVyIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGF0bV9kZXZfcmVnaXN0ZXJgIGlzIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIGl0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgdGhvdWdodC4gSWYgKnRoYXQqIGZ1bmN0aW9uIGlzIHZpc2libGUsIGlzIGl0IHBhcnQgb2YgYSBicm9hZGVyLCBtb3JlIGdlbmVyYWwgZnJhbWV3b3JrPyBNeSBpbW1lZGlhdGUgaW1wdWxzZSBpcyB0byBzdGFydCBtYXBwaW5nIHRoZSBsYW5kc2NhcGUuIEFyZSB0aGVyZSBvdGhlciBkcml2ZXJzIHdpdGhpbiB0aGlzIHN5c3RlbT8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZS4gQXJlIHdlIGxvb2tpbmcgYXQgYSB0aWdodGx5IGNvdXBsZWQsIHNwZWNpZmljIHNldCBvZiBtb2R1bGVzLCBvciBkb2VzIHRoaXMgaW5kaWNhdGUgYSBtb3JlIGdlbmVyaWMgZHJpdmVyIHJlZ2lzdHJhdGlvbiBtZWNoYW5pc20gdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhpcyBpcyBhIGNvcm5lciBjYXNlIG9yIGlmIEkndmUgc3R1bWJsZWQgdXBvbiBhIGZvdW5kYXRpb25hbCBwaWVjZSBvZiB0aGlzIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MTAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDoxNi42NjA1NTQ5NzJaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTUwOTQzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtX2Rldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hdG0vc29sb3MtcGNpLmM9MTM0OD1zdGF0aWMgaW50IGF0bV9pbml0KHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpXFxuLS1cXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzU4LVxcbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jOjEzNTk6XFx0XFx0Y2FyZC1cXHUwMDNlYXRtZGV2W2ldID0gYXRtX2Rldl9yZWdpc3RlcihcXFwic29sb3MtcGNpXFxcIiwgcGFyZW50LCBcXHUwMDI2ZnBnYV9vcHMsIC0xLCBOVUxMKTtcXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzYwLVxcdFxcdGlmICghY2FyZC1cXHUwMDNlYXRtZGV2W2ldKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM9OTAxPXN0YXRpYyBpbnQgdXNiYXRtX2F0bV9pbml0KHN0cnVjdCB1c2JhdG1fZGF0YSAqaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTA5LVxcdCAqIGFib3J0IGlmIGF0bV9kZXYtXFx1MDAzZWRldl9kYXRhIGlzIE5VTEwuICovXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjkxMDpcXHRhdG1fZGV2ID0gYXRtX2Rldl9yZWdpc3RlcihpbnN0YW5jZS1cXHUwMDNlZHJpdmVyX25hbWUsXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTkxMS1cXHRcXHRcXHRcXHQgICBcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZXVzYl9pbnRmLVxcdTAwM2VkZXYsIFxcdTAwMjZ1c2JhdG1fYXRtX2Rldm9wcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg9MTUyPWV4dGVybiByd2xvY2tfdCB2Y2Nfc2tsaXN0X2xvY2s7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTE1NS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjE1NjpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0xNTctXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsXFxuLS1cXG5uZXQvYXRtL3Jlc291cmNlcy5jPTY5PUVYUE9SVF9TWU1CT0woYXRtX2Rldl9sb29rdXApO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXFxubmV0L2F0bS9yZXNvdXJjZXMuYzo3MTpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxubmV0L2F0bS9yZXNvdXJjZXMuYy03Mi1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcXG4tLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMxLX1cXG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDoxOC4yMTU2NTM5WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MTc3MzQwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVVNCIEFUTSBEZXZpY2UgUmVnaXN0cmF0aW9uIGFuZCBFbXVsYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyByZWdpc3RlcnMgYW4gQVRNIGRldmljZSwgd2hpY2ggaXMgcmVsZXZhbnQuIFRoaW5raW5nIGFib3V0IGZ1enppbmcgYW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YgYHN5emthbGxlcmAsIHBhcnRpY3VsYXJseSB3aXRoIHRoZSB1c2Ugb2YgYGR1bW15X2hjZGAgb3IgYHJhdy1nYWRnZXRgIGZvciBVU0IgZW11bGF0aW9uLCB0aGlzIGdldHMgbWUgdGhpbmtpbmcuIElmIHdlIHdhbnQgdG8gdGFyZ2V0IFVTQiBBVE0gZnVuY3Rpb25hbGl0eSwgZW5hYmxpbmcgYFVTQl9BVE1gIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzZWVtcyBsaWtlIGEgc29saWQgZmlyc3Qgc3RlcC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIHNlZSB3aGF0IG90aGVyIGRlcGVuZGVudCBvcHRpb25zIG1pZ2h0IGJlIGx1cmtpbmcgaW4gdGhlcmUuIEl0J3MgYWxsIGFib3V0IHN0cmF0ZWdpYyBjb25maWd1cmF0aW9uIGZvciBlZmZlY3RpdmUgZnV6emluZywgeW91IGtub3chXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjUwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDQ6MjMuODMzMzkwMzA5WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc1NzIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX0FUTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy01LVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjY6bWVudWNvbmZpZyBVU0JfQVRNXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVVNCIERTTCBtb2RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDoyMy44NzgxNTEyODhaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU4NzA0Mjk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBVU0JfQVRNYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBsaW5lYWdlIG9mIGBVU0JfQVRNYC4gV2UncmUgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgbW9kdWxlLCBsaWtlbHkgaW4gdGhlIGtlcm5lbCBvciBzb21lIGVtYmVkZGVkIHN5c3RlbSwgdGhhdCBoYW5kbGVzIEFUTSBvdmVyIFVTQi4gVGhlcmVmb3JlLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBtYXAgb3V0IGl0cyBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBzeXN0ZW0gY29tcG9uZW50cyBkb2VzIGBVU0JfQVRNYCByZWx5IHVwb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBJcyBpdCBib3VuZCB0byBzcGVjaWZpYyBVU0IgaG9zdCBjb250cm9sbGVyIGRyaXZlcnM/IERvZXMgaXQgbmVlZCBjZXJ0YWluIEFUTSBuZXR3b3JrIGludGVyZmFjZXMgb3IgcHJvdG9jb2xzIHRvIGJlIGFjdGl2ZT8gRG9lcyBpdCByZXF1aXJlIGFueSBzdXBwb3J0aW5nIFVTQiBjbGFzcyBkcml2ZXJzLCBvciBwZXJoYXBzIHNwZWNpZmljIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVycz8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgZWNvc3lzdGVtLCB1bmRlcnN0YW5kaW5nIHdoZXJlIGl0IHNpdHMgaW4gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIGFuZCB3aGF0IGl0IGxlYW5zIG9uIHRvIGRvIGl0cyBqb2IuIEl04oCZcyBsaWtlIHRyYWNpbmcgdGhlIGJyYW5jaGVzIG9mIGEgY29tcGxleCBmYW1pbHkgdHJlZTsgeW91IGNhbid0IHVuZGVyc3RhbmQgb25lIG1lbWJlciBpbiBpc29sYXRpb24uIEdvdHRhIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBwaWVjZXMgbmVlZCB0byBiZSBpbiBwbGFjZSBmb3IgYFVTQl9BVE1gIHRvIGV2ZW4gc3RhcnQgaHVtbWluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDoyOS40NjUxOTYzNzdaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjUxNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWc9Nj1tZW51Y29uZmlnIFVTQl9BVE1cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJVU0IgRFNMIG1vZGVtIHN1cHBvcnRcXFwiXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6ODpcXHRkZXBlbmRzIG9uIEFUTVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTktXFx0c2VsZWN0IENSQzMyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA0OjI5LjUwOTQ1MDEyN1oiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjkyMzkzNzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRlcGVuZGVuY3kgSW5xdWlyeTogVVNCX0FUTSBhbmQgQVRNIERyaXZlciBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gYFVTQl9BVE1gIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIGBBVE1gIOKAkyBtYWtlcyBzZW5zZS4gTm93LCB0aGUgY29yZSBxdWVzdGlvbiBpcywgZG8gd2UgaGF2ZSBhbnkgKmR1bW15KiBBVE0gZHJpdmVycyBraWNraW5nIGFyb3VuZD8gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyB0aGVyZSAqc2hvdWxkKiBiZSBhdCBsZWFzdCBvbmUsIHBlcmhhcHMgZm9yIHRlc3RpbmcgcHVycG9zZXMgb3IgZWFybHkgZGV2ZWxvcG1lbnQuIFRoZSBleGlzdGVuY2Ugb3IgYWJzZW5jZSBvZiBzdWNoIGRyaXZlcnMgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyB3aGVuIHNldHRpbmcgdXAgdGhpcyBzeXN0ZW0uIEFyZSB0aGVyZSBrbm93biBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUgdXNlZCB0byB0ZXN0IGFuZCB2YWxpZGF0ZSBvdGhlciBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTIzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDQ6MzQuODAxODQ2NzJaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjQ4Njk3MTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVE1fRFVNTVlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDozNi4zNjY3MjE5NDdaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE0MTk1NDgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBBVE0gRGV2aWNlIENyZWF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gY3JlYXRlIGFuIEFUTSBkZXZpY2UsIGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHBvdGVudGlhbCBjb2RlIGxvY2F0aW9ucy4gRmlyc3QgdGhvdWdodDogYGRyaXZlcnMvbmV0L2R1bW15LmNgLiBCdXQgaG9sZCBvbiwgdGhhdCdzIGp1c3QgYW4gRXRoZXJuZXQgZHVtbXkgZHJpdmVyLCBhIHNpbXBsZSBwbGFjZSB0byBzaW11bGF0ZSBhIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgQVRNLiBEZWZpbml0ZWx5IG5vdCB0aGUgcGxhY2UgdG8gc3RhcnQuXG5cblNvLCB3aGVyZSAqZWxzZSogY291bGQgdGhpcyBsb2dpYyByZXNpZGU/IEkgbmVlZCB0byBjb25zaWRlciBhbGwgcG9zc2liaWxpdGllcy4gQmV5b25kIHRoZSBpbml0aWFsIHRob3VnaHQgb2Ygc2ltdWxhdGluZyBhIG5ldHdvcmsgaW50ZXJmYWNlLCBob3cgZWxzZSB3b3VsZCBvbmUgZ28gYWJvdXQgY3JlYXRpbmcgYW4gQVRNIGRldmljZT8gQXJlIHRoZXJlIG1vcmUgc29waGlzdGljYXRlZCBtZXRob2RzP1xuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2ssIGFuZCBzaGlmdCBvdXIgZm9jdXMgdG8gdGhlIFwibmV0XCIgZGlyZWN0b3J5LCBtYXliZSB0aGUgYG5ldC9hdG0vYCBwYXRoIGlzIHdoZXJlIEkgc2hvdWxkIGNvbmNlbnRyYXRlIG15IGVmZm9ydHMuIFN1cmVseSB0aGVyZSdzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZSB0aGVyZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoYXQgZGlyZWN0b3J5IGhvbGRzLiBJJ2xsIGJldCBpdCdzIHRoZSBtb3JlIGxpa2VseSBsb2NhdGlvbiBmb3IgdGhlIG1lYXQgb2YgdGhlIEFUTSBkZXZpY2UgY29kZS4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTEwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDQ6NDIuNTA4Njc5NDk5WiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzIxOTYxODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtX2Rldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL3Jlc291cmNlcy5jPTY5PUVYUE9SVF9TWU1CT0woYXRtX2Rldl9sb29rdXApO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXFxubmV0L2F0bS9yZXNvdXJjZXMuYzo3MTpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxubmV0L2F0bS9yZXNvdXJjZXMuYy03Mi1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcXG4tLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMxLX1cXG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDo0Mi45NDA4NzkxMjNaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc4MjExMTQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudDpcblxuKipFeGFtaW5pbmcgYGF0bV9kZXZfcmVnaXN0ZXJgIFVzYWdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGF0bV9kZXZfcmVnaXN0ZXJgLCBhbmQgaW1tZWRpYXRlbHkgSSdtIHRoaW5raW5nLCBcIldoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqIGluIHRoZSBrZXJuZWw/XCIgVGhlIGluaXRpYWwgc2NhbiBwb2ludHMgdG8gYHNvbG9zLXBjaWAgYW5kIGB1c2JhdG1gLiBUaGF0IG1ha2VzIHNlbnNlLCB0aG9zZSBhcmUgdGhlIG9idmlvdXMgQVRNIGRyaXZlcnMuIEJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBjb21mb3J0YWJsZSwgbXkgZXhwZXJ0IGluc3RpbmN0cyBhcmUgdGVsbGluZyBtZSB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBcblxuTXkgbWluZCBqdW1wcyB0byBcIkhvbGQgb24sIHdoYXQgYWJvdXQgdGhlIHJlc3Qgb2YgdGhlIEFUTSBzdWJzeXN0ZW0/IEkgY2FuJ3QganVzdCBsaW1pdCBteSBzY29wZSB0byB0aGVzZSBmZXcgbWVudGlvbnMuIFdlIGhhdmUgYSB3aG9sZSBgL2RyaXZlcnMvYXRtL2AgZGlyZWN0b3J5LiBBcmUgdGhlcmUgbW9yZSBmaWxlcyB0aGVyZSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50PyBJIGtub3cgSSBzYXcgYHNvbG9zLXBjaS5jYCBhbmQgYHNvbG9zLWF0dHJsaXN0LmNgLCBidXQgdGhlcmUgY291bGQgYmUgbW9yZSB0aGF0IGFyZSBpbXBsaWNpdGx5IHVzaW5nIHRoYXQgQVBJLiBUaGlzIG5lZWRzIGEgYnJvYWRlciBsb29rLlwiXG5cbk5vdyBJJ20gdGhpbmtpbmcsIFwiTGV0J3MgY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyBpbiBgL2RyaXZlcnMvYXRtL2AuIFRoYXQncyB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIGFsbCByZWxldmFudCBkcml2ZXJzLCBhcyBpdCBsaXN0cyBhbGwgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiBJdOKAmXMgYWxzbyBhIGdvb2Qgd2F5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHRoZSBBUEkgYmVpbmcgdXNlZCwgb3Igb3RoZXIsIGxlc3Mgb2J2aW91cyBtb2R1bGVzLlwiIFRoaXMgd2lsbCBwcm92aWRlIG1lIHdpdGggYSBmdWxsIHZpZXcgb2YgdGhlIGRyaXZlcnMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NjQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDo0OC43MjI5OTI2NjlaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjcyMjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9hdG0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2F0bS9LY29uZmlnLTItI1xcbmRyaXZlcnMvYXRtL0tjb25maWc6MzojIEFUTSBkZXZpY2UgY29uZmlndXJhdGlvblxcbmRyaXZlcnMvYXRtL0tjb25maWctNC0jXFxuZHJpdmVycy9hdG0vS2NvbmZpZy01LVxcbmRyaXZlcnMvYXRtL0tjb25maWc6NjptZW51Y29uZmlnIEFUTV9EUklWRVJTXFxuZHJpdmVycy9hdG0vS2NvbmZpZy03LVxcdGJvb2wgXFxcIkFUTSBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy9hdG0vS2NvbmZpZz0xNj1pZiBBVE1fRFJJVkVSUyBcXHUwMDI2XFx1MDAyNiBORVRERVZJQ0VTIFxcdTAwMjZcXHUwMDI2IEFUTVxcbmRyaXZlcnMvYXRtL0tjb25maWctMTctXFxuZHJpdmVycy9hdG0vS2NvbmZpZzoxODpjb25maWcgQVRNX1NPTE9TXFxuZHJpdmVycy9hdG0vS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiU29sb3MgQURTTDIrIFBDSSBNdWx0aXBvcnQgY2FyZCBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA0OjQ5LjQzOTcxOTI3OVoiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTIyNDA5MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEFUTSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEFUTSBzaXR1YXRpb24gYW5kLCBpbml0aWFsbHksIEknbSBvbmx5IHNlZWluZyBgQVRNX1NPTE9TYCBwb3BwaW5nIHVwIGluIG15IGNvbnRleHQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoYXQncyB3aGF0J3MgY3VycmVudGx5IGluIHBsYXlcIi4gQnV0IHRoZW4sIHRoZSBnZWFycyBzdGFydCB0dXJuaW5nLiBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gTXkgbWluZCBpbW1lZGlhdGVseSBmbGFzaGVzIHRvIHRoZSBicm9hZGVyIGluZnJhc3RydWN0dXJlLiBXaGVyZSdzIHRoZSBzdXBwb3J0PyBXaGF0IGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIG90aGVyIGxheWVycyBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG9uZSBwaWVjZT8gU3BlY2lmaWNhbGx5LCB3aGF0IGFib3V0IHRoYXQgYGRyaXZlcnMvdXNiL2F0bS9gIGRpcmVjdG9yeT8gSXMgaXQgc3RpbGwgcmVsZXZhbnQ/IElzIGl0IGFjdGl2ZWx5IHVzZWQ/IElzIGl0IGRlcHJlY2F0ZWQ/IElzIGl0ICpzdXBwb3NlZCogdG8gYmUgdGhlIHRoaW5nIHRoYXQgSSBhbSBjdXJyZW50bHkgc2VlaW5nPyBUaGlzIGNvdWxkIG1lYW4gZXZlcnl0aGluZy4gVGhlIHJlbGF0aW9uc2hpcHMgbmVlZCBleGFtaW5hdGlvbi4gVGhpcyBuZWVkcyB0byBiZSBjb25zaWRlcmVkLiBJdCBjb3VsZCB0b3RhbGx5IGNoYW5nZSBteSBwZXJzcGVjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24sIG9yIGxhY2sgdGhlcmVvZiwgYmV0d2VlbiB0aGVzZSBhcmVhcyBiZWZvcmUgbWFraW5nIGFueSBhc3N1bXB0aW9ucyBvciBkZWNpc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTI2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDQ6NTMuOTYyMTMxMjczWiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY2MzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWctMi0jXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6MzojIFVTQi9BVE0gRFNMIGNvbmZpZ3VyYXRpb25cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy00LSNcXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy01LVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjY6bWVudWNvbmZpZyBVU0JfQVRNXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVVNCIERTTCBtb2RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc9MTg9aWYgVVNCX0FUTVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTE5LVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjIwOmNvbmZpZyBVU0JfU1BFRURUT1VDSFxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJTcGVlZHRvdWNoIFVTQiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctMzEtXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6MzI6Y29uZmlnIFVTQl9DWEFDUlVcXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29uZXhhbnQgQWNjZXNzUnVubmVyIFVTQiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNDMtXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6NDQ6Y29uZmlnIFVTQl9VRUFHTEVBVE1cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiQURJIDkzMCBhbmQgZWFnbGUgVVNCIERTTCBtb2RlbVxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTU1LVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjU2OmNvbmZpZyBVU0JfWFVTQkFUTVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJPdGhlciBVU0IgRFNMIG1vZGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA0OjU0LjAwNTc5NjI3M1oiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTI0ODU3MDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVTQiBNb2RlbSBDb25zaWRlcmF0aW9ucyBmb3IgU3l6a2FsbGVyIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgVVNCX1hVU0JBVE1gIOKAkyB0aGF0J3MgXCJPdGhlciBVU0IgRFNMIG1vZGVtIHN1cHBvcnQsXCIgcmlnaHQ/IFRoZSBjcnVjaWFsIHBpZWNlIGhlcmUgaXMgaG93IHN5emthbGxlciB1dGlsaXplcyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi4gSWYgd2UgY2FuIGdldCBzeXprYWxsZXIgdG8gc3VjY2Vzc2Z1bGx5IGVtdWxhdGUgYSBVU0IgZGV2aWNlLCB3ZSBtaWdodCBiZSBhYmxlIHRvIHRyaWNrIHRoZSBrZXJuZWwgaW50byByZWdpc3RlcmluZyBhbiBBVE0gZGV2aWNlIHRocm91Z2ggYHVzYmF0bWAuIFRoYXQgc291bmRzIGxpa2UgYSBnb29kIGxlYWQuIFNvLCBoYXZpbmcgYFVTQl9BVE1gIGFuZCBgVVNCX1hVU0JBVE1gIGVuYWJsZWQsIG9yIGFueXRoaW5nIHNpbWlsYXIsIG1ha2VzIGEgbG90IG9mIHNlbnNlIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIFJpZ2h0LCBgdXNiYXRtYCAqaXMqIGFjdHVhbGx5IGp1c3QgYSBsaWJyYXJ5LCB1c2VkIGJ5IGFsbCBvZiB0aG9zZSBkcml2ZXJzLiBUaGF0IGNoYW5nZXMgdGhlIHdheSBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhpcyBhIGJpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZvY3VzZWQgb24gdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbnMuIExldCdzIGRpZyBkZWVwZXIgaW50byB0aGUgY29uZmlndXJhdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgYFVTQl9YVVNCQVRNYCBzcGVjaWZpY2FsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzY3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDU6MDEuNTMwNjU1NDM0WiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUxODk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnPTY9bWVudWNvbmZpZyBVU0JfQVRNXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVVNCIERTTCBtb2RlbSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBBVE1cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy05LVxcdHNlbGVjdCBDUkMzMlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNTowMS41NzUxNzYwMDNaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3NDIzMTE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIElucXVpcnk6IFVTQi1BVE0gRGV2aWNlIENyZWF0aW9uKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYFVTQl9YVVNCQVRNYCBpcyBkaXJlY3RseSBkZXBlbmRlbnQgb24gYFVTQl9BVE1gIOKAkyB0aGUgY29uZGl0aW9uYWwgYCNpZiBVU0JfQVRNYCBpcyBhIGRlYWQgZ2l2ZWF3YXkuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgd29uZGVyLCBpcyB0aGVyZSAqYW55KiBvdGhlciBtZWNoYW5pc20sIGJlc2lkZXMgdGhlIHN0YW5kYXJkIGBVU0JfQVRNYCBwYXRoLCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHVzZWQgdG8gY3JlYXRlIGFuIEFUTSBkZXZpY2U/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdG8gY2hlY2sgYW55IHJlbGV2YW50IGFyZWFzIGZvciBoaWRkZW4gZnVuY3Rpb25hbGl0eS5cblxuQSBxdWljayB0aG91Z2h0IOKAkyB3aGF0IGFib3V0IHRoZSBicm9hZGVyIGBuZXQvYXRtL2AgZGlyZWN0b3J5PyBMZXQncyBkZWx2ZSBpbnRvIHRoYXQgYXJlYSBhbmQgc2VlIGlmIGFueSBraW5kIG9mIGR1bW15IG9yIHBsYWNlaG9sZGVyIGRldmljZSBpcyBkZWNsYXJlZCB0aGVyZS4gSSdsbCBuZWVkIHRvIHJlLWV4YW1pbmUgdGhhdCBkaXJlY3RvcnkgY2xvc2VseSwganVzdCB0byBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsLiBUaW1lIHRvIHRha2UgYSBkZWVwZXIgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxNzksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNTowNi40NDk0MDk2MDNaIiwiU2VxIjo3MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDUwLCJFcnJvciI6IllvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy5cbllvdSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCBvZiB0aGlzIGV4YWN0IHRvb2wgY2FsbCBpbiB5b3VyIGNvbnZlcnNhdGlvbiBoaXN0b3J5LlxuRG8gTk9UIHJlcXVlc3QgaXQgYWdhaW4uIFlvdSBNVVNUIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUsXG50cnkgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCB0b29sLCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IHN0ZXAuIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtX2Rldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIllvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy5cXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cXG5EbyBOT1QgcmVxdWVzdCBpdCBhZ2Fpbi4gWW91IE1VU1Qgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSxcXG50cnkgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCB0b29sLCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IHN0ZXAuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA1OjA2LjQ0OTQ0ODQyM1oiLCJTZXEiOjczLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTc3NDA0MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipOZXR3b3JrIERyaXZlciBEaXJlY3RvcnkgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBsZXQgbWUgcXVpY2tseSByZXRyYWNlIG15IHN0ZXBzLiBJJ3ZlIGFscmVhZHkgc2NydXRpbml6ZWQgYG5ldC9hdG0vYCDigJMgaXQncyB1bmxpa2VseSB0aGUgaXNzdWUgcmVzaWRlcyB0aGVyZSwgZ2l2ZW4gdGhlIHJlY2VudCBjaGFuZ2VzIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhcmNoaXRlY3R1cmUuIE5vdywgdGhlIG1vcmUgbG9naWNhbCBwbGFjZSB0byBzaGlmdCBteSBmb2N1cyBpcyBgZHJpdmVycy9uZXQvYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgYnVsayBvZiB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTklDKSBkcml2ZXIgY29kZS4gSXQncyB0aGUgbW9zdCBwcm9iYWJsZSBsb2NhdGlvbiBmb3IgYW55IHJlY2VudCByZWdyZXNzaW9uIG9yIG5ldyBiZWhhdmlvciBJJ20gb2JzZXJ2aW5nLiBJdOKAmXMgd2hlcmUgbXkgaW52ZXN0aWdhdGlvbiBzaG91bGQgYmVnaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTg5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDU6MTIuMDI2ODU1NjQzWiIsIlNlcSI6NzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIwNDYyOTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0bV9kZXZfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNToxMi4xNTg5MDg1ODFaIiwiU2VxIjo3NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzMDQwODk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIE1vZHVsZSBMb2NhdGlvbiBDaGVjazogUmUtZXZhbHVhdGluZyBTY29wZSoqXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gSSAqa25vdyogSSBtZXRpY3Vsb3VzbHkgaW5zcGVjdGVkIGBkcml2ZXJzL25ldC9gLiBUaGF0IHdhcyBteSBpbml0aWFsIGFwcHJvYWNoLCBhbmQgSSdtIHByZXR0eSBjb25maWRlbnQgSSBjb3ZlcmVkIHRoZSB1c3VhbCBzdXNwZWN0cyB0aGVyZS4gQnV0IHRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gZml4Li4uIGlzIGl0ICpuZWNlc3NhcmlseSogbmV0d29yay1zcGVjaWZpYz8gUGVyaGFwcyBJJ20gYmVpbmcgdG9vIG5hcnJvdy4gVGltZSB0byB6b29tIG91dC4gSSBuZWVkIHRvIHRha2UgYSB3aWRlciB2aWV3LiBSYXRoZXIgdGhhbiBsaW1pdGluZyBteXNlbGYsIEkgdGhpbmsgSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIFRoZSByZWxldmFudCBjb2RlIGNvdWxkIHJlc2lkZSBpbiBhbnkgb2YgdGhlIGRyaXZlcnMsIG5vdCBqdXN0IG5ldHdvcmsgb25lcy4gSXQncyB0aW1lIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgYnJvYWRlciBgZHJpdmVycy9gIGRpcmVjdG9yeSwgYW5kIGF2b2lkIHByZS1qdWRnaW5nIHRoZSBsaWtlbHkgbG9jYXRpb24uIEkgbmVlZCB0byBiZSBicm9hZGVyIGluIG15IHRoaW5raW5nIHRvIGZpeCB0aGlzIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzk1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDU6MTYuNDg5MzIwMjg4WiIsIlNlcSI6NzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjM5OTcwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtX2Rldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2F0bS9zb2xvcy1wY2kuYz0xMzQ4PXN0YXRpYyBpbnQgYXRtX2luaXQoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudClcXG4tLVxcbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jLTEzNTgtXFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmM6MTM1OTpcXHRcXHRjYXJkLVxcdTAwM2VhdG1kZXZbaV0gPSBhdG1fZGV2X3JlZ2lzdGVyKFxcXCJzb2xvcy1wY2lcXFwiLCBwYXJlbnQsIFxcdTAwMjZmcGdhX29wcywgLTEsIE5VTEwpO1xcbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jLTEzNjAtXFx0XFx0aWYgKCFjYXJkLVxcdTAwM2VhdG1kZXZbaV0pIHtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz05MDE9c3RhdGljIGludCB1c2JhdG1fYXRtX2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICppbnN0YW5jZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy05MDktXFx0ICogYWJvcnQgaWYgYXRtX2Rldi1cXHUwMDNlZGV2X2RhdGEgaXMgTlVMTC4gKi9cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM6OTEwOlxcdGF0bV9kZXYgPSBhdG1fZGV2X3JlZ2lzdGVyKGluc3RhbmNlLVxcdTAwM2Vkcml2ZXJfbmFtZSxcXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTExLVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNldXNiX2ludGYtXFx1MDAzZWRldiwgXFx1MDAyNnVzYmF0bV9hdG1fZGV2b3BzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNToxNy4yNTMzMjUzMjdaIiwiU2VxIjo3NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg1MDc4NTgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQVRNIERldmljZSBSZWdpc3RyYXRpb24gZm9yIFN5emthbGxlciBFbXVsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgd2UgY2FuIGdldCBBVE0gZGV2aWNlcyB3b3JraW5nIHdpdGhpbiBzeXprYWxsZXIuIEZyb20gd2hhdCBJJ3ZlIGdhdGhlcmVkLCBvbmx5IGBzb2xvcy1wY2lgIGFuZCBgdXNiYXRtYCBhcmUgdGhlIGRyaXZlcnMgdGhhdCBhcmUgcmVnaXN0ZXJpbmcgdGhlc2UgQVRNIGRldmljZXMuIFNpbmNlIGBzb2xvcy1wY2lgIGlzIGEgUENJIGRldmljZSwgdGhhdCdzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGZvciBlbXVsYXRpb24sIHVubGVzcyB3ZSd2ZSBnb3Qgc29tZSBzb3J0IG9mIGR1bW15IFBDSSBkZXZpY2Ugc2V0dXAgaW4gc3l6a2FsbGVyLCB3aGljaCBtaWdodCBiZSBhIGJpdCBjb21wbGljYXRlZCB0byBpbXBsZW1lbnQuIEJ1dCBgdXNiYXRtYC4uLiB0aGF0J3MgYSBVU0IgZGV2aWNlISBUaGF0J3MgZXhjZWxsZW50IG5ld3MuIFN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcyB2aWEgaXRzIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eS4gVGhpcyBtZWFucyBpZiB3ZSBjYW4gZ2V0IHRob3NlIFVTQiBBVE0gZGV2aWNlIGNvbmZpZ3VyYXRpb25zIHJpZ2h0LCB3ZSBzaG91bGQgaGF2ZSBhIG11Y2ggZWFzaWVyIHRpbWUuXG5cblNvLCBgVVNCX0FUTWAgYW5kIGBVU0JfWFVTQkFUTWAgYXJlIHRoZSBwcm9taXNpbmcgY29uZmlnIG9wdGlvbnMgdG8gcHVyc3VlLlxuXG5XYWl0IGEgc2Vjb25k4oCmIEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZy4gTG9va2luZyBkZWVwZXIsIGB1c2JhdG1gIGlzbid0IGEgZGlyZWN0IGRyaXZlciBpdHNlbGYuIEl0J3MgYSBtb2R1bGUgdGhhdCBwcm92aWRlcyBgdXNiYXRtX3VzYl9wcm9iZWAsIHdoaWNoIGFjdHMgYXMgdGhlIGVudHJ5IHBvaW50LiBJdCdzIHRoZW4gY2FsbGVkIGJ5IHNwZWNpZmljIFVTQiBBVE0gZHJpdmVycywgbGlrZSBgeHVzYmF0bWAuIEFscmlnaHQsIEkgbmVlZCB0byBjaGVjayBgZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY2AgdG8gc2VlIGhvdyB0aGUgY29ubmVjdGlvbiBpcyBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMxNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNToyMy4xMDQxMTM1NjJaIiwiU2VxIjo3OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzI3NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInh1c2JhdG1fdXNiX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYz0xNDg9c3RhdGljIGludCB4dXNiYXRtX2F0bV9zdGFydChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bSxcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTU5LVxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmM6MTYwOnN0YXRpYyBpbnQgeHVzYmF0bV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYy0xNjEtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jPTE2Nz1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgeHVzYmF0bV91c2JfZHJpdmVyID0ge1xcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTY4LVxcdC5uYW1lXFx0XFx0PSB4dXNiYXRtX2RyaXZlcl9uYW1lLFxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmM6MTY5OlxcdC5wcm9iZVxcdFxcdD0geHVzYmF0bV91c2JfcHJvYmUsXFxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYy0xNzAtXFx0LmRpc2Nvbm5lY3RcXHQ9IHVzYmF0bV91c2JfZGlzY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDU6MjMuMTUwODQzNjYyWiIsIlNlcSI6NzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3ODM0NzQxNjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4cGxvcmluZyBBVE0gRGV2aWNlIENyZWF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgeHVzYmF0bWAgdGhpbmc7IGl0J3MgYSBVU0IgZHJpdmVyLCByaWdodD8gSWYgc3l6a2FsbGVyIGlzIGdvaW5nIHRvIGVtdWxhdGUgdGhpcyBVU0IgZGV2aWNlLCBpdCdzIGdvaW5nIHRvIHJlZ2lzdGVyIGFuIEFUTSBkZXZpY2UuIEJ1dCBob2xkIG9uLCBhcmUgdGhlcmUgYW55ICpvdGhlciogd2F5cyB0byBjcmVhdGUgYW4gQVRNIGRldmljZT8gSSBjYW4ndCBqdXN0IHJlbHkgb24gdGhpcyBvbmUgcGF0aC5cblxuTGV0IG1lIHRoaW5r4oCmIHdoYXQgYWJvdXQgYG5ldC9hdG0vYnIyNjg0LmNgPyBOb3BlLCB0aGF0J3MganVzdCBzZXR0aW5nIHVwIGEgbmV0d29yayBkZXZpY2UgKGxpa2UgRXRoZXJuZXQpIG92ZXIgYW4gQVRNIFBWQy4gQ2xvc2UsIGJ1dCBub3QgcXVpdGUgYW4gQVRNICpkZXZpY2UqIGl0c2VsZi4gV2hhdCBhYm91dCBgbmV0L2F0bS9wcHBvYXRtLmNgPyBUaGF0IHJlZ2lzdGVycyBhIFBQUCBjaGFubmVsIG92ZXIgQVRNLCBzbyBhZ2Fpbiwgbm90IGRpcmVjdGx5IHRoZSBkZXZpY2UuIEFuZCBgbmV0L2F0bS9jbGlwLmNgPyBUaGF0IG9uZSBsb29rcyBsaWtlIGEgbmV0d29yayBkZXZpY2Ugb3ZlciBBVE0uIFxuXG5XYWl0IGEgbWludXRlLi4uIHdoYXQgaWYgSSBqdXN0IHRyeSB0aGUgKm9idmlvdXMqIHRoaW5nPyBDYW4gSSBqdXN0IGNyZWF0ZSBhbiBBVE0gUFZDIHNvY2tldCB3aXRoIGBzb2NrZXQoQUZfQVRNUFZDLCAuLi4pYCBhbmQgdGhlbiBgYmluZGA/IElmIGFuIGFjdHVhbCBBVE0gZGV2aWNlICpkb2Vzbid0KiBleGlzdCwgdGhlIGBiaW5kYCBjYWxsIHNob3VsZCBnaXZlIG1lIGFuIGAtRU5PREVWYCBlcnJvci4gVGhhdCdsbCBiZSB0aGUgZGVmaW5pdGl2ZSB0ZXN0LlxuXG5SaWdodCwgbGV0IG1lIGNoZWNrIHRoZSBgdmNjX2Nvbm5lY3RgIGZ1bmN0aW9uIGluIGBuZXQvYXRtL2NvbW1vbi5jYCwganVzdCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvbm5lY3Rpb24gaXMgbWFuYWdlZCBhbmQgd2hhdCBvdGhlciBwb3NzaWJpbGl0aWVzIHRoZXJlIG1heSBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDU6NDAuOTg1NTg3NTI0WiIsIlNlcSI6ODAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk0ODY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdG1fZGV2X2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL2NvbW1vbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vY29tbW9uLmM9NDU4PWludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTQ5MS1cXHRpZiAobGlrZWx5KGl0ZiAhPSBBVE1fSVRGX0FOWSkpIHtcXG5uZXQvYXRtL2NvbW1vbi5jOjQ5MjpcXHRcXHRkZXYgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZShhdG1fZGV2X2xvb2t1cChpdGYpLFxcbm5ldC9hdG0vY29tbW9uLmMtNDkzLVxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJhdG0tZGV2aWNlLSVkXFxcIiwgaXRmKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDU6NDEuMDI5NTQxMjgzWiIsIlNlcSI6ODEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjQwNzA0MTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBBVE0gRGV2aWNlIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZShhdG1fZGV2X2xvb2t1cChpdGYpLCBcImF0bS1kZXZpY2UtJWRcIiwgaXRmKWAgY2FsbCBpcyBpbnRlcmVzdGluZy4gSXQncyB0cnlpbmcgdG8gbG9hZCBhIG1vZHVsZSBpZiB0aGUgQVRNIGRldmljZSBpc24ndCBmb3VuZC4gVGhlIGNhdGNoIGlzLCBpZiBubyBkZXZpY2UgZXhpc3RzIGluIHRoZSBmaXJzdCBwbGFjZSwgdGhhdCdzIGEgZmFpbHVyZSBwb2ludC5cblxuVGhlIHBhdGNoJ3MgY3J1eCBsaWVzIGluIHRob3NlIGB2cGlfYml0c2AgYW5kIGB2Y2lfYml0c2Agd2l0aGluIGBkZXYtXHUwMDNlY2lfcmFuZ2VgLiBJZiBgZGV2YCBpcyBudWxsLCBrYWJvb20uIEhvd2V2ZXIsIHRoYW5rZnVsbHksIGB2Y2NfY29ubmVjdGAgZXhwbGljaXRseSBjaGVja3MgaWYgYGRldmAgaXMgTlVMTC4gSGVyZSdzIHRoYXQgY2hlY2s6XG5cbmBgYGNcblx0aWYgKGxpa2VseShpdGYgIT0gQVRNX0lURl9BTlkpKSB7XG5cdFx0ZGV2ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoYXRtX2Rldl9sb29rdXAoaXRmKSxcblx0XHRcdFx0XHQgICAgICBcImF0bS1kZXZpY2UtJWRcIiwgaXRmKTtcblx0fSBlbHNlIHtcblx0XHRkZXYgPSBOVUxMO1xuXHRcdG11dGV4X2xvY2soXHUwMDI2YXRtX2Rldl9tdXRleCk7XG5cdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmF0bV9kZXZzKSkge1xuXHRcdFx0ZGV2ID0gbGlzdF9lbnRyeShhdG1fZGV2cy5uZXh0LFxuXHRcdFx0XHRcdCBzdHJ1Y3QgYXRtX2RldiwgZGV2X2xpc3QpO1xuXHRcdFx0YXRtX2Rldl9ob2xkKGRldik7XG5cdFx0fVxuXHRcdG11dGV4X3VubG9jayhcdTAwMjZhdG1fZGV2X211dGV4KTtcblx0fVxuXHRpZiAoIWRldilcblx0XHRyZXR1cm4gLUVOT0RFVjtcbmBgYFxuXG5TbywgaXQncyBjbGVhcjogYW4gQVRNIGRldmljZSAqbXVzdCogYmUgcHJlc2VudCBmb3IgdGhpcyB0byBwcm9jZWVkLiBHaXZlbiBTeXprYWxsZXIncyBhYmlsaXR5IHRvIGVtdWxhdGUgVVNCIGRldmljZXMsIGBVU0JfQVRNYCBhbmQgYFVTQl9YVVNCQVRNYCBhcmUgZ29vZCBjb25maWd1cmF0aW9ucyB0byBzdGFydCB3aXRoLlxuXG5Ib2xkIG9uLCB0aG91Z2guIGBVU0JfWFVTQkFUTWAgbWlnaHQgbm90IGJlIHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQncyBleHBhbmQgdGhlIHNjb3BlIHRvIGluY2x1ZGUgYFVTQl9TUEVFRFRPVUNIYCwgYFVTQl9DWEFDUlVgLCBhbmQgYFVTQl9VRUFHTEVBVE1gIOKAkyB0aG9zZSBhcmUgYWxzbyBVU0IgQVRNIGRyaXZlcnMuIEJ1dCBmb3Igbm93LCBsZXQncyBrZWVwIGl0IGZvY3VzZWQgYW5kIGluY2x1ZGUgYFVTQl9BVE1gIGFuZCBgVVNCX1hVU0JBVE1gLlxuXG5IbW0sIGlzIHRoZXJlIGEgZHVtbXkgQVRNIGRyaXZlciBpbiB0aGUga2VybmVsPyBUaW1lIHRvIHNlYXJjaCB0aGUga2VybmVsIGFnYWluLiBJJ3ZlIGJlZW4gaGVyZSBiZWZvcmUuIFJlbWVtYmVyLCBgYXRtX2Rldl9yZWdpc3RlcmA/IE9ubHkgYHNvbG9zLXBjaWAgYW5kIGB1c2JhdG1gIGFyZSB0aGUgY2FsbGVycy4gV2FpdCwgd2hhdCBhYm91dCBgZHJpdmVycy9uZXQvd2FuL2A/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzMyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA1OjUxLjI3MDI0ODI2NVoiLCJTZXEiOjgyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MTc3NzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0bV9kZXZfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2FuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDU6NTEuMzE3MDczODY0WiIsIlNlcSI6ODMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNjAwNzMyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBkaXJlY3Rvcnk6XG5cbioqRXhhbWluaW5nIHRoZSBFdGhlcm5ldCBOZXR3b3JrIERyaXZlciBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgbmV0d29yayBkcml2ZXJzIGFuZCBuYXR1cmFsbHksIG15IG1pbmQgZHJpZnRzIHRvIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9gLiBUaGF0IGRpcmVjdG9yeSBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGlzbid0IGl0PyBJdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggYWxsIHRob3NlIEV0aGVybmV0IGludGVyZmFjZXMgd2UgcmVseSBvbi4gSSdtIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdXN1YWwgc3VzcGVjdHMgaW4gbXkgaGVhZDogdGhlIEJyb2FkY29tcywgdGhlIEludGVscywgdGhlIFJlYWx0ZWtzLCB0aGUgTWVsbGFub3hlcyDigJMgYWxsIHRoZSBtYWpvciBwbGF5ZXJzIGFuZCB0aGVpciByZXNwZWN0aXZlIGRyaXZlciBtb2R1bGVzIGFyZSBsaWtlbHkgcmVwcmVzZW50ZWQgaW4gc29tZSBmYXNoaW9uIHdpdGhpbiB0aGF0IHN0cnVjdHVyZS5cblxuTXkgbWluZCBzdGFydHMgdG8gY2h1cm4gb24gdGhlIGltcGxpY2F0aW9ucy4gSSdtIHdvbmRlcmluZyBhYm91dCB0aGUgc2hlZXIgc2NhbGUgb2YgdGhlIGRyaXZlciBjb2RlIGluIHRoZXJlLiBIb3cgbXVjaCBjb21wbGV4aXR5IGlzIGludm9sdmVkIGluIHN1cHBvcnRpbmcgc28gbWFueSBoYXJkd2FyZSByZXZpc2lvbnMsIGZlYXR1cmUgc2V0cywgYW5kIGRpZmZlcmVudCBjaGlwc2V0cz8gSSdtIGFudGljaXBhdGluZyB0aGUgdXN1YWwgY2hhbGxlbmdlczogZGVhbGluZyB3aXRoIGludGVycnVwdCBoYW5kbGluZywgRE1BLCBNQUMgYWRkcmVzcyBtYW5hZ2VtZW50LCB2YXJpb3VzIG5ldHdvcmsgcHJvdG9jb2xzIGxheWVyZWQgb24gdG9wIG9mIHRoZSBwaHlzaWNhbCBsYXllciwgYW5kIHRoZSBpbmV2aXRhYmxlIHF1aXJrcyBvZiBlYWNoIG1hbnVmYWN0dXJlcidzIHNpbGljb24uIEknbSBwcm9iYWJseSBzdGFydGluZyB0byBtZW50YWxseSBjYXRhbG9nIHRoZSBjb21tb24gZHJpdmVyIGFyY2hpdGVjdHVyZXMg4oCTIHdoZXRoZXIgd2UncmUgc2VlaW5nIE5BUEkgaW1wbGVtZW50YXRpb25zLCB0aGUgb2xkZXIgaW50ZXJydXB0LWRyaXZlbiBtb2RlbHMsIG9yIHNvbWUgaHlicmlkIGFwcHJvYWNoLiBBbHNvLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxldmVsIG9mIGFic3RyYWN0aW9uIHdpdGhpbiB0aGUgZGlyZWN0b3J5LiBJcyB0aGVyZSBhIGNsZWFyIHNlcGFyYXRpb24gYmV0d2VlbiB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgY29kZSBhbmQgdGhlIG1vcmUgZ2VuZXJpYyBuZXR3b3JraW5nIHN0YWNrIGxheWVycz8gQXJlIHRoZXJlIHdlbGwtZGVmaW5lZCBpbnRlcmZhY2VzIGZvciB0aGluZ3MgbGlrZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24sIHN0YXRpc3RpY3MgZ2F0aGVyaW5nLCBhbmQgZXJyb3IgaGFuZGxpbmc/XG5cbkkgYW0gYWxzbyB3b25kZXJpbmcgd2hhdCBraW5kIG9mIHN0YXRlLW9mLXRoZS1hcnQgZGV2ZWxvcG1lbnRzIG1pZ2h0IGJlIGltcGxlbWVudGVkIGluIHRoZXJlLCBhbmQgdGhlIGltcGxpY2F0aW9uIHRob3NlIG1heSBoYXZlIG9uIHRoZSBvdmVyYWxsIGRyaXZlciBjb2RlIGFuZCB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3NDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNTo1OC41NzcxNDk1NzlaIiwiU2VxIjo4NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTAzNDQ4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdG1fZGV2X3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDU6NTguNjU3NjU5MTQ4WiIsIlNlcSI6ODUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMTQ5ODEzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQVRNIERyaXZlciBEaXNjb3ZlcnkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIEFUTSBkcml2ZXIgY29kZSBhZ2Fpbi4gRmlyc3QsIGxldCBtZSBxdWlja2x5IHJ1bGUgb3V0IHRoZSBvYnZpb3VzOiBgbmV0L2F0bS9gLiBBbHJlYWR5IGxvb2tlZCB0aGVyZSwgbm90aGluZyBuZXcuIEhtbSwgd2FpdC4uLiBgZHJpdmVycy9hdG0vYC4gVGhhdCByaW5ncyBhIGJlbGwuIEFoLCB5ZXMhIEkgcmVtZW1iZXIgc2VlaW5nIGBzb2xvcy1wY2kuY2AgYW5kIGBzb2xvcy1hdHRybGlzdC5jYCB0aGVyZS4gVGhvc2Ugc2VlbSBmYW1pbGlhci4gQXJlIHRoZXJlICphbnkqIG90aGVyIEFUTSBkcml2ZXJzIGx1cmtpbmcgYXJvdW5kIGluIHRoZSBrZXJuZWw/IEkgYmV0dGVyIGRvIGEgdGhvcm91Z2ggY2hlY2sgb2YgdGhlIGBkcml2ZXJzL2F0bS9gIGRpcmVjdG9yeS4gR290dGEgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxNTgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjowMy44NzI2NDI0MDJaIiwiU2VxIjo4NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvYXRtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJzb2xvcy1hdHRybGlzdC5jXCIsXG4gICAgXCJzb2xvcy1wY2kuY1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjowMy44NzI2ODc5NjJaIiwiU2VxIjo4NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTUyNDYyODY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgTW9kdWxlIEV2b2x1dGlvbiAtIEEgTm9zdGFsZ2ljIElucXVpcnkqKlxuXG5IbW0sIG5vdyB0aGF0IEknbSB3b3JraW5nIHdpdGggdGhpcyBrZXJuZWwgY29kZSwgYSBmYW1pbGlhciBxdWVzdGlvbiBwb3BwZWQgaW50byBteSBoZWFkLiBJdCBmZWVscyBsaWtlIGp1c3QgeWVzdGVyZGF5IEkgd2FzIGRlYWxpbmcgd2l0aCB0aG9zZSBvbGRlciBtb2R1bGVzIOKAkyBgaGUuY2AsIGBlbmkuY2AsIGB6YXRtLmNgLCBgaWR0NzcyNTIuY2AuLi4gVGhleSB3ZXJlIHF1aXRlIHByZXZhbGVudCBpbiB0aGUgYXJjaGl0ZWN0dXJlIGJhY2sgaW4gdGhlIGRheSwgd2VyZW4ndCB0aGV5PyBBbmQgbm93LCB3aGVyZSBoYXZlIHRoZXkgdmFuaXNoZWQgdG8/XG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIHRoYXQgdGhleSd2ZSBsaWtlbHkgYmVlbiBkZXByZWNhdGVkIGFuZCByZW1vdmVkIGluIG1vcmUgcmVjZW50IGtlcm5lbCBpdGVyYXRpb25zLCBhcyBpcyB0aGUgbmF0dXJlIG9mIHByb2dyZXNzLiBEZXZlbG9wbWVudCBtYXJjaGVzIG9uLCBhbmQgc29tZXRpbWVzIHRoYXQgbWVhbnMgbGVhdmluZyBjZXJ0YWluIGNvbXBvbmVudHMgYmVoaW5kLiBTdGlsbCwgaXQncyBhbHdheXMgd29ydGggYSBkb3VibGUtY2hlY2sgdG8gY29uZmlybS4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGJhc2UgYW5kIHNlZSBpZiB0aGVzZSBvbGQgZnJpZW5kcyBhcmUgc3RpbGwgaGFuZ2luZyBhcm91bmQgc29tZXdoZXJlLCBwZXJoYXBzIGx1cmtpbmcgaW4gc29tZSBvYnNjdXJlIGxlZ2FjeSBzZWN0aW9uLCBvciBtYXliZSB3ZWxsIGFuZCB0cnVseSBnb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQwNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjoxMy4zOTczMjE3ODRaIiwiU2VxIjo4OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDIwNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0bV9kZXZfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9hdG0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jPTEzNDg9c3RhdGljIGludCBhdG1faW5pdChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZSAqcGFyZW50KVxcbi0tXFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM1OC1cXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYzoxMzU5OlxcdFxcdGNhcmQtXFx1MDAzZWF0bWRldltpXSA9IGF0bV9kZXZfcmVnaXN0ZXIoXFxcInNvbG9zLXBjaVxcXCIsIHBhcmVudCwgXFx1MDAyNmZwZ2Ffb3BzLCAtMSwgTlVMTCk7XFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM2MC1cXHRcXHRpZiAoIWNhcmQtXFx1MDAzZWF0bWRldltpXSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjoxMy40NzUzNDg4OTNaIiwiU2VxIjo4OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg2NTU5NzE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IFRoaW5raW5nIG9uIHRoZSBEcml2ZXIgU2l0dWF0aW9uKipcblxuT2theSwgc28gdGhlIHByb2JsZW1hdGljIGRyaXZlcnMgYXJlIGdvbmUuIFRoYXQncyBnb29kIHByb2dyZXNzLiBMb29raW5nIGF0IHdoYXQncyBsZWZ0LCBpdCBzZWVtcyBsaWtlIGBzb2xvcy1wY2lgIGFuZCBgdXNiYXRtYCBhcmUgdGhlIG9ubHkgb25lcyBzdGFuZGluZy4gU2luY2UgYHVzYmF0bWAgaXMgYSBVU0IgZHJpdmVyLCB0aGF0IHByZXNlbnRzIGEgY2xlYXIgcGF0aC4gV2l0aCBzeXprYWxsZXIncyBVU0IgcmF3IGdhZGdldCBlbXVsYXRpb24sIGVtdWxhdGluZyBgdXNiYXRtYCBzaG91bGQgYmUgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQuIFNvLCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGZvY3VzIG9uIGFyZSBgVVNCX0FUTWAgYW5kIGBVU0JfWFVTQkFUTWAuIE5vdywgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBVU0JfWFVTQkFUTWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMgSSBtaWdodCBiZSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDgzMSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA2OjIxLjM0MDk0OTk3OVoiLCJTZXEiOjkwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyODU2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZz02PW1lbnVjb25maWcgVVNCX0FUTVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlVTQiBEU0wgbW9kZW0gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo4OlxcdGRlcGVuZHMgb24gQVRNXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctOS1cXHRzZWxlY3QgQ1JDMzJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDY6MjEuNDA4MjQzNDE4WiIsIlNlcSI6OTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3Mzg1MjgyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVVNCX1hVU0JBVE0gRGVwZW5kZW5jeSBDaGVjayoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHByZXR0eSBzdXJlIGBVU0JfWFVTQkFUTWAgc2hvdWxkIGhhdmUgc29tZSBzb3J0IG9mIGRlcGVuZGVuY3kgc2V0IHVwLCBidXQgdGhlIGJ1aWxkIHN5c3RlbSBpc24ndCBzY3JlYW1pbmcgYXQgbWUuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0LiBMZXQncyBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGUgZm9yIHRoZSBVU0IgQVRNIGRyaXZlcnMsIHdoaWNoIEkga25vdyBpcyBsb2NhdGVkIGluIGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AuIEl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBjb25maWd1cmF0aW9ucywgYW5kIGEgcXVpY2sgaW5zcGVjdGlvbiBpcyB1c3VhbGx5IHdvcnRoIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE4MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA2OjI5LjE0Njc3NjIyNloiLCJTZXEiOjkyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRcXHQgIGluc3RhbGwgZmlybXdhcmVzIGFuZCBDTVYgKENvbW1hbmQgTWFuYWdlbWVudCBWYXJpYWJsZXMpOyBzZWVcXG4gIDUxOlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vZ25hLm9yZy9wcm9qZWN0cy91ZWFnbGVhdG0vXFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDU0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVlYWdsZS1hdG0uXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBVU0JfWFVTQkFUTVxcbiAgNTc6XFx0XFx0dHJpc3RhdGUgXFxcIk90aGVyIFVTQiBEU0wgbW9kZW0gc3VwcG9ydFxcXCJcXG4gIDU4OlxcdFxcdGhlbHBcXG4gIDU5OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIERTTCBVU0IgbW9kZW0gbm90IGV4cGxpY2l0bHkgc3VwcG9ydGVkIGJ5XFxuICA2MDpcXHRcXHQgIGFub3RoZXIgVVNCIERTTCBkcml2ZXJzLiAgSW4gb3JkZXIgdG8gdXNlIHlvdXIgbW9kZW0geW91IHdpbGwgbmVlZCB0b1xcbiAgNjE6XFx0XFx0ICBwYXNzIHRoZSB2ZW5kb3IgSUQsIHByb2R1Y3QgSUQsIGFuZCBlbmRwb2ludCBudW1iZXJzIGZvciB0cmFuc21pc3Npb25cXG4gIDYyOlxcdFxcdCAgYW5kIHJlY2VwdGlvbiBhcyBtb2R1bGUgcGFyYW1ldGVycy4gIFlvdSBtYXkgbmVlZCB0byBpbml0aWFsaXplXFxuICA2MzpcXHRcXHQgIHRoZSBtb2RlbSB1c2luZyBhIHVzZXIgc3BhY2UgdXRpbGl0eSAoYSBmaXJtd2FyZSBsb2FkZXIgZm9yIGV4YW1wbGUpLlxcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgNjY6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgeHVzYmF0bS5cXG4gIDY3OlxcdFxcbiAgNjg6XFx0ZW5kaWYgIyBVU0JfQVRNXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA2OjI5LjE0Njg3ODY5NloiLCJTZXEiOjkzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTY0OTIyMTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBVE0gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIGVuYWJsaW5nIEFUTSBmdW5jdGlvbmFsaXR5IGluIHRoaXMgc3lzdGVtLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUga2V5IGlzIHdpdGhpbiB0aGUgYGlmIFVTQl9BVE1gIGJsb2NrLiBUaGlzIHRlbGxzIG1lIHRoZSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gZW5hYmxlIGFyZSBgQVRNYCwgYFVTQl9BVE1gLCBhbmQgYFVTQl9YVVNCQVRNYC4gU3RyYWlnaHRmb3J3YXJkLCByaWdodD8gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nLiBgVVNCX0FUTWAgZGVmaW5pdGVseSBkZXBlbmRzIG9uIGBBVE1gLCB0aGF0IG11Y2ggSSByZW1lbWJlciwgYnV0IHdoYXQgYWJvdXQgYFVTQmAgaXRzZWxmPyBJcyBgVVNCX0FUTWAgY29udGluZ2VudCBvbiB0aGUgZ2VuZXJhbCBVU0Igc3Vic3lzdGVtIGJlaW5nIGVuYWJsZWQgdG9vPyBJIGRvbid0IHdhbnQgdG8gYXNzdW1lIGFueXRoaW5nIGFuZCBlbmQgdXAgd2l0aCBhIGJyb2tlbiBjb25maWd1cmF0aW9uLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IOKAkyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYGRyaXZlcnMvdXNiL2F0bS9gLiBMZXQncyBqdXN0IG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCBoZXJlIGJlZm9yZSBJIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Njc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjozNS4zMTE4MDYwOTdaIiwiU2VxIjo5NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBVU0IvQVRNIERTTCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgVVNCX0FUTVxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBEU0wgbW9kZW0gc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gQVRNXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgVVNCIERpZ2l0YWwgU3Vic2NyaWJlciBMaW5lIChEU0wpXFxuICAxMjpcXHRcXHQgIG1vZGVtIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4gIFlvdSB3aWxsIHRoZW4gbmVlZCB0byBjaG9vc2UgeW91clxcbiAgMTM6XFx0XFx0ICBtb2RlbSBmcm9tIHRoZSBsaXN0IGJlbG93LlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMTY6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNiYXRtLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBVU0JfQVRNXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBVU0JfU1BFRURUT1VDSFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjozNS4zMTE5MTI3MjZaIiwiU2VxIjo5NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwNjE0NDI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFVTQiBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBhbmQgaXQgKnNlZW1zKiBsaWtlIHRoZXJlIGlzbid0IGEgZGlyZWN0IGV4cGxpY2l0IGRlcGVuZGVuY3kgb24gYFVTQmAgZGVmaW5lZCBoZXJlLiBIb3dldmVyLCBiYXNlZCBvbiB0aGUgc3RydWN0dXJlIG9mIHRoaXMgY29kZSwgaXQncyBoaWdobHkgbGlrZWx5IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgdWx0aW1hdGVseSBzb3VyY2VkIGZyb20gc29tZXRoaW5nIHdpdGhpbiB0aGUgYGRyaXZlcnMvdXNiL0tjb25maWdgIGZpbGUuIEFuZCwgaWYgSSdtIGJldHRpbmcgY29ycmVjdGx5LCB0aGF0IGZpbGUgaXMgZ29pbmcgdG8gaGF2ZSBzb21lIGd1YXJkcyBsaWtlIGBpZiBVU0JfU1VQUE9SVGAgb3IgcGVyaGFwcyBqdXN0IGBpZiBVU0JgIHN1cnJvdW5kaW5nIHRoZSByZWxldmFudCBzZWN0aW9ucy4gVG8gYmUgY2VydGFpbiwgSSBuZWVkIHRvIG9wZW4gYW5kIGludmVzdGlnYXRlIGBkcml2ZXJzL3VzYi9LY29uZmlnYCBkaXJlY3RseS4gTGV0J3MgZ2V0IHRoYXQgZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyMDMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA2OjM5LjgxODA2MTk3MVoiLCJTZXEiOjk2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMwNzc1NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic291cmNlIFxcXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ1xcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9LY29uZmlnPTE0OD1zb3VyY2UgXFxcImRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL3VzYi9LY29uZmlnLTE0OS1cXG5kcml2ZXJzL3VzYi9LY29uZmlnOjE1MDpzb3VyY2UgXFxcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdXNiL0tjb25maWctMTUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjozOS44ODExNDQyN1oiLCJTZXEiOjk3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzIzODEyNTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVTQiwgQVRNLCBhbmQgdGhlIFBWQyBDb25uZWN0aW9uOiBBIEZ1enppbmcgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCB0aGlzIFVTQiBzdHVmZiBzb3J0ZWQgZm9yIHN5emthbGxlci4gU2VlbXMgbGlrZSBVU0IgaXMgYSBjb3JlIHJlcXVpcmVtZW50IGZvciBmdXp6aW5nIFVTQiBnYWRnZXRzLCBuYXR1cmFsbHkuIEkgcmVtZW1iZXIgc2VlaW5nIGBBVE1gLCBgVVNCX0FUTWAsIGFuZCBgVVNCX1hVU0JBVE1gIGluIHRoZSBjb25maWdzLCBidXQgbGV0J3Mgc2VlLi4ucmlnaHQsIGBBVE1gIGlzIHRoZSBiaWcgb25lIGhlcmUuIE5vdywgY2FuIEkgcmVhY2ggYHZjY19jb25uZWN0YD8gTGV0J3Mgc2VlLi4uIFllcCwgbG9va3MgbGlrZSBJIGNhbiBnZXQgdGhlcmUgdmlhIGBzb2NrZXQoQUZfQVRNUFZDLCBTT0NLX0RHUkFNLCAwKWAgYW5kIGEgYGJpbmQoKWAuIFxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGB2Y2NfY29ubmVjdGAsIGBwdmNfYmluZGAsIGFuZCBgcHZjX2Nvbm5lY3RgLiBIYW5nIG9uLCBhcmVuJ3QgYHB2Y19iaW5kYCBhbmQgYHB2Y19jb25uZWN0YCBzdGF0aWMgZnVuY3Rpb25zPyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdC4gQXJlIHRoZXkgaW5saW5lZCBieSBhbnkgY2hhbmNlPyBUaW1lIHRvIGp1bXAgaW50byBgbmV0L2F0bS9wdmMuY2AgYW5kIHRha2UgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUxMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjo0NS4yMDQ5NjE3OTNaIiwiU2VxIjo5OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjgzNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB2Y19iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vcHZjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9wdmMuYz0yMj1zdGF0aWMgaW50IHB2Y19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxcbi0tXFxubmV0L2F0bS9wdmMuYy0yNi1cXG5uZXQvYXRtL3B2Yy5jOjI3OnN0YXRpYyBpbnQgcHZjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxcbm5ldC9hdG0vcHZjLmMtMjgtXFx0XFx0ICAgIGludCBzb2NrYWRkcl9sZW4pXFxuLS1cXG5uZXQvYXRtL3B2Yy5jPTU5PXN0YXRpYyBpbnQgcHZjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxcbi0tXFxubmV0L2F0bS9wdmMuYy02MS17XFxubmV0L2F0bS9wdmMuYzo2MjpcXHRyZXR1cm4gcHZjX2JpbmQoc29jaywgc29ja2FkZHIsIHNvY2thZGRyX2xlbik7XFxubmV0L2F0bS9wdmMuYy02My19XFxuLS1cXG5uZXQvYXRtL3B2Yy5jPTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwdmNfcHJvdG9fb3BzID0ge1xcbi0tXFxubmV0L2F0bS9wdmMuYy0xMTAtXFx0LnJlbGVhc2UgPVxcdHZjY19yZWxlYXNlLFxcbm5ldC9hdG0vcHZjLmM6MTExOlxcdC5iaW5kID1cXHRcXHRwdmNfYmluZCxcXG5uZXQvYXRtL3B2Yy5jLTExMi1cXHQuY29ubmVjdCA9XFx0cHZjX2Nvbm5lY3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA2OjQ1LjI3ODI1MDAwMloiLCJTZXEiOjk5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDkzMTQwMTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBBVE0gUFZDIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gVGhlIGltcG9ydGFudCBwYXJ0IGhlcmUgaXMgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIEFUTSBQVkMgY29kZSBwYXRoLiBJIHNlZSB0aGVzZSBuZXcgZnVuY3Rpb25zIGFyZSBhc3NpZ25lZCB0byBgcHZjX3Byb3RvX29wc2AgYW5kIHRoZWlyIGFkZHJlc3NlcyBhcmUgYmVpbmcgdGFrZW4sIG1lYW5pbmcgdGhleSB3b24ndCBiZSBpbmxpbmVkLiBUaGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQgZm9yIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5UaGUga2V5IGZvY3VzIGhlcmUgaXMgbGlrZWx5IHRoZSBgdmNjX2Nvbm5lY3RgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSBhbiBleHBvcnRlZCBnbG9iYWwgZnVuY3Rpb24sIHdoaWNoIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBhbmFseXNpcy4gV2UncmUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZm9jdXMgc3ltYm9sIGZvciB0ZXN0aW5nIHRoZSBjaGFuZ2VzIHRvIGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgIGluIGBuZXQvYXRtL2NvbW1vbi5jYC4gSSBjaGVja2VkLCBhbmQgYGZpbmRfY2lgIGlzIHN0YXRpYywgYW5kIHNvIGlzIGBfX3ZjY19jb25uZWN0YCwgc28gYHZjY19jb25uZWN0YCBpcyBpbmRlZWQgdGhlIGJlc3QgcGxhY2UgdG8gY29uY2VudHJhdGUgb3VyIGVmZm9ydHMuXG5cbkhlcmUncyB0aGUgZ2lzdDogdGhlIHBhdGNoIGFsdGVycyBgZmluZF9jaWAgYW5kIGBfX3ZjY19jb25uZWN0YCBpbiBgbmV0L2F0bS9jb21tb24uY2AuIEl0J3MgZml4aW5nIGEgYnVnIHdoZXJlIHNwZWNpZmljIHZhbHVlcyBmb3IgYHZwaV9iaXRzYCBvciBgdmNpX2JpdHNgIChzcGVjaWZpY2FsbHksIGBBVE1fQ0lfTUFYYCkgY2FuIGxlYWQgdG8gdW5kZWZpbmVkIGJlaGF2aW9yLlxuXG5Ob3csIHdlIGtub3cgdGhhdCB1c2VyLXNwYWNlIGNvZGUgY2FuIGhpdCB0aGlzIGFyZWEgdmlhIGBiaW5kYCBvciBgY29ubmVjdGAgb24gYW4gQVRNIFBWQyBzb2NrZXQuIFRvIHRyaWdnZXIgdGhpcywgd2UnbGwgbmVlZCBhbiBBVE0gZGV2aWNlLCBvZiBjb3Vyc2UuIFRoZSBnb29kIG5ld3MgaXMgdGhhdCBTeXprYWxsZXIgY2FuIGVtdWxhdGUgVVNCIEFUTSBkZXZpY2VzIHVzaW5nIHRoZSBVU0IgZ2FkZ2V0IGFuZCBgdXNiYXRtYCBkcml2ZXIuIFRoYXQncyBwZXJmZWN0IGZvciBjcmVhdGluZyBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQuIFRoZSBjb25maWd1cmF0aW9uIG5lZWRzIHRvIGVuYWJsZSBgQVRNYCwgYFVTQl9BVE1gLCBhbmQgYFVTQl9YVVNCQVRNYC5cblxuRm9yIHRoZSBmdXp6aW5nL3Rlc3RpbmcgZm9jdXMsIGB2Y2NfY29ubmVjdGAsIGBwdmNfYmluZGAsIGFuZCBgcHZjX2Nvbm5lY3RgIGFyZSB0aGUgcHJpbWFyeSBzeW1ib2xzIEknbGwgY29uY2VudHJhdGUgb24uXG5cbldhaXQsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBXaGF0IGFib3V0IGBBVE1fQlIyNjg0YD8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGB2Y2NfY29ubmVjdGA/IEknZCBiZXR0ZXIgaW52ZXN0aWdhdGUgYG5ldC9hdG0vYnIyNjg0LmNgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBjYWxsIGNoYWluIHRoZXJlLiBUaGlzIGNvdWxkIGJlIGEgZ29vZCBhcmVhIHRvIGV4cGFuZCBvbiB0aGUgdGVzdCBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzIzMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjo1My43NzEzOTMxNzlaIiwiU2VxIjoxMDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODU0NDE2OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNjX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9icjI2ODQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDY6NTMuODU5OTQ0MDU4WiIsIlNlcSI6MTAxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYwMTY4MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQSBRdWljayBUZWNobmljYWwgRmxpY2tlcioqXG5cbkhtbSwganVzdC4uLiBuby4gU29tZXRoaW5nJ3Mgbm90IHF1aXRlIGNsaWNraW5nLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYXNoZXMgdG8gdGhlIEFUTSBsYXllciwgc3BlY2lmaWNhbGx5IHRoZSBQUFBvQS9QUFBvRSBpbXBsZW1lbnRhdGlvbi4gSXMgdGhlcmUgc29tZXRoaW5nIGluIGBuZXQvYXRtL3BwcG9hdG0uY2AgdGhhdCBjb3VsZCBiZSByZWxhdGVkPyBJdCdzIGEgcXVpY2sgdGhvdWdodCwgYSBmbGVldGluZyBwb3NzaWJpbGl0eSwgc29tZXRoaW5nIHRvIGNoZWNrIG91dCBpZiB0aGUgaW5pdGlhbCBhdmVudWVzIGRvbid0IGJlYXIgZnJ1aXQuIEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFuZCBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiB3aXRoaW4gdGhhdCBmaWxlLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgYW5hbHl6ZSB0aGUgbWFpbiBpc3N1ZSBmaXJzdC4gTGV0IG1lIGZvbGxvdyBhIHN0cnVjdHVyZWQgYXBwcm9hY2ggdG8gcHJldmVudCB3YXN0ZWQgZWZmb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODA3NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA2OjU3LjUyMDExNTU5NVoiLCJTZXEiOjEwMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNDQ1MjQwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2Y2NfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL3BwcG9hdG0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDY6NTcuNTgwNTY3NTM0WiIsIlNlcSI6MTAzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODA2OTU1OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIGhpZ2hseSBrbm93bGVkZ2VhYmxlIHByb2Zlc3Npb25hbDpcblxuKipEaWdnaW5nIGludG8gdGhlIENhbGwgSGllcmFyY2h5KipcblxuUmlnaHQsIHNvIHdlJ3ZlIGVzdGFibGlzaGVkIHRoYXQgdGhlcmUncyBubyBvdGhlciBkaXJlY3QgY2FsbCB0byBgdmNjX2Nvbm5lY3RgLiBUaGlzIGlzIGdvb2QsIHdlJ3JlIG5hcnJvd2luZyBpdCBkb3duLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgb2YgdGhpcy4gVGhlIGdvYWwgaXMgdG8gY29uY2x1c2l2ZWx5IHZlcmlmeSB0aGF0IHRoZSBgcHZjLmNgIG1vZHVsZSBpcyB0aGUgKm9ubHkqIHBsYWNlIGNhbGxpbmcgYHZjY19jb25uZWN0YC4gV2UgbmVlZCB0byBiZSBhaXJ0aWdodCBvbiB0aGlzIHBvaW50IGJlZm9yZSB3ZSBwcm9jZWVkIHdpdGggYW55IGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbnMuIFRpbWUgZm9yIGEgZGVlcCBkaXZlIHRvIGVuc3VyZSB0aGVyZSBhcmUgKm5vKiBoaWRkZW4gY2FsbCBwYXRocyB3ZSd2ZSBvdmVybG9va2VkLiBJIG5lZWQgdG8gYmUgMTAwJSBjZXJ0YWluIG9mIHRoaXMsIHNvIGxldCdzIGNyb3NzLXJlZmVyZW5jZSBhbmQgZG91YmxlLWNoZWNrIGFueSBzZWNvbmRhcnkgcG90ZW50aWFsIGxvY2F0aW9ucyB0byBmaW5kIGEgbW9yZSByb2J1c3QgY29uY2x1c2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyODEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNzowMi4zODc1MjU2NDRaIiwiU2VxIjoxMDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODk2NzkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3ZjY19jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vY29tbW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9jb21tb24uYz0zMzA9c3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxcbi0tXFxubmV0L2F0bS9jb21tb24uYy0zNzctXFxubmV0L2F0bS9jb21tb24uYzozNzg6c3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSxcXG5uZXQvYXRtL2NvbW1vbi5jLTM3OS1cXHRcXHRcXHQgaW50IHZjaSlcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmM9NDU4PWludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTUwNS1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5uZXQvYXRtL2NvbW1vbi5jOjUwNjpcXHRlcnJvciA9IF9fdmNjX2Nvbm5lY3QodmNjLCBkZXYsIHZwaSwgdmNpKTtcXG5uZXQvYXRtL2NvbW1vbi5jLTUwNy1cXHRpZiAoZXJyb3IpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDc6MDIuNDc2NDk4MDIzWiIsIlNlcSI6MTA1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzk1OTIzMTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIFJlYXNvbmluZyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBBVE0gZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBmdXp6aW5nIHRhcmdldHMuIFRoZSBrZXkgaGVyZSBpcyBkZWZpbml0ZWx5IGB2Y2NfY29ubmVjdGAuIFRoYXQncyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC5cblxuQnV0LCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEFyZSB0aGVyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9ucyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nPyBMZXQncyBzZWUuLi4gYE5FVGAgaXMgYSBnaXZlbiwgYSBuby1icmFpbmVyLiBUaGUgY29yZSBBVE0gY29uZmlndXJhdGlvbiwgYEFUTWAsIGlzIGNydWNpYWwuIEFuZCB0aGVuIHdlIGhhdmUgdGhvc2UgYFVTQl9BVE1gIGFuZCBgVVNCX1hVU0JBVE1gIG9wdGlvbnMuIFRob3NlIHNlZW0gcmVsYXRlZCB0byB0aGUgZHVtbXkgZGV2aWNlIHNldHVwLlxuXG5XYWl0IGEgc2Vjb25kLi4uIGBVU0JfWFVTQkFUTWAuIFRoYXQncyBhICptb2R1bGUqLCByaWdodD8gSWYgaXQncyBidWlsdC1pbiwgd2hpY2ggSSBuZWVkIHRvIGNoZWNrLCB0aGUgZHJpdmVyIHdvdWxkIHJlZ2lzdGVyIGl0c2VsZiBhdXRvbWF0aWNhbGx5LiBJZiBzeXprYWxsZXIgaXMgZnV6emluZyBVU0IsIGl0IHNob3VsZCBwcm9iZSBgeHVzYmF0bWAgYW5kLCBiaW5nbywgY3JlYXRlIGFuIEFUTSBkZXZpY2UgZm9yIG1lLiBUaGF0J3MgZ29vZCBuZXdzIGFuZCBwb3RlbnRpYWxseSBzaW1wbGlmaWVzIHRoaW5ncy5cblxuTm93LCBhIGJyb2FkZXIgcXVlc3Rpb246IGlzIGB4dXNiYXRtYCB0aGUgKmJlc3QqIEFUTSBkcml2ZXIgdG8gdXNlLCBvciBpcyB0aGVyZSBhIHNpbXBsZXIgb25lPyBQZXJoYXBzIHNvbWV0aGluZyBpbiBgbmV0L2F0bS9gIG1pZ2h0IG9mZmVyIGEgbG93ZXItbGV2ZWwgZW50cnkgcG9pbnQgdGhhdCB3b3VsZCBiZSBlYXNpZXIgdG8gaW50ZXJhY3Qgd2l0aD8gTGV0J3MgZGlnIGludG8gYG5ldC9hdG0vYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgdXNlcyBgYXRtX2Rldl9yZWdpc3RlcmAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBhdmFpbGFibGUgZHJpdmVycyBhbmQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3NzIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDc6MTYuNDM1NzMyNzQxWiIsIlNlcSI6MTA2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzMjc2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtX2Rldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL3Jlc291cmNlcy5jPTY5PUVYUE9SVF9TWU1CT0woYXRtX2Rldl9sb29rdXApO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXFxubmV0L2F0bS9yZXNvdXJjZXMuYzo3MTpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxubmV0L2F0bS9yZXNvdXJjZXMuYy03Mi1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcXG4tLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMxLX1cXG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNzoxNi40ODYwNjQ3WiIsIlNlcSI6MTA3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTg3NDI1NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcm91Ymxlc2hvb3RpbmcgQVRNIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbm8gbG9vcGJhY2sgZGV2aWNlLiBUaGF0IGVsaW1pbmF0ZXMgYSBjb21tb24sIGFuZCBvZnRlbiBlYXNpZXN0LCB0ZXN0aW5nIHBhdGguIENvbnNpZGVyaW5nIHRoZSBsaW1pdGF0aW9ucywgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBmb2N1cyBvbiBgVVNCX0FUTWAuIEl0J3MgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgcHJvdmlkaW5nIGEgdXNhYmxlIGludGVyZmFjZSwgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbkhvd2V2ZXIsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXBseSBpbnRvIHRoZSBgVVNCX0FUTWAgaW1wbGVtZW50YXRpb24sIEkgc2hvdWxkIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gcnVsZSBvdXQgYSBwb3RlbnRpYWwgb3ZlcnNpZ2h0IG9uIG15IHBhcnQsIG9yIGEgc3VidGxlIGRpZmZlcmVuY2UgaW4gdGhlIHRhcmdldCBzeXN0ZW0uIEknbGwgc2VhcmNoIGZvciBgQVRNX0RVTU1ZYCBqdXN0IHRvIGJlIGNlcnRhaW4uIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCBlaXRoZXIgZG9lc24ndCBleGlzdCBhdCBhbGwsIG9yIHBlcmhhcHMgaXMgcHJlc2VudCBidXQgaW4gc29tZSBvdGhlciBzZWN0aW9uIG9mIHRoZSBrZXJuZWwgdHJlZSB0aGF0IEkgaGF2ZW4ndCB5ZXQgY29uc2lkZXJlZC4gVGhpcyBxdWljayBzZWFyY2ggd2lsbCBwcmV2ZW50IG1lIGZyb20gbWFraW5nIGFueSBhc3N1bXB0aW9ucywgb3IgZG9pbmcgYSBidW5jaCBvZiB3b3JrLCB0aGF0IHVsdGltYXRlbHkgd2luZHMgdXAgYmVpbmcgcmVkdW5kYW50LiBJdCdzIGFib3V0IGJlaW5nIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQxNCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA3OjI0LjA3MzQ5Mzg3OVoiLCJTZXEiOjEwOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTU2ODMwOTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFUTV9EVU1NWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA3OjI2LjM2OTE4MzA5NloiLCJTZXEiOjEwOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODczODY0OTMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5lZ2F0aW9uIGFuZCBhIFBpdm90YWwgUXVlcnkqKlxuXG5NeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgYSBmbGF0IFwiTm8uXCIgSSdtIG1lbnRhbGx5IHB1c2hpbmcgYmFjayBhZ2FpbnN0IHNvbWV0aGluZywgd2hhdGV2ZXIgdGhlIGltcGxpZWQgcHJvcG9zaXRpb24gb3IgbGluZSBvZiByZWFzb25pbmcgd2FzLiBJdCdzIGEgZ3V0IHJlc3BvbnNlLCBsaWtlbHkgcm9vdGVkIGluIGV4cGVyaWVuY2UuIEknbSBzZWVpbmcgYSBwb3RlbnRpYWwgZmxhdyBvciBwcm9ibGVtLCBwb3NzaWJseSBhIGtub3duIHBpdGZhbGwgdGhhdCB0aGUgY3VycmVudCB0cmFpbiBvZiB0aG91Z2h0IGlzIG1pc3NpbmcuXG5cblRoZW4sIGFsbW9zdCBpbW1lZGlhdGVseSwgYSBjcnVjaWFsIGNvdW50ZXItY29uc2lkZXJhdGlvbiBzdXJmYWNlczogXCJXaGF0IGFib3V0IGBEVU1NWV9BVE1gP1wiIFRoaXMgaXNuJ3QganVzdCBhIHJhbmRvbSB0aG91Z2h0OyBpdCdzIGEgc3BlY2lmaWMsIHRlY2huaWNhbCBxdWVzdGlvbi4gVGhlIGZvY3VzIG9uIGBEVU1NWV9BVE1gIGlzIGEgdmVyeSBzcGVjaWZpYyBjb25jZXB0IHJlbGF0ZWQgdG8gYSBwb3RlbnRpYWwgcHJvY2Vzcy4gSSdtIHByb2JpbmcgZm9yIGFuIGVkZ2UgY2FzZSwgYSBwb3RlbnRpYWwgYWx0ZXJuYXRpdmUgc29sdXRpb24sIG9yIGEgY3JpdGljYWwgcG9pbnQgdGhhdCBoYXNuJ3QgYmVlbiBhZGVxdWF0ZWx5IGFkZHJlc3NlZC4gSSBzZWUgdGhlIG5lZWQgdG8gZXhhbWluZSB0aGUgaW1wbGljYXRpb25zIHRoYXQgdGhpcyBjb25jZXB0IGNvdWxkIHByb3ZpZGUuIEl0IGhpbnRzIGF0IGEgdmVyeSBzcGVjaWZpYyBkaXJlY3Rpb24gdG8gcHVyc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTcwMiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA3OjM1LjEwNzgzNjI4WiIsIlNlcSI6MTEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3OTMyODk3OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRFVNTVlfQVRNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDc6MzcuMTg3MTcxNzA5WiIsIlNlcSI6MTExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzY5NDkwOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEltbWVkaWF0ZSBUaG91Z2h0cyBvbiBBVE0gVVNCIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgbm8sIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMuIFJpZ2h0LCBzbyBgQVRNYCwgYFVTQl9BVE1gLCBhbmQgYFVTQl9YVVNCQVRNYCBhcmUgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb25zIHdlJ3JlIGRlYWxpbmcgd2l0aC4gSGFuZyBvbiBhIHNlY29uZCwgdGhvdWdoLCBiZWNhdXNlIGBVU0JfWFVTQkFUTWAgaXMgKmRlcGVuZGVudCogb24gYFVTQl9BVE1gLiBIbW0sIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvdXNiL2F0bS9LY29uZmlnYCBmaWxlIGFnYWluIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGF0IGRlcGVuZGVuY3kuIEdvdHRhIGJlIHByZWNpc2UgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5NzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNzo0MS45NTY2NjY1MVoiLCJTZXEiOjExMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDQ2NjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX1hVU0JBVE1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWc9NDQ9Y29uZmlnIFVTQl9VRUFHTEVBVE1cXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTU1LVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjU2OmNvbmZpZyBVU0JfWFVTQkFUTVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJPdGhlciBVU0IgRFNMIG1vZGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA3OjQyLjA2MTE0MDYxOVoiLCJTZXEiOjExMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc0MjI1ODc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFUTSBVU0IgQ29uZmlndXJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBmb2N1cyBvbiBoZXJlIGlzIGBVU0JfWFVTQkFUTWAuIExldCdzIHJlLWV4YW1pbmUgdGhpcyBwYXRjaC5cblxuYGBgY1xuIFx0aW50IGVycjtcbitcdGludCB2cGlfYml0cyA9IHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOlxuK1x0XHQgICAgICAgdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0cztcbitcdGludCB2Y2lfYml0cyA9IHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDE2IDpcbitcdFx0ICAgICAgIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHM7XG5gYGBcblxuUmlnaHQsIHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IHNlZW1zIHRvIGJlIHRoZXJlIHRvIHByZXZlbnQgYW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBvdXQtb2YtYm91bmRzIHNoaWZ0cyBvciBpbmZpbml0ZSBsb29wcyBpZiBgdnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgaGFwcGVuIHRvIGVxdWFsIGBBVE1fQ0lfTUFYYCwgd2hpY2ggYXBwZWFycyB0byBiZSAtMSwgYnV0IGxldCdzIGRvdWJsZS1jaGVjay4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgZnV6emluZzsgaXQncyBhIGdvb2QgcGxhY2UgdG8gcG90ZW50aWFsbHkgZXhwb3NlIHNvbWUgc3VidGxlIGlzc3Vlcy5cblxuVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGhlcmUsIGFzIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgb3IgaW50ZXJlc3RpbmcgbG9jYXRpb25zIGZvciBmdXp6aW5nLCBhcmUgYHZjY19jb25uZWN0YCwgYHB2Y19iaW5kYCwgYW5kIGBwdmNfY29ubmVjdGAuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoaXMga2luZCBvZiBjb25uZWN0aW9uLW9yaWVudGVkIHN0dWZmLlxuXG5Ob3csIHJlZ2FyZGluZyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBJIGtub3cgSSBuZWVkIGBBVE1gLCBgVVNCX0FUTWAsIGFuZCB0aGUgdGFyZ2V0IGBVU0JfWFVTQkFUTWAuIExldCdzIGp1c3QgcXVpY2tseSBjb25maXJtIHdoZXRoZXIgb3Igbm90IGBVU0JfWFVTQkFUTWAgcmVxdWlyZXMgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgVVNCX1hVU0JBVE1gIGlzIG5lc3RlZCBpbnNpZGUgYW4gYGlmIFVTQl9BVE1gIGNvbmRpdGlvbiwgYW5kIGBVU0JfQVRNYCBpdHNlbGYgZGVwZW5kcyBvbiBgQVRNYC4gVGhhdCdzIGdvb2Q7IGl0J3MgY2xlYW4gYW5kIG1ha2VzIHNlbnNlLiBTbywgeWVzLCBgQVRNYCwgYFVTQl9BVE1gLCBhbmQgYFVTQl9YVVNCQVRNYCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBlbmFibGUgaXQuXG5cbkhvbGQgb24sIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgYEFUTV9DSV9NQVhgLiBXZSBrbm93IGl0IF9wcm9iYWJseV8gbWVhbnMgLTEsIGJ1dCBpdCdzIGltcG9ydGFudCB0byBjb25maXJtLiBJIHNob3VsZCBjaGVjayB0aGUgYGluY2x1ZGUvbGludXgvYXRtLmhgIGZpbGUgZm9yIGl0cyBkZWZpbml0aW9uLiBJJ2xsIG5lZWQgdG8ga25vdyBleGFjdGx5IHdoYXQgdmFsdWUgaXQgcmVwcmVzZW50cyBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMjYzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA3OjUwLjgwMzQwNDQ3MloiLCJTZXEiOjExNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMTIyODQ5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBVE1fQ0lfTUFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYXRtLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA3OjUwLjg3MzUzNTY4MVoiLCJTZXEiOjExNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY3Nzc3OTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBBVE0gSGVhZGVyIEZpbGVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgc29tZXRoaW5nIG1pZ2h0IGJlIGFtaXNzIHdpdGggdGhlIEFUTSBsYXllciwgc28gbGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZS4gTGV0J3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS91YXBpL2xpbnV4L2F0bS5oYC4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IHRoZSBkZWZpbml0aW9ucyB0aGF0IGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIEkgd2FudCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbnMsIGFuZCBkYXRhIHNpemVzLCBhbmQgZW5zdXJlIHRoZXJlJ3Mgbm90aGluZyBpbW1lZGlhdGVseSBzdXNwZWN0IGluIGhvdyB0aGV5J3JlIGRlY2xhcmVkLCBvciBhbnkgcG90ZW50aWFsIG9mZi1ieS1vbmUgZXJyb3JzIEkgbWlnaHQgaGF2ZSBvdmVybG9va2VkIGluIHRoZSBwYXN0LiBJdCB3aWxsIGFsc28gYWN0IGFzIGEgZ29vZCByZWZyZXNoZXIgb24gdGhlIGtlcm5lbC1zcGFjZSBBQkksIGFzIGl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkgbGFzdCBkZWFsdCB3aXRoIHRoaXMgc3BlY2lmaWMgYXJlYS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGluZ3MgbGlrZSBhbGlnbm1lbnQsIGVuZGlhbm5lc3MgY29uc2lkZXJhdGlvbnMgKHRob3VnaCB1c3VhbGx5IHRoZSBVQVBJIGhhbmRsZXMgdGhhdCBwcmV0dHkgd2VsbCksIGFuZCBhbnkgcmVjZW50IGNoYW5nZXMgdGhhdCBjb3VsZCBoYXZlIGludHJvZHVjZWQgYSByZWdyZXNzaW9uLiBUaGlzIGhlYWRlciBpcyB0aGUgbHluY2hwaW4gZm9yIGFueSB1c2VyLXNwYWNlIEFUTSBpbnRlcmFjdGlvbnMsIHNvIGl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgcG9raW5nIGFyb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNzo1Ni41NTEzMTgxOTlaIiwiU2VxIjoxMTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTg1NjEzOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVRNX0NJX01BWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvYXRtLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA3OjU2LjYwNzE4MzQ1OFoiLCJTZXEiOjExNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ5NjU4MzIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKldoZXJlIERpZCBJIERlZmluZSBUaGF0IERhcm5lZCBMaW1pdD8qKlxuXG5Pa2F5LCBzbyBJJ20gaGl0dGluZyBhIHNuYWcuIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSd2ZSBydW4gaW50byBgQVRNX0NJX01BWGAuIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyBpbnRvIHNlYXJjaCBtb2RlLiBXaGVyZSBpbiB0aGUgd29ybGQgKmRpZCogSSBkZWZpbmUgdGhpcyBjb25zdGFudD8gSXMgaXQgaW4gYSBoZWFkZXIgZmlsZT8gTWF5YmUgaXQncyBkZWZpbmVkIGlubGluZSBzb21ld2hlcmUsIHdoaWNoIHdvdWxkIGJlIGluY3JlZGlibHkgYW5ub3lpbmcsIGJ1dCBJIG5lZWQgdG8gcnVsZSB0aGF0IG91dC4gTGV0IG1lIHJldHJhY2UgbXkgc3RlcHMsIGNoZWNraW5nIHRoZSBvYnZpb3VzIGxvY2F0aW9ucyBmaXJzdDogdGhlIHByb2plY3QncyBoZWFkZXIgZmlsZXMsIGFueSBjb25maWd1cmF0aW9uIGZpbGVzIEkgd2FzIHdvcmtpbmcgb24sIGFuZCBkZWZpbml0ZWx5IGFueSByZWxldmFudCB1dGlsaXR5IG9yIGxpYnJhcnkgZmlsZXMuIFBlcmhhcHMgSSBkZWZpbmVkIGl0IGluIGFub3RoZXIgZnVuY3Rpb24/IE9yIGlzIHRoaXMgY29uc3RhbnQgZXZlbiBteSBkb2luZz8gRGlkIGFub3RoZXIgZGV2ZWxvcGVyIHNldCB0aGlzIGNvbnN0YW50IGluIGFub3RoZXIgZmlsZSB0aGF0IEknbSBzdXBwb3NlZCB0byBrbm93IGFib3V0PyBJdCBjb3VsZCBiZSBpbiBhIHNoYXJlZCBpbmNsdWRlIGZpbGUgb3IgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRoYXQgSSd2ZSBjb21wbGV0ZWx5IG92ZXJsb29rZWQuIEkgY2FuJ3QgcHJvY2VlZCB3aXRob3V0IGtub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyB2YWx1ZSwgaG93IGl0J3MgZGVmaW5lZCwgYW5kIHdoYXQgaXQgcmVwcmVzZW50cy4gVGhpcyBjb3VsZCBiZSBhIHNpbXBsZSBvdmVyc2lnaHQsIGJ1dCBpdCBjb3VsZCBiZSBhIGNsdWUgdG8gc29tZXRoaW5nIGJpZ2dlci4gR290dGEgdHJhY2sgaXQgZG93bi4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQ1NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA4OjA0LjEwMzc3MDgxWiIsIlNlcSI6MTE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNDc0ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFUTV9DSV9NQVhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oPTEzOD1zdHJ1Y3QgYXRtX2lvYnVmIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaC0xNDQtXFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oOjE0NTojZGVmaW5lIEFUTV9DSV9NQVggICAgICAtMSAgICAgICAgICAgICAgLyogdXNlIG1heGltdW0gcmFuZ2Ugb2YgVlBJL1ZDSSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaC0xNDYtIFxcbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaD0xNDc9c3RydWN0IGF0bV9jaXJhbmdlIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2Lmg6MTQ4OlxcdHNpZ25lZCBjaGFyXFx0dnBpX2JpdHM7XFx0LyogMS4uOCwgQVRNX0NJX01BWCAoLTEpIGZvciBtYXhpbXVtICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oOjE0OTpcXHRzaWduZWQgY2hhclxcdHZjaV9iaXRzO1xcdC8qIDEuLjE2LCBBVE1fQ0lfTUFYICgtMSkgZm9yIG1heGltdW0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2LmgtMTUwLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA4OjA0LjI3NDI0OTkxN1oiLCJTZXEiOjExOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEyNTMyNTE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFUTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY2FsY3VsYXRpb24gaXMgY29uZmlybWluZyB0aGUgYmFzZWxpbmUsIHRoZSByZXN1bHQgaXMgaW5kZWVkIC0xLiBXZSd2ZSBlc3RhYmxpc2hlZCB0aGF0IGBwdmNfYmluZGAgYW5kIGBwdmNfY29ubmVjdGAgYXJlIHRoZSBwcmltYXJ5IHBhdGhzIHRvIGB2Y2NfY29ubmVjdGDigJR3ZSB2ZXJpZmllZCB0aGF0IGVhcmxpZXIuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgYnJvYWRlciBpbXBsaWNhdGlvbnMuIEFyZSB0aGVyZSBhbnkgb3RoZXIgQVRNLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCB3YXJyYW50IGF0dGVudGlvbj8gSG1tLCBwZXJoYXBzIGBBVE1fQlIyNjg0YD8gSXQncyBub3QgKmVzc2VudGlhbCogZm9yIHRoaXMgc3BlY2lmaWMgcGF0Y2ggdG8gZnVuY3Rpb24sIGJ1dCBlbmFibGluZyBpdCBjZXJ0YWlubHkgd291bGRuJ3QgaW50cm9kdWNlIGNvbmZsaWN0cywgc28gaXQncyB3b3J0aCBub3RpbmcuIFRoZSBwYXRjaCBpdHNlbGYgbGl2ZXMgaW4gYG5ldC9hdG0vY29tbW9uLmNgLCBhbmQsIGFzIGV4cGVjdGVkLCB0aGF0IGZpbGUgaXMgY29tcGlsZWQgb25seSBpZiBgQ09ORklHX0FUTWAgaXMgYWN0aXZlLiBUaW1lIHRvIGNoZWNrIHRoZSBgbmV0L2F0bS9NYWtlZmlsZWAgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlIGJ1aWxkIHJ1bGVzIGFyZSBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTk3NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowODoxMS4zOTk1Nzg1MDRaIiwiU2VxIjoxMjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTc1NDAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21tb24ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vTWFrZWZpbGUtNS1cXG5uZXQvYXRtL01ha2VmaWxlOjY6YXRtLXlcXHRcXHQ6PSBwdmMubyBpb2N0bC5vIGNvbW1vbi5vIGF0bV9taXNjLm8gcmF3Lm8gcmVzb3VyY2VzLm8gYXRtX3N5c2ZzLm9cXG5uZXQvYXRtL01ha2VmaWxlLTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA4OjExLjQ3MTMzNzMxM1oiLCJTZXEiOjEyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5NzMwMTMxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGF0bS15YCBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGVzdGFibGlzaGVkIHRoYXQgYGNvbW1vbi5vYCBpcyBpbmRlZWQgYSBjb21wb25lbnQgb2YgYGF0bS15YCwgYW5kIHRoYXQgdGhpcyBlbnRpcmUgbW9kdWxlLCBgYXRtLXlgLCBpcyBidWlsdCBvbmx5IHdoZW4gYENPTkZJR19BVE1gIGlzIGFjdGl2ZS4gVGhhdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJyb2FkZXIgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIGRldGVybWluZSB3aGVyZSBgdmNjX2Nvbm5lY3RgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhpcyBBVE0gc3Vic3lzdGVtLlxuXG5JJ3ZlIGFscmVhZHkgcnVuIGEgYGdyZXBgIGZvciBgdmNjX2Nvbm5lY3RgIHdpdGhpbiBgbmV0L2F0bS9gLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGV4Y2x1c2l2ZWx5IHVzZWQgaW4gYHB2Yy5jYC4gSG93ZXZlciwgbXkgZ3V0IGlzIHRlbGxpbmcgbWUgdGhlcmUgbWlnaHQgYmUgb3RoZXIgbG9jYXRpb25zLiBMZXQncyBkaWcgZGVlcGVyLiBUaGUgbmV4dCBsb2dpY2FsIHBsYWNlIHRvIGNoZWNrIGlzIGBuZXQvYXRtL3N2Yy5jYC4gV2FpdC4uLiB0aGVyZSBpc24ndCBhIGBzdmMuY2AgZmlsZSBpbiB0aGF0IGRpcmVjdG9yeT8gVGhhdCdzIHBlY3VsaWFyLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHN0ZXAgYmFjayBhbmQgdGhpbmsuIENvdWxkIGl0IGJlIHRoYXQgYHN2Yy5jYCBleGlzdGVkIGluIG9sZGVyIGtlcm5lbCB2ZXJzaW9ucyBhbmQgaGFzIHNpbmNlIGJlZW4gcmVuYW1lZCBvciByZWZhY3RvcmVkPyBPciBtYXliZSBpdHMgZnVuY3Rpb25hbGl0eSBpcyBub3cgaW5jb3Jwb3JhdGVkIGVsc2V3aGVyZT8gTGV0J3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBuZXQvYXRtL01ha2VmaWxlYCB0byBjb25maXJtIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cyBhbmQgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGNsdWUgYWJvdXQgdGhlIGN1cnJlbnQgb3JnYW5pemF0aW9uLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGJlZm9yZSBJIGRlY2xhcmUgdGhpcyBpbnZlc3RpZ2F0aW9uIGNvbXBsZXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM4MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowODoyNS40NDQzNTU2MVoiLCJTZXEiOjEyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSBBVE0gUHJvdG9jb2wgRmFtaWxpZXMuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGF0bS15XFx0XFx0Oj0gcHZjLm8gaW9jdGwubyBjb21tb24ubyBhdG1fbWlzYy5vIHJhdy5vIHJlc291cmNlcy5vIGF0bV9zeXNmcy5vXFxuICAgNzpcXHRcXG4gICA4OlxcdG9iai0kKENPTkZJR19BVE0pICs9IGF0bS5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfQVRNX0JSMjY4NCkgKz0gYnIyNjg0Lm9cXG4gIDEwOlxcdGF0bS0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG4gIDExOlxcdFxcbiAgMTI6XFx0b2JqLSQoQ09ORklHX1BQUE9BVE0pICs9IHBwcG9hdG0ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowODoyNS40NDQ0NTcxWiIsIlNlcSI6MTIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE0MzE2NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25uZWN0aW9uIEZ1bmN0aW9ucyoqXG5cbkhtbSwgbG9va3MgbGlrZSBgc3ZjLmNgIGlzbid0IHdoZXJlIEkgZXhwZWN0ZWQgaXQgdG8gYmUuIE9rYXksIHNvIGBwdmMuY2AgaXMgdGhlIHNvbGUgY2FuZGlkYXRlIGZvciBub3cuIEJ1dCBob2xkIG9uLi4uIHdoYXQgYWJvdXQgYHJhdy5jYD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBrbm93IGlmIGByYXcuY2AgYWN0dWFsbHkgbWFrZXMgY2FsbHMgdG8gYHZjY19jb25uZWN0YC4gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLCBzaW5jZSBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBjb25uZWN0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDI4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowODoyOS4xNTg3Nzc4ODZaIiwiU2VxIjoxMjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTIxNDg5MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNjX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9yYXcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDg6MjkuMjE4MDA3NjY2WiIsIlNlcSI6MTI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzA2MDE1NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFUTSBQVkMgQnVnIEZpeCoqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgaXMgYWJvdXQgdGhvc2UgQVRNIFBWQy1yZWxhdGVkIGZ1bmN0aW9uczogYHZjY19jb25uZWN0YCwgYHB2Y19iaW5kYCwgYW5kIGBwdmNfY29ubmVjdGAuIFRob3NlIGFyZSB0aGUgc3ltYm9scyB0byB6ZXJvIGluIG9uLiBUaGUgc3VwcG9ydGluZyBjb25maWd1cmF0aW9ucyBhcmUgYEFUTWAsIGBVU0JfQVRNYCwgYW5kIGBVU0JfWFVTQkFUTWAgLSB3aGljaCBpcyBleHBlY3RlZCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZS5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUgcmVhc29uaW5nLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY3JpdGljYWwgZmxhdyBpbiBgbmV0L2F0bS9jb21tb24uY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAuIEl0IHNlZW1zIHRoYXQgYW4gZWRnZSBjYXNlIHdoZXJlIGB2cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBlcXVhbCBgQVRNX0NJX01BWGAgKC0xKSBsZWFkcyB0byBzb21lIG5hc3R5IHVuZGVmaW5lZCBiZWhhdmlvci4gV2UncmUgdGFsa2luZyBwb3RlbnRpYWwgbmVnYXRpdmUgc2hpZnRzIG9yIGluZmluaXRlIGxvb3BzIGhlcmUg4oCTIGNsYXNzaWMgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGUgY2F0Y2ggaXMsIHRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UuIFNwZWNpZmljYWxseSwgdXNlcnMgY2FuIHRyaWdnZXIgdGhlIGBiaW5kYCBhbmQgYGNvbm5lY3RgIHN5c3RlbSBjYWxscyBvbiBBVE0gUFZDIHNvY2tldHMgKGBBRl9BVE1QVkNgKS4gVGhlIG9ubHkgcHJlLXJlcXVpc2l0ZSBmb3IgdGhpcyB0byBvY2N1ciBpcyBhbiBBVE0gZGV2aWNlIGJlaW5nIHByZXNlbnQuIEdpdmVuIHRoZSBzY2FyY2l0eSBvZiBwaHlzaWNhbCBBVE0gaGFyZHdhcmUgdGhlc2UgZGF5cywgdGhlIHRyaWNrIGlzIHRvIHVzZSBzeXprYWxsZXIgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgVVNCIGdhZGdldCBmcmFtZXdvcmsuIFdlIGNhbiBlZmZlY3RpdmVseSBlbXVsYXRlIGFuIEFUTSBkZXZpY2UsIHdoaWNoIGlzIHdoZXJlIHRoZSBVU0IgQVRNIGRyaXZlcnMgbGlrZSBgeHVzYmF0bWAgY29tZSBpbnRvIHBsYXkuXG5cbkluIHNob3J0LCBiZWNhdXNlIHRoaXMgZml4IGhhcyBhIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHVzZXIgc3BhY2UgdGhyb3VnaCBgYmluZGAgYW5kIGBjb25uZWN0YCBhbmQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gY3Jhc2gvZXhwb3NlIHRoZSBzeXN0ZW0sIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyMzgsIk91dHB1dFRva2VucyI6MjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA4OjM3LjUyNDAyNzU3NVoiLCJTZXEiOjEyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA0NjYxOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUTVwiLFxuICAgIFwiVVNCX0FUTVwiLFxuICAgIFwiVVNCX1hVU0JBVE1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2Y2NfY29ubmVjdFwiLFxuICAgIFwicHZjX2JpbmRcIixcbiAgICBcInB2Y19jb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgIHdoZXJlIGB2cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBiZWluZyBgQVRNX0NJX01BWGAgKC0xKSB3b3VsZCBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3IgKGUuZy4gbmVnYXRpdmUgc2hpZnRzIG9yIGluZmluaXRlIGxvb3BzKS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGBiaW5kYCBhbmQgYGNvbm5lY3RgIHN5c3RlbSBjYWxscyBvbiBBVE0gUFZDIHNvY2tldHMgKGBBRl9BVE1QVkNgKS4gVG8gcmVhY2ggdGhpcyBjb2RlLCBhbiBBVE0gZGV2aWNlIG11c3QgYmUgcHJlc2VudCBpbiB0aGUgc3lzdGVtLiBTaW5jZSBwaHlzaWNhbCBBVE0gaGFyZHdhcmUgaXMgcmFyZSwgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGFuIEFUTSBkZXZpY2UgdXNpbmcgdGhlIFVTQiBnYWRnZXQgZnJhbWV3b3JrIGNvbWJpbmVkIHdpdGggVVNCIEFUTSBkcml2ZXJzIChlLmcuIGB4dXNiYXRtYCkuIFRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBVE1cIixcbiAgICBcIlVTQl9BVE1cIixcbiAgICBcIlVTQl9YVVNCQVRNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmNjX2Nvbm5lY3RcIixcbiAgICBcInB2Y19iaW5kXCIsXG4gICAgXCJwdmNfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgIGluIGBuZXQvYXRtL2NvbW1vbi5jYCB3aGVyZSBgdnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgYmVpbmcgYEFUTV9DSV9NQVhgICgtMSkgd291bGQgY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIChlLmcuIG5lZ2F0aXZlIHNoaWZ0cyBvciBpbmZpbml0ZSBsb29wcykuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgYmluZGAgYW5kIGBjb25uZWN0YCBzeXN0ZW0gY2FsbHMgb24gQVRNIFBWQyBzb2NrZXRzIChgQUZfQVRNUFZDYCkuIFRvIHJlYWNoIHRoaXMgY29kZSwgYW4gQVRNIGRldmljZSBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIHN5c3RlbS4gU2luY2UgcGh5c2ljYWwgQVRNIGhhcmR3YXJlIGlzIHJhcmUsIHN5emthbGxlciBjYW4gZW11bGF0ZSBhbiBBVE0gZGV2aWNlIHVzaW5nIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yayBjb21iaW5lZCB3aXRoIFVTQiBBVE0gZHJpdmVycyAoZS5nLiBgeHVzYmF0bWApLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA4OjM3LjY2NDUwMjM5M1oiLCJTZXEiOjEyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Mzc4Mzg0MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDg6MzcuNjY0OTk0ODAzWiIsIlNlcSI6MTI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTM3Nzg4NDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gdW5kZWZpbmVkIGJlaGF2aW9yIChzaGlmdC1vdXQtb2YtYm91bmRzKSBidWcgaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgLiBXaGVuIGBkZXYtXFx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzYCBvciBgdmNpX2JpdHNgIGlzIHNldCB0byBgQVRNX0NJX01BWGAgKC0xKSwgdGhlIGJpdHdpc2Ugc2hpZnQgb3BlcmF0aW9ucyAoYDEgXFx1MDAzY1xcdTAwM2MgdnBpX2JpdHNgIG9yIGB2cGkgXFx1MDAzZVxcdTAwM2UgdnBpX2JpdHNgKSByZXN1bHQgaW4gYSBzaGlmdCBieSBhIG5lZ2F0aXZlIGFtb3VudCwgd2hpY2ggaXMgdW5kZWZpbmVkIGJlaGF2aW9yLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2NhbCB2YXJpYWJsZXMgdG8gaGFuZGxlIGBBVE1fQ0lfTUFYYCBhbmQgcmVwbGFjZSBpdCB3aXRoIDggb3IgMTYgcmVzcGVjdGl2ZWx5LiBUaGlzIGJ1ZyBpcyBjYXVnaHQgYnkgVUJTQU4gKFVuZGVmaW5lZCBCZWhhdmlvciBTYW5pdGl6ZXIpLCB3aGljaCBpcyBhbHJlYWR5IGVuYWJsZWQgaW4gc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGludm9sdmVkIGluIHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNGIwMzA4NWRjNTU1ZmE3MjMyMTgwNGU2MDEzZjI0YjA4ZTQ0MTRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTY6NTI6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYXRtL2NvbW1vbi5jIGIvbmV0L2F0bS9jb21tb24uY1xuaW5kZXggODExOTU3MjdmYTE4Yi4uYTIxNDM5ZDY5MGYxNCAxMDA2NDRcbi0tLSBhL25ldC9hdG0vY29tbW9uLmNcbisrKyBiL25ldC9hdG0vY29tbW9uLmNcbkBAIC0zMzQsNiArMzM0LDEwIEBAIHN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcbiBcdHNob3J0IG9sZF9wO1xuIFx0aW50IG9sZF9jO1xuIFx0aW50IGVycjtcbitcdGludCB2cGlfYml0cyA9IHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOlxuK1x0XHQgICAgICAgdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0cztcbitcdGludCB2Y2lfYml0cyA9IHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDE2IDpcbitcdFx0ICAgICAgIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHM7XG4gXG4gXHRpZiAoKnZwaSAhPSBBVE1fVlBJX0FOWSBcdTAwMjZcdTAwMjYgKnZjaSAhPSBBVE1fVkNJX0FOWSkge1xuIFx0XHRlcnIgPSBjaGVja19jaSh2Y2MsICp2cGksICp2Y2kpO1xuQEAgLTM0MiwxMiArMzQ2LDEyIEBAIHN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcbiBcdC8qIGxhc3Qgc2NhbiBtYXkgaGF2ZSBsZWZ0IHZhbHVlcyBvdXQgb2YgYm91bmRzIGZvciBjdXJyZW50IGRldmljZSAqL1xuIFx0aWYgKCp2cGkgIT0gQVRNX1ZQSV9BTlkpXG4gXHRcdHAgPSAqdnBpO1xuLVx0ZWxzZSBpZiAocCBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHMpXG4rXHRlbHNlIGlmIChwIFx1MDAzZT0gMSBcdTAwM2NcdTAwM2MgdnBpX2JpdHMpXG4gXHRcdHAgPSAwO1xuIFx0aWYgKCp2Y2kgIT0gQVRNX1ZDSV9BTlkpXG4gXHRcdGMgPSAqdmNpO1xuLVx0ZWxzZSBpZiAoYyBcdTAwM2MgQVRNX05PVF9SU1ZfVkNJIHx8IGMgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2Y2MtXHUwMDNlZGV2LVx1MDAzZWNpX3JhbmdlLnZjaV9iaXRzKVxuLVx0XHRcdGMgPSBBVE1fTk9UX1JTVl9WQ0k7XG4rXHRlbHNlIGlmIChjIFx1MDAzYyBBVE1fTk9UX1JTVl9WQ0kgfHwgYyBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjaV9iaXRzKVxuK1x0XHRjID0gQVRNX05PVF9SU1ZfVkNJO1xuIFx0b2xkX3AgPSBwO1xuIFx0b2xkX2MgPSBjO1xuIFx0ZG8ge1xuQEAgLTM1OCwxMyArMzYyLDEzIEBAIHN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcbiBcdFx0fVxuIFx0XHRpZiAoKnZjaSA9PSBBVE1fVkNJX0FOWSkge1xuIFx0XHRcdGMrKztcbi1cdFx0XHRpZiAoYyBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMpXG4rXHRcdFx0aWYgKGMgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2Y2lfYml0cylcbiBcdFx0XHRcdGMgPSBBVE1fTk9UX1JTVl9WQ0k7XG4gXHRcdH1cbiBcdFx0aWYgKChjID09IEFUTV9OT1RfUlNWX1ZDSSB8fCAqdmNpICE9IEFUTV9WQ0lfQU5ZKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICp2cGkgPT0gQVRNX1ZQSV9BTlkpIHtcbiBcdFx0XHRwKys7XG4tXHRcdFx0aWYgKHAgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2Y2MtXHUwMDNlZGV2LVx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzKVxuK1x0XHRcdGlmIChwIFx1MDAzZT0gMSBcdTAwM2NcdTAwM2MgdnBpX2JpdHMpXG4gXHRcdFx0XHRwID0gMDtcbiBcdFx0fVxuIFx0fSB3aGlsZSAob2xkX3AgIT0gcCB8fCBvbGRfYyAhPSBjKTtcbkBAIC0zNzYsMTAgKzM4MCwxNCBAQCBzdGF0aWMgaW50IF9fdmNjX2Nvbm5lY3Qoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IGF0bV9kZXYgKmRldiwgc2hvcnQgdnBpLFxuIHtcbiBcdHN0cnVjdCBzb2NrICpzayA9IHNrX2F0bSh2Y2MpO1xuIFx0aW50IGVycm9yO1xuK1x0aW50IHZwaV9iaXRzID0gZGV2LVx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzID09IEFUTV9DSV9NQVggPyA4IDpcbitcdFx0ICAgICAgIGRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0cztcbitcdGludCB2Y2lfYml0cyA9IGRldi1cdTAwM2VjaV9yYW5nZS52Y2lfYml0cyA9PSBBVE1fQ0lfTUFYID8gMTYgOlxuK1x0XHQgICAgICAgZGV2LVx1MDAzZWNpX3JhbmdlLnZjaV9iaXRzO1xuIFxuIFx0aWYgKCh2cGkgIT0gQVRNX1ZQSV9VTlNQRUMgXHUwMDI2XHUwMDI2IHZwaSAhPSBBVE1fVlBJX0FOWSBcdTAwMjZcdTAwMjZcbi1cdCAgICB2cGkgXHUwMDNlXHUwMDNlIGRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0cykgfHwgKHZjaSAhPSBBVE1fVkNJX1VOU1BFQyBcdTAwMjZcdTAwMjZcbi1cdCAgICB2Y2kgIT0gQVRNX1ZDSV9BTlkgXHUwMDI2XHUwMDI2IHZjaSBcdTAwM2VcdTAwM2UgZGV2LVx1MDAzZWNpX3JhbmdlLnZjaV9iaXRzKSlcbitcdCAgICB2cGkgXHUwMDNlXHUwMDNlIHZwaV9iaXRzKSB8fCAodmNpICE9IEFUTV9WQ0lfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHZjaSAhPSBBVE1fVkNJX0FOWSBcdTAwMjZcdTAwMjYgdmNpIFx1MDAzZVx1MDAzZSB2Y2lfYml0cykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0aWYgKHZjaSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgdmNpIFx1MDAzYyBBVE1fTk9UX1JTVl9WQ0kgXHUwMDI2XHUwMDI2ICFjYXBhYmxlKENBUF9ORVRfQklORF9TRVJWSUNFKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA4OjM3LjY2NDk5NTY2M1oiLCJTZXEiOjEyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQxOTU4NTM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIEFUTSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgd2l0aGluIGBuZXQvYXRtL2NvbW1vbi5jYC4gSXQncyBpbnRyb2R1Y2luZyB0aGVzZSBgdnBpX2JpdHNgIGFuZCBgdmNpX2JpdHNgIHZhcmlhYmxlcywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgdGhleSdyZSBhZGRyZXNzaW5nIHNvbWUgcmFuZ2UgaGFuZGxpbmcgaXNzdWUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBBVE1fQ0lfTUFYYCBhbmQgaG93IGl0J3MgdXNlZCB3aXRoaW4gYHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2VgLiBJdCBsb29rcyBsaWtlIGl0J3MgdHJ5aW5nIHRvIG5vcm1hbGl6ZSBvciBjbGFtcCB0aGUgYml0LXdpZHRoIHZhbHVlcy4gSWYgYHZwaV9iaXRzYCBvciBgdmNpX2JpdHNgIGFyZSBlcXVhbCB0byBgQVRNX0NJX01BWGAgKHdoaWNoLCBsZXQncyBiZSBob25lc3QsIGlzIGFsbW9zdCBjZXJ0YWlubHkgZGVmaW5lZCBhcyAtMSksIGl0J3Mgc2V0dGluZyB0aGVtIHRvIDggYW5kIDE2IHJlc3BlY3RpdmVseS4gVGhlbiwgaXQgdXNlcyB0aGVzZSAqbmV3KiB2YXJpYWJsZXMgaW4gYml0LXNoaWZ0IG9wZXJhdGlvbnMuXG5cblRoYXQgLTEgZm9yIGBBVE1fQ0lfTUFYYCBpbW1lZGlhdGVseSB0aHJvd3MgdXAgYSByZWQgZmxhZy4gV2FpdCBhIHNlY29uZC4uLiBpZiBgdnBpX2JpdHNgICpvciogYHZjaV9iaXRzYCBpcyAtMSwgdGhlbiB0aGUgY29kZSBpcyBkb2luZyB0aGluZ3MgbGlrZSBgMSBcdTAwM2NcdTAwM2MgLTFgIG9yIGB2cGkgXHUwMDNlXHUwMDNlIC0xYCwgYW5kIHRoYXQgaXMgKnRleHRib29rKiB1bmRlZmluZWQgYmVoYXZpb3IuIEMgbGFuZ3VhZ2Ugc3BlYyBzYXlzIHlvdSBjYW5ub3Qgc2hpZnQgYnkgYSBuZWdhdGl2ZSBhbW91bnQuIFRoaXMgcGF0Y2ggaXMgY2xlYXJseSBmaXhpbmcgdGhhdCwgYSBjbGFzc2ljIHNoaWZ0LW91dC1vZi1ib3VuZHMgYnVnLCBhbmQgcHJvYmFibHkgYSBzdWJ0bGUgb25lIHRoYXQgbGlrZWx5IG1hbmlmZXN0ZWQgb24gc29tZSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBvciBtYXliZSBldmVuIHVuZGVyIHNwZWNpZmljIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLlxuXG5UaGlzIGlzIHRoZSBraW5kIG9mIHN0dWZmIHRoYXQgVUJTQU4gbG92ZXMgdG8gY2F0Y2gsIHJpZ2h0PyBVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyPyBHaXZlbiB0aGlzIGlzIGluIHRoZSBBVE0gbmV0d29ya2luZyBjb2RlLCBpdCB3b3VsZG4ndCBzdXJwcmlzZSBtZSBpZiBzb21lIEtBU0FOIGJ1aWxkcyBoYXZlIHBpY2tlZCB0aGlzIHVwLCBjYXVzaW5nIGEgYml0IG9mIGEgcGFuaWMuXG5cbkxldCBtZSB0aGluay4uLiBJcyB0aGlzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCB0aGF0J3Mgbm90IHdoYXQncyBoYXBwZW5pbmcgaGVyZS4gVGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgYGNpX3JhbmdlYCBmaWVsZHMgYXJlIGFsc28gaW5pdGlhbGl6ZWQuIEl0J3Mgbm90ICphYm91dCogdGhlICp2YWx1ZSogb2YgdGhlIGRhdGEgaW4gbWVtb3J5OyBpdCdzIGFib3V0IHRoZSB1c2Ugb2YgdGhhdCB2YWx1ZSBpbiBhIGJpdCBzaGlmdC4gSXQncyBhIHNoaWZ0LW91dC1vZi1ib3VuZHMgaXNzdWUuIFRoZSBidWcgaXMgdGhlIGludmFsaWQgdXNlIG9mIG5lZ2F0aXZlIHNoaWZ0IHZhbHVlcy5cblxuQWxyaWdodCwgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0IGBBVE1fQ0lfTUFYYCBkZWZpbml0aW9uLCB0aG91Z2guIEknbGwganVzdCBncmVwIGZvciBpdCByZWFsIHF1aWNrIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowODo0Ni4wODQ1ODQzNjFaIiwiU2VxIjoxMzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg3NjY1NTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgQVRNX0NJX01BWFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2Lmg9MTM4PXN0cnVjdCBhdG1faW9idWYge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oLTE0NC1cXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2Lmg6MTQ1OiNkZWZpbmUgQVRNX0NJX01BWCAgICAgIC0xICAgICAgICAgICAgICAvKiB1c2UgbWF4aW11bSByYW5nZSBvZiBWUEkvVkNJICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oLTE0Ni0gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA4OjQ4LjI3MjI1NTI3OVoiLCJTZXEiOjEzMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc3MDU5ODAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBVE0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgQVRNX0NJX01BWGAgaXMgZGVmaW5pdGVseSBgLTFgLiBUaGF0IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNsYXNzaWMgc2hpZnQtb3V0LW9mLWJvdW5kcyBpc3N1ZS4gQW55IGF0dGVtcHQgdG8gcGVyZm9ybSBgMSBcdTAwM2NcdTAwM2MgLTFgIG9yIGB2cGkgXHUwMDNlXHUwMDNlIC0xYCBpcyBnb2luZyB0byB0cmlnZ2VyIGl0LiBUaGlzIGlzIHRleHRib29rIFVCU0FOIHRlcnJpdG9yeS4gSSBjYW4gc2VlIHRoaXMgcmlnaHQgYXdheS5cblxuVGhlIGdvb2QgbmV3cyBpcywgVUJTQU4gaXMgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBzdGFuZGFyZCBLQVNBTiBidWlsZHMsIHdoaWNoIGlzIGdyZWF0LiBJdCBtZWFucyB0aGlzIHR5cGUgb2YgdW5kZWZpbmVkIGJlaGF2aW9yIGlzIGxpa2VseSBhbHJlYWR5IGJlaW5nIGNhdWdodCBkdXJpbmcgb3VyIHN0YW5kYXJkIHRlc3RpbmcuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gcGxheSBoZXJlLCBub3RoaW5nIHRvIHdhcnJhbnQgYSBLTVNBTiBzZXNzaW9uIG9yIGRlZXBlciBhbmFseXNpcyBmcm9tIHRoYXQgcGVyc3BlY3RpdmUuXG5cblRoZSBwYXRjaCdzIGdvYWwgaXMgdG8gaGFuZGxlIHRoZSBgLTFgIHZhbHVlcywgbGlrZWx5IGJ5IHN1YnN0aXR1dGluZyBgOGAgb3IgYDE2YC4gSXQncyBhIGNsZWFuIGZpeC4gU28sIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIHJlc29sdmVzIHRoZSBzaGlmdC1vdXQtb2YtYm91bmRzIGJ1Zy4gSeKAmW0gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuIFdlJ3JlIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NjQsIk91dHB1dFRva2VucyI6MjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA4OjU3LjA0Mjg1NjMyM1oiLCJTZXEiOjEzMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQtb3V0LW9mLWJvdW5kcykgYnVnIGluIGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgIGluIGBuZXQvYXRtL2NvbW1vbi5jYC4gV2hlbiBgZGV2LVxcdTAwM2VjaV9yYW5nZS52cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBpcyBzZXQgdG8gYEFUTV9DSV9NQVhgICgtMSksIHRoZSBiaXR3aXNlIHNoaWZ0IG9wZXJhdGlvbnMgKGAxIFxcdTAwM2NcXHUwMDNjIHZwaV9iaXRzYCBvciBgdnBpIFxcdTAwM2VcXHUwMDNlIHZwaV9iaXRzYCkgcmVzdWx0IGluIGEgc2hpZnQgYnkgYSBuZWdhdGl2ZSBhbW91bnQsIHdoaWNoIGlzIHVuZGVmaW5lZCBiZWhhdmlvci4gVGhlIHBhdGNoIGludHJvZHVjZXMgbG9jYWwgdmFyaWFibGVzIHRvIGhhbmRsZSBgQVRNX0NJX01BWGAgYW5kIHJlcGxhY2UgaXQgd2l0aCA4IG9yIDE2IHJlc3BlY3RpdmVseS4gVGhpcyBidWcgaXMgY2F1Z2h0IGJ5IFVCU0FOIChVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyKSwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVhaywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyBpbnZvbHZlZCBpbiB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gdW5kZWZpbmVkIGJlaGF2aW9yIChzaGlmdC1vdXQtb2YtYm91bmRzKSBidWcgaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgLiBXaGVuIGBkZXYtXFx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzYCBvciBgdmNpX2JpdHNgIGlzIHNldCB0byBgQVRNX0NJX01BWGAgKC0xKSwgdGhlIGJpdHdpc2Ugc2hpZnQgb3BlcmF0aW9ucyAoYDEgXFx1MDAzY1xcdTAwM2MgdnBpX2JpdHNgIG9yIGB2cGkgXFx1MDAzZVxcdTAwM2UgdnBpX2JpdHNgKSByZXN1bHQgaW4gYSBzaGlmdCBieSBhIG5lZ2F0aXZlIGFtb3VudCwgd2hpY2ggaXMgdW5kZWZpbmVkIGJlaGF2aW9yLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2NhbCB2YXJpYWJsZXMgdG8gaGFuZGxlIGBBVE1fQ0lfTUFYYCBhbmQgcmVwbGFjZSBpdCB3aXRoIDggb3IgMTYgcmVzcGVjdGl2ZWx5LiBUaGlzIGJ1ZyBpcyBjYXVnaHQgYnkgVUJTQU4gKFVuZGVmaW5lZCBCZWhhdmlvciBTYW5pdGl6ZXIpLCB3aGljaCBpcyBhbHJlYWR5IGVuYWJsZWQgaW4gc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGludm9sdmVkIGluIHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwkz2n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 16:50:21 +0000 UTC FinishedAt: 2026-08-26 17:08:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATM", "USB_ATM", "USB_XUSBATM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATM", "USB_ATM", "USB_XUSBATM" ], "series_id": "93fe25d1-ccb3-4fd5-830d-ee9224a1adcc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vcc_connect", "pvc_bind", "pvc_connect" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBVE0mIzM0OywKICAgICYjMzQ7VVNCX0FUTSYjMzQ7LAogICAgJiMzNDtVU0JfWFVTQkFUTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZjY19jb25uZWN0JiMzNDssCiAgICAmIzM0O3B2Y19iaW5kJiMzNDssCiAgICAmIzM0O3B2Y19jb25uZWN0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gdW5kZWZpbmVkIGJlaGF2aW9yIChzaGlmdC1vdXQtb2YtYm91bmRzKSBidWcgaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgLiBXaGVuIGBkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgaXMgc2V0IHRvIGBBVE1fQ0lfTUFYYCAoLTEpLCB0aGUgYml0d2lzZSBzaGlmdCBvcGVyYXRpb25zIChgMSBcdTAwM2NcdTAwM2MgdnBpX2JpdHNgIG9yIGB2cGkgXHUwMDNlXHUwMDNlIHZwaV9iaXRzYCkgcmVzdWx0IGluIGEgc2hpZnQgYnkgYSBuZWdhdGl2ZSBhbW91bnQsIHdoaWNoIGlzIHVuZGVmaW5lZCBiZWhhdmlvci4gVGhlIHBhdGNoIGludHJvZHVjZXMgbG9jYWwgdmFyaWFibGVzIHRvIGhhbmRsZSBgQVRNX0NJX01BWGAgYW5kIHJlcGxhY2UgaXQgd2l0aCA4IG9yIDE2IHJlc3BlY3RpdmVseS4gVGhpcyBidWcgaXMgY2F1Z2h0IGJ5IFVCU0FOIChVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyKSwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVhaywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyBpbnZvbHZlZCBpbiB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgIGluIGBuZXQvYXRtL2NvbW1vbi5jYCB3aGVyZSBgdnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgYmVpbmcgYEFUTV9DSV9NQVhgICgtMSkgd291bGQgY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIChlLmcuIG5lZ2F0aXZlIHNoaWZ0cyBvciBpbmZpbml0ZSBsb29wcykuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgYmluZGAgYW5kIGBjb25uZWN0YCBzeXN0ZW0gY2FsbHMgb24gQVRNIFBWQyBzb2NrZXRzIChgQUZfQVRNUFZDYCkuIFRvIHJlYWNoIHRoaXMgY29kZSwgYW4gQVRNIGRldmljZSBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIHN5c3RlbS4gU2luY2UgcGh5c2ljYWwgQVRNIGhhcmR3YXJlIGlzIHJhcmUsIHN5emthbGxlciBjYW4gZW11bGF0ZSBhbiBBVE0gZGV2aWNlIHVzaW5nIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yayBjb21iaW5lZCB3aXRoIFVTQiBBVE0gZHJpdmVycyAoZS5nLiBgeHVzYmF0bWApLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNGIwMzA4NWRjNTU1ZmE3MjMyMTgwNGU2MDEzZjI0YjA4ZTQ0MTRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTY6NTI6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9jb21tb24uYyBiL25ldC9hdG0vY29tbW9uLmNcbmluZGV4IDgxMTk1NzI3ZmExOGIuLmEyMTQzOWQ2OTBmMTQgMTAwNjQ0XG4tLS0gYS9uZXQvYXRtL2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYXRtL2NvbW1vbi5jXG5AQCAtMzM0LDYgJiM0MzszMzQsMTAgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxuIFx0c2hvcnQgb2xkX3A7XG4gXHRpbnQgb2xkX2M7XG4gXHRpbnQgZXJyO1xuJiM0MztcdGludCB2cGlfYml0cyA9IHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOlxuJiM0MztcdFx0ICAgICAgIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHM7XG4mIzQzO1x0aW50IHZjaV9iaXRzID0gdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52Y2lfYml0cyA9PSBBVE1fQ0lfTUFYID8gMTYgOlxuJiM0MztcdFx0ICAgICAgIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHM7XG4gXG4gXHRpZiAoKnZwaSAhPSBBVE1fVlBJX0FOWSBcdTAwMjZcdTAwMjYgKnZjaSAhPSBBVE1fVkNJX0FOWSkge1xuIFx0XHRlcnIgPSBjaGVja19jaSh2Y2MsICp2cGksICp2Y2kpO1xuQEAgLTM0MiwxMiAmIzQzOzM0NiwxMiBAQCBzdGF0aWMgaW50IGZpbmRfY2koY29uc3Qgc3RydWN0IGF0bV92Y2MgKnZjYywgc2hvcnQgKnZwaSwgaW50ICp2Y2kpXG4gXHQvKiBsYXN0IHNjYW4gbWF5IGhhdmUgbGVmdCB2YWx1ZXMgb3V0IG9mIGJvdW5kcyBmb3IgY3VycmVudCBkZXZpY2UgKi9cbiBcdGlmICgqdnBpICE9IEFUTV9WUElfQU5ZKVxuIFx0XHRwID0gKnZwaTtcbi1cdGVsc2UgaWYgKHAgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2Y2MtXHUwMDNlZGV2LVx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzKVxuJiM0MztcdGVsc2UgaWYgKHAgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2cGlfYml0cylcbiBcdFx0cCA9IDA7XG4gXHRpZiAoKnZjaSAhPSBBVE1fVkNJX0FOWSlcbiBcdFx0YyA9ICp2Y2k7XG4tXHRlbHNlIGlmIChjIFx1MDAzYyBBVE1fTk9UX1JTVl9WQ0kgfHwgYyBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMpXG4tXHRcdFx0YyA9IEFUTV9OT1RfUlNWX1ZDSTtcbiYjNDM7XHRlbHNlIGlmIChjIFx1MDAzYyBBVE1fTk9UX1JTVl9WQ0kgfHwgYyBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjaV9iaXRzKVxuJiM0MztcdFx0YyA9IEFUTV9OT1RfUlNWX1ZDSTtcbiBcdG9sZF9wID0gcDtcbiBcdG9sZF9jID0gYztcbiBcdGRvIHtcbkBAIC0zNTgsMTMgJiM0MzszNjIsMTMgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxuIFx0XHR9XG4gXHRcdGlmICgqdmNpID09IEFUTV9WQ0lfQU5ZKSB7XG4gXHRcdFx0YyYjNDM7JiM0Mzs7XG4tXHRcdFx0aWYgKGMgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2Y2MtXHUwMDNlZGV2LVx1MDAzZWNpX3JhbmdlLnZjaV9iaXRzKVxuJiM0MztcdFx0XHRpZiAoYyBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjaV9iaXRzKVxuIFx0XHRcdFx0YyA9IEFUTV9OT1RfUlNWX1ZDSTtcbiBcdFx0fVxuIFx0XHRpZiAoKGMgPT0gQVRNX05PVF9SU1ZfVkNJIHx8ICp2Y2kgIT0gQVRNX1ZDSV9BTlkpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKnZwaSA9PSBBVE1fVlBJX0FOWSkge1xuIFx0XHRcdHAmIzQzOyYjNDM7O1xuLVx0XHRcdGlmIChwIFx1MDAzZT0gMSBcdTAwM2NcdTAwM2MgdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0cylcbiYjNDM7XHRcdFx0aWYgKHAgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2cGlfYml0cylcbiBcdFx0XHRcdHAgPSAwO1xuIFx0XHR9XG4gXHR9IHdoaWxlIChvbGRfcCAhPSBwIHx8IG9sZF9jICE9IGMpO1xuQEAgLTM3NiwxMCAmIzQzOzM4MCwxNCBAQCBzdGF0aWMgaW50IF9fdmNjX2Nvbm5lY3Qoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IGF0bV9kZXYgKmRldiwgc2hvcnQgdnBpLFxuIHtcbiBcdHN0cnVjdCBzb2NrICpzayA9IHNrX2F0bSh2Y2MpO1xuIFx0aW50IGVycm9yO1xuJiM0MztcdGludCB2cGlfYml0cyA9IGRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0cyA9PSBBVE1fQ0lfTUFYID8gOCA6XG4mIzQzO1x0XHQgICAgICAgZGV2LVx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzO1xuJiM0MztcdGludCB2Y2lfYml0cyA9IGRldi1cdTAwM2VjaV9yYW5nZS52Y2lfYml0cyA9PSBBVE1fQ0lfTUFYID8gMTYgOlxuJiM0MztcdFx0ICAgICAgIGRldi1cdTAwM2VjaV9yYW5nZS52Y2lfYml0cztcbiBcbiBcdGlmICgodnBpICE9IEFUTV9WUElfVU5TUEVDIFx1MDAyNlx1MDAyNiB2cGkgIT0gQVRNX1ZQSV9BTlkgXHUwMDI2XHUwMDI2XG4tXHQgICAgdnBpIFx1MDAzZVx1MDAzZSBkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHMpIHx8ICh2Y2kgIT0gQVRNX1ZDSV9VTlNQRUMgXHUwMDI2XHUwMDI2XG4tXHQgICAgdmNpICE9IEFUTV9WQ0lfQU5ZIFx1MDAyNlx1MDAyNiB2Y2kgXHUwMDNlXHUwMDNlIGRldi1cdTAwM2VjaV9yYW5nZS52Y2lfYml0cykpXG4mIzQzO1x0ICAgIHZwaSBcdTAwM2VcdTAwM2UgdnBpX2JpdHMpIHx8ICh2Y2kgIT0gQVRNX1ZDSV9VTlNQRUMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHZjaSAhPSBBVE1fVkNJX0FOWSBcdTAwMjZcdTAwMjYgdmNpIFx1MDAzZVx1MDAzZSB2Y2lfYml0cykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0aWYgKHZjaSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgdmNpIFx1MDAzYyBBVE1fTk9UX1JTVl9WQ0kgXHUwMDI2XHUwMDI2ICFjYXBhYmxlKENBUF9ORVRfQklORF9TRVJWSUNFKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xNm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtVU0JfQVRNJiMzNDssCiAgICAmIzM0O1VTQl9YVVNCQVRNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmNjX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7cHZjX2JpbmQmIzM0OywKICAgICYjMzQ7cHZjX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgIHdoZXJlIGB2cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBiZWluZyBgQVRNX0NJX01BWGAgKC0xKSB3b3VsZCBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3IgKGUuZy4gbmVnYXRpdmUgc2hpZnRzIG9yIGluZmluaXRlIGxvb3BzKS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGBiaW5kYCBhbmQgYGNvbm5lY3RgIHN5c3RlbSBjYWxscyBvbiBBVE0gUFZDIHNvY2tldHMgKGBBRl9BVE1QVkNgKS4gVG8gcmVhY2ggdGhpcyBjb2RlLCBhbiBBVE0gZGV2aWNlIG11c3QgYmUgcHJlc2VudCBpbiB0aGUgc3lzdGVtLiBTaW5jZSBwaHlzaWNhbCBBVE0gaGFyZHdhcmUgaXMgcmFyZSwgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGFuIEFUTSBkZXZpY2UgdXNpbmcgdGhlIFVTQiBnYWRnZXQgZnJhbWV3b3JrIGNvbWJpbmVkIHdpdGggVVNCIEFUTSBkcml2ZXJzIChlLmcuIGB4dXNiYXRtYCkuIFRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM0YjAzMDg1ZGM1NTVmYTcyMzIxODA0ZTYwMTNmMjRiMDhlNDQxNGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjo1MjowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9hdG0vY29tbW9uLmMgYi9uZXQvYXRtL2NvbW1vbi5jCmluZGV4IDgxMTk1NzI3ZmExOGIuLmEyMTQzOWQ2OTBmMTQgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9jb21tb24uYwpAQCAtMzM0LDYgJiM0MzszMzQsMTAgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKQogCXNob3J0IG9sZF9wOwogCWludCBvbGRfYzsKIAlpbnQgZXJyOwomIzQzOwlpbnQgdnBpX2JpdHMgPSB2Y2MtJmd0O2Rldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOgomIzQzOwkJICAgICAgIHZjYy0mZ3Q7ZGV2LSZndDtjaV9yYW5nZS52cGlfYml0czsKJiM0MzsJaW50IHZjaV9iaXRzID0gdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzID09IEFUTV9DSV9NQVggPyAxNiA6CiYjNDM7CQkgICAgICAgdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzOwogCiAJaWYgKCp2cGkgIT0gQVRNX1ZQSV9BTlkgJmFtcDsmYW1wOyAqdmNpICE9IEFUTV9WQ0lfQU5ZKSB7CiAJCWVyciA9IGNoZWNrX2NpKHZjYywgKnZwaSwgKnZjaSk7CkBAIC0zNDIsMTIgJiM0MzszNDYsMTIgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKQogCS8qIGxhc3Qgc2NhbiBtYXkgaGF2ZSBsZWZ0IHZhbHVlcyBvdXQgb2YgYm91bmRzIGZvciBjdXJyZW50IGRldmljZSAqLwogCWlmICgqdnBpICE9IEFUTV9WUElfQU5ZKQogCQlwID0gKnZwaTsKLQllbHNlIGlmIChwICZndDs9IDEgJmx0OyZsdDsgdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZwaV9iaXRzKQomIzQzOwllbHNlIGlmIChwICZndDs9IDEgJmx0OyZsdDsgdnBpX2JpdHMpCiAJCXAgPSAwOwogCWlmICgqdmNpICE9IEFUTV9WQ0lfQU5ZKQogCQljID0gKnZjaTsKLQllbHNlIGlmIChjICZsdDsgQVRNX05PVF9SU1ZfVkNJIHx8IGMgJmd0Oz0gMSAmbHQ7Jmx0OyB2Y2MtJmd0O2Rldi0mZ3Q7Y2lfcmFuZ2UudmNpX2JpdHMpCi0JCQljID0gQVRNX05PVF9SU1ZfVkNJOwomIzQzOwllbHNlIGlmIChjICZsdDsgQVRNX05PVF9SU1ZfVkNJIHx8IGMgJmd0Oz0gMSAmbHQ7Jmx0OyB2Y2lfYml0cykKJiM0MzsJCWMgPSBBVE1fTk9UX1JTVl9WQ0k7CiAJb2xkX3AgPSBwOwogCW9sZF9jID0gYzsKIAlkbyB7CkBAIC0zNTgsMTMgJiM0MzszNjIsMTMgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKQogCQl9CiAJCWlmICgqdmNpID09IEFUTV9WQ0lfQU5ZKSB7CiAJCQljJiM0MzsmIzQzOzsKLQkJCWlmIChjICZndDs9IDEgJmx0OyZsdDsgdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzKQomIzQzOwkJCWlmIChjICZndDs9IDEgJmx0OyZsdDsgdmNpX2JpdHMpCiAJCQkJYyA9IEFUTV9OT1RfUlNWX1ZDSTsKIAkJfQogCQlpZiAoKGMgPT0gQVRNX05PVF9SU1ZfVkNJIHx8ICp2Y2kgIT0gQVRNX1ZDSV9BTlkpICZhbXA7JmFtcDsKIAkJICAgICp2cGkgPT0gQVRNX1ZQSV9BTlkpIHsKIAkJCXAmIzQzOyYjNDM7OwotCQkJaWYgKHAgJmd0Oz0gMSAmbHQ7Jmx0OyB2Y2MtJmd0O2Rldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHMpCiYjNDM7CQkJaWYgKHAgJmd0Oz0gMSAmbHQ7Jmx0OyB2cGlfYml0cykKIAkJCQlwID0gMDsKIAkJfQogCX0gd2hpbGUgKG9sZF9wICE9IHAgfHwgb2xkX2MgIT0gYyk7CkBAIC0zNzYsMTAgJiM0MzszODAsMTQgQEAgc3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSwKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBza19hdG0odmNjKTsKIAlpbnQgZXJyb3I7CiYjNDM7CWludCB2cGlfYml0cyA9IGRldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOgomIzQzOwkJICAgICAgIGRldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHM7CiYjNDM7CWludCB2Y2lfYml0cyA9IGRldi0mZ3Q7Y2lfcmFuZ2UudmNpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDE2IDoKJiM0MzsJCSAgICAgICBkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzOwogCiAJaWYgKCh2cGkgIT0gQVRNX1ZQSV9VTlNQRUMgJmFtcDsmYW1wOyB2cGkgIT0gQVRNX1ZQSV9BTlkgJmFtcDsmYW1wOwotCSAgICB2cGkgJmd0OyZndDsgZGV2LSZndDtjaV9yYW5nZS52cGlfYml0cykgfHwgKHZjaSAhPSBBVE1fVkNJX1VOU1BFQyAmYW1wOyZhbXA7Ci0JICAgIHZjaSAhPSBBVE1fVkNJX0FOWSAmYW1wOyZhbXA7IHZjaSAmZ3Q7Jmd0OyBkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzKSkKJiM0MzsJICAgIHZwaSAmZ3Q7Jmd0OyB2cGlfYml0cykgfHwgKHZjaSAhPSBBVE1fVkNJX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICB2Y2kgIT0gQVRNX1ZDSV9BTlkgJmFtcDsmYW1wOyB2Y2kgJmd0OyZndDsgdmNpX2JpdHMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAodmNpICZndDsgMCAmYW1wOyZhbXA7IHZjaSAmbHQ7IEFUTV9OT1RfUlNWX1ZDSSAmYW1wOyZhbXA7ICFjYXBhYmxlKENBUF9ORVRfQklORF9TRVJWSUNFKSkKIAkJcmV0dXJuIC1FUEVSTTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFUTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9hdG0vY29tbW9uLmNgLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmc7IGFueSBjaGFuZ2VzIHRvIHRoZSBjb3JlIEFUTSBjb2RlIHdhcnJhbnQgYSBjbG9zZSBsb29rLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgbW9kaWZpY2F0aW9ucyBhcmUgd2l0aGluIHRoZSBgZmluZF9jaWAgYW5kIGBfX3ZjY19jb25uZWN0YCBmdW5jdGlvbnMuIEkgc2VlIHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgYHZwaV9iaXRzYCBhbmQgYHZjaV9iaXRzYCB2YXJpYWJsZXMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoZXkmIzM5O3JlIGhhbmRsaW5nIGVkZ2UgY2FzZXMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdGhleSYjMzk7cmUgYWRkcmVzc2luZyBzaXR1YXRpb25zIHdoZXJlIHRoZSBWUEkgb3IgVkNJIGJpdHMgYXJlIGF0IHRoZWlyIG1heGltdW0gdmFsdWVzIChgQVRNX0NJX01BWGApIHdpdGhpbiB0aGUgYGRldi0mZ3Q7Y2lfcmFuZ2VgLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdG8gaG93IEFUTSBuZXR3b3JraW5nIG9wZXJhdGVzLCB3aGljaCBpcyBkZWZpbml0ZWx5IHNpZ25pZmljYW50LiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIGFmZmVjdCB0aGUgb3ZlcmFsbCBBVE0gaW5mcmFzdHJ1Y3R1cmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHJlYWNoYWJpbGl0eT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjdXJyZW50IEFUTSBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgdGhhdCBBVE0gaXMgZXZlbiByZWFjaGFibGUuIEdvdHRhIGRpdmUgaW50byB0aGUgY29uZmlnIGZpbGVzLCBzZWUgd2hhdCB0aGUgY3VycmVudCBzZXR1cCBpcyBsaWtlIGZvciBBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9LY29uZmlnLTUtXG5uZXQvYXRtL0tjb25maWc6Njpjb25maWcgQVRNXG5uZXQvYXRtL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0FzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXCYjMzQ7XG4tLVxubmV0L2F0bS9LY29uZmlnLTIxLVxubmV0L2F0bS9LY29uZmlnOjIyOmNvbmZpZyBBVE1fQlIyNjg0XG5uZXQvYXRtL0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtSRkMxNDgzLzI2ODQgQnJpZGdlZCBwcm90b2NvbHNcJiMzNDtcbi0tXG5uZXQvYXRtL0tjb25maWctMzAtXG5uZXQvYXRtL0tjb25maWc6MzE6Y29uZmlnIEFUTV9CUjI2ODRfSVBGSUxURVJcbm5ldC9hdG0vS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7UGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTEzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6CgoqKkFuYWx5emluZyB0aGUgQVRNIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHRoZSBjb25maWd1cmF0aW9uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaXMgYEFUTWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHZlcmlmeSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBjcnVjaWFsIGNvbXBvbmVudHMuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgYXJlIGFjY2Vzc2libGUgd2l0aGluIHRoaXMgY29udGV4dC4gRXhjZWxsZW50LCB0aGV5IGFyZSBzdGF0aWNhbGx5IGRlZmluZWQg4oCTIHRoYXQgZ2l2ZXMgdXMgYSBjbGVhciBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIG11c3QgcXVpY2tseSBkZXRlcm1pbmUgKndoYXQqIGlzIGNhbGxpbmcgdGhlc2UgY3JpdGljYWwgcm91dGluZXMuIFRoaXMgd2lsbCByZXZlYWwgdGhlIGNhbGwgY2hhaW5zLCB3aGljaCBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGVpciB1c2FnZSBhbmQgaW1wYWN0IHdpdGhpbiB0aGUgQVRNIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaW5kX2NpfF9fdmNjX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vY29tbW9uLmM9MzA1PXN0YXRpYyBpbnQgY2hlY2tfY2koY29uc3Qgc3RydWN0IGF0bV92Y2MgKnZjYywgc2hvcnQgdnBpLCBpbnQgdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtMzI5LVxubmV0L2F0bS9jb21tb24uYzozMzA6c3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxubmV0L2F0bS9jb21tb24uYy0zMzEte1xuLS1cbm5ldC9hdG0vY29tbW9uLmMtMzc3LVxubmV0L2F0bS9jb21tb24uYzozNzg6c3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSxcbm5ldC9hdG0vY29tbW9uLmMtMzc5LVx0XHRcdCBpbnQgdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtMzk5LVx0aWYgKHRlc3RfYml0KEFUTV9ERl9SRU1PVkVELCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpIHx8XG5uZXQvYXRtL2NvbW1vbi5jOjQwMDpcdCAgICAoZXJyb3IgPSBmaW5kX2NpKHZjYywgXHUwMDI2dnBpLCBcdTAwMjZ2Y2kpKSkge1xubmV0L2F0bS9jb21tb24uYy00MDEtXHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2dmNjX3NrbGlzdF9sb2NrKTtcbi0tXG5uZXQvYXRtL2NvbW1vbi5jPTQ1OD1pbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtNTA1LVx0XHRyZXR1cm4gLUVOT0RFVjtcbm5ldC9hdG0vY29tbW9uLmM6NTA2Olx0ZXJyb3IgPSBfX3ZjY19jb25uZWN0KHZjYywgZGV2LCB2cGksIHZjaSk7XG5uZXQvYXRtL2NvbW1vbi5jLTUwNy1cdGlmIChlcnJvcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNDcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqVHJhY2luZyB0aGUgVkNDIENvbm5lY3Rpb24qKgoKQWxyaWdodCwgc28gYHZjY19jb25uZWN0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWF0ZXMgdGhlIGNvbm5lY3Rpb24sIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBpdCBjYWxscyBgX192Y2NfY29ubmVjdGAgZGlyZWN0bHksIHNvIHRoYXQmIzM5O3MgdGhlIG5leHQgbG9naWNhbCBwb2ludCB0byBpbnZlc3RpZ2F0ZS4gTm93LCBgX192Y2NfY29ubmVjdGAgdGhlbiBjYWxscyBgZmluZF9jaWAsIHdoaWNoIGxpa2VseSBtZWFucyBpdCYjMzk7cyB0cnlpbmcgdG8gbG9jYXRlIHNvbWUgc29ydCBvZiBjb25uZWN0aW9uIGlkZW50aWZpZXIgb3IgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBoZXJlLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBhbmQgaG93IGV2ZXJ5dGhpbmcgZml0cyB0b2dldGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndobyogaXMgY2FsbGluZyBgdmNjX2Nvbm5lY3RgIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGZvbGxvdyB0aGUgdGhyZWFkIGZyb20gdGhlIG90aGVyIGVuZC4gU28sIEkgbmVlZCB0byBzZWUgdGhlIGNhbGxlcnMgdG8gYHZjY19jb25uZWN0YC4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y2NfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vY29tbW9uLmM9MzMwPXN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTM3Ny1cbm5ldC9hdG0vY29tbW9uLmM6Mzc4OnN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXG5uZXQvYXRtL2NvbW1vbi5jLTM3OS1cdFx0XHQgaW50IHZjaSlcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTQ1Ny1cbm5ldC9hdG0vY29tbW9uLmM6NDU4OmludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXG5uZXQvYXRtL2NvbW1vbi5jLTQ1OS17XG4tLVxubmV0L2F0bS9jb21tb24uYy01MDUtXHRcdHJldHVybiAtRU5PREVWO1xubmV0L2F0bS9jb21tb24uYzo1MDY6XHRlcnJvciA9IF9fdmNjX2Nvbm5lY3QodmNjLCBkZXYsIHZwaSwgdmNpKTtcbm5ldC9hdG0vY29tbW9uLmMtNTA3LVx0aWYgKGVycm9yKSB7XG4tLVxubmV0L2F0bS9jb21tb24uaD0xNT1pbnQgdmNjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jayk7XG5uZXQvYXRtL2NvbW1vbi5oOjE2OmludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpO1xubmV0L2F0bS9jb21tb24uaC0xNy1pbnQgdmNjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcbi0tXG5uZXQvYXRtL3B2Yy5jPTI3PXN0YXRpYyBpbnQgcHZjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxuLS1cbm5ldC9hdG0vcHZjLmMtNTEtXHR9XG5uZXQvYXRtL3B2Yy5jOjUyOlx0ZXJyb3IgPSB2Y2NfY29ubmVjdChzb2NrLCBhZGRyLVx1MDAzZXNhcF9hZGRyLml0ZiwgYWRkci1cdTAwM2VzYXBfYWRkci52cGksXG5uZXQvYXRtL3B2Yy5jLTUzLVx0XHRcdCAgICBhZGRyLVx1MDAzZXNhcF9hZGRyLnZjaSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqRXhhbWluaW5nIHRoZSBQVkMgQmluZGluZyBQcm9jZXNzKioKCk9rYXksIHNvIGBwdmNfYmluZGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgY2FsbGVkLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGl0LiBUaGUgdHJhY2Ugc2F5cyBpdCB1c2VzIGB2Y2NfY29ubmVjdGAuIFJpZ2h0LiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIHByZXR0eSBzdXJlIGBwdmNfYmluZGAgaXMgZnVuZGFtZW50YWwgdG8gaW5pdGlhbGl6aW5nIGFuZCBlc3RhYmxpc2hpbmcgQVRNIFBWQ3MuIFRoYXQgY29ubmVjdGlvbiB0byBgdmNjX2Nvbm5lY3RgIGRlZmluaXRlbHkgc291bmRzIGxpa2UgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIHVuZGVybHlpbmcgdmlydHVhbCBjaXJjdWl0IHNldHVwLiBBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIGNyYWNrIG9wZW4gYG5ldC9hdG0vcHZjLmNgLiBIb3BlZnVsbHksIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBjbGVhbiBhbmQgdGhlIGNvbm5lY3Rpb24gZmxvdyBpcyBzdHJhaWdodGZvcndhcmQuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSByZWFsIHN0b3J5LiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZSBQVkMgZ2V0cyBib3VuZCB0byB0aGUgdmlydHVhbCBjb25uZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdmNfYmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vcHZjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9wdmMuYz0yMj1zdGF0aWMgaW50IHB2Y19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxuLS1cbm5ldC9hdG0vcHZjLmMtMjYtXG5uZXQvYXRtL3B2Yy5jOjI3OnN0YXRpYyBpbnQgcHZjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxubmV0L2F0bS9wdmMuYy0yOC1cdFx0ICAgIGludCBzb2NrYWRkcl9sZW4pXG4tLVxubmV0L2F0bS9wdmMuYz01OT1zdGF0aWMgaW50IHB2Y19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcbi0tXG5uZXQvYXRtL3B2Yy5jLTYxLXtcbm5ldC9hdG0vcHZjLmM6NjI6XHRyZXR1cm4gcHZjX2JpbmQoc29jaywgc29ja2FkZHIsIHNvY2thZGRyX2xlbik7XG5uZXQvYXRtL3B2Yy5jLTYzLX1cbi0tXG5uZXQvYXRtL3B2Yy5jPTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwdmNfcHJvdG9fb3BzID0ge1xuLS1cbm5ldC9hdG0vcHZjLmMtMTEwLVx0LnJlbGVhc2UgPVx0dmNjX3JlbGVhc2UsXG5uZXQvYXRtL3B2Yy5jOjExMTpcdC5iaW5kID1cdFx0cHZjX2JpbmQsXG5uZXQvYXRtL3B2Yy5jLTExMi1cdC5jb25uZWN0ID1cdHB2Y19jb25uZWN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDI3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBBVE0gUFZDIFNvY2tldCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBgcHZjX2JpbmRgIGFuZCBgcHZjX2Nvbm5lY3RgIGZ1bmN0aW9ucyDigJMgdGhleSYjMzk7cmUgdGhlIHNvY2tldCBvcGVyYXRpb25zIGZvciBQVkMgc29ja2V0cywgbm8gc3VycHJpc2UgdGhlcmUuIEFuZCB5ZXAsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoZXNlIGFyZSBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBgYmluZGAgYW5kIGBjb25uZWN0YCBjYWxscyBvbiBhbiBBVE0gUFZDIHNvY2tldC4gRnVuY3Rpb25hbGx5LCB0aGlzIGNoYW5nZSBpcyBzaWduaWZpY2FudC4gSXQmIzM5O3MgYWRkcmVzc2luZyBhIGJ1ZyB3aGVyZSB0aGUgdmFsdWVzIG9mIGB2cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBiZWluZyBzZXQgdG8gYEFUTV9DSV9NQVhgLCB3aGljaCBpcyAtMSwgd2VyZSBsZWFkaW5nIHRvIHNvbWUgcHJldHR5IG5hc3R5IHNoaWZ0IG9wZXJhdGlvbnMuIFdlJiMzOTtyZSB0YWxraW5nIHNoaWZ0cyBieSAtMSwgdW5kZWZpbmVkIGJlaGF2aW9yLCBhbGwgc29ydHMgb2YgcG90ZW50aWFsIHByb2JsZW1zLgoKVGhlIHBhdGNoJiMzOTtzIHNvbHV0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZDogaW50cm9kdWNlIGB2cGlfYml0c2AgYW5kIGB2Y2lfYml0c2AgdmFyaWFibGVzLiBDcnVjaWFsbHksIGl0IHNldHMgZGVmYXVsdCB2YWx1ZXMgb2YgOCBhbmQgMTYgcmVzcGVjdGl2ZWx5IHdoZW4gdGhlIGRldmljZSBpbmRpY2F0ZXMgYEFUTV9DSV9NQVhgLiBUaGlzIGlzIGVsZWdhbnQuCgpJIHRoaW5rIEkgc2hvdWxkIGNoZWNrIGBuZXQvYXRtL3N2Yy5jYCBhcyB3ZWxsLCBqdXN0IHRvIGJlIHN1cmUgdGhlcmUgaXNuJiMzOTt0IGFueXRoaW5nIHNpbWlsYXIgZ29pbmcgb24gb3ZlciB0aGVyZS4gQWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ggd2l0aCB0aGlzIGtpbmQgb2YgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZjY19jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS9zdmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4ODIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHlvdSBkZXNjcmliZWQ6CgoqKkNvbm5lY3RpbmcgdGhlIERvdHMqKgoKQWxyaWdodCwgc28gYHZjY19jb25uZWN0YCBpcyBkZWZpbml0ZWx5IGdldHRpbmcgdHJpZ2dlcmVkIGJ5IGJvdGggYHB2Y19iaW5kYCBhbmQgYHB2Y19jb25uZWN0YC4gVGhhdCYjMzk7cyB0aGUgY29yZSBjb25uZWN0aW9uIG1lY2hhbmlzbSwgZ290IGl0LiBIbW0uLi4gYnV0IEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7bSBhY2NvdW50aW5nIGZvciBhbGwgc2NlbmFyaW9zLiBIb2xkIG9uIGEgc2Vjb25kLCB3aGF0IGFib3V0IHRoZSBzZXJ2aWNlIGNvbm5lY3Rpb24gaW4gYHN2Yy5jYD8gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGVkZ2UgY2FzZXMgb3IgYWx0ZXJuYXRpdmUgY29ubmVjdGlvbiBwYXRod2F5cy4gSSBuZWVkIHRvIGZhY3RvciB0aGF0IGluIGJlZm9yZSBJIGNhbiB0cnVseSBzYXkgSSYjMzk7dmUgZ290IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZjY19jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9jb21tb24uYz0zMzA9c3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtMzc3LVxubmV0L2F0bS9jb21tb24uYzozNzg6c3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSxcbm5ldC9hdG0vY29tbW9uLmMtMzc5LVx0XHRcdCBpbnQgdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtNDU3LVxubmV0L2F0bS9jb21tb24uYzo0NTg6aW50IHZjY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBpdGYsIHNob3J0IHZwaSwgaW50IHZjaSlcbm5ldC9hdG0vY29tbW9uLmMtNDU5LXtcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTUwNS1cdFx0cmV0dXJuIC1FTk9ERVY7XG5uZXQvYXRtL2NvbW1vbi5jOjUwNjpcdGVycm9yID0gX192Y2NfY29ubmVjdCh2Y2MsIGRldiwgdnBpLCB2Y2kpO1xubmV0L2F0bS9jb21tb24uYy01MDctXHRpZiAoZXJyb3IpIHtcbi0tXG5uZXQvYXRtL2NvbW1vbi5oPTE1PWludCB2Y2NfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKTtcbm5ldC9hdG0vY29tbW9uLmg6MTY6aW50IHZjY19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBpdGYsIHNob3J0IHZwaSwgaW50IHZjaSk7XG5uZXQvYXRtL2NvbW1vbi5oLTE3LWludCB2Y2NfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxuLS1cbm5ldC9hdG0vcHZjLmM9Mjc9c3RhdGljIGludCBwdmNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqc29ja2FkZHIsXG4tLVxubmV0L2F0bS9wdmMuYy01MS1cdH1cbm5ldC9hdG0vcHZjLmM6NTI6XHRlcnJvciA9IHZjY19jb25uZWN0KHNvY2ssIGFkZHItXHUwMDNlc2FwX2FkZHIuaXRmLCBhZGRyLVx1MDAzZXNhcF9hZGRyLnZwaSxcbm5ldC9hdG0vcHZjLmMtNTMtXHRcdFx0ICAgIGFkZHItXHUwMDNlc2FwX2FkZHIudmNpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU0OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHZjY19jb25uZWN0YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGViYXNlIGFuZCBpdCBsb29rcyBsaWtlIGB2Y2NfY29ubmVjdGAgaXMgb25seSBkaXJlY3RseSB1c2VkIGJ5IGBwdmMuY2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBCdXQgd2FpdC4uLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYF9fdmNjX2Nvbm5lY3RgLCBhbmQgSSB0aGluayBpdCYjMzk7cyB1c2VkIGluIGFub3RoZXIgbW9kdWxlLiBMZXQmIzM5O3Mgc2VlLi4uIGl0ICpjb3VsZCogYmUgYHN2Y19hZGRwYXJ0eWAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHJpZ2h0PyBBaCwgbm8sIHRoYXQmIzM5O3Mgd3JvbmcuIEkgaGF2ZSB0byBnbyBiYWNrIHRvIGBjb21tb24uY2AgdG8gc2VlIHRoYXQgYF9fdmNjX2Nvbm5lY3RgIGlzIGFjdHVhbGx5IGRlY2xhcmVkIGFzIHN0YXRpYyB0aGVyZS4gUmlnaHQsIHNvIHRoYXQgbGltaXRzIGl0cyBzY29wZSBjb25zaWRlcmFibHksIGV2ZW4gaWYgaXQmIzM5O3MgY29uY2VwdHVhbGx5IHRoZSBzYW1lIHRoaW5nLiBOb3csIGxldCYjMzk7cyBjYXN0IGEgd2lkZXIgbmV0LiBXaGF0IGVsc2UsICphbnl3aGVyZSosIGNhbGxzIGBfX3ZjY19jb25uZWN0YD8gSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgdXNhZ2UgYmVmb3JlIEkgY2FuIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X192Y2NfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vY29tbW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9jb21tb24uYz0zMzA9c3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtMzc3LVxubmV0L2F0bS9jb21tb24uYzozNzg6c3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSxcbm5ldC9hdG0vY29tbW9uLmMtMzc5LVx0XHRcdCBpbnQgdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmM9NDU4PWludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXG4tLVxubmV0L2F0bS9jb21tb24uYy01MDUtXHRcdHJldHVybiAtRU5PREVWO1xubmV0L2F0bS9jb21tb24uYzo1MDY6XHRlcnJvciA9IF9fdmNjX2Nvbm5lY3QodmNjLCBkZXYsIHZwaSwgdmNpKTtcbm5ldC9hdG0vY29tbW9uLmMtNTA3LVx0aWYgKGVycm9yKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwOTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25uZWN0aW9uIFdvcmtmbG93KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGZ1bmN0aW9uIGB2Y2NfY29ubmVjdGAgaXMgdGhlIGtleSBwbGF5ZXIgaGVyZTsgYWNjb3JkaW5nIHRvIHRoZSBjb2RlLCBpdCYjMzk7cyB0aGUgb25seSBvbmUgY2FsbGluZyBpdC4gTm93LCB3aGVyZSBkb2VzIGB2Y2NfY29ubmVjdGAgZml0IGludG8gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3M/IEFoLCByaWdodCwgYHB2Y19iaW5kYCBhbmQgYHB2Y19jb25uZWN0YCBhcmUgdGhlIG9uZXMgY2FsbGluZyBpdC4gVGhvc2UgYXJlIHRoZSBpbml0aWFsIGFjY2VzcyBwb2ludHMuIEhhbmcgb24gYSBzZWNvbmQsIHdhc24mIzM5O3QgYHB2Y19iaW5kYCBkZWNsYXJlZCBhcyBzdGF0aWM/IFllcywgYnV0IGl0JiMzOTtzIGFzc2lnbmVkIHRvIGAuYmluZGAgd2l0aGluIGBwdmNfcHJvdG9fb3BzYCB3aGljaCBtZWFucyBpdCBzdGlsbCBmdW5jdGlvbnMgYXMgYW4gZW50cnkgcG9pbnQuIFRoZXJlZm9yZSwgdGhlIGltcG9ydGFudCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIHRoaXMgY29ubmVjdGlvbiBhcmUgYHZjY19jb25uZWN0YCwgYHB2Y19iaW5kYCwgYW5kIGBwdmNfY29ubmVjdGAuIFRoYXQgY2xhcmlmaWVzIHRoZSBwcmltYXJ5IGNvbm5lY3Rpb24gZmxvdy4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgY2hlY2sgaWYgYGZpbmRfY2lgIGlzIGNhbGxlZCBhbnl3aGVyZSBlbHNlIHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGViYXNlIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGNydWNpYWwgY29tcG9uZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaW5kX2NpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS9jb21tb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYXRtL2NvbW1vbi5jPTMwNT1zdGF0aWMgaW50IGNoZWNrX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0IHZwaSwgaW50IHZjaSlcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTMyOS1cbm5ldC9hdG0vY29tbW9uLmM6MzMwOnN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcbm5ldC9hdG0vY29tbW9uLmMtMzMxLXtcbi0tXG5uZXQvYXRtL2NvbW1vbi5jPTM3OD1zdGF0aWMgaW50IF9fdmNjX2Nvbm5lY3Qoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IGF0bV9kZXYgKmRldiwgc2hvcnQgdnBpLFxuLS1cbm5ldC9hdG0vY29tbW9uLmMtMzk5LVx0aWYgKHRlc3RfYml0KEFUTV9ERl9SRU1PVkVELCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpIHx8XG5uZXQvYXRtL2NvbW1vbi5jOjQwMDpcdCAgICAoZXJyb3IgPSBmaW5kX2NpKHZjYywgXHUwMDI2dnBpLCBcdTAwMjZ2Y2kpKSkge1xubmV0L2F0bS9jb21tb24uYy00MDEtXHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2dmNjX3NrbGlzdF9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzczMwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBBVE0gQ29ubmVjdGlvbiBFbnRyeSBQb2ludHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgX192Y2NfY29ubmVjdGAgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSAqY2FsbHMqIGBmaW5kX2NpYC4gVGhhdCBuYXJyb3dzIG91ciBwcmltYXJ5IGVudHJ5IHBvaW50cyBjb25zaWRlcmFibHkuIFNvLCB3ZSYjMzk7cmUgcmVhbGx5IHRhbGtpbmcgYWJvdXQgZm9jdXNpbmcgb24gYHZjY19jb25uZWN0YCwgYHB2Y19iaW5kYCwgYW5kIGBwdmNfY29ubmVjdGAuIFRob3NlIGFyZSB0aGUgb25lcyB0byBzY3J1dGluaXplIGZvciBob3cgQVRNIGNvbm5lY3Rpb25zIGFyZSBiZWluZyBpbml0aWF0ZWQgYW5kIG1hbmFnZWQgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiBjb25maWd1cmF0aW9uIGFuZCBpbml0aWFsIHNldHVwLgoKTm93LCBhIGNyaXRpY2FsIG5leHQgc3RlcC4gV2UgY2FuJiMzOTt0IGFmZm9yZCB0byBiZSBibGlua2VyZWQuIEFyZSB0aGVyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoaXMgQVRNIGluZnJhc3RydWN0dXJlIHRoYXQgY291bGQgaW1wYWN0IHRoZXNlIGNvbm5lY3Rpb25zPyBMZXQmIzM5O3MgYXNzdW1lIHRoZXJlIGFyZSwgYW5kIHN0YXJ0IGludmVzdGlnYXRpbmcgdGhlIGNvZGUgYmFzZSB0byBmaW5kIHRoZW0uIFRoZSBnb2FsIGlzIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mICphbGwqIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIHdpdGggdGhlc2UgY29ubmVjdGlvbiBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBVE0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYXRtL0tjb25maWctNS1cbm5ldC9hdG0vS2NvbmZpZzo2OmNvbmZpZyBBVE1cbm5ldC9hdG0vS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7QXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcJiMzNDtcbi0tXG5uZXQvYXRtL0tjb25maWctMjEtXG5uZXQvYXRtL0tjb25maWc6MjI6Y29uZmlnIEFUTV9CUjI2ODRcbm5ldC9hdG0vS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O1JGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1wmIzM0O1xuLS1cbm5ldC9hdG0vS2NvbmZpZy0zMC1cbm5ldC9hdG0vS2NvbmZpZzozMTpjb25maWcgQVRNX0JSMjY4NF9JUEZJTFRFUlxubmV0L2F0bS9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtQZXItVkMgSVAgZmlsdGVyIGtsdWRnZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTg4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIEFUTSBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGhlIGBBVE1gIGNvbmZpZyBpcyB0aGUgY29yZSBvbmUgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBGaXJzdCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHNuZWFreSBkZXBlbmRlbmNpZXMgbHVya2luZyBhcm91bmQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgQVRNYCByZWxpZXMgb24gYW55IG90aGVyIGNvbmZpZ3Mgb3IgbW9kdWxlcy4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtYWtlLCBvciBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGFzcGVjdHMgdG8gY29uc2lkZXIuIEl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoIGF0IHRoZSBiZWdpbm5pbmcuIE5vIHBvaW50IGluIG1pc3NpbmcgYSBwb3RlbnRpYWwgY2FzY2FkZSEgTGV0JiMzOTtzIGdldCBhIGNsZWFyIGRlcGVuZGVuY3kgbWFwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vS2NvbmZpZz0yMj1jb25maWcgQVRNX0JSMjY4NFxubmV0L2F0bS9LY29uZmlnLTIzLVx0dHJpc3RhdGUgXCYjMzQ7UkZDMTQ4My8yNjg0IEJyaWRnZWQgcHJvdG9jb2xzXCYjMzQ7XG5uZXQvYXRtL0tjb25maWc6MjQ6XHRkZXBlbmRzIG9uIEFUTSBcdTAwMjZcdTAwMjYgSU5FVFxubmV0L2F0bS9LY29uZmlnLTI1LVx0aGVscFxuLS1cbm5ldC9hdG0vS2NvbmZpZz0zMT1jb25maWcgQVRNX0JSMjY4NF9JUEZJTFRFUlxubmV0L2F0bS9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtQZXItVkMgSVAgZmlsdGVyIGtsdWRnZVwmIzM0O1xubmV0L2F0bS9LY29uZmlnOjMzOlx0ZGVwZW5kcyBvbiBBVE1fQlIyNjg0XG5uZXQvYXRtL0tjb25maWctMzQtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEFUTSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgQVRNYCBmZWF0dXJlIGhlcmUuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaW4gbXkgbWluZCBpcywgZG9lcyBgQVRNYCBoYXZlIGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzPyBJIHdhbnQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYmFzZSBjb25maWd1cmF0aW9uLiBUbyBmaWd1cmUgdGhpcyBvdXQgd2l0aCBjZXJ0YWludHksIEkgc2hvdWxkIHJlYWxseSBkaXZlIGludG8gdGhlIGBuZXQvYXRtL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGdvLXRvIHBsYWNlIGZvciBhbGwgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBBVE0gYW5kIGFueSBwcmVyZXF1aXNpdGVzIGl0IG1pZ2h0IGhhdmUuIFVuZGVyc3RhbmRpbmcgdGhpcyBmaWxlIHdpbGwgZ2l2ZSBtZSB0aGUgZ3JvdW5kIHRydXRoLCBoZWxwaW5nIG1lIGFzc2VzcyB0aGUgdHJ1ZSBpbmRlcGVuZGVuY2Ugb2YgdGhlIEFUTSBjb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9hdG0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIEFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBBVE1cbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O0FzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlIChBVE0pXCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIEFUTSBpcyBhIGhpZ2gtc3BlZWQgbmV0d29ya2luZyB0ZWNobm9sb2d5IGZvciBMb2NhbCBBcmVhIE5ldHdvcmtzXG4gIDEwOlx0XHQgIGFuZCBXaWRlIEFyZWEgTmV0d29ya3MuICBJdCB1c2VzIGEgZml4ZWQgcGFja2V0IHNpemUgYW5kIGlzXG4gIDExOlx0XHQgIGNvbm5lY3Rpb24gb3JpZW50ZWQsIGFsbG93aW5nIGZvciB0aGUgbmVnb3RpYXRpb24gb2YgbWluaW11bVxuICAxMjpcdFx0ICBiYW5kd2lkdGggcmVxdWlyZW1lbnRzLlxuICAxMzpcdFxuICAxNDpcdFx0ICBJbiBvcmRlciB0byBwYXJ0aWNpcGF0ZSBpbiBhbiBBVE0gbmV0d29yaywgeW91ciBMaW51eCBib3ggbmVlZHMgYW5cbiAgMTU6XHRcdCAgQVRNIG5ldHdvcmtpbmcgY2FyZC4gSWYgeW91IGhhdmUgdGhhdCwgc2F5IFkgaGVyZSBhbmQgdG8gdGhlIGRyaXZlclxuICAxNjpcdFx0ICBvZiB5b3VyIEFUTSBjYXJkIGJlbG93LlxuICAxNzpcdFxuICAxODpcdFx0ICBOb3RlIHRoYXQgeW91IG5lZWQgYSBzZXQgb2YgdXNlci1zcGFjZSBwcm9ncmFtcyB0byBhY3R1YWxseSBtYWtlIHVzZVxuICAxOTpcdFx0ICBvZiBBVE0uICBTZWUgdGhlIGZpbGUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXRtLnJzdFx1MDAzZSBmb3JcbiAgMjA6XHRcdCAgZnVydGhlciBkZXRhaWxzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDA1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipBVE0gQ29uZmlndXJhdGlvbjogU2ltcGxpZnlpbmcgdGhlIEFwcHJvYWNoKioKCkFscmlnaHQsIGl0IGxvb2tzIGxpa2UgdGhpcyBib2lscyBkb3duIHRvIHVzaW5nICpqdXN0KiB0aGUgYEFUTWAgY29uZmlnLCB3aGljaCBpcyBncmVhdCDigJMga2VlcHMgdGhpbmdzIGNsZWFuIGFuZCBzdHJhaWdodGZvcndhcmQuIE15IGF0dGVudGlvbiBpcyBkcmF3biB0byB0aG9zZSBzcGVjaWZpYyBzeW1ib2xzOiBgdmNjX2Nvbm5lY3RgLCBgcHZjX2JpbmRgLCBhbmQgYHB2Y19jb25uZWN0YC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBpbiB0aGlzIGNvbnRleHQuIEJ1dCwgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuIEEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIG5lY2Vzc2FyeTogSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGB2Y2NfY29ubmVjdGAgaXMgZWl0aGVyIGV4cGxpY2l0bHkgZXhwb3J0ZWQgZm9yIHVzZSBlbHNld2hlcmUgb3IgaXMsIGF0IHRoZSB2ZXJ5IGxlYXN0LCByZWFjaGFibGUgZnJvbSBvdGhlciBtb2R1bGVzIG9yIHNjb3BlcyB0aGF0IG1pZ2h0IHV0aWxpemUgaXQuIEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdmNjX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsbHkgRXhwb3J0ZWQgQVRNIEZ1bmN0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIGB2Y2NfY29ubmVjdGAuLi4gdGhhdCBsb29rcyBsaWtlIGl0JiMzOTtzICpleHBvcnRlZCo/IFRoYXQmIzM5O3MgdW5leHBlY3RlZC4gTGV0IG1lIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBBVE0gVkNDIGVzdGFibGlzaG1lbnQgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdXJmYWNpbmcgYXMgYW4gZXhwb3J0IGltbWVkaWF0ZWx5IHJhaXNlcyBmbGFncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHZpc2liaWxpdHksIGFuZCBhbHNvIHdoZXJlIHRoYXQgZnVuY3Rpb24gbGl2ZXMuIExldCYjMzk7cyBzdGFydCBieSBjb25maXJtaW5nIGl0cyBkZWZpbml0aW9uLiBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IHRvIGBuZXQvYXRtL2NvbW1vbi5jYC4gVGhhdCBmaWxlJiMzOTtzIHR5cGljYWxseSB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHNoYXJlZCBBVE0gaW5mcmFzdHJ1Y3R1cmUuIExldCYjMzk7cyBzZWUgaWYgdGhlIHN5bWJvbCB0YWJsZSBjb25maXJtcyBpdC4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSB2aXNpYmlsaXR5LCBjb250ZXh0LCBhbmQgcG90ZW50aWFsIHNpZGUtZWZmZWN0cyB0aGF0IHRoaXMgZXhwb3J0IGludHJvZHVjZXMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgdGhpcyBtaWdodCBvcGVuIGEgcG90ZW50aWFsbHkgdW5zYWZlIGRvb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdmNjX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBEaWFnbm9zdGljOiBFeHBvcnQgVmVyaWZpY2F0aW9uKioKClJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gYW55dGhpbmcgZnVydGhlciwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBlc3RhYmxpc2ggYSBiYXNlbGluZS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggYW4gYWN0dWFsIGV4cG9ydCBpc3N1ZSBhbmQgbm90IHNvbWV0aGluZyBlbHNlLiBUaGVyZWZvcmUsIG15IGluaXRpYWwgdGhvdWdodCBpcyBzaW1wbGU6IExldCYjMzk7cyBjaGVjay4gRG9lcyB0aGlzIHRoaW5nIGV2ZW4gKmV4cG9ydCogYXQgYWxsPyBXZSBuZWVkIHRvIGFzY2VydGFpbiwgY2F0ZWdvcmljYWxseSwgaWYgdGhlIHByb2Nlc3MgZXZlbiBpbml0aWF0ZXMsIHByb2R1Y2VzIGFueSBvdXRwdXQgKHJlZ2FyZGxlc3Mgb2YgaXRzIGNvcnJlY3RuZXNzKSwgb3IgaWYgdGhlIHByb2JsZW0gbGllcyBwcmlvciB0byB0aGF0IHN0YWdlLiBJZiB0aGVyZSBpcyBubyBleHBvcnQsIHBlcmlvZCwgdGhlIHN1YnNlcXVlbnQgaW52ZXN0aWdhdGl2ZSBwYXRod2F5cyBhcmUgZHJhc3RpY2FsbHkgZGlmZmVyZW50IHRoYW4gaWYgdGhlcmUgaXMgYW4gZXhwb3J0IHRoYXQgaXMgZmFpbGluZy4gTGV04oCZcyBnZXQgdGhhdCBlc3RhYmxpc2hlZCBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vY29tbW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9jb21tb24uYz0zND1zdHJ1Y3QgaGxpc3RfaGVhZCB2Y2NfaGFzaFtWQ0NfSFRBQkxFX1NJWkVdO1xubmV0L2F0bS9jb21tb24uYzozNTpFWFBPUlRfU1lNQk9MKHZjY19oYXNoKTtcbm5ldC9hdG0vY29tbW9uLmMtMzYtXG5uZXQvYXRtL2NvbW1vbi5jPTM3PURFRklORV9SV0xPQ0sodmNjX3NrbGlzdF9sb2NrKTtcbm5ldC9hdG0vY29tbW9uLmM6Mzg6RVhQT1JUX1NZTUJPTCh2Y2Nfc2tsaXN0X2xvY2spO1xubmV0L2F0bS9jb21tb24uYy0zOS1cbi0tXG5uZXQvYXRtL2NvbW1vbi5jPTUwPXZvaWQgdmNjX2luc2VydF9zb2NrZXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtNTUtfVxubmV0L2F0bS9jb21tb24uYzo1NjpFWFBPUlRfU1lNQk9MKHZjY19pbnNlcnRfc29ja2V0KTtcbm5ldC9hdG0vY29tbW9uLmMtNTctXG4tLVxubmV0L2F0bS9jb21tb24uYz0yMDk9dm9pZCB2Y2NfcmVsZWFzZV9hc3luYyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgcmVwbHkpXG4tLVxubmV0L2F0bS9jb21tb24uYy0yMTctfVxubmV0L2F0bS9jb21tb24uYzoyMTg6RVhQT1JUX1NZTUJPTCh2Y2NfcmVsZWFzZV9hc3luYyk7XG5uZXQvYXRtL2NvbW1vbi5jLTIxOS1cbm5ldC9hdG0vY29tbW9uLmM9MjIwPXZvaWQgdmNjX3Byb2Nlc3NfcmVjdl9xdWV1ZShzdHJ1Y3QgYXRtX3ZjYyAqdmNjKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtMjM3LX1cbm5ldC9hdG0vY29tbW9uLmM6MjM4OkVYUE9SVF9TWU1CT0wodmNjX3Byb2Nlc3NfcmVjdl9xdWV1ZSk7XG5uZXQvYXRtL2NvbW1vbi5jLTIzOS1cbm5ldC9hdG0vY29tbW9uLmM9MjQwPXZvaWQgYXRtX2Rldl9zaWduYWxfY2hhbmdlKHN0cnVjdCBhdG1fZGV2ICpkZXYsIGNoYXIgc2lnbmFsKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtMjU0LX1cbm5ldC9hdG0vY29tbW9uLmM6MjU1OkVYUE9SVF9TWU1CT0woYXRtX2Rldl9zaWduYWxfY2hhbmdlKTtcbm5ldC9hdG0vY29tbW9uLmMtMjU2LVxubmV0L2F0bS9jb21tb24uYz0yNTc9dm9pZCBhdG1fZGV2X3JlbGVhc2VfdmNjcyhzdHJ1Y3QgYXRtX2RldiAqZGV2KVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtMjc3LX1cbm5ldC9hdG0vY29tbW9uLmM6Mjc4OkVYUE9SVF9TWU1CT0woYXRtX2Rldl9yZWxlYXNlX3ZjY3MpO1xubmV0L2F0bS9jb21tb24uYy0yNzktXG4tLVxubmV0L2F0bS9jb21tb24uYz04MDY9aW50IHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtODA5LX1cbm5ldC9hdG0vY29tbW9uLmM6ODEwOkVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcik7XG5uZXQvYXRtL2NvbW1vbi5jLTgxMS1cbm5ldC9hdG0vY29tbW9uLmM9ODEyPXZvaWQgdW5yZWdpc3Rlcl9hdG1kZXZpY2Vfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTgxNS19XG5uZXQvYXRtL2NvbW1vbi5jOjgxNjpFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcik7XG5uZXQvYXRtL2NvbW1vbi5jLTgxNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYHZjY19jb25uZWN0YCoqCgpBbHJpZ2h0LCBzbyBgdmNjX2Nvbm5lY3RgIGlzbiYjMzk7dCBhIGdsb2JhbCBzeW1ib2wuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mgc3RyaWN0bHkgYW4gaW50ZXJuYWwgZnVuY3Rpb24gd2l0aGluIHRoZSBgbmV0L2F0bS9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyBhIGxpdHRsZSBzdXJwcmlzaW5nLCBJIHdvdWxkIGhhdmUgYXNzdW1lZCBpdCB3YXMgbW9yZSB3aWRlbHkgdXNlZC4gQnV0IHdhaXQsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXNuJiMzOTt0IGB2Y2NfY29ubmVjdGAgaW52b2tlZCBieSBgc3ZjX2Nvbm5lY3RgPyBJJiMzOTttIHByZXR0eSBzdXJlIEkmIzM5O3ZlIHNlZW4gdGhhdCByZWxhdGlvbnNoaXAgYmVmb3JlLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBieSBwZWVraW5nIGludG8gYHN2Yy5jYCwganVzdCB0byB2ZXJpZnkgdGhlIGNhbGwgaGllcmFyY2h5LiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gY29uZmlybSB0aGUgaW50ZXJhY3Rpb24sIGJlY2F1c2UgSSBmZWVsIGxpa2UgSSYjMzk7bSBtaXNzaW5nIGNvbnRleHQgaGVyZS4gTGV0IG1lIHNlZSB3aGVyZSBgc3ZjX2Nvbm5lY3RgIGdldHMgY2FsbGVkIGZyb20uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y2NfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vc3ZjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc0MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKlF1aWNrIENoZWNrIEJlZm9yZSBEaWdnaW5nIERlZXBlcioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIGRpZG4mIzM5O3QgSSBhbHJlYWR5IGxvb2sgYXQgYHN2Yy5jYD8gSSBjb3VsZCBoYXZlIHN3b3JuIEkgd2FzIGluIHRoYXQgZmlsZSBlYXJsaWVyLiBMZXQgbWUganVzdCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgcmV0cmFjaW5nIHN0ZXBzIGhlcmUuIE9rYXksIHllcC4gSSBkZWZpbml0ZWx5IGFscmVhZHkgY2hlY2tlZCB0aGF0IG9uZS4gQWxyaWdodCwgbGV0JiMzOTtzIGtlZXAgbW92aW5nLiBJZiB0aGUgaXNzdWUgaXNuJiMzOTt0IGluIHRoZSBtb3JlIGdlbmVyYWwgYHN2Yy5jYCwgdGhlbiBJIG5lZWQgdG8gbmFycm93IHRoZSBzY29wZSwgbGV0JiMzOTtzIGdvIGRlZXBlciBhbmQgY2hlY2sgdGhlIHNwZWNpZmljcyBmb3IgdGhlIGF0bSBuZXR3b3JrIGxheWVyLiBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGxvb2sgZm9yIHRoZSBgY29ubmVjdGAgZnVuY3Rpb25hbGl0eSBub3csIGFuZCBiYXNlZCBvbiB0aGUgZmlsZSBwYXRoLCBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgaXQgaW4gYG5ldC9hdG0vc3ZjLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL3N2Yy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NzYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJiMzOTttIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBjb2RlOgoKKipEaWdnaW5nIGludG8gTmV0d29yayBTZXJ2aWNlIENvbm5lY3Rpb24qKgoKSG1tLCBob2xkIG9uIGEgbWludXRlLiBJIHdhcyBleHBlY3RpbmcgdG8gZmluZCB0aGUgYGNvbm5lY3RgIGltcGxlbWVudGF0aW9uIGluIGBzdmMuY2AsIGJ1dCBpdCYjMzk7cyBub3QgdGhlcmUuIFRoYXQmIzM5O3MgdW51c3VhbCwgYnV0IG5vdCBuZWNlc3NhcmlseSBhIHNob3ctc3RvcHBlci4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSBuZXR3b3JrIHNlcnZpY2UgYXJjaGl0ZWN0dXJlIHVzZXMgc29tZSBvdGhlciBtZWFucyBvZiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIG9yIHBlcmhhcHMgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkgaXMgc3ByZWFkIGRpZmZlcmVudGx5IGFjcm9zcyB0aGUgbmV0d29ya2luZyBzdGFjay4gU2luY2UgSSYjMzk7bSB3b3JraW5nIHdpdGggQVRNIGluIHBhcnRpY3VsYXIsIGl0JiMzOTtzIHdvcnRoIGNoZWNraW5nIHRvIHNlZSBob3cgaXQgYmluZHMgdG8gdGhlIG5ldHdvcmsuIExldCYjMzk7cyBzZWUgaWYgYG5ldC9hdG0vc3ZjLmNgIGNvbnRhaW5zIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciBiaW5kaW5nLiBJIHNob3VsZCBmaW5kIGl0IGluIHRoYXQgY29kZSBmaWxlLCBhcyBJIHJlY2FsbCB0aGlzIGlzIGhvdyB0aGUgQVRNIGRyaXZlcnMgaW1wbGVtZW50IHRoZWlyIHNlcnZpY2VzLiBUaW1lIHRvIGdldCBjb2RpbmcuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS9zdmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjM0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBTZXJ2aWNlIENvbnRyb2wgTGF5ZXIqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgc2VydmljZSBjb250cm9sIGxheWVyIChgc3ZjLmNgKSB3b3VsZCBoYW5kbGUgdGhlIHNvY2tldCBiaW5kaW5nIGFuZCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuIEJ1dCBsb29raW5nIGJhY2sgYXQgdGhlIGNvZGUsIEkgZG9uJiMzOTt0IHNlZSBgYmluZGAgb3IgYGNvbm5lY3RgIGNhbGxzIGluIGBzdmMuY2AuIEhtbSwgdGhhdCYjMzk7cyB1bnVzdWFsLiBJdCYjMzk7cyB0aW1lIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYG5ldC9hdG0vc3ZjLmNgIGZpbGUgYW5kIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIG9mIHRoZXNlIGNydWNpYWwgbmV0d29yayBmdW5jdGlvbiBjYWxscywgdG8gdW5kZXJzdGFuZCB0aGVpciBkZXNpZ24gY2hvaWNlcyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNlZSB3aHkgdGhlc2UgaW1wb3J0YW50IGNhbGxzIGFyZSBub3Qgd2l0aGluIGBzdmMuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRob3NlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgYmVpbmcgY2FsbGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIHRoYXQgQVRNLXNwZWNpZmljIHNlcnZpY2UgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT50aGUgZmlsZSBkb2VzIG5vdCBleGlzdDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL3N2Yy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7dGhlIGZpbGUgZG9lcyBub3QgZXhpc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDk3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBNaXNtYXRjaCBpbiBGaWxlcGF0aHMqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyBhbmQgSSBoaXQgYSBzbmFnLiBUaGUgcGF0aCBwcm92aWRlZCwgc3BlY2lmaWNhbGx5IGBzdmMuY2AsIGlzbiYjMzk7dCB3b3JraW5nIGFzIGV4cGVjdGVkLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCBpdCYjMzk7cyBqdXN0IGEgc2ltcGxlIHR5cG8gb3IsIG1vcmUgbGlrZWx5LCBhIGxvY2F0aW9uIGlzc3VlLiBUaGlzIGlzIHByZXR0eSBjb21tb247IHRoZXNlIHRoaW5ncyBzaGlmdCBhcm91bmQsIGVzcGVjaWFsbHkgaW4gb2xkZXIgY29kZWJhc2VzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgaW50ZW5kZWQgbG9jYXRpb24uIElzIHRoaXMgYWN0dWFsbHkgaW4gdGhlIGBuZXQvYXRtL2AgZGlyZWN0b3J5PyYjMzQ7IEl0JiMzOTtzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGxvb2tpbmcgaW4gdGhlIHJpZ2h0IHNwb3QsIGNvbnNpZGVyaW5nIHRoZSBuZXR3b3JraW5nIGNvbnRleHQgc2VlbXMgdG8gYmUgaW1wbGllZC4gTm93IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpdHMgZXhpc3RlbmNlIHRoZXJlLCBpZiBpdCBkb2VzbiYjMzk7dCBhbHJlYWR5IGV4aXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtuZXQvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2F0bV9taXNjLmMmIzM0OywKICAgICYjMzQ7YXRtX3N5c2ZzLmMmIzM0OywKICAgICYjMzQ7YnIyNjg0LmMmIzM0OywKICAgICYjMzQ7Y29tbW9uLmMmIzM0OywKICAgICYjMzQ7Y29tbW9uLmgmIzM0OywKICAgICYjMzQ7aW9jdGwuYyYjMzQ7LAogICAgJiMzNDtwcHBvYXRtLmMmIzM0OywKICAgICYjMzQ7cHJvYy5jJiMzNDssCiAgICAmIzM0O3Byb3RvY29scy5oJiMzNDssCiAgICAmIzM0O3B2Yy5jJiMzNDssCiAgICAmIzM0O3Jhdy5jJiMzNDssCiAgICAmIzM0O3Jlc291cmNlcy5jJiMzNDssCiAgICAmIzM0O3Jlc291cmNlcy5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MzMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqTWlzc2luZyBTVkMuQyBhbmQgUG90ZW50aWFsIFBWQyBDb25uZWN0aW9uIFBpdGZhbGxzKioKClJpZ2h0LCB0aGVyZSYjMzk7cyBubyBgc3ZjLmNgIHRvIGNvbnNpZGVyIGhlcmUuIFRoYXQmIzM5O3MgZ29vZCwgb25lIGxlc3MgcGxhY2UgdG8gY2hlY2sgZm9yIGB2Y2NfY29ubmVjdGAgY2FsbHMuIE9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYHB2Yy5jYCBpcyB0aGUgb25seSBmaWxlIGRpcmVjdGx5IGNhbGxpbmcgYHZjY19jb25uZWN0YC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgYnV04oCmIHdhaXQgYSBtaW51dGUuIEFtIEkgYmVpbmcgdG9vIGhhc3R5PyBJIG5lZWQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUuIFdoYXQgYWJvdXQgdGhlIHBvdGVudGlhbCBmb3IgaW5kaXJlY3QgY2FsbHMgdGhyb3VnaCBvdGhlciBtb2R1bGVzPyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBpbW1lZGlhdGVseSBydWxlIG91dCBgcHBwb2F0bS5jYCBhbmQgYGJyMjY4NC5jYC4gVGhvc2UgYXJlIGNsYXNzaWMgYXJlYXMgdGhhdCBjb3VsZCBiZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBBVE0gbGF5ZXIsIHBlcmhhcHMgZXN0YWJsaXNoaW5nIFBWQyBjb25uZWN0aW9ucyB0aHJvdWdoIGEgZGlmZmVyZW50IGludGVyZmFjZSB0aGF0ICp1bHRpbWF0ZWx5KiB0cmlnZ2VycyBgdmNjX2Nvbm5lY3RgIGNhbGxzLiBJIG5lZWQgdG8gc2NhbiB0aG9zZSBmaWxlcywgYW5kIG1heWJlIHRoZSByZWxhdGVkIGluY2x1ZGUgZmlsZXMsIHJpZ2h0IG5vdyB0byBjb25maXJtIHRoYXQgYXNzdW1wdGlvbi4gV2UgbmVlZCB0byBiZSBleGhhdXN0aXZlIHRvIGF2b2lkIGNoYXNpbmcgcmVkIGhlcnJpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y2NfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vY29tbW9uLmM9MzMwPXN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTM3Ny1cbm5ldC9hdG0vY29tbW9uLmM6Mzc4OnN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXG5uZXQvYXRtL2NvbW1vbi5jLTM3OS1cdFx0XHQgaW50IHZjaSlcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTQ1Ny1cbm5ldC9hdG0vY29tbW9uLmM6NDU4OmludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXG5uZXQvYXRtL2NvbW1vbi5jLTQ1OS17XG4tLVxubmV0L2F0bS9jb21tb24uYy01MDUtXHRcdHJldHVybiAtRU5PREVWO1xubmV0L2F0bS9jb21tb24uYzo1MDY6XHRlcnJvciA9IF9fdmNjX2Nvbm5lY3QodmNjLCBkZXYsIHZwaSwgdmNpKTtcbm5ldC9hdG0vY29tbW9uLmMtNTA3LVx0aWYgKGVycm9yKSB7XG4tLVxubmV0L2F0bS9jb21tb24uaD0xNT1pbnQgdmNjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jayk7XG5uZXQvYXRtL2NvbW1vbi5oOjE2OmludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpO1xubmV0L2F0bS9jb21tb24uaC0xNy1pbnQgdmNjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcbi0tXG5uZXQvYXRtL3B2Yy5jPTI3PXN0YXRpYyBpbnQgcHZjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxuLS1cbm5ldC9hdG0vcHZjLmMtNTEtXHR9XG5uZXQvYXRtL3B2Yy5jOjUyOlx0ZXJyb3IgPSB2Y2NfY29ubmVjdChzb2NrLCBhZGRyLVx1MDAzZXNhcF9hZGRyLml0ZiwgYWRkci1cdTAwM2VzYXBfYWRkci52cGksXG5uZXQvYXRtL3B2Yy5jLTUzLVx0XHRcdCAgICBhZGRyLVx1MDAzZXNhcF9hZGRyLnZjaSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjE2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQ6CgoqKk5hcnJvd2luZyBEb3duIHRoZSBTY29wZSoqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBhbmFseXNpcyBpbmRpY2F0ZXMgdGhhdCBgdmNjX2Nvbm5lY3RgIGlzIGV4Y2x1c2l2ZWx5IGNhbGxlZCBieSBgcHZjLmNgLiBUaGF0JiMzOTtzIGEgc3Ryb25nIHN0YXJ0aW5nIHBvaW50LiBNeSBmb2N1cywgdGhlbiwgc2hpZnRzIHRvIHVuZGVyc3RhbmRpbmcgaG93IGBwdmMuY2AgdXRpbGl6ZXMgdGhpcyBmdW5jdGlvbiwgc28gSSYjMzk7bGwgY29uY2VudHJhdGUgb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBwdmNfYmluZGAgYW5kIGBwdmNfY29ubmVjdGAuIEhvd2V2ZXIsIEkgbmVlZCB0byBrZWVwIGB2Y2NfY29ubmVjdGAgaXRzZWxmIGluIG1pbmQgYXMgYSBrZXkgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgc3lzdGVtLiBMZXQgbWUgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgcHZjX2JpbmRgIGFuZCBgcHZjX2Nvbm5lY3RgIHdpdGhpbiBgcHZjLmNgIHRvIHNlZSBob3cgdGhleSBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL3B2Yy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0LyogbmV0L2F0bS9wdmMuYyAtIEFUTSBQVkMgc29ja2V0cyAqL1xuICAgMzpcdFxuICAgNDpcdC8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovXG4gICA1Olx0XG4gICA2Olx0XG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0LmhcdTAwM2VcdFx0Lyogc3RydWN0IHNvY2tldCwgc3RydWN0IHByb3RvX29wcyAqL1xuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0bS5oXHUwMDNlXHRcdC8qIEFUTSBzdHVmZiAqL1xuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0bWRldi5oXHUwMDNlXHQvKiBBVE0gZGV2aWNlcyAqL1xuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcdC8qIGVycm9yIGNvZGVzICovXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcdC8qIHByaW50ayAqL1xuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcdFx0LyogZm9yIHNvY2tfbm9fKiAqL1xuICAxNzpcdFxuICAxODpcdCNpbmNsdWRlIFwmIzM0O3Jlc291cmNlcy5oXCYjMzQ7XHRcdC8qIGRldnMgYW5kIHZjY3MgKi9cbiAgMTk6XHQjaW5jbHVkZSBcJiMzNDtjb21tb24uaFwmIzM0O1x0XHQvKiBjb21tb24gZm9yIFBWQ3MgYW5kIFNWQ3MgKi9cbiAgMjA6XHRcbiAgMjE6XHRcbiAgMjI6XHRzdGF0aWMgaW50IHB2Y19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxuICAyMzpcdHtcbiAgMjQ6XHRcdHJldHVybiAwO1xuICAyNTpcdH1cbiAgMjY6XHRcbiAgMjc6XHRzdGF0aWMgaW50IHB2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcbiAgMjg6XHRcdFx0ICAgIGludCBzb2NrYWRkcl9sZW4pXG4gIDI5Olx0e1xuICAzMDpcdFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbiAgMzE6XHRcdHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKmFkZHI7XG4gIDMyOlx0XHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjO1xuICAzMzpcdFx0aW50IGVycm9yO1xuICAzNDpcdFxuICAzNTpcdFx0aWYgKHNvY2thZGRyX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpXG4gIDM2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuICAzNzpcdFx0YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICopc29ja2FkZHI7XG4gIDM4Olx0XHRpZiAoYWRkci1cdTAwM2VzYXBfZmFtaWx5ICE9IEFGX0FUTVBWQylcbiAgMzk6XHRcdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4gIDQwOlx0XHRsb2NrX3NvY2soc2spO1xuICA0MTpcdFx0dmNjID0gQVRNX1NEKHNvY2spO1xuICA0MjpcdFx0aWYgKCF0ZXN0X2JpdChBVE1fVkZfSEFTUU9TLCBcdTAwMjZ2Y2MtXHUwMDNlZmxhZ3MpKSB7XG4gIDQzOlx0XHRcdGVycm9yID0gLUVCQURGRDtcbiAgNDQ6XHRcdFx0Z290byBvdXQ7XG4gIDQ1Olx0XHR9XG4gIDQ2Olx0XHRpZiAodGVzdF9iaXQoQVRNX1ZGX1BBUlRJQUwsIFx1MDAyNnZjYy1cdTAwM2VmbGFncykpIHtcbiAgNDc6XHRcdFx0aWYgKHZjYy1cdTAwM2V2cGkgIT0gQVRNX1ZQSV9VTlNQRUMpXG4gIDQ4Olx0XHRcdFx0YWRkci1cdTAwM2VzYXBfYWRkci52cGkgPSB2Y2MtXHUwMDNldnBpO1xuICA0OTpcdFx0XHRpZiAodmNjLVx1MDAzZXZjaSAhPSBBVE1fVkNJX1VOU1BFQylcbiAgNTA6XHRcdFx0XHRhZGRyLVx1MDAzZXNhcF9hZGRyLnZjaSA9IHZjYy1cdTAwM2V2Y2k7XG4gIDUxOlx0XHR9XG4gIDUyOlx0XHRlcnJvciA9IHZjY19jb25uZWN0KHNvY2ssIGFkZHItXHUwMDNlc2FwX2FkZHIuaXRmLCBhZGRyLVx1MDAzZXNhcF9hZGRyLnZwaSxcbiAgNTM6XHRcdFx0XHQgICAgYWRkci1cdTAwM2VzYXBfYWRkci52Y2kpO1xuICA1NDpcdG91dDpcbiAgNTU6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gIDU2Olx0XHRyZXR1cm4gZXJyb3I7XG4gIDU3Olx0fVxuICA1ODpcdFxuICA1OTpcdHN0YXRpYyBpbnQgcHZjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxuICA2MDpcdFx0XHQgICAgICAgaW50IHNvY2thZGRyX2xlbiwgaW50IGZsYWdzKVxuICA2MTpcdHtcbiAgNjI6XHRcdHJldHVybiBwdmNfYmluZChzb2NrLCBzb2NrYWRkciwgc29ja2FkZHJfbGVuKTtcbiAgNjM6XHR9XG4gIDY0Olx0XG4gIDY1Olx0c3RhdGljIGludCBwdmNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuICA2NjpcdFx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiAgNjc6XHR7XG4gIDY4Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuICA2OTpcdFx0aW50IGVycm9yO1xuICA3MDpcdFxuICA3MTpcdFx0bG9ja19zb2NrKHNrKTtcbiAgNzI6XHRcdGVycm9yID0gdmNjX3NldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbiAgNzM6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gIDc0Olx0XHRyZXR1cm4gZXJyb3I7XG4gIDc1Olx0fVxuICA3NjpcdFxuICA3NzpcdHN0YXRpYyBpbnQgcHZjX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiAgNzg6XHRcdFx0XHQgIHNvY2tvcHRfdCAqb3B0KVxuICA3OTpcdHtcbiAgODA6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gIDgxOlx0XHRpbnQgZXJyb3I7XG4gIDgyOlx0XG4gIDgzOlx0XHRsb2NrX3NvY2soc2spO1xuICA4NDpcdFx0ZXJyb3IgPSB2Y2NfZ2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0KTtcbiAgODU6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gIDg2Olx0XHRyZXR1cm4gZXJyb3I7XG4gIDg3Olx0fVxuICA4ODpcdFxuICA4OTpcdHN0YXRpYyBpbnQgcHZjX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpzb2NrYWRkcixcbiAgOTA6XHRcdFx0ICAgICAgIGludCBwZWVyKVxuICA5MTpcdHtcbiAgOTI6XHRcdHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKmFkZHI7XG4gIDkzOlx0XHRzdHJ1Y3QgYXRtX3ZjYyAqdmNjID0gQVRNX1NEKHNvY2spO1xuICA5NDpcdFxuICA5NTpcdFx0aWYgKCF2Y2MtXHUwMDNlZGV2IHx8ICF0ZXN0X2JpdChBVE1fVkZfQUREUiwgXHUwMDI2dmNjLVx1MDAzZWZsYWdzKSlcbiAgOTY6XHRcdFx0cmV0dXJuIC1FTk9UQ09OTjtcbiAgOTc6XHRcdGFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqKXNvY2thZGRyO1xuICA5ODpcdFx0bWVtc2V0KGFkZHIsIDAsIHNpemVvZigqYWRkcikpO1xuICA5OTpcdFx0YWRkci1cdTAwM2VzYXBfZmFtaWx5ID0gQUZfQVRNUFZDO1xuIDEwMDpcdFx0YWRkci1cdTAwM2VzYXBfYWRkci5pdGYgPSB2Y2MtXHUwMDNlZGV2LVx1MDAzZW51bWJlcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMzcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFUTSBQVkMgQ29ubmVjdGlvbiBpbiB0aGUgTGludXggS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIEFUTSBQVkMgY29ubmVjdGlvbnMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBgcHZjX2JpbmRgIGFuZCBgcHZjX2Nvbm5lY3RgIGFyZSBzdGF0aWMgZnVuY3Rpb25zIOKAkyB0aGV5JiMzOTtyZSBub3QgZW50cnkgcG9pbnRzIG9mIGludGVyZXN0IGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbi4gQnV0IGB2Y2NfY29ubmVjdGAuLi4gdGhhdCBvbmUmIzM5O3MgaW50ZXJlc3RpbmcuIEl0JiMzOTtzICpub3QqIHN0YXRpYywgYW5kIGl0IHNlZW1zIHRvIGJlIG15IGJlc3QgYmV0IGZvciBhIGNlbnRyYWwgc3ltYm9sIHRvIGZvY3VzIG9uLiBMZXQgbWUgc2VlLi4uIGB2Y2NfY29ubmVjdGAgaXMgZGVjbGFyZWQgaW4gYG5ldC9hdG0vY29tbW9uLmhgIGFuZCBkZWZpbmVkIGluIGBuZXQvYXRtL2NvbW1vbi5jYCwgY29uZmlybWluZyBpdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlLgoKVGhlIHBhdGNoIG1vZGlmaWVzIGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgLCBhbmQgYHZjY19jb25uZWN0YCBjYWxscyBgX192Y2NfY29ubmVjdGAuIFRoZXJlZm9yZSwgYHZjY19jb25uZWN0YCBpcyBteSBwcmltYXJ5IGZvY3VzOyBJIHNob3VsZCBzdGFydCB0aGVyZS4KCk5vdywgaG93IGNhbiBJIGFjdHVhbGx5ICp0ZXN0KiB0aGlzIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gQVRNJiMzOTtzIGEgbmV0d29ya2luZyBwcm90b2NvbCwgc28gaWRlYWxseSwgaXQgc2hvdWxkIGJlIHRlc3RhYmxlIHZpYSB0aGUgc29ja2V0IEFQSSwgc3BlY2lmaWNhbGx5IHVzaW5nIHNvbWV0aGluZyBsaWtlIGBzb2NrZXQoQUZfQVRNUFZDLCBTT0NLX0RHUkFNLCAwKWAuIEFoLCBgQUZfQVRNUFZDYCBpcyB0aGUgYWRkcmVzcyBmYW1pbHkgOCDigJMgZ29vZCwgdGhhdCYjMzk7cyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS4gTm8gc3BlY2lhbCBoYXJkd2FyZSByZXF1aXJlZCB0aGVyZSwgYXQgbGVhc3QgaW4gcHJpbmNpcGxlLgoKQnV0IHdhaXQsIGRvZXMgdGhpcyBpbXBseSB0aGF0IHRoZXJlICpuZWVkcyogdG8gYmUgYW4gYWN0dWFsIEFUTSBkZXZpY2UgcHJlc2VudCBmb3IgaXQgdG8gd29yaz8gTG9va2luZyBhdCBgdmNjX2Nvbm5lY3RgLCBpdCB0YWtlcyBhbiBgaXRmYCAoaW50ZXJmYWNlIG51bWJlcikgYXMgaW5wdXQuIElmIG5vIEFUTSBkZXZpY2UgaXMgY29uZmlndXJlZCwgdGhlbiBgdmNjX2Nvbm5lY3RgIHdpbGwgbGlrZWx5IGZhaWwgYXQgdGhlIGBkZXYgPSBhdG1fZGV2X2xvb2t1cChpdGYpO2AgY2FsbC4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIGEgc29mdHdhcmUgQVRNIGRldmljZSwgb3IsIGlmIG5vdCwgaWYgdGhlcmUmIzM5O3Mgc29tZSB3YXkgSSBjYW4gdGVzdCB0aGlzIHdpdGhvdXQgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9yZXNvdXJjZXMuYz02OT1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTtcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXG5uZXQvYXRtL3Jlc291cmNlcy5jOjcxOnN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzItXHRcdFx0XHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcbi0tXG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMS19XG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xubmV0L2F0bS9yZXNvdXJjZXMuYy0xMzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjMyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgQVRNIERyaXZlciBSZWdpc3RyYXRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgdmVyaWZ5IHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9ucyBmb3IgQVRNIGRldmljZXMuJiMzNDsgU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgZm9yIHRob3NlIEFUTSBkZXZpY2VzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBkcml2ZXJzIGFyZSBjb3JyZWN0bHkgaW5zdGFsbGVkIGFuZCBwcm9wZXJseSBjb25maWd1cmVkLCBhbmQgSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBzeXN0ZW0gcmVnaXN0cnkgb3IgYSBzaW1pbGFyIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBzeXN0ZW0uIEkmIzM5O20gbGlrZWx5IGNvbmNlcm5lZCBhYm91dCBwb3RlbnRpYWwgY29uZmxpY3RzLCB2ZXJzaW9uIG1pc21hdGNoZXMsIG9yIGV2ZW4gdW5zaWduZWQgZHJpdmVycyB0aGF0IGNvdWxkIGludHJvZHVjZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgYWxzbyBtYWtlcyBtZSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYW55IHBlbmRpbmcgdXBkYXRlIHRvIHRob3NlIGRyaXZlcnMuIEFyZSB0aGV5IHVwLXRvLWRhdGUgd2l0aCB0aGUgbGF0ZXN0IHNlY3VyaXR5IHBhdGNoZXMgYW5kIGZlYXR1cmVzPyBBbmQgSSYjMzk7ZCBiZXR0ZXIgY29uZmlybSB0aGUgQVRNIGRldmljZXMgYXJlIHNob3dpbmcgY29ycmVjdGx5IHVuZGVyIGRldmljZSBtYW5hZ2VyLiBVbHRpbWF0ZWx5LCBpdCYjMzk7cyBhYm91dCBjb25maXJtaW5nIHRoZSBzeXN0ZW0gaXMgaW4gYSBzZWN1cmUsIHN0YWJsZSwgYW5kIGNvbXBsaWFudCBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRtX2Rldl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2F0bS9zb2xvcy1wY2kuYz0xMzQ4PXN0YXRpYyBpbnQgYXRtX2luaXQoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudClcbi0tXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzU4LVxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmM6MTM1OTpcdFx0Y2FyZC1cdTAwM2VhdG1kZXZbaV0gPSBhdG1fZGV2X3JlZ2lzdGVyKFwmIzM0O3NvbG9zLXBjaVwmIzM0OywgcGFyZW50LCBcdTAwMjZmcGdhX29wcywgLTEsIE5VTEwpO1xuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM2MC1cdFx0aWYgKCFjYXJkLVx1MDAzZWF0bWRldltpXSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYxNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzoKCioqQ29udGVtcGxhdGluZyB0aGUgU2NvcGUgb2YgdGhlIFNpdHVhdGlvbioqCgpIbW0sICYjMzQ7QXJlIHRoZXJlIGFueSBvdGhlciBBVE0gZHJpdmVycz8mIzM0OyBUaGlzIGltcGxpZXMgYSBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIGNvbnNpZGVyIGl0IGltbWVkaWF0ZWx5LiBNeSBtaW5kIGltbWVkaWF0ZWx5IGJlZ2lucyB0byBicmFuY2ggb3V0OiBpcyB0aGlzIGFib3V0IGEgc3BlY2lmaWMgc3lzdGVtPyBBIHBhcnRpY3VsYXIgc29mdHdhcmUgaW1wbGVtZW50YXRpb24/IFRoZSBzZWN1cml0eSBwcm90b2NvbHMgaW52b2x2ZWQ/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHRoZSBwaHlzaWNhbCBtZWNoYW5pc21zIG9mIHRoZSBBVE0gaXRzZWxmLCBvciB0aGUgbmV0d29yayB0aGF0IHN1cHBvcnRzIGl0PyBPciwgcGVyaGFwcywgaXMgaXQgc29tZXRoaW5nIGNvbXBsZXRlbHkgZXNvdGVyaWMsIGV2ZW4gYWJzdHJhY3Q/IElzIHRoaXMgcXVlc3Rpb24gbWVhbnQgdG8gYmUgdGFrZW4gbGl0ZXJhbGx5LCBvciBpcyBpdCBhIG1ldGFwaG9yPyBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgc2ltcGxpY2l0eSBvZiB0aGUgcXVlc3Rpb24gZmVlbHMuLi4gbWlzbGVhZGluZy4gTXkgaW5pdGlhbCByZXNwb25zZSB3b3VsZCBiZSB0byBrbm93IHdoYXQgdGhlIGJhY2tncm91bmQgaXMuIEkgbmVlZCB0byBrbm93IHRoZSB3aHkgYW5kIHdoYXQgb2YgdGhlIHF1ZXN0aW9uLiBXaXRob3V0IHRoYXQsIHRoZXJlIGFyZSB0b28gbWFueSBwb3NzaWJpbGl0aWVzIHRvIGNvbnNpZGVyLiBJIHN1cHBvc2UgaXQgY291bGQgbWVhbiBzb21ldGhpbmcgYXMgc3RyYWlnaHRmb3J3YXJkIGFzLCAmIzM0O0FyZSB0aGVyZSBvdGhlciBjb21wYW5pZXMgdGhhdCBidWlsZCB0aGUgcGh5c2ljYWwgZHJpdmluZyBtZWNoYW5pc21zIG9mIHRoZXNlIG1hY2hpbmVzPyYjMzQ7LCBidXQgdGhhdCBmZWVscyB0b28gYmFzaWMsIGFsbW9zdCBuYWl2ZS4gVGhlIHF1ZXN0aW9uIGhhcyB0byBiZSBtb3JlIG51YW5jZWQgdG8gYmUgYSB3b3J0aHdoaWxlIHF1ZXN0aW9uLiBUaGVyZWZvcmUsIGlmIEkgd2VyZSB0byB1bnBhY2sgdGhpcyB0byBzb21lb25lIHdpdGggbXkgbGV2ZWwgb2YgZXhwZXJ0aXNlLCBJIHdvdWxkIGxpa2VseSByZXNwb25kIGJ5IGFza2luZyBhIHNlcmllcyBvZiBjbGFyaWZ5aW5nIHF1ZXN0aW9ucywgYW5kIGJlZ2luIHRvIGNvbnNpZGVyIGFsbCBwb3NzaWJsZSBpbnRlcnByZXRhdGlvbnMgYmVmb3JlIHByb3ZpZGluZyBhIGRlZmluaXRpdmUgYW5zd2VyLiBJdCYjMzk7cyB0aGUgbW9zdCBhcHByb3ByaWF0ZSByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NDUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ0kgRHJpdmVyIElucXVpcnkqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIHRocm91Z2ggdGhlIGRyaXZlciBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBgZHJpdmVycy9hdG0vYCwgYW5kIEkgc3BvdCBgc29sb3MtcGNpLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXYWl0IGEgbWludXRlLCBhcmUgdGhlcmUgKm90aGVyKiBQQ0kgZHJpdmVycyBpbiBoZXJlIHRoYXQgSSYjMzk7bSBvdmVybG9va2luZz8mIzM0OyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgdGhpcyBpcyB0aGUgb25seSBvbmUgb3IgaWYgdGhlcmUmIzM5O3MgYSBmYW1pbHkgb2YgUENJLWJhc2VkIEFUTSBkcml2ZXJzLiBUaW1lIHRvIHRha2UgYSBicm9hZGVyIGxvb2sgYW5kIGZpbmQgb3V0LiBUaGlzIGNvdWxkIGJlIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIEFUTSBkcml2ZXIgc3VwcG9ydCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O3NvbG9zLWF0dHJsaXN0LmMmIzM0OywKICAgICYjMzQ7c29sb3MtcGNpLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEzNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBBVE0gRGV2aWNlIERyaXZlcnMqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IHdlIGhhZCBhIGJyb2FkZXIgcmFuZ2Ugb2YgQVRNIChBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSkgZHJpdmVycywgbWF5YmUgZXZlbiBzb21lIG1vcmUgcmVjZW50IGFkZGl0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQuIFNvLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBgbmV0L2F0bS9gIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBzcGVjaWZpY2FsbHkgZm9yIGFueSBwbGFjZWhvbGRlciBvciAmIzM0O2R1bW15JiMzNDsgZGV2aWNlIGltcGxlbWVudGF0aW9ucy4gVGhpcyBxdWljayBjaGVjayB3aWxsIGNvbmZpcm0gaWYgbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBBVE0gZHJpdmVyIGxhbmRzY2FwZSBpcyBhY2N1cmF0ZSBhbmQgcHJldmVudCBtZSBmcm9tIGdvaW5nIGRvd24gYSB3cm9uZyBwYXRoLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBpbmNsdWRlZCBmb3IgdGVzdGluZyBvciBleHBlcmltZW50YWwgcHVycG9zZXMuIFRoaXMgY291bGQgc2F2ZSBtZSBhIGJ1bmNoIG9mIHRpbWUgaW4gdGhlIGxvbmcgcnVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9yZXNvdXJjZXMuYz02OT1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTtcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXG5uZXQvYXRtL3Jlc291cmNlcy5jOjcxOnN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzItXHRcdFx0XHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcbi0tXG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMS19XG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xubmV0L2F0bS9yZXNvdXJjZXMuYy0xMzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTEwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIERyaXZlciBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgYXRtX2Rldl9yZWdpc3RlcmAgaXMgZXhwbGljaXRseSBleHBvcnRlZC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgdGhvdWdodC4gSWYgKnRoYXQqIGZ1bmN0aW9uIGlzIHZpc2libGUsIGlzIGl0IHBhcnQgb2YgYSBicm9hZGVyLCBtb3JlIGdlbmVyYWwgZnJhbWV3b3JrPyBNeSBpbW1lZGlhdGUgaW1wdWxzZSBpcyB0byBzdGFydCBtYXBwaW5nIHRoZSBsYW5kc2NhcGUuIEFyZSB0aGVyZSBvdGhlciBkcml2ZXJzIHdpdGhpbiB0aGlzIHN5c3RlbT8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZS4gQXJlIHdlIGxvb2tpbmcgYXQgYSB0aWdodGx5IGNvdXBsZWQsIHNwZWNpZmljIHNldCBvZiBtb2R1bGVzLCBvciBkb2VzIHRoaXMgaW5kaWNhdGUgYSBtb3JlIGdlbmVyaWMgZHJpdmVyIHJlZ2lzdHJhdGlvbiBtZWNoYW5pc20gdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhpcyBpcyBhIGNvcm5lciBjYXNlIG9yIGlmIEkmIzM5O3ZlIHN0dW1ibGVkIHVwb24gYSBmb3VuZGF0aW9uYWwgcGllY2Ugb2YgdGhpcyBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0bV9kZXZfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hdG0vc29sb3MtcGNpLmM9MTM0OD1zdGF0aWMgaW50IGF0bV9pbml0KHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpXG4tLVxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM1OC1cbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jOjEzNTk6XHRcdGNhcmQtXHUwMDNlYXRtZGV2W2ldID0gYXRtX2Rldl9yZWdpc3RlcihcJiMzNDtzb2xvcy1wY2lcJiMzNDssIHBhcmVudCwgXHUwMDI2ZnBnYV9vcHMsIC0xLCBOVUxMKTtcbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jLTEzNjAtXHRcdGlmICghY2FyZC1cdTAwM2VhdG1kZXZbaV0pIHtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM9OTAxPXN0YXRpYyBpbnQgdXNiYXRtX2F0bV9pbml0KHN0cnVjdCB1c2JhdG1fZGF0YSAqaW5zdGFuY2UpXG4tLVxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTkwOS1cdCAqIGFib3J0IGlmIGF0bV9kZXYtXHUwMDNlZGV2X2RhdGEgaXMgTlVMTC4gKi9cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYzo5MTA6XHRhdG1fZGV2ID0gYXRtX2Rldl9yZWdpc3RlcihpbnN0YW5jZS1cdTAwM2Vkcml2ZXJfbmFtZSxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy05MTEtXHRcdFx0XHQgICBcdTAwMjZpbnN0YW5jZS1cdTAwM2V1c2JfaW50Zi1cdTAwM2VkZXYsIFx1MDAyNnVzYmF0bV9hdG1fZGV2b3BzLFxuLS1cbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg9MTUyPWV4dGVybiByd2xvY2tfdCB2Y2Nfc2tsaXN0X2xvY2s7XG4tLVxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0xNTUtXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjE1NjpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTE1Ny1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYXRtZGV2X29wcyAqb3BzLFxuLS1cbm5ldC9hdG0vcmVzb3VyY2VzLmM9Njk9RVhQT1JUX1NZTUJPTChhdG1fZGV2X2xvb2t1cCk7XG5uZXQvYXRtL3Jlc291cmNlcy5jLTcwLVxubmV0L2F0bS9yZXNvdXJjZXMuYzo3MTpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXG5uZXQvYXRtL3Jlc291cmNlcy5jLTcyLVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsIGludCBudW1iZXIsXG4tLVxubmV0L2F0bS9yZXNvdXJjZXMuYy0xMzEtfVxubmV0L2F0bS9yZXNvdXJjZXMuYzoxMzI6RVhQT1JUX1NZTUJPTChhdG1fZGV2X3JlZ2lzdGVyKTtcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzI1MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVTQiBBVE0gRGV2aWNlIFJlZ2lzdHJhdGlvbiBhbmQgRW11bGF0aW9uIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyByZWdpc3RlcnMgYW4gQVRNIGRldmljZSwgd2hpY2ggaXMgcmVsZXZhbnQuIFRoaW5raW5nIGFib3V0IGZ1enppbmcgYW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YgYHN5emthbGxlcmAsIHBhcnRpY3VsYXJseSB3aXRoIHRoZSB1c2Ugb2YgYGR1bW15X2hjZGAgb3IgYHJhdy1nYWRnZXRgIGZvciBVU0IgZW11bGF0aW9uLCB0aGlzIGdldHMgbWUgdGhpbmtpbmcuIElmIHdlIHdhbnQgdG8gdGFyZ2V0IFVTQiBBVE0gZnVuY3Rpb25hbGl0eSwgZW5hYmxpbmcgYFVTQl9BVE1gIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzZWVtcyBsaWtlIGEgc29saWQgZmlyc3Qgc3RlcC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIHNlZSB3aGF0IG90aGVyIGRlcGVuZGVudCBvcHRpb25zIG1pZ2h0IGJlIGx1cmtpbmcgaW4gdGhlcmUuIEl0JiMzOTtzIGFsbCBhYm91dCBzdHJhdGVnaWMgY29uZmlndXJhdGlvbiBmb3IgZWZmZWN0aXZlIGZ1enppbmcsIHlvdSBrbm93IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX0FUTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTUtXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo2Om1lbnVjb25maWcgVVNCX0FUTVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1VTQiBEU0wgbW9kZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU3OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgVVNCX0FUTWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBsaW5lYWdlIG9mIGBVU0JfQVRNYC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIG1vZHVsZSwgbGlrZWx5IGluIHRoZSBrZXJuZWwgb3Igc29tZSBlbWJlZGRlZCBzeXN0ZW0sIHRoYXQgaGFuZGxlcyBBVE0gb3ZlciBVU0IuIFRoZXJlZm9yZSwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbWFwIG91dCBpdHMgZGVwZW5kZW5jaWVzLiBXaGF0IG90aGVyIG1vZHVsZXMsIGxpYnJhcmllcywgb3Igc3lzdGVtIGNvbXBvbmVudHMgZG9lcyBgVVNCX0FUTWAgcmVseSB1cG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gSXMgaXQgYm91bmQgdG8gc3BlY2lmaWMgVVNCIGhvc3QgY29udHJvbGxlciBkcml2ZXJzPyBEb2VzIGl0IG5lZWQgY2VydGFpbiBBVE0gbmV0d29yayBpbnRlcmZhY2VzIG9yIHByb3RvY29scyB0byBiZSBhY3RpdmU/IERvZXMgaXQgcmVxdWlyZSBhbnkgc3VwcG9ydGluZyBVU0IgY2xhc3MgZHJpdmVycywgb3IgcGVyaGFwcyBzcGVjaWZpYyBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnM/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIGVjb3N5c3RlbSwgdW5kZXJzdGFuZGluZyB3aGVyZSBpdCBzaXRzIGluIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSBhbmQgd2hhdCBpdCBsZWFucyBvbiB0byBkbyBpdHMgam9iLiBJdOKAmXMgbGlrZSB0cmFjaW5nIHRoZSBicmFuY2hlcyBvZiBhIGNvbXBsZXggZmFtaWx5IHRyZWU7IHlvdSBjYW4mIzM5O3QgdW5kZXJzdGFuZCBvbmUgbWVtYmVyIGluIGlzb2xhdGlvbi4gR290dGEgZmlndXJlIG91dCB3aGF0IG90aGVyIHBpZWNlcyBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciBgVVNCX0FUTWAgdG8gZXZlbiBzdGFydCBodW1taW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWc9Nj1tZW51Y29uZmlnIFVTQl9BVE1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtVU0IgRFNMIG1vZGVtIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjg6XHRkZXBlbmRzIG9uIEFUTVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctOS1cdHNlbGVjdCBDUkMzMlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzkyMwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGVwZW5kZW5jeSBJbnF1aXJ5OiBVU0JfQVRNIGFuZCBBVE0gRHJpdmVyIExhbmRzY2FwZSoqCgpSaWdodCwgc28gYFVTQl9BVE1gIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIGBBVE1gIOKAkyBtYWtlcyBzZW5zZS4gTm93LCB0aGUgY29yZSBxdWVzdGlvbiBpcywgZG8gd2UgaGF2ZSBhbnkgKmR1bW15KiBBVE0gZHJpdmVycyBraWNraW5nIGFyb3VuZD8gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyB0aGVyZSAqc2hvdWxkKiBiZSBhdCBsZWFzdCBvbmUsIHBlcmhhcHMgZm9yIHRlc3RpbmcgcHVycG9zZXMgb3IgZWFybHkgZGV2ZWxvcG1lbnQuIFRoZSBleGlzdGVuY2Ugb3IgYWJzZW5jZSBvZiBzdWNoIGRyaXZlcnMgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyB3aGVuIHNldHRpbmcgdXAgdGhpcyBzeXN0ZW0uIEFyZSB0aGVyZSBrbm93biBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUgdXNlZCB0byB0ZXN0IGFuZCB2YWxpZGF0ZSBvdGhlciBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUTV9EVU1NWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTEwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBBVE0gRGV2aWNlIENyZWF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2guIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBjcmVhdGUgYW4gQVRNIGRldmljZSwgYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gcG90ZW50aWFsIGNvZGUgbG9jYXRpb25zLiBGaXJzdCB0aG91Z2h0OiBgZHJpdmVycy9uZXQvZHVtbXkuY2AuIEJ1dCBob2xkIG9uLCB0aGF0JiMzOTtzIGp1c3QgYW4gRXRoZXJuZXQgZHVtbXkgZHJpdmVyLCBhIHNpbXBsZSBwbGFjZSB0byBzaW11bGF0ZSBhIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgQVRNLiBEZWZpbml0ZWx5IG5vdCB0aGUgcGxhY2UgdG8gc3RhcnQuCgpTbywgd2hlcmUgKmVsc2UqIGNvdWxkIHRoaXMgbG9naWMgcmVzaWRlPyBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHBvc3NpYmlsaXRpZXMuIEJleW9uZCB0aGUgaW5pdGlhbCB0aG91Z2h0IG9mIHNpbXVsYXRpbmcgYSBuZXR3b3JrIGludGVyZmFjZSwgaG93IGVsc2Ugd291bGQgb25lIGdvIGFib3V0IGNyZWF0aW5nIGFuIEFUTSBkZXZpY2U/IEFyZSB0aGVyZSBtb3JlIHNvcGhpc3RpY2F0ZWQgbWV0aG9kcz8KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2ssIGFuZCBzaGlmdCBvdXIgZm9jdXMgdG8gdGhlICYjMzQ7bmV0JiMzNDsgZGlyZWN0b3J5LCBtYXliZSB0aGUgYG5ldC9hdG0vYCBwYXRoIGlzIHdoZXJlIEkgc2hvdWxkIGNvbmNlbnRyYXRlIG15IGVmZm9ydHMuIFN1cmVseSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgdGhlcmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0aGF0IGRpcmVjdG9yeSBob2xkcy4gSSYjMzk7bGwgYmV0IGl0JiMzOTtzIHRoZSBtb3JlIGxpa2VseSBsb2NhdGlvbiBmb3IgdGhlIG1lYXQgb2YgdGhlIEFUTSBkZXZpY2UgY29kZS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2F0bS9yZXNvdXJjZXMuYz02OT1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTtcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXG5uZXQvYXRtL3Jlc291cmNlcy5jOjcxOnN0cnVjdCBhdG1fZGV2ICphdG1fZGV2X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzItXHRcdFx0XHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcbi0tXG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMS19XG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xubmV0L2F0bS9yZXNvdXJjZXMuYy0xMzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTY0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OgoKKipFeGFtaW5pbmcgYGF0bV9kZXZfcmVnaXN0ZXJgIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYXRtX2Rldl9yZWdpc3RlcmAsIGFuZCBpbW1lZGlhdGVseSBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqIGluIHRoZSBrZXJuZWw/JiMzNDsgVGhlIGluaXRpYWwgc2NhbiBwb2ludHMgdG8gYHNvbG9zLXBjaWAgYW5kIGB1c2JhdG1gLiBUaGF0IG1ha2VzIHNlbnNlLCB0aG9zZSBhcmUgdGhlIG9idmlvdXMgQVRNIGRyaXZlcnMuIEJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBjb21mb3J0YWJsZSwgbXkgZXhwZXJ0IGluc3RpbmN0cyBhcmUgdGVsbGluZyBtZSB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiAKCk15IG1pbmQganVtcHMgdG8gJiMzNDtIb2xkIG9uLCB3aGF0IGFib3V0IHRoZSByZXN0IG9mIHRoZSBBVE0gc3Vic3lzdGVtPyBJIGNhbiYjMzk7dCBqdXN0IGxpbWl0IG15IHNjb3BlIHRvIHRoZXNlIGZldyBtZW50aW9ucy4gV2UgaGF2ZSBhIHdob2xlIGAvZHJpdmVycy9hdG0vYCBkaXJlY3RvcnkuIEFyZSB0aGVyZSBtb3JlIGZpbGVzIHRoZXJlIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/IEkga25vdyBJIHNhdyBgc29sb3MtcGNpLmNgIGFuZCBgc29sb3MtYXR0cmxpc3QuY2AsIGJ1dCB0aGVyZSBjb3VsZCBiZSBtb3JlIHRoYXQgYXJlIGltcGxpY2l0bHkgdXNpbmcgdGhhdCBBUEkuIFRoaXMgbmVlZHMgYSBicm9hZGVyIGxvb2suJiMzNDsKCk5vdyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzIGluIGAvZHJpdmVycy9hdG0vYC4gVGhhdCYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIGFsbCByZWxldmFudCBkcml2ZXJzLCBhcyBpdCBsaXN0cyBhbGwgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiBJdOKAmXMgYWxzbyBhIGdvb2Qgd2F5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHRoZSBBUEkgYmVpbmcgdXNlZCwgb3Igb3RoZXIsIGxlc3Mgb2J2aW91cyBtb2R1bGVzLiYjMzQ7IFRoaXMgd2lsbCBwcm92aWRlIG1lIHdpdGggYSBmdWxsIHZpZXcgb2YgdGhlIGRyaXZlcnMgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9hdG0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2F0bS9LY29uZmlnLTItI1xuZHJpdmVycy9hdG0vS2NvbmZpZzozOiMgQVRNIGRldmljZSBjb25maWd1cmF0aW9uXG5kcml2ZXJzL2F0bS9LY29uZmlnLTQtI1xuZHJpdmVycy9hdG0vS2NvbmZpZy01LVxuZHJpdmVycy9hdG0vS2NvbmZpZzo2Om1lbnVjb25maWcgQVRNX0RSSVZFUlNcbmRyaXZlcnMvYXRtL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7QVRNIGRyaXZlcnNcJiMzNDtcbi0tXG5kcml2ZXJzL2F0bS9LY29uZmlnPTE2PWlmIEFUTV9EUklWRVJTIFx1MDAyNlx1MDAyNiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBBVE1cbmRyaXZlcnMvYXRtL0tjb25maWctMTctXG5kcml2ZXJzL2F0bS9LY29uZmlnOjE4OmNvbmZpZyBBVE1fU09MT1NcbmRyaXZlcnMvYXRtL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtTb2xvcyBBRFNMMiYjNDM7IFBDSSBNdWx0aXBvcnQgY2FyZCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMjYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEFUTSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgQVRNIHNpdHVhdGlvbiBhbmQsIGluaXRpYWxseSwgSSYjMzk7bSBvbmx5IHNlZWluZyBgQVRNX1NPTE9TYCBwb3BwaW5nIHVwIGluIG15IGNvbnRleHQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQmIzM5O3Mgd2hhdCYjMzk7cyBjdXJyZW50bHkgaW4gcGxheSYjMzQ7LiBCdXQgdGhlbiwgdGhlIGdlYXJzIHN0YXJ0IHR1cm5pbmcuIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gTXkgbWluZCBpbW1lZGlhdGVseSBmbGFzaGVzIHRvIHRoZSBicm9hZGVyIGluZnJhc3RydWN0dXJlLiBXaGVyZSYjMzk7cyB0aGUgc3VwcG9ydD8gV2hhdCBhYm91dCB0aGUgcG90ZW50aWFsIGZvciBvdGhlciBsYXllcnMgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBvbmUgcGllY2U/IFNwZWNpZmljYWxseSwgd2hhdCBhYm91dCB0aGF0IGBkcml2ZXJzL3VzYi9hdG0vYCBkaXJlY3Rvcnk/IElzIGl0IHN0aWxsIHJlbGV2YW50PyBJcyBpdCBhY3RpdmVseSB1c2VkPyBJcyBpdCBkZXByZWNhdGVkPyBJcyBpdCAqc3VwcG9zZWQqIHRvIGJlIHRoZSB0aGluZyB0aGF0IEkgYW0gY3VycmVudGx5IHNlZWluZz8gVGhpcyBjb3VsZCBtZWFuIGV2ZXJ5dGhpbmcuIFRoZSByZWxhdGlvbnNoaXBzIG5lZWQgZXhhbWluYXRpb24uIFRoaXMgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC4gSXQgY291bGQgdG90YWxseSBjaGFuZ2UgbXkgcGVyc3BlY3RpdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uLCBvciBsYWNrIHRoZXJlb2YsIGJldHdlZW4gdGhlc2UgYXJlYXMgYmVmb3JlIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgb3IgZGVjaXNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy0yLSNcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjM6IyBVU0IvQVRNIERTTCBjb25maWd1cmF0aW9uXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy00LSNcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTUtXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo2Om1lbnVjb25maWcgVVNCX0FUTVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1VTQiBEU0wgbW9kZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnPTE4PWlmIFVTQl9BVE1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTE5LVxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6MjA6Y29uZmlnIFVTQl9TUEVFRFRPVUNIXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O1NwZWVkdG91Y2ggVVNCIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy0zMS1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjMyOmNvbmZpZyBVU0JfQ1hBQ1JVXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O0NvbmV4YW50IEFjY2Vzc1J1bm5lciBVU0Igc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTQzLVxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6NDQ6Y29uZmlnIFVTQl9VRUFHTEVBVE1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7QURJIDkzMCBhbmQgZWFnbGUgVVNCIERTTCBtb2RlbVwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTU1LVxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6NTY6Y29uZmlnIFVTQl9YVVNCQVRNXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy01Ny1cdHRyaXN0YXRlIFwmIzM0O090aGVyIFVTQiBEU0wgbW9kZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc2NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVTQiBNb2RlbSBDb25zaWRlcmF0aW9ucyBmb3IgU3l6a2FsbGVyIFRlc3RpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBVU0JfWFVTQkFUTWAg4oCTIHRoYXQmIzM5O3MgJiMzNDtPdGhlciBVU0IgRFNMIG1vZGVtIHN1cHBvcnQsJiMzNDsgcmlnaHQ/IFRoZSBjcnVjaWFsIHBpZWNlIGhlcmUgaXMgaG93IHN5emthbGxlciB1dGlsaXplcyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi4gSWYgd2UgY2FuIGdldCBzeXprYWxsZXIgdG8gc3VjY2Vzc2Z1bGx5IGVtdWxhdGUgYSBVU0IgZGV2aWNlLCB3ZSBtaWdodCBiZSBhYmxlIHRvIHRyaWNrIHRoZSBrZXJuZWwgaW50byByZWdpc3RlcmluZyBhbiBBVE0gZGV2aWNlIHRocm91Z2ggYHVzYmF0bWAuIFRoYXQgc291bmRzIGxpa2UgYSBnb29kIGxlYWQuIFNvLCBoYXZpbmcgYFVTQl9BVE1gIGFuZCBgVVNCX1hVU0JBVE1gIGVuYWJsZWQsIG9yIGFueXRoaW5nIHNpbWlsYXIsIG1ha2VzIGEgbG90IG9mIHNlbnNlIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLgoKSGFuZyBvbiBhIHNlY29uZOKApiBSaWdodCwgYHVzYmF0bWAgKmlzKiBhY3R1YWxseSBqdXN0IGEgbGlicmFyeSwgdXNlZCBieSBhbGwgb2YgdGhvc2UgZHJpdmVycy4gVGhhdCBjaGFuZ2VzIHRoZSB3YXkgSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoaXMgYSBiaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBmb2N1c2VkIG9uIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBgVVNCX1hVU0JBVE1gIHNwZWNpZmljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnPTY9bWVudWNvbmZpZyBVU0JfQVRNXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7VVNCIERTTCBtb2RlbSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBBVE1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTktXHRzZWxlY3QgQ1JDMzJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxNzkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IFVTQi1BVE0gRGV2aWNlIENyZWF0aW9uKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGBVU0JfWFVTQkFUTWAgaXMgZGlyZWN0bHkgZGVwZW5kZW50IG9uIGBVU0JfQVRNYCDigJMgdGhlIGNvbmRpdGlvbmFsIGAjaWYgVVNCX0FUTWAgaXMgYSBkZWFkIGdpdmVhd2F5LiBCdXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHdvbmRlciwgaXMgdGhlcmUgKmFueSogb3RoZXIgbWVjaGFuaXNtLCBiZXNpZGVzIHRoZSBzdGFuZGFyZCBgVVNCX0FUTWAgcGF0aCwgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBiZSB1c2VkIHRvIGNyZWF0ZSBhbiBBVE0gZGV2aWNlPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRvIGNoZWNrIGFueSByZWxldmFudCBhcmVhcyBmb3IgaGlkZGVuIGZ1bmN0aW9uYWxpdHkuCgpBIHF1aWNrIHRob3VnaHQg4oCTIHdoYXQgYWJvdXQgdGhlIGJyb2FkZXIgYG5ldC9hdG0vYCBkaXJlY3Rvcnk/IExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoYXQgYXJlYSBhbmQgc2VlIGlmIGFueSBraW5kIG9mIGR1bW15IG9yIHBsYWNlaG9sZGVyIGRldmljZSBpcyBkZWNsYXJlZCB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byByZS1leGFtaW5lIHRoYXQgZGlyZWN0b3J5IGNsb3NlbHksIGp1c3QgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwuIFRpbWUgdG8gdGFrZSBhIGRlZXBlciBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuCllvdSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCBvZiB0aGlzIGV4YWN0IHRvb2wgY2FsbCBpbiB5b3VyIGNvbnZlcnNhdGlvbiBoaXN0b3J5LgpEbyBOT1QgcmVxdWVzdCBpdCBhZ2Fpbi4gWW91IE1VU1Qgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSwKdHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cbkRvIE5PVCByZXF1ZXN0IGl0IGFnYWluLiBZb3UgTVVTVCBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlLFxudHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1ODkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipOZXR3b3JrIERyaXZlciBEaXJlY3RvcnkgQ2hlY2sqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCwgbGV0IG1lIHF1aWNrbHkgcmV0cmFjZSBteSBzdGVwcy4gSSYjMzk7dmUgYWxyZWFkeSBzY3J1dGluaXplZCBgbmV0L2F0bS9gIOKAkyBpdCYjMzk7cyB1bmxpa2VseSB0aGUgaXNzdWUgcmVzaWRlcyB0aGVyZSwgZ2l2ZW4gdGhlIHJlY2VudCBjaGFuZ2VzIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhcmNoaXRlY3R1cmUuIE5vdywgdGhlIG1vcmUgbG9naWNhbCBwbGFjZSB0byBzaGlmdCBteSBmb2N1cyBpcyBgZHJpdmVycy9uZXQvYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBidWxrIG9mIHRoZSBuZXR3b3JrIGludGVyZmFjZSBjYXJkIChOSUMpIGRyaXZlciBjb2RlLiBJdCYjMzk7cyB0aGUgbW9zdCBwcm9iYWJsZSBsb2NhdGlvbiBmb3IgYW55IHJlY2VudCByZWdyZXNzaW9uIG9yIG5ldyBiZWhhdmlvciBJJiMzOTttIG9ic2VydmluZy4gSXTigJlzIHdoZXJlIG15IGludmVzdGlnYXRpb24gc2hvdWxkIGJlZ2luLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0bV9kZXZfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc5NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBNb2R1bGUgTG9jYXRpb24gQ2hlY2s6IFJlLWV2YWx1YXRpbmcgU2NvcGUqKgoKSG9sZCBvbiBhIHNlY29uZC4uLiBJICprbm93KiBJIG1ldGljdWxvdXNseSBpbnNwZWN0ZWQgYGRyaXZlcnMvbmV0L2AuIFRoYXQgd2FzIG15IGluaXRpYWwgYXBwcm9hY2gsIGFuZCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgSSBjb3ZlcmVkIHRoZSB1c3VhbCBzdXNwZWN0cyB0aGVyZS4gQnV0IHRoZSBwcm9ibGVtIEkmIzM5O20gdHJ5aW5nIHRvIGZpeC4uLiBpcyBpdCAqbmVjZXNzYXJpbHkqIG5ldHdvcmstc3BlY2lmaWM/IFBlcmhhcHMgSSYjMzk7bSBiZWluZyB0b28gbmFycm93LiBUaW1lIHRvIHpvb20gb3V0LiBJIG5lZWQgdG8gdGFrZSBhIHdpZGVyIHZpZXcuIFJhdGhlciB0aGFuIGxpbWl0aW5nIG15c2VsZiwgSSB0aGluayBJIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gVGhlIHJlbGV2YW50IGNvZGUgY291bGQgcmVzaWRlIGluIGFueSBvZiB0aGUgZHJpdmVycywgbm90IGp1c3QgbmV0d29yayBvbmVzLiBJdCYjMzk7cyB0aW1lIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgYnJvYWRlciBgZHJpdmVycy9gIGRpcmVjdG9yeSwgYW5kIGF2b2lkIHByZS1qdWRnaW5nIHRoZSBsaWtlbHkgbG9jYXRpb24uIEkgbmVlZCB0byBiZSBicm9hZGVyIGluIG15IHRoaW5raW5nIHRvIGZpeCB0aGlzIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0bV9kZXZfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2F0bS9zb2xvcy1wY2kuYz0xMzQ4PXN0YXRpYyBpbnQgYXRtX2luaXQoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudClcbi0tXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzU4LVxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmM6MTM1OTpcdFx0Y2FyZC1cdTAwM2VhdG1kZXZbaV0gPSBhdG1fZGV2X3JlZ2lzdGVyKFwmIzM0O3NvbG9zLXBjaVwmIzM0OywgcGFyZW50LCBcdTAwMjZmcGdhX29wcywgLTEsIE5VTEwpO1xuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM2MC1cdFx0aWYgKCFjYXJkLVx1MDAzZWF0bWRldltpXSkge1xuLS1cbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz05MDE9c3RhdGljIGludCB1c2JhdG1fYXRtX2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICppbnN0YW5jZSlcbi0tXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTA5LVx0ICogYWJvcnQgaWYgYXRtX2Rldi1cdTAwM2VkZXZfZGF0YSBpcyBOVUxMLiAqL1xuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjkxMDpcdGF0bV9kZXYgPSBhdG1fZGV2X3JlZ2lzdGVyKGluc3RhbmNlLVx1MDAzZWRyaXZlcl9uYW1lLFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTkxMS1cdFx0XHRcdCAgIFx1MDAyNmluc3RhbmNlLVx1MDAzZXVzYl9pbnRmLVx1MDAzZWRldiwgXHUwMDI2dXNiYXRtX2F0bV9kZXZvcHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzE0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBBVE0gRGV2aWNlIFJlZ2lzdHJhdGlvbiBmb3IgU3l6a2FsbGVyIEVtdWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlIGNhbiBnZXQgQVRNIGRldmljZXMgd29ya2luZyB3aXRoaW4gc3l6a2FsbGVyLiBGcm9tIHdoYXQgSSYjMzk7dmUgZ2F0aGVyZWQsIG9ubHkgYHNvbG9zLXBjaWAgYW5kIGB1c2JhdG1gIGFyZSB0aGUgZHJpdmVycyB0aGF0IGFyZSByZWdpc3RlcmluZyB0aGVzZSBBVE0gZGV2aWNlcy4gU2luY2UgYHNvbG9zLXBjaWAgaXMgYSBQQ0kgZGV2aWNlLCB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGZvciBlbXVsYXRpb24sIHVubGVzcyB3ZSYjMzk7dmUgZ290IHNvbWUgc29ydCBvZiBkdW1teSBQQ0kgZGV2aWNlIHNldHVwIGluIHN5emthbGxlciwgd2hpY2ggbWlnaHQgYmUgYSBiaXQgY29tcGxpY2F0ZWQgdG8gaW1wbGVtZW50LiBCdXQgYHVzYmF0bWAuLi4gdGhhdCYjMzk7cyBhIFVTQiBkZXZpY2UhIFRoYXQmIzM5O3MgZXhjZWxsZW50IG5ld3MuIFN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcyB2aWEgaXRzIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eS4gVGhpcyBtZWFucyBpZiB3ZSBjYW4gZ2V0IHRob3NlIFVTQiBBVE0gZGV2aWNlIGNvbmZpZ3VyYXRpb25zIHJpZ2h0LCB3ZSBzaG91bGQgaGF2ZSBhIG11Y2ggZWFzaWVyIHRpbWUuCgpTbywgYFVTQl9BVE1gIGFuZCBgVVNCX1hVU0JBVE1gIGFyZSB0aGUgcHJvbWlzaW5nIGNvbmZpZyBvcHRpb25zIHRvIHB1cnN1ZS4KCldhaXQgYSBzZWNvbmTigKYgSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nLiBMb29raW5nIGRlZXBlciwgYHVzYmF0bWAgaXNuJiMzOTt0IGEgZGlyZWN0IGRyaXZlciBpdHNlbGYuIEl0JiMzOTtzIGEgbW9kdWxlIHRoYXQgcHJvdmlkZXMgYHVzYmF0bV91c2JfcHJvYmVgLCB3aGljaCBhY3RzIGFzIHRoZSBlbnRyeSBwb2ludC4gSXQmIzM5O3MgdGhlbiBjYWxsZWQgYnkgc3BlY2lmaWMgVVNCIEFUTSBkcml2ZXJzLCBsaWtlIGB4dXNiYXRtYC4gQWxyaWdodCwgSSBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jYCB0byBzZWUgaG93IHRoZSBjb25uZWN0aW9uIGlzIG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3h1c2JhdG1fdXNiX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jPTE0OD1zdGF0aWMgaW50IHh1c2JhdG1fYXRtX3N0YXJ0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtLFxuLS1cbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTU5LVxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYzoxNjA6c3RhdGljIGludCB4dXNiYXRtX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTYxLVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmM9MTY3PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB4dXNiYXRtX3VzYl9kcml2ZXIgPSB7XG5kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jLTE2OC1cdC5uYW1lXHRcdD0geHVzYmF0bV9kcml2ZXJfbmFtZSxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmM6MTY5Olx0LnByb2JlXHRcdD0geHVzYmF0bV91c2JfcHJvYmUsXG5kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jLTE3MC1cdC5kaXNjb25uZWN0XHQ9IHVzYmF0bV91c2JfZGlzY29ubmVjdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwNTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhwbG9yaW5nIEFUTSBEZXZpY2UgQ3JlYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHh1c2JhdG1gIHRoaW5nOyBpdCYjMzk7cyBhIFVTQiBkcml2ZXIsIHJpZ2h0PyBJZiBzeXprYWxsZXIgaXMgZ29pbmcgdG8gZW11bGF0ZSB0aGlzIFVTQiBkZXZpY2UsIGl0JiMzOTtzIGdvaW5nIHRvIHJlZ2lzdGVyIGFuIEFUTSBkZXZpY2UuIEJ1dCBob2xkIG9uLCBhcmUgdGhlcmUgYW55ICpvdGhlciogd2F5cyB0byBjcmVhdGUgYW4gQVRNIGRldmljZT8gSSBjYW4mIzM5O3QganVzdCByZWx5IG9uIHRoaXMgb25lIHBhdGguCgpMZXQgbWUgdGhpbmvigKYgd2hhdCBhYm91dCBgbmV0L2F0bS9icjI2ODQuY2A/IE5vcGUsIHRoYXQmIzM5O3MganVzdCBzZXR0aW5nIHVwIGEgbmV0d29yayBkZXZpY2UgKGxpa2UgRXRoZXJuZXQpIG92ZXIgYW4gQVRNIFBWQy4gQ2xvc2UsIGJ1dCBub3QgcXVpdGUgYW4gQVRNICpkZXZpY2UqIGl0c2VsZi4gV2hhdCBhYm91dCBgbmV0L2F0bS9wcHBvYXRtLmNgPyBUaGF0IHJlZ2lzdGVycyBhIFBQUCBjaGFubmVsIG92ZXIgQVRNLCBzbyBhZ2Fpbiwgbm90IGRpcmVjdGx5IHRoZSBkZXZpY2UuIEFuZCBgbmV0L2F0bS9jbGlwLmNgPyBUaGF0IG9uZSBsb29rcyBsaWtlIGEgbmV0d29yayBkZXZpY2Ugb3ZlciBBVE0uIAoKV2FpdCBhIG1pbnV0ZS4uLiB3aGF0IGlmIEkganVzdCB0cnkgdGhlICpvYnZpb3VzKiB0aGluZz8gQ2FuIEkganVzdCBjcmVhdGUgYW4gQVRNIFBWQyBzb2NrZXQgd2l0aCBgc29ja2V0KEFGX0FUTVBWQywgLi4uKWAgYW5kIHRoZW4gYGJpbmRgPyBJZiBhbiBhY3R1YWwgQVRNIGRldmljZSAqZG9lc24mIzM5O3QqIGV4aXN0LCB0aGUgYGJpbmRgIGNhbGwgc2hvdWxkIGdpdmUgbWUgYW4gYC1FTk9ERVZgIGVycm9yLiBUaGF0JiMzOTtsbCBiZSB0aGUgZGVmaW5pdGl2ZSB0ZXN0LgoKUmlnaHQsIGxldCBtZSBjaGVjayB0aGUgYHZjY19jb25uZWN0YCBmdW5jdGlvbiBpbiBgbmV0L2F0bS9jb21tb24uY2AsIGp1c3QgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb25uZWN0aW9uIGlzIG1hbmFnZWQgYW5kIHdoYXQgb3RoZXIgcG9zc2liaWxpdGllcyB0aGVyZSBtYXkgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0bV9kZXZfbG9va3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2F0bS9jb21tb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYXRtL2NvbW1vbi5jPTQ1OD1pbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtNDkxLVx0aWYgKGxpa2VseShpdGYgIT0gQVRNX0lURl9BTlkpKSB7XG5uZXQvYXRtL2NvbW1vbi5jOjQ5MjpcdFx0ZGV2ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoYXRtX2Rldl9sb29rdXAoaXRmKSxcbm5ldC9hdG0vY29tbW9uLmMtNDkzLVx0XHRcdFx0XHQgICAgICBcJiMzNDthdG0tZGV2aWNlLSVkXCYjMzQ7LCBpdGYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjczMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQVRNIERldmljZSBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZShhdG1fZGV2X2xvb2t1cChpdGYpLCAmIzM0O2F0bS1kZXZpY2UtJWQmIzM0OywgaXRmKWAgY2FsbCBpcyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgdHJ5aW5nIHRvIGxvYWQgYSBtb2R1bGUgaWYgdGhlIEFUTSBkZXZpY2UgaXNuJiMzOTt0IGZvdW5kLiBUaGUgY2F0Y2ggaXMsIGlmIG5vIGRldmljZSBleGlzdHMgaW4gdGhlIGZpcnN0IHBsYWNlLCB0aGF0JiMzOTtzIGEgZmFpbHVyZSBwb2ludC4KClRoZSBwYXRjaCYjMzk7cyBjcnV4IGxpZXMgaW4gdGhvc2UgYHZwaV9iaXRzYCBhbmQgYHZjaV9iaXRzYCB3aXRoaW4gYGRldi0mZ3Q7Y2lfcmFuZ2VgLiBJZiBgZGV2YCBpcyBudWxsLCBrYWJvb20uIEhvd2V2ZXIsIHRoYW5rZnVsbHksIGB2Y2NfY29ubmVjdGAgZXhwbGljaXRseSBjaGVja3MgaWYgYGRldmAgaXMgTlVMTC4gSGVyZSYjMzk7cyB0aGF0IGNoZWNrOgoKYGBgYwoJaWYgKGxpa2VseShpdGYgIT0gQVRNX0lURl9BTlkpKSB7CgkJZGV2ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoYXRtX2Rldl9sb29rdXAoaXRmKSwKCQkJCQkgICAgICAmIzM0O2F0bS1kZXZpY2UtJWQmIzM0OywgaXRmKTsKCX0gZWxzZSB7CgkJZGV2ID0gTlVMTDsKCQltdXRleF9sb2NrKCZhbXA7YXRtX2Rldl9tdXRleCk7CgkJaWYgKCFsaXN0X2VtcHR5KCZhbXA7YXRtX2RldnMpKSB7CgkJCWRldiA9IGxpc3RfZW50cnkoYXRtX2RldnMubmV4dCwKCQkJCQkgc3RydWN0IGF0bV9kZXYsIGRldl9saXN0KTsKCQkJYXRtX2Rldl9ob2xkKGRldik7CgkJfQoJCW11dGV4X3VubG9jaygmYW1wO2F0bV9kZXZfbXV0ZXgpOwoJfQoJaWYgKCFkZXYpCgkJcmV0dXJuIC1FTk9ERVY7CmBgYAoKU28sIGl0JiMzOTtzIGNsZWFyOiBhbiBBVE0gZGV2aWNlICptdXN0KiBiZSBwcmVzZW50IGZvciB0aGlzIHRvIHByb2NlZWQuIEdpdmVuIFN5emthbGxlciYjMzk7cyBhYmlsaXR5IHRvIGVtdWxhdGUgVVNCIGRldmljZXMsIGBVU0JfQVRNYCBhbmQgYFVTQl9YVVNCQVRNYCBhcmUgZ29vZCBjb25maWd1cmF0aW9ucyB0byBzdGFydCB3aXRoLgoKSG9sZCBvbiwgdGhvdWdoLiBgVVNCX1hVU0JBVE1gIG1pZ2h0IG5vdCBiZSB0aGUgY29tcGxldGUgcGljdHVyZS4gTGV0JiMzOTtzIGV4cGFuZCB0aGUgc2NvcGUgdG8gaW5jbHVkZSBgVVNCX1NQRUVEVE9VQ0hgLCBgVVNCX0NYQUNSVWAsIGFuZCBgVVNCX1VFQUdMRUFUTWAg4oCTIHRob3NlIGFyZSBhbHNvIFVTQiBBVE0gZHJpdmVycy4gQnV0IGZvciBub3csIGxldCYjMzk7cyBrZWVwIGl0IGZvY3VzZWQgYW5kIGluY2x1ZGUgYFVTQl9BVE1gIGFuZCBgVVNCX1hVU0JBVE1gLgoKSG1tLCBpcyB0aGVyZSBhIGR1bW15IEFUTSBkcml2ZXIgaW4gdGhlIGtlcm5lbD8gVGltZSB0byBzZWFyY2ggdGhlIGtlcm5lbCBhZ2Fpbi4gSSYjMzk7dmUgYmVlbiBoZXJlIGJlZm9yZS4gUmVtZW1iZXIsIGBhdG1fZGV2X3JlZ2lzdGVyYD8gT25seSBgc29sb3MtcGNpYCBhbmQgYHVzYmF0bWAgYXJlIHRoZSBjYWxsZXJzLiBXYWl0LCB3aGF0IGFib3V0IGBkcml2ZXJzL25ldC93YW4vYD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2FuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzQzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoYXQgZGlyZWN0b3J5OgoKKipFeGFtaW5pbmcgdGhlIEV0aGVybmV0IE5ldHdvcmsgRHJpdmVyIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IG5ldHdvcmsgZHJpdmVycyBhbmQgbmF0dXJhbGx5LCBteSBtaW5kIGRyaWZ0cyB0byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYC4gVGhhdCBkaXJlY3RvcnkgaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLCBpc24mIzM5O3QgaXQ/IEl0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggYWxsIHRob3NlIEV0aGVybmV0IGludGVyZmFjZXMgd2UgcmVseSBvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSBydW5uaW5nIHRocm91Z2ggdGhlIHVzdWFsIHN1c3BlY3RzIGluIG15IGhlYWQ6IHRoZSBCcm9hZGNvbXMsIHRoZSBJbnRlbHMsIHRoZSBSZWFsdGVrcywgdGhlIE1lbGxhbm94ZXMg4oCTIGFsbCB0aGUgbWFqb3IgcGxheWVycyBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBkcml2ZXIgbW9kdWxlcyBhcmUgbGlrZWx5IHJlcHJlc2VudGVkIGluIHNvbWUgZmFzaGlvbiB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUuCgpNeSBtaW5kIHN0YXJ0cyB0byBjaHVybiBvbiB0aGUgaW1wbGljYXRpb25zLiBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgc2hlZXIgc2NhbGUgb2YgdGhlIGRyaXZlciBjb2RlIGluIHRoZXJlLiBIb3cgbXVjaCBjb21wbGV4aXR5IGlzIGludm9sdmVkIGluIHN1cHBvcnRpbmcgc28gbWFueSBoYXJkd2FyZSByZXZpc2lvbnMsIGZlYXR1cmUgc2V0cywgYW5kIGRpZmZlcmVudCBjaGlwc2V0cz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhlIHVzdWFsIGNoYWxsZW5nZXM6IGRlYWxpbmcgd2l0aCBpbnRlcnJ1cHQgaGFuZGxpbmcsIERNQSwgTUFDIGFkZHJlc3MgbWFuYWdlbWVudCwgdmFyaW91cyBuZXR3b3JrIHByb3RvY29scyBsYXllcmVkIG9uIHRvcCBvZiB0aGUgcGh5c2ljYWwgbGF5ZXIsIGFuZCB0aGUgaW5ldml0YWJsZSBxdWlya3Mgb2YgZWFjaCBtYW51ZmFjdHVyZXImIzM5O3Mgc2lsaWNvbi4gSSYjMzk7bSBwcm9iYWJseSBzdGFydGluZyB0byBtZW50YWxseSBjYXRhbG9nIHRoZSBjb21tb24gZHJpdmVyIGFyY2hpdGVjdHVyZXMg4oCTIHdoZXRoZXIgd2UmIzM5O3JlIHNlZWluZyBOQVBJIGltcGxlbWVudGF0aW9ucywgdGhlIG9sZGVyIGludGVycnVwdC1kcml2ZW4gbW9kZWxzLCBvciBzb21lIGh5YnJpZCBhcHByb2FjaC4gQWxzbywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gd2l0aGluIHRoZSBkaXJlY3RvcnkuIElzIHRoZXJlIGEgY2xlYXIgc2VwYXJhdGlvbiBiZXR3ZWVuIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlIGFuZCB0aGUgbW9yZSBnZW5lcmljIG5ldHdvcmtpbmcgc3RhY2sgbGF5ZXJzPyBBcmUgdGhlcmUgd2VsbC1kZWZpbmVkIGludGVyZmFjZXMgZm9yIHRoaW5ncyBsaWtlIHBhY2tldCB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbiwgc3RhdGlzdGljcyBnYXRoZXJpbmcsIGFuZCBlcnJvciBoYW5kbGluZz8KCkkgYW0gYWxzbyB3b25kZXJpbmcgd2hhdCBraW5kIG9mIHN0YXRlLW9mLXRoZS1hcnQgZGV2ZWxvcG1lbnRzIG1pZ2h0IGJlIGltcGxlbWVudGVkIGluIHRoZXJlLCBhbmQgdGhlIGltcGxpY2F0aW9uIHRob3NlIG1heSBoYXZlIG9uIHRoZSBvdmVyYWxsIGRyaXZlciBjb2RlIGFuZCB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxNTgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBVE0gRHJpdmVyIERpc2NvdmVyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBBVE0gZHJpdmVyIGNvZGUgYWdhaW4uIEZpcnN0LCBsZXQgbWUgcXVpY2tseSBydWxlIG91dCB0aGUgb2J2aW91czogYG5ldC9hdG0vYC4gQWxyZWFkeSBsb29rZWQgdGhlcmUsIG5vdGhpbmcgbmV3LiBIbW0sIHdhaXQuLi4gYGRyaXZlcnMvYXRtL2AuIFRoYXQgcmluZ3MgYSBiZWxsLiBBaCwgeWVzISBJIHJlbWVtYmVyIHNlZWluZyBgc29sb3MtcGNpLmNgIGFuZCBgc29sb3MtYXR0cmxpc3QuY2AgdGhlcmUuIFRob3NlIHNlZW0gZmFtaWxpYXIuIEFyZSB0aGVyZSAqYW55KiBvdGhlciBBVE0gZHJpdmVycyBsdXJraW5nIGFyb3VuZCBpbiB0aGUga2VybmVsPyBJIGJldHRlciBkbyBhIHRob3JvdWdoIGNoZWNrIG9mIHRoZSBgZHJpdmVycy9hdG0vYCBkaXJlY3RvcnkuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL2F0bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtzb2xvcy1hdHRybGlzdC5jJiMzNDssCiAgICAmIzM0O3NvbG9zLXBjaS5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MDUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgTW9kdWxlIEV2b2x1dGlvbiAtIEEgTm9zdGFsZ2ljIElucXVpcnkqKgoKSG1tLCBub3cgdGhhdCBJJiMzOTttIHdvcmtpbmcgd2l0aCB0aGlzIGtlcm5lbCBjb2RlLCBhIGZhbWlsaWFyIHF1ZXN0aW9uIHBvcHBlZCBpbnRvIG15IGhlYWQuIEl0IGZlZWxzIGxpa2UganVzdCB5ZXN0ZXJkYXkgSSB3YXMgZGVhbGluZyB3aXRoIHRob3NlIG9sZGVyIG1vZHVsZXMg4oCTIGBoZS5jYCwgYGVuaS5jYCwgYHphdG0uY2AsIGBpZHQ3NzI1Mi5jYC4uLiBUaGV5IHdlcmUgcXVpdGUgcHJldmFsZW50IGluIHRoZSBhcmNoaXRlY3R1cmUgYmFjayBpbiB0aGUgZGF5LCB3ZXJlbiYjMzk7dCB0aGV5PyBBbmQgbm93LCB3aGVyZSBoYXZlIHRoZXkgdmFuaXNoZWQgdG8/CgpNeSBmaXJzdCBpbnN0aW5jdCBpcyB0aGF0IHRoZXkmIzM5O3ZlIGxpa2VseSBiZWVuIGRlcHJlY2F0ZWQgYW5kIHJlbW92ZWQgaW4gbW9yZSByZWNlbnQga2VybmVsIGl0ZXJhdGlvbnMsIGFzIGlzIHRoZSBuYXR1cmUgb2YgcHJvZ3Jlc3MuIERldmVsb3BtZW50IG1hcmNoZXMgb24sIGFuZCBzb21ldGltZXMgdGhhdCBtZWFucyBsZWF2aW5nIGNlcnRhaW4gY29tcG9uZW50cyBiZWhpbmQuIFN0aWxsLCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSBkb3VibGUtY2hlY2sgdG8gY29uZmlybS4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGJhc2UgYW5kIHNlZSBpZiB0aGVzZSBvbGQgZnJpZW5kcyBhcmUgc3RpbGwgaGFuZ2luZyBhcm91bmQgc29tZXdoZXJlLCBwZXJoYXBzIGx1cmtpbmcgaW4gc29tZSBvYnNjdXJlIGxlZ2FjeSBzZWN0aW9uLCBvciBtYXliZSB3ZWxsIGFuZCB0cnVseSBnb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjg4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdG1fZGV2X3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9hdG0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jPTEzNDg9c3RhdGljIGludCBhdG1faW5pdChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZSAqcGFyZW50KVxuLS1cbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jLTEzNTgtXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYzoxMzU5Olx0XHRjYXJkLVx1MDAzZWF0bWRldltpXSA9IGF0bV9kZXZfcmVnaXN0ZXIoXCYjMzQ7c29sb3MtcGNpXCYjMzQ7LCBwYXJlbnQsIFx1MDAyNmZwZ2Ffb3BzLCAtMSwgTlVMTCk7XG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzYwLVx0XHRpZiAoIWNhcmQtXHUwMDNlYXRtZGV2W2ldKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODMxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBUaGlua2luZyBvbiB0aGUgRHJpdmVyIFNpdHVhdGlvbioqCgpPa2F5LCBzbyB0aGUgcHJvYmxlbWF0aWMgZHJpdmVycyBhcmUgZ29uZS4gVGhhdCYjMzk7cyBnb29kIHByb2dyZXNzLiBMb29raW5nIGF0IHdoYXQmIzM5O3MgbGVmdCwgaXQgc2VlbXMgbGlrZSBgc29sb3MtcGNpYCBhbmQgYHVzYmF0bWAgYXJlIHRoZSBvbmx5IG9uZXMgc3RhbmRpbmcuIFNpbmNlIGB1c2JhdG1gIGlzIGEgVVNCIGRyaXZlciwgdGhhdCBwcmVzZW50cyBhIGNsZWFyIHBhdGguIFdpdGggc3l6a2FsbGVyJiMzOTtzIFVTQiByYXcgZ2FkZ2V0IGVtdWxhdGlvbiwgZW11bGF0aW5nIGB1c2JhdG1gIHNob3VsZCBiZSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4gU28sIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBVU0JfQVRNYCBhbmQgYFVTQl9YVVNCQVRNYC4gTm93LCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFVTQl9YVVNCQVRNYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBlbmFibGluZyBjb25maWd1cmF0aW9ucyBJIG1pZ2h0IGJlIG1pc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZz02PW1lbnVjb25maWcgVVNCX0FUTVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1VTQiBEU0wgbW9kZW0gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy91c2IvYXRtL0tjb25maWc6ODpcdGRlcGVuZHMgb24gQVRNXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy05LVx0c2VsZWN0IENSQzMyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTgzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipVU0JfWFVTQkFUTSBEZXBlbmRlbmN5IENoZWNrKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHByZXR0eSBzdXJlIGBVU0JfWFVTQkFUTWAgc2hvdWxkIGhhdmUgc29tZSBzb3J0IG9mIGRlcGVuZGVuY3kgc2V0IHVwLCBidXQgdGhlIGJ1aWxkIHN5c3RlbSBpc24mIzM5O3Qgc2NyZWFtaW5nIGF0IG1lLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZSBmb3IgdGhlIFVTQiBBVE0gZHJpdmVycywgd2hpY2ggSSBrbm93IGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvdXNiL2F0bS9LY29uZmlnYC4gSXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBjb25maWd1cmF0aW9ucywgYW5kIGEgcXVpY2sgaW5zcGVjdGlvbiBpcyB1c3VhbGx5IHdvcnRoIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdFx0ICBpbnN0YWxsIGZpcm13YXJlcyBhbmQgQ01WIChDb21tYW5kIE1hbmFnZW1lbnQgVmFyaWFibGVzKTsgc2VlXG4gIDUxOlx0XHQgIFx1MDAzY2h0dHBzOi8vZ25hLm9yZy9wcm9qZWN0cy91ZWFnbGVhdG0vXHUwMDNlIGZvciBkZXRhaWxzLlxuICA1MjpcdFxuICA1MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgNTQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVlYWdsZS1hdG0uXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIFVTQl9YVVNCQVRNXG4gIDU3Olx0XHR0cmlzdGF0ZSBcJiMzNDtPdGhlciBVU0IgRFNMIG1vZGVtIHN1cHBvcnRcJiMzNDtcbiAgNTg6XHRcdGhlbHBcbiAgNTk6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIERTTCBVU0IgbW9kZW0gbm90IGV4cGxpY2l0bHkgc3VwcG9ydGVkIGJ5XG4gIDYwOlx0XHQgIGFub3RoZXIgVVNCIERTTCBkcml2ZXJzLiAgSW4gb3JkZXIgdG8gdXNlIHlvdXIgbW9kZW0geW91IHdpbGwgbmVlZCB0b1xuICA2MTpcdFx0ICBwYXNzIHRoZSB2ZW5kb3IgSUQsIHByb2R1Y3QgSUQsIGFuZCBlbmRwb2ludCBudW1iZXJzIGZvciB0cmFuc21pc3Npb25cbiAgNjI6XHRcdCAgYW5kIHJlY2VwdGlvbiBhcyBtb2R1bGUgcGFyYW1ldGVycy4gIFlvdSBtYXkgbmVlZCB0byBpbml0aWFsaXplXG4gIDYzOlx0XHQgIHRoZSBtb2RlbSB1c2luZyBhIHVzZXIgc3BhY2UgdXRpbGl0eSAoYSBmaXJtd2FyZSBsb2FkZXIgZm9yIGV4YW1wbGUpLlxuICA2NDpcdFxuICA2NTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgNjY6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHh1c2JhdG0uXG4gIDY3Olx0XG4gIDY4Olx0ZW5kaWYgIyBVU0JfQVRNXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Njc2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFUTSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBlbmFibGluZyBBVE0gZnVuY3Rpb25hbGl0eSBpbiB0aGlzIHN5c3RlbSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGtleSBpcyB3aXRoaW4gdGhlIGBpZiBVU0JfQVRNYCBibG9jay4gVGhpcyB0ZWxscyBtZSB0aGUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGVuYWJsZSBhcmUgYEFUTWAsIGBVU0JfQVRNYCwgYW5kIGBVU0JfWFVTQkFUTWAuIFN0cmFpZ2h0Zm9yd2FyZCwgcmlnaHQ/IEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgaGF2ZSBhIG5hZ2dpbmcgZmVlbGluZy4gYFVTQl9BVE1gIGRlZmluaXRlbHkgZGVwZW5kcyBvbiBgQVRNYCwgdGhhdCBtdWNoIEkgcmVtZW1iZXIsIGJ1dCB3aGF0IGFib3V0IGBVU0JgIGl0c2VsZj8gSXMgYFVTQl9BVE1gIGNvbnRpbmdlbnQgb24gdGhlIGdlbmVyYWwgVVNCIHN1YnN5c3RlbSBiZWluZyBlbmFibGVkIHRvbz8gSSBkb24mIzM5O3Qgd2FudCB0byBhc3N1bWUgYW55dGhpbmcgYW5kIGVuZCB1cCB3aXRoIGEgYnJva2VuIGNvbmZpZ3VyYXRpb24uIEJldHRlciBzYWZlIHRoYW4gc29ycnkg4oCTIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBgZHJpdmVycy91c2IvYXRtL2AuIExldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwgaGVyZSBiZWZvcmUgSSBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIFVTQi9BVE0gRFNMIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBVU0JfQVRNXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgRFNMIG1vZGVtIHN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gQVRNXG4gICA5Olx0XHRzZWxlY3QgQ1JDMzJcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgVVNCIERpZ2l0YWwgU3Vic2NyaWJlciBMaW5lIChEU0wpXG4gIDEyOlx0XHQgIG1vZGVtIHRvIHlvdXIgY29tcHV0ZXImIzM5O3MgVVNCIHBvcnQuICBZb3Ugd2lsbCB0aGVuIG5lZWQgdG8gY2hvb3NlIHlvdXJcbiAgMTM6XHRcdCAgbW9kZW0gZnJvbSB0aGUgbGlzdCBiZWxvdy5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDE2Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JhdG0uXG4gIDE3Olx0XG4gIDE4Olx0aWYgVVNCX0FUTVxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBVU0JfU1BFRURUT1VDSFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjIwMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgVVNCIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYW5kIGl0ICpzZWVtcyogbGlrZSB0aGVyZSBpc24mIzM5O3QgYSBkaXJlY3QgZXhwbGljaXQgZGVwZW5kZW5jeSBvbiBgVVNCYCBkZWZpbmVkIGhlcmUuIEhvd2V2ZXIsIGJhc2VkIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyBjb2RlLCBpdCYjMzk7cyBoaWdobHkgbGlrZWx5IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgdWx0aW1hdGVseSBzb3VyY2VkIGZyb20gc29tZXRoaW5nIHdpdGhpbiB0aGUgYGRyaXZlcnMvdXNiL0tjb25maWdgIGZpbGUuIEFuZCwgaWYgSSYjMzk7bSBiZXR0aW5nIGNvcnJlY3RseSwgdGhhdCBmaWxlIGlzIGdvaW5nIHRvIGhhdmUgc29tZSBndWFyZHMgbGlrZSBgaWYgVVNCX1NVUFBPUlRgIG9yIHBlcmhhcHMganVzdCBgaWYgVVNCYCBzdXJyb3VuZGluZyB0aGUgcmVsZXZhbnQgc2VjdGlvbnMuIFRvIGJlIGNlcnRhaW4sIEkgbmVlZCB0byBvcGVuIGFuZCBpbnZlc3RpZ2F0ZSBgZHJpdmVycy91c2IvS2NvbmZpZ2AgZGlyZWN0bHkuIExldCYjMzk7cyBnZXQgdGhhdCBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjk2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWdcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL0tjb25maWc9MTQ4PXNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9taXNjL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvdXNiL0tjb25maWctMTQ5LVxuZHJpdmVycy91c2IvS2NvbmZpZzoxNTA6c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3VzYi9LY29uZmlnLTE1MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVVNCLCBBVE0sIGFuZCB0aGUgUFZDIENvbm5lY3Rpb246IEEgRnV6emluZyBEZWVwIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCB0aGlzIFVTQiBzdHVmZiBzb3J0ZWQgZm9yIHN5emthbGxlci4gU2VlbXMgbGlrZSBVU0IgaXMgYSBjb3JlIHJlcXVpcmVtZW50IGZvciBmdXp6aW5nIFVTQiBnYWRnZXRzLCBuYXR1cmFsbHkuIEkgcmVtZW1iZXIgc2VlaW5nIGBBVE1gLCBgVVNCX0FUTWAsIGFuZCBgVVNCX1hVU0JBVE1gIGluIHRoZSBjb25maWdzLCBidXQgbGV0JiMzOTtzIHNlZS4uLnJpZ2h0LCBgQVRNYCBpcyB0aGUgYmlnIG9uZSBoZXJlLiBOb3csIGNhbiBJIHJlYWNoIGB2Y2NfY29ubmVjdGA/IExldCYjMzk7cyBzZWUuLi4gWWVwLCBsb29rcyBsaWtlIEkgY2FuIGdldCB0aGVyZSB2aWEgYHNvY2tldChBRl9BVE1QVkMsIFNPQ0tfREdSQU0sIDApYCBhbmQgYSBgYmluZCgpYC4gCgpBbHJpZ2h0LCBzbyB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGB2Y2NfY29ubmVjdGAsIGBwdmNfYmluZGAsIGFuZCBgcHZjX2Nvbm5lY3RgLiBIYW5nIG9uLCBhcmVuJiMzOTt0IGBwdmNfYmluZGAgYW5kIGBwdmNfY29ubmVjdGAgc3RhdGljIGZ1bmN0aW9ucz8gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQuIEFyZSB0aGV5IGlubGluZWQgYnkgYW55IGNoYW5jZT8gVGltZSB0byBqdW1wIGludG8gYG5ldC9hdG0vcHZjLmNgIGFuZCB0YWtlIGEgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHZjX2JpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL3B2Yy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vcHZjLmM9MjI9c3RhdGljIGludCBwdmNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcbi0tXG5uZXQvYXRtL3B2Yy5jLTI2LVxubmV0L2F0bS9wdmMuYzoyNzpzdGF0aWMgaW50IHB2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcbm5ldC9hdG0vcHZjLmMtMjgtXHRcdCAgICBpbnQgc29ja2FkZHJfbGVuKVxuLS1cbm5ldC9hdG0vcHZjLmM9NTk9c3RhdGljIGludCBwdmNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqc29ja2FkZHIsXG4tLVxubmV0L2F0bS9wdmMuYy02MS17XG5uZXQvYXRtL3B2Yy5jOjYyOlx0cmV0dXJuIHB2Y19iaW5kKHNvY2ssIHNvY2thZGRyLCBzb2NrYWRkcl9sZW4pO1xubmV0L2F0bS9wdmMuYy02My19XG4tLVxubmV0L2F0bS9wdmMuYz0xMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHZjX3Byb3RvX29wcyA9IHtcbi0tXG5uZXQvYXRtL3B2Yy5jLTExMC1cdC5yZWxlYXNlID1cdHZjY19yZWxlYXNlLFxubmV0L2F0bS9wdmMuYzoxMTE6XHQuYmluZCA9XHRcdHB2Y19iaW5kLFxubmV0L2F0bS9wdmMuYy0xMTItXHQuY29ubmVjdCA9XHRwdmNfY29ubmVjdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyMzAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEFUTSBQVkMgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBpbXBvcnRhbnQgcGFydCBoZXJlIGlzIGhvdyB0aGlzIGNoYW5nZSBhZmZlY3RzIHRoZSBBVE0gUFZDIGNvZGUgcGF0aC4gSSBzZWUgdGhlc2UgbmV3IGZ1bmN0aW9ucyBhcmUgYXNzaWduZWQgdG8gYHB2Y19wcm90b19vcHNgIGFuZCB0aGVpciBhZGRyZXNzZXMgYXJlIGJlaW5nIHRha2VuLCBtZWFuaW5nIHRoZXkgd29uJiMzOTt0IGJlIGlubGluZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrZWVwIGluIG1pbmQgZm9yIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLgoKVGhlIGtleSBmb2N1cyBoZXJlIGlzIGxpa2VseSB0aGUgYHZjY19jb25uZWN0YCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgYW4gZXhwb3J0ZWQgZ2xvYmFsIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgYW5hbHlzaXMuIFdlJiMzOTtyZSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBmb2N1cyBzeW1ib2wgZm9yIHRlc3RpbmcgdGhlIGNoYW5nZXMgdG8gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgLiBJIGNoZWNrZWQsIGFuZCBgZmluZF9jaWAgaXMgc3RhdGljLCBhbmQgc28gaXMgYF9fdmNjX2Nvbm5lY3RgLCBzbyBgdmNjX2Nvbm5lY3RgIGlzIGluZGVlZCB0aGUgYmVzdCBwbGFjZSB0byBjb25jZW50cmF0ZSBvdXIgZWZmb3J0cy4KCkhlcmUmIzM5O3MgdGhlIGdpc3Q6IHRoZSBwYXRjaCBhbHRlcnMgYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgLiBJdCYjMzk7cyBmaXhpbmcgYSBidWcgd2hlcmUgc3BlY2lmaWMgdmFsdWVzIGZvciBgdnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgKHNwZWNpZmljYWxseSwgYEFUTV9DSV9NQVhgKSBjYW4gbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3IuCgpOb3csIHdlIGtub3cgdGhhdCB1c2VyLXNwYWNlIGNvZGUgY2FuIGhpdCB0aGlzIGFyZWEgdmlhIGBiaW5kYCBvciBgY29ubmVjdGAgb24gYW4gQVRNIFBWQyBzb2NrZXQuIFRvIHRyaWdnZXIgdGhpcywgd2UmIzM5O2xsIG5lZWQgYW4gQVRNIGRldmljZSwgb2YgY291cnNlLiBUaGUgZ29vZCBuZXdzIGlzIHRoYXQgU3l6a2FsbGVyIGNhbiBlbXVsYXRlIFVTQiBBVE0gZGV2aWNlcyB1c2luZyB0aGUgVVNCIGdhZGdldCBhbmQgYHVzYmF0bWAgZHJpdmVyLiBUaGF0JiMzOTtzIHBlcmZlY3QgZm9yIGNyZWF0aW5nIGEgY29udHJvbGxlZCBlbnZpcm9ubWVudC4gVGhlIGNvbmZpZ3VyYXRpb24gbmVlZHMgdG8gZW5hYmxlIGBBVE1gLCBgVVNCX0FUTWAsIGFuZCBgVVNCX1hVU0JBVE1gLgoKRm9yIHRoZSBmdXp6aW5nL3Rlc3RpbmcgZm9jdXMsIGB2Y2NfY29ubmVjdGAsIGBwdmNfYmluZGAsIGFuZCBgcHZjX2Nvbm5lY3RgIGFyZSB0aGUgcHJpbWFyeSBzeW1ib2xzIEkmIzM5O2xsIGNvbmNlbnRyYXRlIG9uLgoKV2FpdCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIFdoYXQgYWJvdXQgYEFUTV9CUjI2ODRgPyBEb2VzIGl0IGludGVyYWN0IHdpdGggYHZjY19jb25uZWN0YD8gSSYjMzk7ZCBiZXR0ZXIgaW52ZXN0aWdhdGUgYG5ldC9hdG0vYnIyNjg0LmNgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgY2FsbCBjaGFpbiB0aGVyZS4gVGhpcyBjb3VsZCBiZSBhIGdvb2QgYXJlYSB0byBleHBhbmQgb24gdGhlIHRlc3QgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmNjX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL2JyMjY4NC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDc0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkEgUXVpY2sgVGVjaG5pY2FsIEZsaWNrZXIqKgoKSG1tLCBqdXN0Li4uIG5vLiBTb21ldGhpbmcmIzM5O3Mgbm90IHF1aXRlIGNsaWNraW5nLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYXNoZXMgdG8gdGhlIEFUTSBsYXllciwgc3BlY2lmaWNhbGx5IHRoZSBQUFBvQS9QUFBvRSBpbXBsZW1lbnRhdGlvbi4gSXMgdGhlcmUgc29tZXRoaW5nIGluIGBuZXQvYXRtL3BwcG9hdG0uY2AgdGhhdCBjb3VsZCBiZSByZWxhdGVkPyBJdCYjMzk7cyBhIHF1aWNrIHRob3VnaHQsIGEgZmxlZXRpbmcgcG9zc2liaWxpdHksIHNvbWV0aGluZyB0byBjaGVjayBvdXQgaWYgdGhlIGluaXRpYWwgYXZlbnVlcyBkb24mIzM5O3QgYmVhciBmcnVpdC4gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFuZCBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiB3aXRoaW4gdGhhdCBmaWxlLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgYW5hbHl6ZSB0aGUgbWFpbiBpc3N1ZSBmaXJzdC4gTGV0IG1lIGZvbGxvdyBhIHN0cnVjdHVyZWQgYXBwcm9hY2ggdG8gcHJldmVudCB3YXN0ZWQgZWZmb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y2NfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vcHBwb2F0bS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MjgxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIGhpZ2hseSBrbm93bGVkZ2VhYmxlIHByb2Zlc3Npb25hbDoKCioqRGlnZ2luZyBpbnRvIHRoZSBDYWxsIEhpZXJhcmNoeSoqCgpSaWdodCwgc28gd2UmIzM5O3ZlIGVzdGFibGlzaGVkIHRoYXQgdGhlcmUmIzM5O3Mgbm8gb3RoZXIgZGlyZWN0IGNhbGwgdG8gYHZjY19jb25uZWN0YC4gVGhpcyBpcyBnb29kLCB3ZSYjMzk7cmUgbmFycm93aW5nIGl0IGRvd24uCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIG9mIHRoaXMuIFRoZSBnb2FsIGlzIHRvIGNvbmNsdXNpdmVseSB2ZXJpZnkgdGhhdCB0aGUgYHB2Yy5jYCBtb2R1bGUgaXMgdGhlICpvbmx5KiBwbGFjZSBjYWxsaW5nIGB2Y2NfY29ubmVjdGAuIFdlIG5lZWQgdG8gYmUgYWlydGlnaHQgb24gdGhpcyBwb2ludCBiZWZvcmUgd2UgcHJvY2VlZCB3aXRoIGFueSBhbmFseXNpcyBvciBtb2RpZmljYXRpb25zLiBUaW1lIGZvciBhIGRlZXAgZGl2ZSB0byBlbnN1cmUgdGhlcmUgYXJlICpubyogaGlkZGVuIGNhbGwgcGF0aHMgd2UmIzM5O3ZlIG92ZXJsb29rZWQuIEkgbmVlZCB0byBiZSAxMDAlIGNlcnRhaW4gb2YgdGhpcywgc28gbGV0JiMzOTtzIGNyb3NzLXJlZmVyZW5jZSBhbmQgZG91YmxlLWNoZWNrIGFueSBzZWNvbmRhcnkgcG90ZW50aWFsIGxvY2F0aW9ucyB0byBmaW5kIGEgbW9yZSByb2J1c3QgY29uY2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdmNjX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vY29tbW9uLmM9MzMwPXN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcbi0tXG5uZXQvYXRtL2NvbW1vbi5jLTM3Ny1cbm5ldC9hdG0vY29tbW9uLmM6Mzc4OnN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXG5uZXQvYXRtL2NvbW1vbi5jLTM3OS1cdFx0XHQgaW50IHZjaSlcbi0tXG5uZXQvYXRtL2NvbW1vbi5jPTQ1OD1pbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKVxuLS1cbm5ldC9hdG0vY29tbW9uLmMtNTA1LVx0XHRyZXR1cm4gLUVOT0RFVjtcbm5ldC9hdG0vY29tbW9uLmM6NTA2Olx0ZXJyb3IgPSBfX3ZjY19jb25uZWN0KHZjYywgZGV2LCB2cGksIHZjaSk7XG5uZXQvYXRtL2NvbW1vbi5jLTUwNy1cdGlmIChlcnJvcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NzIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBSZWFzb25pbmcqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBBVE0gZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBmdXp6aW5nIHRhcmdldHMuIFRoZSBrZXkgaGVyZSBpcyBkZWZpbml0ZWx5IGB2Y2NfY29ubmVjdGAuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuCgpCdXQsIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gQXJlIHRoZXJlICphbnkqIG90aGVyIGNvbmZpZ3VyYXRpb25zIEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmc/IExldCYjMzk7cyBzZWUuLi4gYE5FVGAgaXMgYSBnaXZlbiwgYSBuby1icmFpbmVyLiBUaGUgY29yZSBBVE0gY29uZmlndXJhdGlvbiwgYEFUTWAsIGlzIGNydWNpYWwuIEFuZCB0aGVuIHdlIGhhdmUgdGhvc2UgYFVTQl9BVE1gIGFuZCBgVVNCX1hVU0JBVE1gIG9wdGlvbnMuIFRob3NlIHNlZW0gcmVsYXRlZCB0byB0aGUgZHVtbXkgZGV2aWNlIHNldHVwLgoKV2FpdCBhIHNlY29uZC4uLiBgVVNCX1hVU0JBVE1gLiBUaGF0JiMzOTtzIGEgKm1vZHVsZSosIHJpZ2h0PyBJZiBpdCYjMzk7cyBidWlsdC1pbiwgd2hpY2ggSSBuZWVkIHRvIGNoZWNrLCB0aGUgZHJpdmVyIHdvdWxkIHJlZ2lzdGVyIGl0c2VsZiBhdXRvbWF0aWNhbGx5LiBJZiBzeXprYWxsZXIgaXMgZnV6emluZyBVU0IsIGl0IHNob3VsZCBwcm9iZSBgeHVzYmF0bWAgYW5kLCBiaW5nbywgY3JlYXRlIGFuIEFUTSBkZXZpY2UgZm9yIG1lLiBUaGF0JiMzOTtzIGdvb2QgbmV3cyBhbmQgcG90ZW50aWFsbHkgc2ltcGxpZmllcyB0aGluZ3MuCgpOb3csIGEgYnJvYWRlciBxdWVzdGlvbjogaXMgYHh1c2JhdG1gIHRoZSAqYmVzdCogQVRNIGRyaXZlciB0byB1c2UsIG9yIGlzIHRoZXJlIGEgc2ltcGxlciBvbmU/IFBlcmhhcHMgc29tZXRoaW5nIGluIGBuZXQvYXRtL2AgbWlnaHQgb2ZmZXIgYSBsb3dlci1sZXZlbCBlbnRyeSBwb2ludCB0aGF0IHdvdWxkIGJlIGVhc2llciB0byBpbnRlcmFjdCB3aXRoPyBMZXQmIzM5O3MgZGlnIGludG8gYG5ldC9hdG0vYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgdXNlcyBgYXRtX2Rldl9yZWdpc3RlcmAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBhdmFpbGFibGUgZHJpdmVycyBhbmQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0bV9kZXZfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYXRtL3Jlc291cmNlcy5jPTY5PUVYUE9SVF9TWU1CT0woYXRtX2Rldl9sb29rdXApO1xubmV0L2F0bS9yZXNvdXJjZXMuYy03MC1cbm5ldC9hdG0vcmVzb3VyY2VzLmM6NzE6c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxubmV0L2F0bS9yZXNvdXJjZXMuYy03Mi1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYXRtZGV2X29wcyAqb3BzLCBpbnQgbnVtYmVyLFxuLS1cbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMxLX1cbm5ldC9hdG0vcmVzb3VyY2VzLmM6MTMyOkVYUE9SVF9TWU1CT0woYXRtX2Rldl9yZWdpc3Rlcik7XG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDE0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJvdWJsZXNob290aW5nIEFUTSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBubyBsb29wYmFjayBkZXZpY2UuIFRoYXQgZWxpbWluYXRlcyBhIGNvbW1vbiwgYW5kIG9mdGVuIGVhc2llc3QsIHRlc3RpbmcgcGF0aC4gQ29uc2lkZXJpbmcgdGhlIGxpbWl0YXRpb25zLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGZvY3VzIG9uIGBVU0JfQVRNYC4gSXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgcHJvdmlkaW5nIGEgdXNhYmxlIGludGVyZmFjZSwgZ2l2ZW4gdGhlIGNvbnRleHQuCgpIb3dldmVyLCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwbHkgaW50byB0aGUgYFVTQl9BVE1gIGltcGxlbWVudGF0aW9uLCBJIHNob3VsZCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSBuZWVkIHRvIHJ1bGUgb3V0IGEgcG90ZW50aWFsIG92ZXJzaWdodCBvbiBteSBwYXJ0LCBvciBhIHN1YnRsZSBkaWZmZXJlbmNlIGluIHRoZSB0YXJnZXQgc3lzdGVtLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBBVE1fRFVNTVlgIGp1c3QgdG8gYmUgY2VydGFpbi4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0IGVpdGhlciBkb2VzbiYjMzk7dCBleGlzdCBhdCBhbGwsIG9yIHBlcmhhcHMgaXMgcHJlc2VudCBidXQgaW4gc29tZSBvdGhlciBzZWN0aW9uIG9mIHRoZSBrZXJuZWwgdHJlZSB0aGF0IEkgaGF2ZW4mIzM5O3QgeWV0IGNvbnNpZGVyZWQuIFRoaXMgcXVpY2sgc2VhcmNoIHdpbGwgcHJldmVudCBtZSBmcm9tIG1ha2luZyBhbnkgYXNzdW1wdGlvbnMsIG9yIGRvaW5nIGEgYnVuY2ggb2Ygd29yaywgdGhhdCB1bHRpbWF0ZWx5IHdpbmRzIHVwIGJlaW5nIHJlZHVuZGFudC4gSXQmIzM5O3MgYWJvdXQgYmVpbmcgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTA4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FUTV9EVU1NWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTA5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcwMgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBOZWdhdGlvbiBhbmQgYSBQaXZvdGFsIFF1ZXJ5KioKCk15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyBhIGZsYXQgJiMzNDtOby4mIzM0OyBJJiMzOTttIG1lbnRhbGx5IHB1c2hpbmcgYmFjayBhZ2FpbnN0IHNvbWV0aGluZywgd2hhdGV2ZXIgdGhlIGltcGxpZWQgcHJvcG9zaXRpb24gb3IgbGluZSBvZiByZWFzb25pbmcgd2FzLiBJdCYjMzk7cyBhIGd1dCByZXNwb25zZSwgbGlrZWx5IHJvb3RlZCBpbiBleHBlcmllbmNlLiBJJiMzOTttIHNlZWluZyBhIHBvdGVudGlhbCBmbGF3IG9yIHByb2JsZW0sIHBvc3NpYmx5IGEga25vd24gcGl0ZmFsbCB0aGF0IHRoZSBjdXJyZW50IHRyYWluIG9mIHRob3VnaHQgaXMgbWlzc2luZy4KClRoZW4sIGFsbW9zdCBpbW1lZGlhdGVseSwgYSBjcnVjaWFsIGNvdW50ZXItY29uc2lkZXJhdGlvbiBzdXJmYWNlczogJiMzNDtXaGF0IGFib3V0IGBEVU1NWV9BVE1gPyYjMzQ7IFRoaXMgaXNuJiMzOTt0IGp1c3QgYSByYW5kb20gdGhvdWdodDsgaXQmIzM5O3MgYSBzcGVjaWZpYywgdGVjaG5pY2FsIHF1ZXN0aW9uLiBUaGUgZm9jdXMgb24gYERVTU1ZX0FUTWAgaXMgYSB2ZXJ5IHNwZWNpZmljIGNvbmNlcHQgcmVsYXRlZCB0byBhIHBvdGVudGlhbCBwcm9jZXNzLiBJJiMzOTttIHByb2JpbmcgZm9yIGFuIGVkZ2UgY2FzZSwgYSBwb3RlbnRpYWwgYWx0ZXJuYXRpdmUgc29sdXRpb24sIG9yIGEgY3JpdGljYWwgcG9pbnQgdGhhdCBoYXNuJiMzOTt0IGJlZW4gYWRlcXVhdGVseSBhZGRyZXNzZWQuIEkgc2VlIHRoZSBuZWVkIHRvIGV4YW1pbmUgdGhlIGltcGxpY2F0aW9ucyB0aGF0IHRoaXMgY29uY2VwdCBjb3VsZCBwcm92aWRlLiBJdCBoaW50cyBhdCBhIHZlcnkgc3BlY2lmaWMgZGlyZWN0aW9uIHRvIHB1cnN1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RFVNTVlfQVRNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5OTcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW1tZWRpYXRlIFRob3VnaHRzIG9uIEFUTSBVU0IgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgbm8sIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzLiBSaWdodCwgc28gYEFUTWAsIGBVU0JfQVRNYCwgYW5kIGBVU0JfWFVTQkFUTWAgYXJlIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBIYW5nIG9uIGEgc2Vjb25kLCB0aG91Z2gsIGJlY2F1c2UgYFVTQl9YVVNCQVRNYCBpcyAqZGVwZW5kZW50KiBvbiBgVVNCX0FUTWAuIEhtbSwgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgZHJpdmVycy91c2IvYXRtL0tjb25maWdgIGZpbGUgYWdhaW4gdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoYXQgZGVwZW5kZW5jeS4gR290dGEgYmUgcHJlY2lzZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9YVVNCQVRNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvYXRtL0tjb25maWc9NDQ9Y29uZmlnIFVTQl9VRUFHTEVBVE1cbi0tXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy01NS1cbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjU2OmNvbmZpZyBVU0JfWFVTQkFUTVxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNTctXHR0cmlzdGF0ZSBcJiMzNDtPdGhlciBVU0IgRFNMIG1vZGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjYzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQVRNIFVTQiBDb25maWd1cmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBmb2N1cyBvbiBoZXJlIGlzIGBVU0JfWFVTQkFUTWAuIExldCYjMzk7cyByZS1leGFtaW5lIHRoaXMgcGF0Y2guCgpgYGBjCiAJaW50IGVycjsKJiM0MzsJaW50IHZwaV9iaXRzID0gdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZwaV9iaXRzID09IEFUTV9DSV9NQVggPyA4IDoKJiM0MzsJCSAgICAgICB2Y2MtJmd0O2Rldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHM7CiYjNDM7CWludCB2Y2lfYml0cyA9IHZjYy0mZ3Q7ZGV2LSZndDtjaV9yYW5nZS52Y2lfYml0cyA9PSBBVE1fQ0lfTUFYID8gMTYgOgomIzQzOwkJICAgICAgIHZjYy0mZ3Q7ZGV2LSZndDtjaV9yYW5nZS52Y2lfYml0czsKYGBgCgpSaWdodCwgdGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgc2VlbXMgdG8gYmUgdGhlcmUgdG8gcHJldmVudCBhbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIG91dC1vZi1ib3VuZHMgc2hpZnRzIG9yIGluZmluaXRlIGxvb3BzIGlmIGB2cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBoYXBwZW4gdG8gZXF1YWwgYEFUTV9DSV9NQVhgLCB3aGljaCBhcHBlYXJzIHRvIGJlIC0xLCBidXQgbGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgZnV6emluZzsgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHBvdGVudGlhbGx5IGV4cG9zZSBzb21lIHN1YnRsZSBpc3N1ZXMuCgpUaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSwgYXMgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBvciBpbnRlcmVzdGluZyBsb2NhdGlvbnMgZm9yIGZ1enppbmcsIGFyZSBgdmNjX2Nvbm5lY3RgLCBgcHZjX2JpbmRgLCBhbmQgYHB2Y19jb25uZWN0YC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgdGhpcyBraW5kIG9mIGNvbm5lY3Rpb24tb3JpZW50ZWQgc3R1ZmYuCgpOb3csIHJlZ2FyZGluZyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBJIGtub3cgSSBuZWVkIGBBVE1gLCBgVVNCX0FUTWAsIGFuZCB0aGUgdGFyZ2V0IGBVU0JfWFVTQkFUTWAuIExldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIG9yIG5vdCBgVVNCX1hVU0JBVE1gIHJlcXVpcmVzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBVU0JfWFVTQkFUTWAgaXMgbmVzdGVkIGluc2lkZSBhbiBgaWYgVVNCX0FUTWAgY29uZGl0aW9uLCBhbmQgYFVTQl9BVE1gIGl0c2VsZiBkZXBlbmRzIG9uIGBBVE1gLiBUaGF0JiMzOTtzIGdvb2Q7IGl0JiMzOTtzIGNsZWFuIGFuZCBtYWtlcyBzZW5zZS4gU28sIHllcywgYEFUTWAsIGBVU0JfQVRNYCwgYW5kIGBVU0JfWFVTQkFUTWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZW5hYmxlIGl0LgoKSG9sZCBvbiwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBhYm91dCBgQVRNX0NJX01BWGAuIFdlIGtub3cgaXQgX3Byb2JhYmx5XyBtZWFucyAtMSwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBjb25maXJtLiBJIHNob3VsZCBjaGVjayB0aGUgYGluY2x1ZGUvbGludXgvYXRtLmhgIGZpbGUgZm9yIGl0cyBkZWZpbml0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgZXhhY3RseSB3aGF0IHZhbHVlIGl0IHJlcHJlc2VudHMgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBVE1fQ0lfTUFYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9hdG0uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTE0OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gQVRNIEhlYWRlciBGaWxlcyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBzb21ldGhpbmcgbWlnaHQgYmUgYW1pc3Mgd2l0aCB0aGUgQVRNIGxheWVyLCBzbyBsZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGluY2x1ZGUvdWFwaS9saW51eC9hdG0uaGAuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgdGhlIGRlZmluaXRpb25zIHRoYXQgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gSSB3YW50IHRvIGNoZWNrIHRoZSBkZWZpbml0aW9ucywgYW5kIGRhdGEgc2l6ZXMsIGFuZCBlbnN1cmUgdGhlcmUmIzM5O3Mgbm90aGluZyBpbW1lZGlhdGVseSBzdXNwZWN0IGluIGhvdyB0aGV5JiMzOTtyZSBkZWNsYXJlZCwgb3IgYW55IHBvdGVudGlhbCBvZmYtYnktb25lIGVycm9ycyBJIG1pZ2h0IGhhdmUgb3Zlcmxvb2tlZCBpbiB0aGUgcGFzdC4gSXQgd2lsbCBhbHNvIGFjdCBhcyBhIGdvb2QgcmVmcmVzaGVyIG9uIHRoZSBrZXJuZWwtc3BhY2UgQUJJLCBhcyBpdCYjMzk7cyBiZWVuIGEgd2hpbGUgc2luY2UgSSBsYXN0IGRlYWx0IHdpdGggdGhpcyBzcGVjaWZpYyBhcmVhLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGluZ3MgbGlrZSBhbGlnbm1lbnQsIGVuZGlhbm5lc3MgY29uc2lkZXJhdGlvbnMgKHRob3VnaCB1c3VhbGx5IHRoZSBVQVBJIGhhbmRsZXMgdGhhdCBwcmV0dHkgd2VsbCksIGFuZCBhbnkgcmVjZW50IGNoYW5nZXMgdGhhdCBjb3VsZCBoYXZlIGludHJvZHVjZWQgYSByZWdyZXNzaW9uLiBUaGlzIGhlYWRlciBpcyB0aGUgbHluY2hwaW4gZm9yIGFueSB1c2VyLXNwYWNlIEFUTSBpbnRlcmFjdGlvbnMsIHNvIGl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHBva2luZyBhcm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FUTV9DSV9NQVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYXRtLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE0NTUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqV2hlcmUgRGlkIEkgRGVmaW5lIFRoYXQgRGFybmVkIExpbWl0PyoqCgpPa2F5LCBzbyBJJiMzOTttIGhpdHRpbmcgYSBzbmFnLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJiMzOTt2ZSBydW4gaW50byBgQVRNX0NJX01BWGAuIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyBpbnRvIHNlYXJjaCBtb2RlLiBXaGVyZSBpbiB0aGUgd29ybGQgKmRpZCogSSBkZWZpbmUgdGhpcyBjb25zdGFudD8gSXMgaXQgaW4gYSBoZWFkZXIgZmlsZT8gTWF5YmUgaXQmIzM5O3MgZGVmaW5lZCBpbmxpbmUgc29tZXdoZXJlLCB3aGljaCB3b3VsZCBiZSBpbmNyZWRpYmx5IGFubm95aW5nLCBidXQgSSBuZWVkIHRvIHJ1bGUgdGhhdCBvdXQuIExldCBtZSByZXRyYWNlIG15IHN0ZXBzLCBjaGVja2luZyB0aGUgb2J2aW91cyBsb2NhdGlvbnMgZmlyc3Q6IHRoZSBwcm9qZWN0JiMzOTtzIGhlYWRlciBmaWxlcywgYW55IGNvbmZpZ3VyYXRpb24gZmlsZXMgSSB3YXMgd29ya2luZyBvbiwgYW5kIGRlZmluaXRlbHkgYW55IHJlbGV2YW50IHV0aWxpdHkgb3IgbGlicmFyeSBmaWxlcy4gUGVyaGFwcyBJIGRlZmluZWQgaXQgaW4gYW5vdGhlciBmdW5jdGlvbj8gT3IgaXMgdGhpcyBjb25zdGFudCBldmVuIG15IGRvaW5nPyBEaWQgYW5vdGhlciBkZXZlbG9wZXIgc2V0IHRoaXMgY29uc3RhbnQgaW4gYW5vdGhlciBmaWxlIHRoYXQgSSYjMzk7bSBzdXBwb3NlZCB0byBrbm93IGFib3V0PyBJdCBjb3VsZCBiZSBpbiBhIHNoYXJlZCBpbmNsdWRlIGZpbGUgb3IgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRoYXQgSSYjMzk7dmUgY29tcGxldGVseSBvdmVybG9va2VkLiBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGhvdXQga25vd2luZyB0aGUgY29udGV4dCBvZiB0aGlzIHZhbHVlLCBob3cgaXQmIzM5O3MgZGVmaW5lZCwgYW5kIHdoYXQgaXQgcmVwcmVzZW50cy4gVGhpcyBjb3VsZCBiZSBhIHNpbXBsZSBvdmVyc2lnaHQsIGJ1dCBpdCBjb3VsZCBiZSBhIGNsdWUgdG8gc29tZXRoaW5nIGJpZ2dlci4gR290dGEgdHJhY2sgaXQgZG93bi4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVRNX0NJX01BWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaD0xMzg9c3RydWN0IGF0bV9pb2J1ZiB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oLTE0NC1cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaDoxNDU6I2RlZmluZSBBVE1fQ0lfTUFYICAgICAgLTEgICAgICAgICAgICAgIC8qIHVzZSBtYXhpbXVtIHJhbmdlIG9mIFZQSS9WQ0kgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaC0xNDYtIFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oPTE0Nz1zdHJ1Y3QgYXRtX2NpcmFuZ2Uge1xuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oOjE0ODpcdHNpZ25lZCBjaGFyXHR2cGlfYml0cztcdC8qIDEuLjgsIEFUTV9DSV9NQVggKC0xKSBmb3IgbWF4aW11bSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oOjE0OTpcdHNpZ25lZCBjaGFyXHR2Y2lfYml0cztcdC8qIDEuLjE2LCBBVE1fQ0lfTUFYICgtMSkgZm9yIG1heGltdW0gKi9cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaC0xNTAtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTc2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQVRNIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY2FsY3VsYXRpb24gaXMgY29uZmlybWluZyB0aGUgYmFzZWxpbmUsIHRoZSByZXN1bHQgaXMgaW5kZWVkIC0xLiBXZSYjMzk7dmUgZXN0YWJsaXNoZWQgdGhhdCBgcHZjX2JpbmRgIGFuZCBgcHZjX2Nvbm5lY3RgIGFyZSB0aGUgcHJpbWFyeSBwYXRocyB0byBgdmNjX2Nvbm5lY3Rg4oCUd2UgdmVyaWZpZWQgdGhhdCBlYXJsaWVyLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgYnJvYWRlciBpbXBsaWNhdGlvbnMuIEFyZSB0aGVyZSBhbnkgb3RoZXIgQVRNLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCB3YXJyYW50IGF0dGVudGlvbj8gSG1tLCBwZXJoYXBzIGBBVE1fQlIyNjg0YD8gSXQmIzM5O3Mgbm90ICplc3NlbnRpYWwqIGZvciB0aGlzIHNwZWNpZmljIHBhdGNoIHRvIGZ1bmN0aW9uLCBidXQgZW5hYmxpbmcgaXQgY2VydGFpbmx5IHdvdWxkbiYjMzk7dCBpbnRyb2R1Y2UgY29uZmxpY3RzLCBzbyBpdCYjMzk7cyB3b3J0aCBub3RpbmcuIFRoZSBwYXRjaCBpdHNlbGYgbGl2ZXMgaW4gYG5ldC9hdG0vY29tbW9uLmNgLCBhbmQsIGFzIGV4cGVjdGVkLCB0aGF0IGZpbGUgaXMgY29tcGlsZWQgb25seSBpZiBgQ09ORklHX0FUTWAgaXMgYWN0aXZlLiBUaW1lIHRvIGNoZWNrIHRoZSBgbmV0L2F0bS9NYWtlZmlsZWAgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlIGJ1aWxkIHJ1bGVzIGFyZSBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29tbW9uLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYXRtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9hdG0vTWFrZWZpbGUtNS1cbm5ldC9hdG0vTWFrZWZpbGU6NjphdG0teVx0XHQ6PSBwdmMubyBpb2N0bC5vIGNvbW1vbi5vIGF0bV9taXNjLm8gcmF3Lm8gcmVzb3VyY2VzLm8gYXRtX3N5c2ZzLm9cbm5ldC9hdG0vTWFrZWZpbGUtNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMzgzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBhdG0teWAgTW9kdWxlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGVzdGFibGlzaGVkIHRoYXQgYGNvbW1vbi5vYCBpcyBpbmRlZWQgYSBjb21wb25lbnQgb2YgYGF0bS15YCwgYW5kIHRoYXQgdGhpcyBlbnRpcmUgbW9kdWxlLCBgYXRtLXlgLCBpcyBidWlsdCBvbmx5IHdoZW4gYENPTkZJR19BVE1gIGlzIGFjdGl2ZS4gVGhhdCYjMzk7cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBicm9hZGVyIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHdoZXJlIGB2Y2NfY29ubmVjdGAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGlzIEFUTSBzdWJzeXN0ZW0uCgpJJiMzOTt2ZSBhbHJlYWR5IHJ1biBhIGBncmVwYCBmb3IgYHZjY19jb25uZWN0YCB3aXRoaW4gYG5ldC9hdG0vYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZXhjbHVzaXZlbHkgdXNlZCBpbiBgcHZjLmNgLiBIb3dldmVyLCBteSBndXQgaXMgdGVsbGluZyBtZSB0aGVyZSBtaWdodCBiZSBvdGhlciBsb2NhdGlvbnMuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgbmV4dCBsb2dpY2FsIHBsYWNlIHRvIGNoZWNrIGlzIGBuZXQvYXRtL3N2Yy5jYC4gV2FpdC4uLiB0aGVyZSBpc24mIzM5O3QgYSBgc3ZjLmNgIGZpbGUgaW4gdGhhdCBkaXJlY3Rvcnk/IFRoYXQmIzM5O3MgcGVjdWxpYXIuCgpBbHJpZ2h0LCB0aW1lIHRvIHN0ZXAgYmFjayBhbmQgdGhpbmsuIENvdWxkIGl0IGJlIHRoYXQgYHN2Yy5jYCBleGlzdGVkIGluIG9sZGVyIGtlcm5lbCB2ZXJzaW9ucyBhbmQgaGFzIHNpbmNlIGJlZW4gcmVuYW1lZCBvciByZWZhY3RvcmVkPyBPciBtYXliZSBpdHMgZnVuY3Rpb25hbGl0eSBpcyBub3cgaW5jb3Jwb3JhdGVkIGVsc2V3aGVyZT8gTGV0JiMzOTtzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBgbmV0L2F0bS9NYWtlZmlsZWAgdG8gY29uZmlybSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzIGFuZCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGNsdWUgYWJvdXQgdGhlIGN1cnJlbnQgb3JnYW5pemF0aW9uLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGJlZm9yZSBJIGRlY2xhcmUgdGhpcyBpbnZlc3RpZ2F0aW9uIGNvbXBsZXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYXRtL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgQVRNIFByb3RvY29sIEZhbWlsaWVzLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRhdG0teVx0XHQ6PSBwdmMubyBpb2N0bC5vIGNvbW1vbi5vIGF0bV9taXNjLm8gcmF3Lm8gcmVzb3VyY2VzLm8gYXRtX3N5c2ZzLm9cbiAgIDc6XHRcbiAgIDg6XHRvYmotJChDT05GSUdfQVRNKSAmIzQzOz0gYXRtLm9cbiAgIDk6XHRvYmotJChDT05GSUdfQVRNX0JSMjY4NCkgJiM0Mzs9IGJyMjY4NC5vXG4gIDEwOlx0YXRtLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBwcm9jLm9cbiAgMTE6XHRcbiAgMTI6XHRvYmotJChDT05GSUdfUFBQT0FUTSkgJiM0Mzs9IHBwcG9hdG0ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwMjgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25uZWN0aW9uIEZ1bmN0aW9ucyoqCgpIbW0sIGxvb2tzIGxpa2UgYHN2Yy5jYCBpc24mIzM5O3Qgd2hlcmUgSSBleHBlY3RlZCBpdCB0byBiZS4gT2theSwgc28gYHB2Yy5jYCBpcyB0aGUgc29sZSBjYW5kaWRhdGUgZm9yIG5vdy4gQnV0IGhvbGQgb24uLi4gd2hhdCBhYm91dCBgcmF3LmNgPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGtub3cgaWYgYHJhdy5jYCBhY3R1YWxseSBtYWtlcyBjYWxscyB0byBgdmNjX2Nvbm5lY3RgLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLCBzaW5jZSBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgY29ubmVjdGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2Y2NfY29ubmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9hdG0vcmF3LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMyMzgKCQkJCQkJCW91dHB1dDogMjMyCgkJCQkJCQl0aG91Z2h0czogMjc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFUTSBQVkMgQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIGlzIGFib3V0IHRob3NlIEFUTSBQVkMtcmVsYXRlZCBmdW5jdGlvbnM6IGB2Y2NfY29ubmVjdGAsIGBwdmNfYmluZGAsIGFuZCBgcHZjX2Nvbm5lY3RgLiBUaG9zZSBhcmUgdGhlIHN5bWJvbHMgdG8gemVybyBpbiBvbi4gVGhlIHN1cHBvcnRpbmcgY29uZmlndXJhdGlvbnMgYXJlIGBBVE1gLCBgVVNCX0FUTWAsIGFuZCBgVVNCX1hVU0JBVE1gIC0gd2hpY2ggaXMgZXhwZWN0ZWQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgcmVhc29uaW5nLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY3JpdGljYWwgZmxhdyBpbiBgbmV0L2F0bS9jb21tb24uY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAuIEl0IHNlZW1zIHRoYXQgYW4gZWRnZSBjYXNlIHdoZXJlIGB2cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBlcXVhbCBgQVRNX0NJX01BWGAgKC0xKSBsZWFkcyB0byBzb21lIG5hc3R5IHVuZGVmaW5lZCBiZWhhdmlvci4gV2UmIzM5O3JlIHRhbGtpbmcgcG90ZW50aWFsIG5lZ2F0aXZlIHNoaWZ0cyBvciBpbmZpbml0ZSBsb29wcyBoZXJlIOKAkyBjbGFzc2ljIHZ1bG5lcmFiaWxpdGllcy4KClRoZSBjYXRjaCBpcywgdGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZS4gU3BlY2lmaWNhbGx5LCB1c2VycyBjYW4gdHJpZ2dlciB0aGUgYGJpbmRgIGFuZCBgY29ubmVjdGAgc3lzdGVtIGNhbGxzIG9uIEFUTSBQVkMgc29ja2V0cyAoYEFGX0FUTVBWQ2ApLiBUaGUgb25seSBwcmUtcmVxdWlzaXRlIGZvciB0aGlzIHRvIG9jY3VyIGlzIGFuIEFUTSBkZXZpY2UgYmVpbmcgcHJlc2VudC4gR2l2ZW4gdGhlIHNjYXJjaXR5IG9mIHBoeXNpY2FsIEFUTSBoYXJkd2FyZSB0aGVzZSBkYXlzLCB0aGUgdHJpY2sgaXMgdG8gdXNlIHN5emthbGxlciBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yay4gV2UgY2FuIGVmZmVjdGl2ZWx5IGVtdWxhdGUgYW4gQVRNIGRldmljZSwgd2hpY2ggaXMgd2hlcmUgdGhlIFVTQiBBVE0gZHJpdmVycyBsaWtlIGB4dXNiYXRtYCBjb21lIGludG8gcGxheS4KCkluIHNob3J0LCBiZWNhdXNlIHRoaXMgZml4IGhhcyBhIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHVzZXIgc3BhY2UgdGhyb3VnaCBgYmluZGAgYW5kIGBjb25uZWN0YCBhbmQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gY3Jhc2gvZXhwb3NlIHRoZSBzeXN0ZW0sIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUTSYjMzQ7LAogICAgJiMzNDtVU0JfQVRNJiMzNDssCiAgICAmIzM0O1VTQl9YVVNCQVRNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmNjX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7cHZjX2JpbmQmIzM0OywKICAgICYjMzQ7cHZjX2Nvbm5lY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgIHdoZXJlIGB2cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBiZWluZyBgQVRNX0NJX01BWGAgKC0xKSB3b3VsZCBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3IgKGUuZy4gbmVnYXRpdmUgc2hpZnRzIG9yIGluZmluaXRlIGxvb3BzKS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGBiaW5kYCBhbmQgYGNvbm5lY3RgIHN5c3RlbSBjYWxscyBvbiBBVE0gUFZDIHNvY2tldHMgKGBBRl9BVE1QVkNgKS4gVG8gcmVhY2ggdGhpcyBjb2RlLCBhbiBBVE0gZGV2aWNlIG11c3QgYmUgcHJlc2VudCBpbiB0aGUgc3lzdGVtLiBTaW5jZSBwaHlzaWNhbCBBVE0gaGFyZHdhcmUgaXMgcmFyZSwgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGFuIEFUTSBkZXZpY2UgdXNpbmcgdGhlIFVTQiBnYWRnZXQgZnJhbWV3b3JrIGNvbWJpbmVkIHdpdGggVVNCIEFUTSBkcml2ZXJzIChlLmcuIGB4dXNiYXRtYCkuIFRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRNJiMzNDssCiAgICAmIzM0O1VTQl9BVE0mIzM0OywKICAgICYjMzQ7VVNCX1hVU0JBVE0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2Y2NfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtwdmNfYmluZCYjMzQ7LAogICAgJiMzNDtwdmNfY29ubmVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgZmluZF9jaWAgYW5kIGBfX3ZjY19jb25uZWN0YCBpbiBgbmV0L2F0bS9jb21tb24uY2Agd2hlcmUgYHZwaV9iaXRzYCBvciBgdmNpX2JpdHNgIGJlaW5nIGBBVE1fQ0lfTUFYYCAoLTEpIHdvdWxkIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciAoZS5nLiBuZWdhdGl2ZSBzaGlmdHMgb3IgaW5maW5pdGUgbG9vcHMpLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYGJpbmRgIGFuZCBgY29ubmVjdGAgc3lzdGVtIGNhbGxzIG9uIEFUTSBQVkMgc29ja2V0cyAoYEFGX0FUTVBWQ2ApLiBUbyByZWFjaCB0aGlzIGNvZGUsIGFuIEFUTSBkZXZpY2UgbXVzdCBiZSBwcmVzZW50IGluIHRoZSBzeXN0ZW0uIFNpbmNlIHBoeXNpY2FsIEFUTSBoYXJkd2FyZSBpcyByYXJlLCBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYW4gQVRNIGRldmljZSB1c2luZyB0aGUgVVNCIGdhZGdldCBmcmFtZXdvcmsgY29tYmluZWQgd2l0aCBVU0IgQVRNIGRyaXZlcnMgKGUuZy4gYHh1c2JhdG1gKS4gVGhlcmVmb3JlLCB0aGUgY2hhbmdlcyBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gdW5kZWZpbmVkIGJlaGF2aW9yIChzaGlmdC1vdXQtb2YtYm91bmRzKSBidWcgaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgLiBXaGVuIGBkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgaXMgc2V0IHRvIGBBVE1fQ0lfTUFYYCAoLTEpLCB0aGUgYml0d2lzZSBzaGlmdCBvcGVyYXRpb25zIChgMSBcdTAwM2NcdTAwM2MgdnBpX2JpdHNgIG9yIGB2cGkgXHUwMDNlXHUwMDNlIHZwaV9iaXRzYCkgcmVzdWx0IGluIGEgc2hpZnQgYnkgYSBuZWdhdGl2ZSBhbW91bnQsIHdoaWNoIGlzIHVuZGVmaW5lZCBiZWhhdmlvci4gVGhlIHBhdGNoIGludHJvZHVjZXMgbG9jYWwgdmFyaWFibGVzIHRvIGhhbmRsZSBgQVRNX0NJX01BWGAgYW5kIHJlcGxhY2UgaXQgd2l0aCA4IG9yIDE2IHJlc3BlY3RpdmVseS4gVGhpcyBidWcgaXMgY2F1Z2h0IGJ5IFVCU0FOIChVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyKSwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVhaywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyBpbnZvbHZlZCBpbiB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM0YjAzMDg1ZGM1NTVmYTcyMzIxODA0ZTYwMTNmMjRiMDhlNDQxNGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjo1MjowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9hdG0vY29tbW9uLmMgYi9uZXQvYXRtL2NvbW1vbi5jCmluZGV4IDgxMTk1NzI3ZmExOGIuLmEyMTQzOWQ2OTBmMTQgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2F0bS9jb21tb24uYwpAQCAtMzM0LDYgJiM0MzszMzQsMTAgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKQogCXNob3J0IG9sZF9wOwogCWludCBvbGRfYzsKIAlpbnQgZXJyOwomIzQzOwlpbnQgdnBpX2JpdHMgPSB2Y2MtJmd0O2Rldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOgomIzQzOwkJICAgICAgIHZjYy0mZ3Q7ZGV2LSZndDtjaV9yYW5nZS52cGlfYml0czsKJiM0MzsJaW50IHZjaV9iaXRzID0gdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzID09IEFUTV9DSV9NQVggPyAxNiA6CiYjNDM7CQkgICAgICAgdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzOwogCiAJaWYgKCp2cGkgIT0gQVRNX1ZQSV9BTlkgJmFtcDsmYW1wOyAqdmNpICE9IEFUTV9WQ0lfQU5ZKSB7CiAJCWVyciA9IGNoZWNrX2NpKHZjYywgKnZwaSwgKnZjaSk7CkBAIC0zNDIsMTIgJiM0MzszNDYsMTIgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKQogCS8qIGxhc3Qgc2NhbiBtYXkgaGF2ZSBsZWZ0IHZhbHVlcyBvdXQgb2YgYm91bmRzIGZvciBjdXJyZW50IGRldmljZSAqLwogCWlmICgqdnBpICE9IEFUTV9WUElfQU5ZKQogCQlwID0gKnZwaTsKLQllbHNlIGlmIChwICZndDs9IDEgJmx0OyZsdDsgdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZwaV9iaXRzKQomIzQzOwllbHNlIGlmIChwICZndDs9IDEgJmx0OyZsdDsgdnBpX2JpdHMpCiAJCXAgPSAwOwogCWlmICgqdmNpICE9IEFUTV9WQ0lfQU5ZKQogCQljID0gKnZjaTsKLQllbHNlIGlmIChjICZsdDsgQVRNX05PVF9SU1ZfVkNJIHx8IGMgJmd0Oz0gMSAmbHQ7Jmx0OyB2Y2MtJmd0O2Rldi0mZ3Q7Y2lfcmFuZ2UudmNpX2JpdHMpCi0JCQljID0gQVRNX05PVF9SU1ZfVkNJOwomIzQzOwllbHNlIGlmIChjICZsdDsgQVRNX05PVF9SU1ZfVkNJIHx8IGMgJmd0Oz0gMSAmbHQ7Jmx0OyB2Y2lfYml0cykKJiM0MzsJCWMgPSBBVE1fTk9UX1JTVl9WQ0k7CiAJb2xkX3AgPSBwOwogCW9sZF9jID0gYzsKIAlkbyB7CkBAIC0zNTgsMTMgJiM0MzszNjIsMTMgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKQogCQl9CiAJCWlmICgqdmNpID09IEFUTV9WQ0lfQU5ZKSB7CiAJCQljJiM0MzsmIzQzOzsKLQkJCWlmIChjICZndDs9IDEgJmx0OyZsdDsgdmNjLSZndDtkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzKQomIzQzOwkJCWlmIChjICZndDs9IDEgJmx0OyZsdDsgdmNpX2JpdHMpCiAJCQkJYyA9IEFUTV9OT1RfUlNWX1ZDSTsKIAkJfQogCQlpZiAoKGMgPT0gQVRNX05PVF9SU1ZfVkNJIHx8ICp2Y2kgIT0gQVRNX1ZDSV9BTlkpICZhbXA7JmFtcDsKIAkJICAgICp2cGkgPT0gQVRNX1ZQSV9BTlkpIHsKIAkJCXAmIzQzOyYjNDM7OwotCQkJaWYgKHAgJmd0Oz0gMSAmbHQ7Jmx0OyB2Y2MtJmd0O2Rldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHMpCiYjNDM7CQkJaWYgKHAgJmd0Oz0gMSAmbHQ7Jmx0OyB2cGlfYml0cykKIAkJCQlwID0gMDsKIAkJfQogCX0gd2hpbGUgKG9sZF9wICE9IHAgfHwgb2xkX2MgIT0gYyk7CkBAIC0zNzYsMTAgJiM0MzszODAsMTQgQEAgc3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSwKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBza19hdG0odmNjKTsKIAlpbnQgZXJyb3I7CiYjNDM7CWludCB2cGlfYml0cyA9IGRldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOgomIzQzOwkJICAgICAgIGRldi0mZ3Q7Y2lfcmFuZ2UudnBpX2JpdHM7CiYjNDM7CWludCB2Y2lfYml0cyA9IGRldi0mZ3Q7Y2lfcmFuZ2UudmNpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDE2IDoKJiM0MzsJCSAgICAgICBkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzOwogCiAJaWYgKCh2cGkgIT0gQVRNX1ZQSV9VTlNQRUMgJmFtcDsmYW1wOyB2cGkgIT0gQVRNX1ZQSV9BTlkgJmFtcDsmYW1wOwotCSAgICB2cGkgJmd0OyZndDsgZGV2LSZndDtjaV9yYW5nZS52cGlfYml0cykgfHwgKHZjaSAhPSBBVE1fVkNJX1VOU1BFQyAmYW1wOyZhbXA7Ci0JICAgIHZjaSAhPSBBVE1fVkNJX0FOWSAmYW1wOyZhbXA7IHZjaSAmZ3Q7Jmd0OyBkZXYtJmd0O2NpX3JhbmdlLnZjaV9iaXRzKSkKJiM0MzsJICAgIHZwaSAmZ3Q7Jmd0OyB2cGlfYml0cykgfHwgKHZjaSAhPSBBVE1fVkNJX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICB2Y2kgIT0gQVRNX1ZDSV9BTlkgJmFtcDsmYW1wOyB2Y2kgJmd0OyZndDsgdmNpX2JpdHMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAodmNpICZndDsgMCAmYW1wOyZhbXA7IHZjaSAmbHQ7IEFUTV9OT1RfUlNWX1ZDSSAmYW1wOyZhbXA7ICFjYXBhYmxlKENBUF9ORVRfQklORF9TRVJWSUNFKSkKIAkJcmV0dXJuIC1FUEVSTTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgQVRNIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgd2l0aGluIGBuZXQvYXRtL2NvbW1vbi5jYC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgdGhlc2UgYHZwaV9iaXRzYCBhbmQgYHZjaV9iaXRzYCB2YXJpYWJsZXMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoZXkmIzM5O3JlIGFkZHJlc3Npbmcgc29tZSByYW5nZSBoYW5kbGluZyBpc3N1ZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYEFUTV9DSV9NQVhgIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gYHZjYy0mZ3Q7ZGV2LSZndDtjaV9yYW5nZWAuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdHJ5aW5nIHRvIG5vcm1hbGl6ZSBvciBjbGFtcCB0aGUgYml0LXdpZHRoIHZhbHVlcy4gSWYgYHZwaV9iaXRzYCBvciBgdmNpX2JpdHNgIGFyZSBlcXVhbCB0byBgQVRNX0NJX01BWGAgKHdoaWNoLCBsZXQmIzM5O3MgYmUgaG9uZXN0LCBpcyBhbG1vc3QgY2VydGFpbmx5IGRlZmluZWQgYXMgLTEpLCBpdCYjMzk7cyBzZXR0aW5nIHRoZW0gdG8gOCBhbmQgMTYgcmVzcGVjdGl2ZWx5LiBUaGVuLCBpdCB1c2VzIHRoZXNlICpuZXcqIHZhcmlhYmxlcyBpbiBiaXQtc2hpZnQgb3BlcmF0aW9ucy4KClRoYXQgLTEgZm9yIGBBVE1fQ0lfTUFYYCBpbW1lZGlhdGVseSB0aHJvd3MgdXAgYSByZWQgZmxhZy4gV2FpdCBhIHNlY29uZC4uLiBpZiBgdnBpX2JpdHNgICpvciogYHZjaV9iaXRzYCBpcyAtMSwgdGhlbiB0aGUgY29kZSBpcyBkb2luZyB0aGluZ3MgbGlrZSBgMSAmbHQ7Jmx0OyAtMWAgb3IgYHZwaSAmZ3Q7Jmd0OyAtMWAsIGFuZCB0aGF0IGlzICp0ZXh0Ym9vayogdW5kZWZpbmVkIGJlaGF2aW9yLiBDIGxhbmd1YWdlIHNwZWMgc2F5cyB5b3UgY2Fubm90IHNoaWZ0IGJ5IGEgbmVnYXRpdmUgYW1vdW50LiBUaGlzIHBhdGNoIGlzIGNsZWFybHkgZml4aW5nIHRoYXQsIGEgY2xhc3NpYyBzaGlmdC1vdXQtb2YtYm91bmRzIGJ1ZywgYW5kIHByb2JhYmx5IGEgc3VidGxlIG9uZSB0aGF0IGxpa2VseSBtYW5pZmVzdGVkIG9uIHNvbWUgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgb3IgbWF5YmUgZXZlbiB1bmRlciBzcGVjaWZpYyBidWlsZCBjb25maWd1cmF0aW9ucy4KClRoaXMgaXMgdGhlIGtpbmQgb2Ygc3R1ZmYgdGhhdCBVQlNBTiBsb3ZlcyB0byBjYXRjaCwgcmlnaHQ/IFVuZGVmaW5lZCBCZWhhdmlvciBTYW5pdGl6ZXI/IEdpdmVuIHRoaXMgaXMgaW4gdGhlIEFUTSBuZXR3b3JraW5nIGNvZGUsIGl0IHdvdWxkbiYjMzk7dCBzdXJwcmlzZSBtZSBpZiBzb21lIEtBU0FOIGJ1aWxkcyBoYXZlIHBpY2tlZCB0aGlzIHVwLCBjYXVzaW5nIGEgYml0IG9mIGEgcGFuaWMuCgpMZXQgbWUgdGhpbmsuLi4gSXMgdGhpcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgdGhhdCYjMzk7cyBub3Qgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaGVyZS4gVGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgYGNpX3JhbmdlYCBmaWVsZHMgYXJlIGFsc28gaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIG5vdCAqYWJvdXQqIHRoZSAqdmFsdWUqIG9mIHRoZSBkYXRhIGluIG1lbW9yeTsgaXQmIzM5O3MgYWJvdXQgdGhlIHVzZSBvZiB0aGF0IHZhbHVlIGluIGEgYml0IHNoaWZ0LiBJdCYjMzk7cyBhIHNoaWZ0LW91dC1vZi1ib3VuZHMgaXNzdWUuIFRoZSBidWcgaXMgdGhlIGludmFsaWQgdXNlIG9mIG5lZ2F0aXZlIHNoaWZ0IHZhbHVlcy4KCkFscmlnaHQsIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdCBgQVRNX0NJX01BWGAgZGVmaW5pdGlvbiwgdGhvdWdoLiBJJiMzOTtsbCBqdXN0IGdyZXAgZm9yIGl0IHJlYWwgcXVpY2sgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgQVRNX0NJX01BWCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2Lmg9MTM4PXN0cnVjdCBhdG1faW9idWYge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaC0xNDQtXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2Lmg6MTQ1OiNkZWZpbmUgQVRNX0NJX01BWCAgICAgIC0xICAgICAgICAgICAgICAvKiB1c2UgbWF4aW11bSByYW5nZSBvZiBWUEkvVkNJICovXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2LmgtMTQ2LSBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjQKCQkJCQkJCW91dHB1dDogMjIxCgkJCQkJCQl0aG91Z2h0czogMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFUTSBQYXRjaCoqCgpPa2F5LCBzbyBgQVRNX0NJX01BWGAgaXMgZGVmaW5pdGVseSBgLTFgLiBUaGF0IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBjbGFzc2ljIHNoaWZ0LW91dC1vZi1ib3VuZHMgaXNzdWUuIEFueSBhdHRlbXB0IHRvIHBlcmZvcm0gYDEgJmx0OyZsdDsgLTFgIG9yIGB2cGkgJmd0OyZndDsgLTFgIGlzIGdvaW5nIHRvIHRyaWdnZXIgaXQuIFRoaXMgaXMgdGV4dGJvb2sgVUJTQU4gdGVycml0b3J5LiBJIGNhbiBzZWUgdGhpcyByaWdodCBhd2F5LgoKVGhlIGdvb2QgbmV3cyBpcywgVUJTQU4gaXMgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBzdGFuZGFyZCBLQVNBTiBidWlsZHMsIHdoaWNoIGlzIGdyZWF0LiBJdCBtZWFucyB0aGlzIHR5cGUgb2YgdW5kZWZpbmVkIGJlaGF2aW9yIGlzIGxpa2VseSBhbHJlYWR5IGJlaW5nIGNhdWdodCBkdXJpbmcgb3VyIHN0YW5kYXJkIHRlc3RpbmcuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHBsYXkgaGVyZSwgbm90aGluZyB0byB3YXJyYW50IGEgS01TQU4gc2Vzc2lvbiBvciBkZWVwZXIgYW5hbHlzaXMgZnJvbSB0aGF0IHBlcnNwZWN0aXZlLgoKVGhlIHBhdGNoJiMzOTtzIGdvYWwgaXMgdG8gaGFuZGxlIHRoZSBgLTFgIHZhbHVlcywgbGlrZWx5IGJ5IHN1YnN0aXR1dGluZyBgOGAgb3IgYDE2YC4gSXQmIzM5O3MgYSBjbGVhbiBmaXguIFNvLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcmVzb2x2ZXMgdGhlIHNoaWZ0LW91dC1vZi1ib3VuZHMgYnVnLiBJ4oCZbSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcy4gV2UmIzM5O3JlIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiB1bmRlZmluZWQgYmVoYXZpb3IgKHNoaWZ0LW91dC1vZi1ib3VuZHMpIGJ1ZyBpbiBgZmluZF9jaWAgYW5kIGBfX3ZjY19jb25uZWN0YCBpbiBgbmV0L2F0bS9jb21tb24uY2AuIFdoZW4gYGRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBpcyBzZXQgdG8gYEFUTV9DSV9NQVhgICgtMSksIHRoZSBiaXR3aXNlIHNoaWZ0IG9wZXJhdGlvbnMgKGAxIFx1MDAzY1x1MDAzYyB2cGlfYml0c2Agb3IgYHZwaSBcdTAwM2VcdTAwM2UgdnBpX2JpdHNgKSByZXN1bHQgaW4gYSBzaGlmdCBieSBhIG5lZ2F0aXZlIGFtb3VudCwgd2hpY2ggaXMgdW5kZWZpbmVkIGJlaGF2aW9yLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2NhbCB2YXJpYWJsZXMgdG8gaGFuZGxlIGBBVE1fQ0lfTUFYYCBhbmQgcmVwbGFjZSBpdCB3aXRoIDggb3IgMTYgcmVzcGVjdGl2ZWx5LiBUaGlzIGJ1ZyBpcyBjYXVnaHQgYnkgVUJTQU4gKFVuZGVmaW5lZCBCZWhhdmlvciBTYW5pdGl6ZXIpLCB3aGljaCBpcyBhbHJlYWR5IGVuYWJsZWQgaW4gc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGludm9sdmVkIGluIHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQtb3V0LW9mLWJvdW5kcykgYnVnIGluIGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgIGluIGBuZXQvYXRtL2NvbW1vbi5jYC4gV2hlbiBgZGV2LVx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzYCBvciBgdmNpX2JpdHNgIGlzIHNldCB0byBgQVRNX0NJX01BWGAgKC0xKSwgdGhlIGJpdHdpc2Ugc2hpZnQgb3BlcmF0aW9ucyAoYDEgXHUwMDNjXHUwMDNjIHZwaV9iaXRzYCBvciBgdnBpIFx1MDAzZVx1MDAzZSB2cGlfYml0c2ApIHJlc3VsdCBpbiBhIHNoaWZ0IGJ5IGEgbmVnYXRpdmUgYW1vdW50LCB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvY2FsIHZhcmlhYmxlcyB0byBoYW5kbGUgYEFUTV9DSV9NQVhgIGFuZCByZXBsYWNlIGl0IHdpdGggOCBvciAxNiByZXNwZWN0aXZlbHkuIFRoaXMgYnVnIGlzIGNhdWdodCBieSBVQlNBTiAoVW5kZWZpbmVkIEJlaGF2aW9yIFNhbml0aXplciksIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWssIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgaW52b2x2ZWQgaW4gdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjo1MjowOC4xNzMyMzIzMjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA4ODY5NjcxMjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUTVwiLFxuICAgIFwiVVNCX0FUTVwiLFxuICAgIFwiVVNCX1hVU0JBVE1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2Y2NfY29ubmVjdFwiLFxuICAgIFwicHZjX2JpbmRcIixcbiAgICBcInB2Y19jb25uZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiB1bmRlZmluZWQgYmVoYXZpb3IgKHNoaWZ0LW91dC1vZi1ib3VuZHMpIGJ1ZyBpbiBgZmluZF9jaWAgYW5kIGBfX3ZjY19jb25uZWN0YCBpbiBgbmV0L2F0bS9jb21tb24uY2AuIFdoZW4gYGRldi1cXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgaXMgc2V0IHRvIGBBVE1fQ0lfTUFYYCAoLTEpLCB0aGUgYml0d2lzZSBzaGlmdCBvcGVyYXRpb25zIChgMSBcXHUwMDNjXFx1MDAzYyB2cGlfYml0c2Agb3IgYHZwaSBcXHUwMDNlXFx1MDAzZSB2cGlfYml0c2ApIHJlc3VsdCBpbiBhIHNoaWZ0IGJ5IGEgbmVnYXRpdmUgYW1vdW50LCB3aGljaCBpcyB1bmRlZmluZWQgYmVoYXZpb3IuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvY2FsIHZhcmlhYmxlcyB0byBoYW5kbGUgYEFUTV9DSV9NQVhgIGFuZCByZXBsYWNlIGl0IHdpdGggOCBvciAxNiByZXNwZWN0aXZlbHkuIFRoaXMgYnVnIGlzIGNhdWdodCBieSBVQlNBTiAoVW5kZWZpbmVkIEJlaGF2aW9yIFNhbml0aXplciksIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWssIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcgaW52b2x2ZWQgaW4gdGhpcyBwYXRjaC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgIGluIGBuZXQvYXRtL2NvbW1vbi5jYCB3aGVyZSBgdnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgYmVpbmcgYEFUTV9DSV9NQVhgICgtMSkgd291bGQgY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIChlLmcuIG5lZ2F0aXZlIHNoaWZ0cyBvciBpbmZpbml0ZSBsb29wcykuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgYmluZGAgYW5kIGBjb25uZWN0YCBzeXN0ZW0gY2FsbHMgb24gQVRNIFBWQyBzb2NrZXRzIChgQUZfQVRNUFZDYCkuIFRvIHJlYWNoIHRoaXMgY29kZSwgYW4gQVRNIGRldmljZSBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIHN5c3RlbS4gU2luY2UgcGh5c2ljYWwgQVRNIGhhcmR3YXJlIGlzIHJhcmUsIHN5emthbGxlciBjYW4gZW11bGF0ZSBhbiBBVE0gZGV2aWNlIHVzaW5nIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yayBjb21iaW5lZCB3aXRoIFVTQiBBVE0gZHJpdmVycyAoZS5nLiBgeHVzYmF0bWApLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjUyOjA4LjE3MzIzNzQzMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNzM3NTk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM0YjAzMDg1ZGM1NTVmYTcyMzIxODA0ZTYwMTNmMjRiMDhlNDQxNGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTY6NTI6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2F0bS9jb21tb24uYyBiL25ldC9hdG0vY29tbW9uLmNcXG5pbmRleCA4MTE5NTcyN2ZhMThiLi5hMjE0MzlkNjkwZjE0IDEwMDY0NFxcbi0tLSBhL25ldC9hdG0vY29tbW9uLmNcXG4rKysgYi9uZXQvYXRtL2NvbW1vbi5jXFxuQEAgLTMzNCw2ICszMzQsMTAgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxcbiBcXHRzaG9ydCBvbGRfcDtcXG4gXFx0aW50IG9sZF9jO1xcbiBcXHRpbnQgZXJyO1xcbitcXHRpbnQgdnBpX2JpdHMgPSB2Y2MtXFx1MDAzZWRldi1cXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOlxcbitcXHRcXHQgICAgICAgdmNjLVxcdTAwM2VkZXYtXFx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzO1xcbitcXHRpbnQgdmNpX2JpdHMgPSB2Y2MtXFx1MDAzZWRldi1cXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDE2IDpcXG4rXFx0XFx0ICAgICAgIHZjYy1cXHUwMDNlZGV2LVxcdTAwM2VjaV9yYW5nZS52Y2lfYml0cztcXG4gXFxuIFxcdGlmICgqdnBpICE9IEFUTV9WUElfQU5ZIFxcdTAwMjZcXHUwMDI2ICp2Y2kgIT0gQVRNX1ZDSV9BTlkpIHtcXG4gXFx0XFx0ZXJyID0gY2hlY2tfY2kodmNjLCAqdnBpLCAqdmNpKTtcXG5AQCAtMzQyLDEyICszNDYsMTIgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxcbiBcXHQvKiBsYXN0IHNjYW4gbWF5IGhhdmUgbGVmdCB2YWx1ZXMgb3V0IG9mIGJvdW5kcyBmb3IgY3VycmVudCBkZXZpY2UgKi9cXG4gXFx0aWYgKCp2cGkgIT0gQVRNX1ZQSV9BTlkpXFxuIFxcdFxcdHAgPSAqdnBpO1xcbi1cXHRlbHNlIGlmIChwIFxcdTAwM2U9IDEgXFx1MDAzY1xcdTAwM2MgdmNjLVxcdTAwM2VkZXYtXFx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzKVxcbitcXHRlbHNlIGlmIChwIFxcdTAwM2U9IDEgXFx1MDAzY1xcdTAwM2MgdnBpX2JpdHMpXFxuIFxcdFxcdHAgPSAwO1xcbiBcXHRpZiAoKnZjaSAhPSBBVE1fVkNJX0FOWSlcXG4gXFx0XFx0YyA9ICp2Y2k7XFxuLVxcdGVsc2UgaWYgKGMgXFx1MDAzYyBBVE1fTk9UX1JTVl9WQ0kgfHwgYyBcXHUwMDNlPSAxIFxcdTAwM2NcXHUwMDNjIHZjYy1cXHUwMDNlZGV2LVxcdTAwM2VjaV9yYW5nZS52Y2lfYml0cylcXG4tXFx0XFx0XFx0YyA9IEFUTV9OT1RfUlNWX1ZDSTtcXG4rXFx0ZWxzZSBpZiAoYyBcXHUwMDNjIEFUTV9OT1RfUlNWX1ZDSSB8fCBjIFxcdTAwM2U9IDEgXFx1MDAzY1xcdTAwM2MgdmNpX2JpdHMpXFxuK1xcdFxcdGMgPSBBVE1fTk9UX1JTVl9WQ0k7XFxuIFxcdG9sZF9wID0gcDtcXG4gXFx0b2xkX2MgPSBjO1xcbiBcXHRkbyB7XFxuQEAgLTM1OCwxMyArMzYyLDEzIEBAIHN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoKnZjaSA9PSBBVE1fVkNJX0FOWSkge1xcbiBcXHRcXHRcXHRjKys7XFxuLVxcdFxcdFxcdGlmIChjIFxcdTAwM2U9IDEgXFx1MDAzY1xcdTAwM2MgdmNjLVxcdTAwM2VkZXYtXFx1MDAzZWNpX3JhbmdlLnZjaV9iaXRzKVxcbitcXHRcXHRcXHRpZiAoYyBcXHUwMDNlPSAxIFxcdTAwM2NcXHUwMDNjIHZjaV9iaXRzKVxcbiBcXHRcXHRcXHRcXHRjID0gQVRNX05PVF9SU1ZfVkNJO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmICgoYyA9PSBBVE1fTk9UX1JTVl9WQ0kgfHwgKnZjaSAhPSBBVE1fVkNJX0FOWSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICp2cGkgPT0gQVRNX1ZQSV9BTlkpIHtcXG4gXFx0XFx0XFx0cCsrO1xcbi1cXHRcXHRcXHRpZiAocCBcXHUwMDNlPSAxIFxcdTAwM2NcXHUwMDNjIHZjYy1cXHUwMDNlZGV2LVxcdTAwM2VjaV9yYW5nZS52cGlfYml0cylcXG4rXFx0XFx0XFx0aWYgKHAgXFx1MDAzZT0gMSBcXHUwMDNjXFx1MDAzYyB2cGlfYml0cylcXG4gXFx0XFx0XFx0XFx0cCA9IDA7XFxuIFxcdFxcdH1cXG4gXFx0fSB3aGlsZSAob2xkX3AgIT0gcCB8fCBvbGRfYyAhPSBjKTtcXG5AQCAtMzc2LDEwICszODAsMTQgQEAgc3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSxcXG4ge1xcbiBcXHRzdHJ1Y3Qgc29jayAqc2sgPSBza19hdG0odmNjKTtcXG4gXFx0aW50IGVycm9yO1xcbitcXHRpbnQgdnBpX2JpdHMgPSBkZXYtXFx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzID09IEFUTV9DSV9NQVggPyA4IDpcXG4rXFx0XFx0ICAgICAgIGRldi1cXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHM7XFxuK1xcdGludCB2Y2lfYml0cyA9IGRldi1cXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDE2IDpcXG4rXFx0XFx0ICAgICAgIGRldi1cXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHM7XFxuIFxcbiBcXHRpZiAoKHZwaSAhPSBBVE1fVlBJX1VOU1BFQyBcXHUwMDI2XFx1MDAyNiB2cGkgIT0gQVRNX1ZQSV9BTlkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHZwaSBcXHUwMDNlXFx1MDAzZSBkZXYtXFx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzKSB8fCAodmNpICE9IEFUTV9WQ0lfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICB2Y2kgIT0gQVRNX1ZDSV9BTlkgXFx1MDAyNlxcdTAwMjYgdmNpIFxcdTAwM2VcXHUwMDNlIGRldi1cXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMpKVxcbitcXHQgICAgdnBpIFxcdTAwM2VcXHUwMDNlIHZwaV9iaXRzKSB8fCAodmNpICE9IEFUTV9WQ0lfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB2Y2kgIT0gQVRNX1ZDSV9BTlkgXFx1MDAyNlxcdTAwMjYgdmNpIFxcdTAwM2VcXHUwMDNlIHZjaV9iaXRzKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdGlmICh2Y2kgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHZjaSBcXHUwMDNjIEFUTV9OT1RfUlNWX1ZDSSBcXHUwMDI2XFx1MDAyNiAhY2FwYWJsZShDQVBfTkVUX0JJTkRfU0VSVklDRSkpXFxuIFxcdFxcdHJldHVybiAtRVBFUk07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjUyOjA5LjgxMTU4OTA4N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk4Nzg1MjkwOTQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBVE1cIixcbiAgICBcIlVTQl9BVE1cIixcbiAgICBcIlVTQl9YVVNCQVRNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmNjX2Nvbm5lY3RcIixcbiAgICBcInB2Y19iaW5kXCIsXG4gICAgXCJwdmNfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgIGluIGBuZXQvYXRtL2NvbW1vbi5jYCB3aGVyZSBgdnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgYmVpbmcgYEFUTV9DSV9NQVhgICgtMSkgd291bGQgY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIChlLmcuIG5lZ2F0aXZlIHNoaWZ0cyBvciBpbmZpbml0ZSBsb29wcykuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgYmluZGAgYW5kIGBjb25uZWN0YCBzeXN0ZW0gY2FsbHMgb24gQVRNIFBWQyBzb2NrZXRzIChgQUZfQVRNUFZDYCkuIFRvIHJlYWNoIHRoaXMgY29kZSwgYW4gQVRNIGRldmljZSBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIHN5c3RlbS4gU2luY2UgcGh5c2ljYWwgQVRNIGhhcmR3YXJlIGlzIHJhcmUsIHN5emthbGxlciBjYW4gZW11bGF0ZSBhbiBBVE0gZGV2aWNlIHVzaW5nIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yayBjb21iaW5lZCB3aXRoIFVTQiBBVE0gZHJpdmVycyAoZS5nLiBgeHVzYmF0bWApLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM0YjAzMDg1ZGM1NTVmYTcyMzIxODA0ZTYwMTNmMjRiMDhlNDQxNGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjo1MjowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9hdG0vY29tbW9uLmMgYi9uZXQvYXRtL2NvbW1vbi5jXG5pbmRleCA4MTE5NTcyN2ZhMThiLi5hMjE0MzlkNjkwZjE0IDEwMDY0NFxuLS0tIGEvbmV0L2F0bS9jb21tb24uY1xuKysrIGIvbmV0L2F0bS9jb21tb24uY1xuQEAgLTMzNCw2ICszMzQsMTAgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxuIFx0c2hvcnQgb2xkX3A7XG4gXHRpbnQgb2xkX2M7XG4gXHRpbnQgZXJyO1xuK1x0aW50IHZwaV9iaXRzID0gdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0cyA9PSBBVE1fQ0lfTUFYID8gOCA6XG4rXHRcdCAgICAgICB2Y2MtXHUwMDNlZGV2LVx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzO1xuK1x0aW50IHZjaV9iaXRzID0gdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52Y2lfYml0cyA9PSBBVE1fQ0lfTUFYID8gMTYgOlxuK1x0XHQgICAgICAgdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52Y2lfYml0cztcbiBcbiBcdGlmICgqdnBpICE9IEFUTV9WUElfQU5ZIFx1MDAyNlx1MDAyNiAqdmNpICE9IEFUTV9WQ0lfQU5ZKSB7XG4gXHRcdGVyciA9IGNoZWNrX2NpKHZjYywgKnZwaSwgKnZjaSk7XG5AQCAtMzQyLDEyICszNDYsMTIgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxuIFx0LyogbGFzdCBzY2FuIG1heSBoYXZlIGxlZnQgdmFsdWVzIG91dCBvZiBib3VuZHMgZm9yIGN1cnJlbnQgZGV2aWNlICovXG4gXHRpZiAoKnZwaSAhPSBBVE1fVlBJX0FOWSlcbiBcdFx0cCA9ICp2cGk7XG4tXHRlbHNlIGlmIChwIFx1MDAzZT0gMSBcdTAwM2NcdTAwM2MgdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0cylcbitcdGVsc2UgaWYgKHAgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2cGlfYml0cylcbiBcdFx0cCA9IDA7XG4gXHRpZiAoKnZjaSAhPSBBVE1fVkNJX0FOWSlcbiBcdFx0YyA9ICp2Y2k7XG4tXHRlbHNlIGlmIChjIFx1MDAzYyBBVE1fTk9UX1JTVl9WQ0kgfHwgYyBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMpXG4tXHRcdFx0YyA9IEFUTV9OT1RfUlNWX1ZDSTtcbitcdGVsc2UgaWYgKGMgXHUwMDNjIEFUTV9OT1RfUlNWX1ZDSSB8fCBjIFx1MDAzZT0gMSBcdTAwM2NcdTAwM2MgdmNpX2JpdHMpXG4rXHRcdGMgPSBBVE1fTk9UX1JTVl9WQ0k7XG4gXHRvbGRfcCA9IHA7XG4gXHRvbGRfYyA9IGM7XG4gXHRkbyB7XG5AQCAtMzU4LDEzICszNjIsMTMgQEAgc3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxuIFx0XHR9XG4gXHRcdGlmICgqdmNpID09IEFUTV9WQ0lfQU5ZKSB7XG4gXHRcdFx0YysrO1xuLVx0XHRcdGlmIChjIFx1MDAzZT0gMSBcdTAwM2NcdTAwM2MgdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52Y2lfYml0cylcbitcdFx0XHRpZiAoYyBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjaV9iaXRzKVxuIFx0XHRcdFx0YyA9IEFUTV9OT1RfUlNWX1ZDSTtcbiBcdFx0fVxuIFx0XHRpZiAoKGMgPT0gQVRNX05PVF9SU1ZfVkNJIHx8ICp2Y2kgIT0gQVRNX1ZDSV9BTlkpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKnZwaSA9PSBBVE1fVlBJX0FOWSkge1xuIFx0XHRcdHArKztcbi1cdFx0XHRpZiAocCBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHMpXG4rXHRcdFx0aWYgKHAgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2cGlfYml0cylcbiBcdFx0XHRcdHAgPSAwO1xuIFx0XHR9XG4gXHR9IHdoaWxlIChvbGRfcCAhPSBwIHx8IG9sZF9jICE9IGMpO1xuQEAgLTM3NiwxMCArMzgwLDE0IEBAIHN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXG4ge1xuIFx0c3RydWN0IHNvY2sgKnNrID0gc2tfYXRtKHZjYyk7XG4gXHRpbnQgZXJyb3I7XG4rXHRpbnQgdnBpX2JpdHMgPSBkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOlxuK1x0XHQgICAgICAgZGV2LVx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzO1xuK1x0aW50IHZjaV9iaXRzID0gZGV2LVx1MDAzZWNpX3JhbmdlLnZjaV9iaXRzID09IEFUTV9DSV9NQVggPyAxNiA6XG4rXHRcdCAgICAgICBkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHM7XG4gXG4gXHRpZiAoKHZwaSAhPSBBVE1fVlBJX1VOU1BFQyBcdTAwMjZcdTAwMjYgdnBpICE9IEFUTV9WUElfQU5ZIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHZwaSBcdTAwM2VcdTAwM2UgZGV2LVx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzKSB8fCAodmNpICE9IEFUTV9WQ0lfVU5TUEVDIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHZjaSAhPSBBVE1fVkNJX0FOWSBcdTAwMjZcdTAwMjYgdmNpIFx1MDAzZVx1MDAzZSBkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMpKVxuK1x0ICAgIHZwaSBcdTAwM2VcdTAwM2UgdnBpX2JpdHMpIHx8ICh2Y2kgIT0gQVRNX1ZDSV9VTlNQRUMgXHUwMDI2XHUwMDI2XG4rXHQgICAgdmNpICE9IEFUTV9WQ0lfQU5ZIFx1MDAyNlx1MDAyNiB2Y2kgXHUwMDNlXHUwMDNlIHZjaV9iaXRzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRpZiAodmNpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiB2Y2kgXHUwMDNjIEFUTV9OT1RfUlNWX1ZDSSBcdTAwMjZcdTAwMjYgIWNhcGFibGUoQ0FQX05FVF9CSU5EX1NFUlZJQ0UpKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6NTI6MDkuODExNTkxMTU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ5ODEwODg0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBVE0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHRvdWNoaW5nIGBuZXQvYXRtL2NvbW1vbi5jYC4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nOyBhbnkgY2hhbmdlcyB0byB0aGUgY29yZSBBVE0gY29kZSB3YXJyYW50IGEgY2xvc2UgbG9vay4gSXQgbG9va3MgbGlrZSB0aGUga2V5IG1vZGlmaWNhdGlvbnMgYXJlIHdpdGhpbiB0aGUgYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgZnVuY3Rpb25zLiBJIHNlZSB0aGV5J3ZlIGludHJvZHVjZWQgYHZwaV9iaXRzYCBhbmQgYHZjaV9iaXRzYCB2YXJpYWJsZXMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoZXkncmUgaGFuZGxpbmcgZWRnZSBjYXNlcy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0aGV5J3JlIGFkZHJlc3Npbmcgc2l0dWF0aW9ucyB3aGVyZSB0aGUgVlBJIG9yIFZDSSBiaXRzIGFyZSBhdCB0aGVpciBtYXhpbXVtIHZhbHVlcyAoYEFUTV9DSV9NQVhgKSB3aXRoaW4gdGhlIGBkZXYtXHUwMDNlY2lfcmFuZ2VgLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdG8gaG93IEFUTSBuZXR3b3JraW5nIG9wZXJhdGVzLCB3aGljaCBpcyBkZWZpbml0ZWx5IHNpZ25pZmljYW50LiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIGFmZmVjdCB0aGUgb3ZlcmFsbCBBVE0gaW5mcmFzdHJ1Y3R1cmU/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHJlYWNoYWJpbGl0eT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjdXJyZW50IEFUTSBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gTGV0J3Mgc3RhcnQgYnkgY29uZmlybWluZyB0aGF0IEFUTSBpcyBldmVuIHJlYWNoYWJsZS4gR290dGEgZGl2ZSBpbnRvIHRoZSBjb25maWcgZmlsZXMsIHNlZSB3aGF0IHRoZSBjdXJyZW50IHNldHVwIGlzIGxpa2UgZm9yIEFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjo1MjoyNC43OTI2ODI5MDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMxNzM3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFUTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9LY29uZmlnLTUtXFxubmV0L2F0bS9LY29uZmlnOjY6Y29uZmlnIEFUTVxcbm5ldC9hdG0vS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVxcXCJcXG4tLVxcbm5ldC9hdG0vS2NvbmZpZy0yMS1cXG5uZXQvYXRtL0tjb25maWc6MjI6Y29uZmlnIEFUTV9CUjI2ODRcXG5uZXQvYXRtL0tjb25maWctMjMtXFx0dHJpc3RhdGUgXFxcIlJGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1xcXCJcXG4tLVxcbm5ldC9hdG0vS2NvbmZpZy0zMC1cXG5uZXQvYXRtL0tjb25maWc6MzE6Y29uZmlnIEFUTV9CUjI2ODRfSVBGSUxURVJcXG5uZXQvYXRtL0tjb25maWctMzItXFx0Ym9vbCBcXFwiUGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjUyOjI0Ljg2NTg2NDYyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY4NDA5NjYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OlxuXG4qKkFuYWx5emluZyB0aGUgQVRNIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gd2UncmUgZGVhbGluZyB3aXRoIGlzIGBBVE1gLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB2ZXJpZnkgdGhlIGludGVncml0eSBvZiB0aGUgY3J1Y2lhbCBjb21wb25lbnRzLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgIGFyZSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGlzIGNvbnRleHQuIEV4Y2VsbGVudCwgdGhleSBhcmUgc3RhdGljYWxseSBkZWZpbmVkIOKAkyB0aGF0IGdpdmVzIHVzIGEgY2xlYXIgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gSSBtdXN0IHF1aWNrbHkgZGV0ZXJtaW5lICp3aGF0KiBpcyBjYWxsaW5nIHRoZXNlIGNyaXRpY2FsIHJvdXRpbmVzLiBUaGlzIHdpbGwgcmV2ZWFsIHRoZSBjYWxsIGNoYWlucywgd2hpY2ggaXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlaXIgdXNhZ2UgYW5kIGltcGFjdCB3aXRoaW4gdGhlIEFUTSBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjo1MjoyOS41NDk5NjI4MzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NTc1NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmRfY2l8X192Y2NfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL2NvbW1vbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vY29tbW9uLmM9MzA1PXN0YXRpYyBpbnQgY2hlY2tfY2koY29uc3Qgc3RydWN0IGF0bV92Y2MgKnZjYywgc2hvcnQgdnBpLCBpbnQgdmNpKVxcbi0tXFxubmV0L2F0bS9jb21tb24uYy0zMjktXFxubmV0L2F0bS9jb21tb24uYzozMzA6c3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxcbm5ldC9hdG0vY29tbW9uLmMtMzMxLXtcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtMzc3LVxcbm5ldC9hdG0vY29tbW9uLmM6Mzc4OnN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXFxubmV0L2F0bS9jb21tb24uYy0zNzktXFx0XFx0XFx0IGludCB2Y2kpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTM5OS1cXHRpZiAodGVzdF9iaXQoQVRNX0RGX1JFTU9WRUQsIFxcdTAwMjZkZXYtXFx1MDAzZWZsYWdzKSB8fFxcbm5ldC9hdG0vY29tbW9uLmM6NDAwOlxcdCAgICAoZXJyb3IgPSBmaW5kX2NpKHZjYywgXFx1MDAyNnZwaSwgXFx1MDAyNnZjaSkpKSB7XFxubmV0L2F0bS9jb21tb24uYy00MDEtXFx0XFx0d3JpdGVfdW5sb2NrX2lycShcXHUwMDI2dmNjX3NrbGlzdF9sb2NrKTtcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmM9NDU4PWludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTUwNS1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5uZXQvYXRtL2NvbW1vbi5jOjUwNjpcXHRlcnJvciA9IF9fdmNjX2Nvbm5lY3QodmNjLCBkZXYsIHZwaSwgdmNpKTtcXG5uZXQvYXRtL2NvbW1vbi5jLTUwNy1cXHRpZiAoZXJyb3IpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6NTI6MjkuNjY2NTQyMzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjExNTA4ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqVHJhY2luZyB0aGUgVkNDIENvbm5lY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBgdmNjX2Nvbm5lY3RgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGluaXRpYXRlcyB0aGUgY29ubmVjdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIGl0IGNhbGxzIGBfX3ZjY19jb25uZWN0YCBkaXJlY3RseSwgc28gdGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgcG9pbnQgdG8gaW52ZXN0aWdhdGUuIE5vdywgYF9fdmNjX2Nvbm5lY3RgIHRoZW4gY2FsbHMgYGZpbmRfY2lgLCB3aGljaCBsaWtlbHkgbWVhbnMgaXQncyB0cnlpbmcgdG8gbG9jYXRlIHNvbWUgc29ydCBvZiBjb25uZWN0aW9uIGlkZW50aWZpZXIgb3IgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBoZXJlLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBhbmQgaG93IGV2ZXJ5dGhpbmcgZml0cyB0b2dldGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndobyogaXMgY2FsbGluZyBgdmNjX2Nvbm5lY3RgIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGZvbGxvdyB0aGUgdGhyZWFkIGZyb20gdGhlIG90aGVyIGVuZC4gU28sIEkgbmVlZCB0byBzZWUgdGhlIGNhbGxlcnMgdG8gYHZjY19jb25uZWN0YC4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTQ3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6NTI6MzYuODc4MDUyOTc2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NzMwMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjY19jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vY29tbW9uLmM9MzMwPXN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtMzc3LVxcbm5ldC9hdG0vY29tbW9uLmM6Mzc4OnN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXFxubmV0L2F0bS9jb21tb24uYy0zNzktXFx0XFx0XFx0IGludCB2Y2kpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTQ1Ny1cXG5uZXQvYXRtL2NvbW1vbi5jOjQ1ODppbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKVxcbm5ldC9hdG0vY29tbW9uLmMtNDU5LXtcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtNTA1LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbm5ldC9hdG0vY29tbW9uLmM6NTA2OlxcdGVycm9yID0gX192Y2NfY29ubmVjdCh2Y2MsIGRldiwgdnBpLCB2Y2kpO1xcbm5ldC9hdG0vY29tbW9uLmMtNTA3LVxcdGlmIChlcnJvcikge1xcbi0tXFxubmV0L2F0bS9jb21tb24uaD0xNT1pbnQgdmNjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jayk7XFxubmV0L2F0bS9jb21tb24uaDoxNjppbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKTtcXG5uZXQvYXRtL2NvbW1vbi5oLTE3LWludCB2Y2NfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxcbi0tXFxubmV0L2F0bS9wdmMuYz0yNz1zdGF0aWMgaW50IHB2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcXG4tLVxcbm5ldC9hdG0vcHZjLmMtNTEtXFx0fVxcbm5ldC9hdG0vcHZjLmM6NTI6XFx0ZXJyb3IgPSB2Y2NfY29ubmVjdChzb2NrLCBhZGRyLVxcdTAwM2VzYXBfYWRkci5pdGYsIGFkZHItXFx1MDAzZXNhcF9hZGRyLnZwaSxcXG5uZXQvYXRtL3B2Yy5jLTUzLVxcdFxcdFxcdCAgICBhZGRyLVxcdTAwM2VzYXBfYWRkci52Y2kpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjo1MjozNi45NjQ3ODg2ODVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYzNjA1NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkV4YW1pbmluZyB0aGUgUFZDIEJpbmRpbmcgUHJvY2VzcyoqXG5cbk9rYXksIHNvIGBwdmNfYmluZGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWluZyBjYWxsZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiBpdC4gVGhlIHRyYWNlIHNheXMgaXQgdXNlcyBgdmNjX2Nvbm5lY3RgLiBSaWdodC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIHByZXR0eSBzdXJlIGBwdmNfYmluZGAgaXMgZnVuZGFtZW50YWwgdG8gaW5pdGlhbGl6aW5nIGFuZCBlc3RhYmxpc2hpbmcgQVRNIFBWQ3MuIFRoYXQgY29ubmVjdGlvbiB0byBgdmNjX2Nvbm5lY3RgIGRlZmluaXRlbHkgc291bmRzIGxpa2UgaXQncyBoYW5kbGluZyB0aGUgdW5kZXJseWluZyB2aXJ0dWFsIGNpcmN1aXQgc2V0dXAuIEFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gVGltZSB0byBjcmFjayBvcGVuIGBuZXQvYXRtL3B2Yy5jYC4gSG9wZWZ1bGx5LCB0aGUgaW1wbGVtZW50YXRpb24gaXMgY2xlYW4gYW5kIHRoZSBjb25uZWN0aW9uIGZsb3cgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIHN0b3J5LiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZSBQVkMgZ2V0cyBib3VuZCB0byB0aGUgdmlydHVhbCBjb25uZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODg0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6NTI6NDEuMjI4Mzk3MTYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTAxNjU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdmNfYmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL3B2Yy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vcHZjLmM9MjI9c3RhdGljIGludCBwdmNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcXG4tLVxcbm5ldC9hdG0vcHZjLmMtMjYtXFxubmV0L2F0bS9wdmMuYzoyNzpzdGF0aWMgaW50IHB2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcXG5uZXQvYXRtL3B2Yy5jLTI4LVxcdFxcdCAgICBpbnQgc29ja2FkZHJfbGVuKVxcbi0tXFxubmV0L2F0bS9wdmMuYz01OT1zdGF0aWMgaW50IHB2Y19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcXG4tLVxcbm5ldC9hdG0vcHZjLmMtNjEte1xcbm5ldC9hdG0vcHZjLmM6NjI6XFx0cmV0dXJuIHB2Y19iaW5kKHNvY2ssIHNvY2thZGRyLCBzb2NrYWRkcl9sZW4pO1xcbm5ldC9hdG0vcHZjLmMtNjMtfVxcbi0tXFxubmV0L2F0bS9wdmMuYz0xMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHZjX3Byb3RvX29wcyA9IHtcXG4tLVxcbm5ldC9hdG0vcHZjLmMtMTEwLVxcdC5yZWxlYXNlID1cXHR2Y2NfcmVsZWFzZSxcXG5uZXQvYXRtL3B2Yy5jOjExMTpcXHQuYmluZCA9XFx0XFx0cHZjX2JpbmQsXFxubmV0L2F0bS9wdmMuYy0xMTItXFx0LmNvbm5lY3QgPVxcdHB2Y19jb25uZWN0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjo1Mjo0MS4yODc0MjAwODNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwMDMwOTQzMzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBBVE0gUFZDIFNvY2tldCBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgYHB2Y19iaW5kYCBhbmQgYHB2Y19jb25uZWN0YCBmdW5jdGlvbnMg4oCTIHRoZXkncmUgdGhlIHNvY2tldCBvcGVyYXRpb25zIGZvciBQVkMgc29ja2V0cywgbm8gc3VycHJpc2UgdGhlcmUuIEFuZCB5ZXAsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlc2UgYXJlIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIHN0YW5kYXJkIGBiaW5kYCBhbmQgYGNvbm5lY3RgIGNhbGxzIG9uIGFuIEFUTSBQVkMgc29ja2V0LiBGdW5jdGlvbmFsbHksIHRoaXMgY2hhbmdlIGlzIHNpZ25pZmljYW50LiBJdCdzIGFkZHJlc3NpbmcgYSBidWcgd2hlcmUgdGhlIHZhbHVlcyBvZiBgdnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgYmVpbmcgc2V0IHRvIGBBVE1fQ0lfTUFYYCwgd2hpY2ggaXMgLTEsIHdlcmUgbGVhZGluZyB0byBzb21lIHByZXR0eSBuYXN0eSBzaGlmdCBvcGVyYXRpb25zLiBXZSdyZSB0YWxraW5nIHNoaWZ0cyBieSAtMSwgdW5kZWZpbmVkIGJlaGF2aW9yLCBhbGwgc29ydHMgb2YgcG90ZW50aWFsIHByb2JsZW1zLlxuXG5UaGUgcGF0Y2gncyBzb2x1dGlvbiBpcyBzdHJhaWdodGZvcndhcmQ6IGludHJvZHVjZSBgdnBpX2JpdHNgIGFuZCBgdmNpX2JpdHNgIHZhcmlhYmxlcy4gQ3J1Y2lhbGx5LCBpdCBzZXRzIGRlZmF1bHQgdmFsdWVzIG9mIDggYW5kIDE2IHJlc3BlY3RpdmVseSB3aGVuIHRoZSBkZXZpY2UgaW5kaWNhdGVzIGBBVE1fQ0lfTUFYYC4gVGhpcyBpcyBlbGVnYW50LlxuXG5JIHRoaW5rIEkgc2hvdWxkIGNoZWNrIGBuZXQvYXRtL3N2Yy5jYCBhcyB3ZWxsLCBqdXN0IHRvIGJlIHN1cmUgdGhlcmUgaXNuJ3QgYW55dGhpbmcgc2ltaWxhciBnb2luZyBvbiBvdmVyIHRoZXJlLiBBbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCB3aXRoIHRoaXMga2luZCBvZiBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MjcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDI6MTEuMzE4MzY1OTgzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjMxNzM4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNjX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9zdmMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDI6MTEuMzY0Njg3NDcyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTg3NzE5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHlvdSBkZXNjcmliZWQ6XG5cbioqQ29ubmVjdGluZyB0aGUgRG90cyoqXG5cbkFscmlnaHQsIHNvIGB2Y2NfY29ubmVjdGAgaXMgZGVmaW5pdGVseSBnZXR0aW5nIHRyaWdnZXJlZCBieSBib3RoIGBwdmNfYmluZGAgYW5kIGBwdmNfY29ubmVjdGAuIFRoYXQncyB0aGUgY29yZSBjb25uZWN0aW9uIG1lY2hhbmlzbSwgZ290IGl0LiBIbW0uLi4gYnV0IEkgbmVlZCB0byBlbnN1cmUgSSdtIGFjY291bnRpbmcgZm9yIGFsbCBzY2VuYXJpb3MuIEhvbGQgb24gYSBzZWNvbmQsIHdoYXQgYWJvdXQgdGhlIHNlcnZpY2UgY29ubmVjdGlvbiBpbiBgc3ZjLmNgPyBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBlZGdlIGNhc2VzIG9yIGFsdGVybmF0aXZlIGNvbm5lY3Rpb24gcGF0aHdheXMuIEkgbmVlZCB0byBmYWN0b3IgdGhhdCBpbiBiZWZvcmUgSSBjYW4gdHJ1bHkgc2F5IEkndmUgZ290IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4ODIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMjoxNC45MjM0NjE2NTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MzY2MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjY19jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vY29tbW9uLmM9MzMwPXN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtMzc3LVxcbm5ldC9hdG0vY29tbW9uLmM6Mzc4OnN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXFxubmV0L2F0bS9jb21tb24uYy0zNzktXFx0XFx0XFx0IGludCB2Y2kpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTQ1Ny1cXG5uZXQvYXRtL2NvbW1vbi5jOjQ1ODppbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKVxcbm5ldC9hdG0vY29tbW9uLmMtNDU5LXtcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtNTA1LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbm5ldC9hdG0vY29tbW9uLmM6NTA2OlxcdGVycm9yID0gX192Y2NfY29ubmVjdCh2Y2MsIGRldiwgdnBpLCB2Y2kpO1xcbm5ldC9hdG0vY29tbW9uLmMtNTA3LVxcdGlmIChlcnJvcikge1xcbi0tXFxubmV0L2F0bS9jb21tb24uaD0xNT1pbnQgdmNjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jayk7XFxubmV0L2F0bS9jb21tb24uaDoxNjppbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKTtcXG5uZXQvYXRtL2NvbW1vbi5oLTE3LWludCB2Y2NfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxcbi0tXFxubmV0L2F0bS9wdmMuYz0yNz1zdGF0aWMgaW50IHB2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpzb2NrYWRkcixcXG4tLVxcbm5ldC9hdG0vcHZjLmMtNTEtXFx0fVxcbm5ldC9hdG0vcHZjLmM6NTI6XFx0ZXJyb3IgPSB2Y2NfY29ubmVjdChzb2NrLCBhZGRyLVxcdTAwM2VzYXBfYWRkci5pdGYsIGFkZHItXFx1MDAzZXNhcF9hZGRyLnZwaSxcXG5uZXQvYXRtL3B2Yy5jLTUzLVxcdFxcdFxcdCAgICBhZGRyLVxcdTAwM2VzYXBfYWRkci52Y2kpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMjoxNC45ODA4MzAyM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTAwMzAwMzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHZjY19jb25uZWN0YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlYmFzZSBhbmQgaXQgbG9va3MgbGlrZSBgdmNjX2Nvbm5lY3RgIGlzIG9ubHkgZGlyZWN0bHkgdXNlZCBieSBgcHZjLmNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBCdXQgd2FpdC4uLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYF9fdmNjX2Nvbm5lY3RgLCBhbmQgSSB0aGluayBpdCdzIHVzZWQgaW4gYW5vdGhlciBtb2R1bGUuIExldCdzIHNlZS4uLiBpdCAqY291bGQqIGJlIGBzdmNfYWRkcGFydHlgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCByaWdodD8gQWgsIG5vLCB0aGF0J3Mgd3JvbmcuIEkgaGF2ZSB0byBnbyBiYWNrIHRvIGBjb21tb24uY2AgdG8gc2VlIHRoYXQgYF9fdmNjX2Nvbm5lY3RgIGlzIGFjdHVhbGx5IGRlY2xhcmVkIGFzIHN0YXRpYyB0aGVyZS4gUmlnaHQsIHNvIHRoYXQgbGltaXRzIGl0cyBzY29wZSBjb25zaWRlcmFibHksIGV2ZW4gaWYgaXQncyBjb25jZXB0dWFsbHkgdGhlIHNhbWUgdGhpbmcuIE5vdywgbGV0J3MgY2FzdCBhIHdpZGVyIG5ldC4gV2hhdCBlbHNlLCAqYW55d2hlcmUqLCBjYWxscyBgX192Y2NfY29ubmVjdGA/IEkgbmVlZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIHVzYWdlIGJlZm9yZSBJIGNhbiByZWFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU0OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAyOjIxLjA4MTEzMzA2MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0OTQ2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX192Y2NfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL2NvbW1vbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vY29tbW9uLmM9MzMwPXN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtMzc3LVxcbm5ldC9hdG0vY29tbW9uLmM6Mzc4OnN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksXFxubmV0L2F0bS9jb21tb24uYy0zNzktXFx0XFx0XFx0IGludCB2Y2kpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jPTQ1OD1pbnQgdmNjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGl0Ziwgc2hvcnQgdnBpLCBpbnQgdmNpKVxcbi0tXFxubmV0L2F0bS9jb21tb24uYy01MDUtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxubmV0L2F0bS9jb21tb24uYzo1MDY6XFx0ZXJyb3IgPSBfX3ZjY19jb25uZWN0KHZjYywgZGV2LCB2cGksIHZjaSk7XFxubmV0L2F0bS9jb21tb24uYy01MDctXFx0aWYgKGVycm9yKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAyOjIxLjEyNjYzMDI4MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjE2NTEyNDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29ubmVjdGlvbiBXb3JrZmxvdyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgZnVuY3Rpb24gYHZjY19jb25uZWN0YCBpcyB0aGUga2V5IHBsYXllciBoZXJlOyBhY2NvcmRpbmcgdG8gdGhlIGNvZGUsIGl0J3MgdGhlIG9ubHkgb25lIGNhbGxpbmcgaXQuIE5vdywgd2hlcmUgZG9lcyBgdmNjX2Nvbm5lY3RgIGZpdCBpbnRvIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzPyBBaCwgcmlnaHQsIGBwdmNfYmluZGAgYW5kIGBwdmNfY29ubmVjdGAgYXJlIHRoZSBvbmVzIGNhbGxpbmcgaXQuIFRob3NlIGFyZSB0aGUgaW5pdGlhbCBhY2Nlc3MgcG9pbnRzLiBIYW5nIG9uIGEgc2Vjb25kLCB3YXNuJ3QgYHB2Y19iaW5kYCBkZWNsYXJlZCBhcyBzdGF0aWM/IFllcywgYnV0IGl0J3MgYXNzaWduZWQgdG8gYC5iaW5kYCB3aXRoaW4gYHB2Y19wcm90b19vcHNgIHdoaWNoIG1lYW5zIGl0IHN0aWxsIGZ1bmN0aW9ucyBhcyBhbiBlbnRyeSBwb2ludC4gVGhlcmVmb3JlLCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgdGhpcyBjb25uZWN0aW9uIGFyZSBgdmNjX2Nvbm5lY3RgLCBgcHZjX2JpbmRgLCBhbmQgYHB2Y19jb25uZWN0YC4gVGhhdCBjbGFyaWZpZXMgdGhlIHByaW1hcnkgY29ubmVjdGlvbiBmbG93LiBKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBjaGVjayBpZiBgZmluZF9jaWAgaXMgY2FsbGVkIGFueXdoZXJlIGVsc2Ugd2l0aGluIHRoaXMgcGFydCBvZiB0aGUgY29kZWJhc2UgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBjcnVjaWFsIGNvbXBvbmVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA5NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMjoyNy43NDMxNDU0ODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDMzNDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmRfY2lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9jb21tb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL2NvbW1vbi5jPTMwNT1zdGF0aWMgaW50IGNoZWNrX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0IHZwaSwgaW50IHZjaSlcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtMzI5LVxcbm5ldC9hdG0vY29tbW9uLmM6MzMwOnN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcXG5uZXQvYXRtL2NvbW1vbi5jLTMzMS17XFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jPTM3OD1zdGF0aWMgaW50IF9fdmNjX2Nvbm5lY3Qoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IGF0bV9kZXYgKmRldiwgc2hvcnQgdnBpLFxcbi0tXFxubmV0L2F0bS9jb21tb24uYy0zOTktXFx0aWYgKHRlc3RfYml0KEFUTV9ERl9SRU1PVkVELCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncykgfHxcXG5uZXQvYXRtL2NvbW1vbi5jOjQwMDpcXHQgICAgKGVycm9yID0gZmluZF9jaSh2Y2MsIFxcdTAwMjZ2cGksIFxcdTAwMjZ2Y2kpKSkge1xcbm5ldC9hdG0vY29tbW9uLmMtNDAxLVxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNnZjY19za2xpc3RfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAyOjI3Ljc4NjU4NDg1NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ2MzU4MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgQVRNIENvbm5lY3Rpb24gRW50cnkgUG9pbnRzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYF9fdmNjX2Nvbm5lY3RgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgKmNhbGxzKiBgZmluZF9jaWAuIFRoYXQgbmFycm93cyBvdXIgcHJpbWFyeSBlbnRyeSBwb2ludHMgY29uc2lkZXJhYmx5LiBTbywgd2UncmUgcmVhbGx5IHRhbGtpbmcgYWJvdXQgZm9jdXNpbmcgb24gYHZjY19jb25uZWN0YCwgYHB2Y19iaW5kYCwgYW5kIGBwdmNfY29ubmVjdGAuIFRob3NlIGFyZSB0aGUgb25lcyB0byBzY3J1dGluaXplIGZvciBob3cgQVRNIGNvbm5lY3Rpb25zIGFyZSBiZWluZyBpbml0aWF0ZWQgYW5kIG1hbmFnZWQgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiBjb25maWd1cmF0aW9uIGFuZCBpbml0aWFsIHNldHVwLlxuXG5Ob3csIGEgY3JpdGljYWwgbmV4dCBzdGVwLiBXZSBjYW4ndCBhZmZvcmQgdG8gYmUgYmxpbmtlcmVkLiBBcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGlzIEFUTSBpbmZyYXN0cnVjdHVyZSB0aGF0IGNvdWxkIGltcGFjdCB0aGVzZSBjb25uZWN0aW9ucz8gTGV0J3MgYXNzdW1lIHRoZXJlIGFyZSwgYW5kIHN0YXJ0IGludmVzdGlnYXRpbmcgdGhlIGNvZGUgYmFzZSB0byBmaW5kIHRoZW0uIFRoZSBnb2FsIGlzIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mICphbGwqIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIHdpdGggdGhlc2UgY29ubmVjdGlvbiBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MzMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMjozMS40MzI5NDQ5NzJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzUwMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVE1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9LY29uZmlnLTUtXFxubmV0L2F0bS9LY29uZmlnOjY6Y29uZmlnIEFUTVxcbm5ldC9hdG0vS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVxcXCJcXG4tLVxcbm5ldC9hdG0vS2NvbmZpZy0yMS1cXG5uZXQvYXRtL0tjb25maWc6MjI6Y29uZmlnIEFUTV9CUjI2ODRcXG5uZXQvYXRtL0tjb25maWctMjMtXFx0dHJpc3RhdGUgXFxcIlJGQzE0ODMvMjY4NCBCcmlkZ2VkIHByb3RvY29sc1xcXCJcXG4tLVxcbm5ldC9hdG0vS2NvbmZpZy0zMC1cXG5uZXQvYXRtL0tjb25maWc6MzE6Y29uZmlnIEFUTV9CUjI2ODRfSVBGSUxURVJcXG5uZXQvYXRtL0tjb25maWctMzItXFx0Ym9vbCBcXFwiUGVyLVZDIElQIGZpbHRlciBrbHVkZ2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAyOjMxLjQ3ODI5NzA2MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDc3NzE3ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipDaGVja2luZyBBVE0gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGhlIGBBVE1gIGNvbmZpZyBpcyB0aGUgY29yZSBvbmUgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuIEZpcnN0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBkZXBlbmRlbmNpZXMgbHVya2luZyBhcm91bmQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgQVRNYCByZWxpZXMgb24gYW55IG90aGVyIGNvbmZpZ3Mgb3IgbW9kdWxlcy4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtYWtlLCBvciBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGFzcGVjdHMgdG8gY29uc2lkZXIuIEl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2ggYXQgdGhlIGJlZ2lubmluZy4gTm8gcG9pbnQgaW4gbWlzc2luZyBhIHBvdGVudGlhbCBjYXNjYWRlISBMZXQncyBnZXQgYSBjbGVhciBkZXBlbmRlbmN5IG1hcC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE4OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAyOjM2Ljk1NjAxNzIzM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMTkzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9LY29uZmlnPTIyPWNvbmZpZyBBVE1fQlIyNjg0XFxubmV0L2F0bS9LY29uZmlnLTIzLVxcdHRyaXN0YXRlIFxcXCJSRkMxNDgzLzI2ODQgQnJpZGdlZCBwcm90b2NvbHNcXFwiXFxubmV0L2F0bS9LY29uZmlnOjI0OlxcdGRlcGVuZHMgb24gQVRNIFxcdTAwMjZcXHUwMDI2IElORVRcXG5uZXQvYXRtL0tjb25maWctMjUtXFx0aGVscFxcbi0tXFxubmV0L2F0bS9LY29uZmlnPTMxPWNvbmZpZyBBVE1fQlIyNjg0X0lQRklMVEVSXFxubmV0L2F0bS9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIlBlci1WQyBJUCBmaWx0ZXIga2x1ZGdlXFxcIlxcbm5ldC9hdG0vS2NvbmZpZzozMzpcXHRkZXBlbmRzIG9uIEFUTV9CUjI2ODRcXG5uZXQvYXRtL0tjb25maWctMzQtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMjozNy4wMDMwMzgzMjJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMTM0OTkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBBVE0gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBBVE1gIGZlYXR1cmUgaGVyZS4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzLCBkb2VzIGBBVE1gIGhhdmUgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXM/IEkgd2FudCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBiYXNlIGNvbmZpZ3VyYXRpb24uIFRvIGZpZ3VyZSB0aGlzIG91dCB3aXRoIGNlcnRhaW50eSwgSSBzaG91bGQgcmVhbGx5IGRpdmUgaW50byB0aGUgYG5ldC9hdG0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBnby10byBwbGFjZSBmb3IgYWxsIG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gQVRNIGFuZCBhbnkgcHJlcmVxdWlzaXRlcyBpdCBtaWdodCBoYXZlLiBVbmRlcnN0YW5kaW5nIHRoaXMgZmlsZSB3aWxsIGdpdmUgbWUgdGhlIGdyb3VuZCB0cnV0aCwgaGVscGluZyBtZSBhc3Nlc3MgdGhlIHRydWUgaW5kZXBlbmRlbmNlIG9mIHRoZSBBVE0gY29yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUzNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAyOjQwLjYzNDM5MDUzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9hdG0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBBc3luY2hyb25vdXMgVHJhbnNmZXIgTW9kZSAoQVRNKVxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgQVRNXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSlcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIEFUTSBpcyBhIGhpZ2gtc3BlZWQgbmV0d29ya2luZyB0ZWNobm9sb2d5IGZvciBMb2NhbCBBcmVhIE5ldHdvcmtzXFxuICAxMDpcXHRcXHQgIGFuZCBXaWRlIEFyZWEgTmV0d29ya3MuICBJdCB1c2VzIGEgZml4ZWQgcGFja2V0IHNpemUgYW5kIGlzXFxuICAxMTpcXHRcXHQgIGNvbm5lY3Rpb24gb3JpZW50ZWQsIGFsbG93aW5nIGZvciB0aGUgbmVnb3RpYXRpb24gb2YgbWluaW11bVxcbiAgMTI6XFx0XFx0ICBiYW5kd2lkdGggcmVxdWlyZW1lbnRzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIEluIG9yZGVyIHRvIHBhcnRpY2lwYXRlIGluIGFuIEFUTSBuZXR3b3JrLCB5b3VyIExpbnV4IGJveCBuZWVkcyBhblxcbiAgMTU6XFx0XFx0ICBBVE0gbmV0d29ya2luZyBjYXJkLiBJZiB5b3UgaGF2ZSB0aGF0LCBzYXkgWSBoZXJlIGFuZCB0byB0aGUgZHJpdmVyXFxuICAxNjpcXHRcXHQgIG9mIHlvdXIgQVRNIGNhcmQgYmVsb3cuXFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdCAgTm90ZSB0aGF0IHlvdSBuZWVkIGEgc2V0IG9mIHVzZXItc3BhY2UgcHJvZ3JhbXMgdG8gYWN0dWFsbHkgbWFrZSB1c2VcXG4gIDE5OlxcdFxcdCAgb2YgQVRNLiAgU2VlIHRoZSBmaWxlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0ucnN0XFx1MDAzZSBmb3JcXG4gIDIwOlxcdFxcdCAgZnVydGhlciBkZXRhaWxzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMjo0MC42MzQ0NDM5MTlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2OTk3ODY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipBVE0gQ29uZmlndXJhdGlvbjogU2ltcGxpZnlpbmcgdGhlIEFwcHJvYWNoKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSB0aGlzIGJvaWxzIGRvd24gdG8gdXNpbmcgKmp1c3QqIHRoZSBgQVRNYCBjb25maWcsIHdoaWNoIGlzIGdyZWF0IOKAkyBrZWVwcyB0aGluZ3MgY2xlYW4gYW5kIHN0cmFpZ2h0Zm9yd2FyZC4gTXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIHRob3NlIHNwZWNpZmljIHN5bWJvbHM6IGB2Y2NfY29ubmVjdGAsIGBwdmNfYmluZGAsIGFuZCBgcHZjX2Nvbm5lY3RgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGluIHRoaXMgY29udGV4dC4gQnV0LCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gQSBxdWljayBzYW5pdHkgY2hlY2sgaXMgbmVjZXNzYXJ5OiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYHZjY19jb25uZWN0YCBpcyBlaXRoZXIgZXhwbGljaXRseSBleHBvcnRlZCBmb3IgdXNlIGVsc2V3aGVyZSBvciBpcywgYXQgdGhlIHZlcnkgbGVhc3QsIHJlYWNoYWJsZSBmcm9tIG90aGVyIG1vZHVsZXMgb3Igc2NvcGVzIHRoYXQgbWlnaHQgdXRpbGl6ZSBpdC4gR290dGEgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAwNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDI6NDUuNjA0NDI4MjY4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc0MDExOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdmNjX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAyOjQ1LjY1MTE3NDQ2N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzcwMzk1ODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsbHkgRXhwb3J0ZWQgQVRNIEZ1bmN0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gYHZjY19jb25uZWN0YC4uLiB0aGF0IGxvb2tzIGxpa2UgaXQncyAqZXhwb3J0ZWQqPyBUaGF0J3MgdW5leHBlY3RlZC4gTGV0IG1lIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBBVE0gVkNDIGVzdGFibGlzaG1lbnQgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGZhY3QgdGhhdCBpdCdzIHN1cmZhY2luZyBhcyBhbiBleHBvcnQgaW1tZWRpYXRlbHkgcmFpc2VzIGZsYWdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgdmlzaWJpbGl0eSwgYW5kIGFsc28gd2hlcmUgdGhhdCBmdW5jdGlvbiBsaXZlcy4gTGV0J3Mgc3RhcnQgYnkgY29uZmlybWluZyBpdHMgZGVmaW5pdGlvbi4gSSdtIGdvaW5nIHN0cmFpZ2h0IHRvIGBuZXQvYXRtL2NvbW1vbi5jYC4gVGhhdCBmaWxlJ3MgdHlwaWNhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgc2hhcmVkIEFUTSBpbmZyYXN0cnVjdHVyZS4gTGV0J3Mgc2VlIGlmIHRoZSBzeW1ib2wgdGFibGUgY29uZmlybXMgaXQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgdmlzaWJpbGl0eSwgY29udGV4dCwgYW5kIHBvdGVudGlhbCBzaWRlLWVmZmVjdHMgdGhhdCB0aGlzIGV4cG9ydCBpbnRyb2R1Y2VzLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IHRoaXMgbWlnaHQgb3BlbiBhIHBvdGVudGlhbGx5IHVuc2FmZSBkb29yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjY0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDI6NTAuMDIxNTcyMjI0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMyNzI2OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdmNjX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9jb21tb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDI6NTAuMDY2OTA4MTkzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyOTc4NDExMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBEaWFnbm9zdGljOiBFeHBvcnQgVmVyaWZpY2F0aW9uKipcblxuUmlnaHQsIGJlZm9yZSBkaXZpbmcgaW50byBhbnl0aGluZyBmdXJ0aGVyLCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGVzdGFibGlzaCBhIGJhc2VsaW5lLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBhbiBhY3R1YWwgZXhwb3J0IGlzc3VlIGFuZCBub3Qgc29tZXRoaW5nIGVsc2UuIFRoZXJlZm9yZSwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHNpbXBsZTogTGV0J3MgY2hlY2suIERvZXMgdGhpcyB0aGluZyBldmVuICpleHBvcnQqIGF0IGFsbD8gV2UgbmVlZCB0byBhc2NlcnRhaW4sIGNhdGVnb3JpY2FsbHksIGlmIHRoZSBwcm9jZXNzIGV2ZW4gaW5pdGlhdGVzLCBwcm9kdWNlcyBhbnkgb3V0cHV0IChyZWdhcmRsZXNzIG9mIGl0cyBjb3JyZWN0bmVzcyksIG9yIGlmIHRoZSBwcm9ibGVtIGxpZXMgcHJpb3IgdG8gdGhhdCBzdGFnZS4gSWYgdGhlcmUgaXMgbm8gZXhwb3J0LCBwZXJpb2QsIHRoZSBzdWJzZXF1ZW50IGludmVzdGlnYXRpdmUgcGF0aHdheXMgYXJlIGRyYXN0aWNhbGx5IGRpZmZlcmVudCB0aGFuIGlmIHRoZXJlIGlzIGFuIGV4cG9ydCB0aGF0IGlzIGZhaWxpbmcuIExldOKAmXMgZ2V0IHRoYXQgZXN0YWJsaXNoZWQgZmlyc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MzAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMjo1NC4zNjQ3NTE4NzFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTMyMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9jb21tb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL2NvbW1vbi5jPTM0PXN0cnVjdCBobGlzdF9oZWFkIHZjY19oYXNoW1ZDQ19IVEFCTEVfU0laRV07XFxubmV0L2F0bS9jb21tb24uYzozNTpFWFBPUlRfU1lNQk9MKHZjY19oYXNoKTtcXG5uZXQvYXRtL2NvbW1vbi5jLTM2LVxcbm5ldC9hdG0vY29tbW9uLmM9Mzc9REVGSU5FX1JXTE9DSyh2Y2Nfc2tsaXN0X2xvY2spO1xcbm5ldC9hdG0vY29tbW9uLmM6Mzg6RVhQT1JUX1NZTUJPTCh2Y2Nfc2tsaXN0X2xvY2spO1xcbm5ldC9hdG0vY29tbW9uLmMtMzktXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jPTUwPXZvaWQgdmNjX2luc2VydF9zb2NrZXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2F0bS9jb21tb24uYy01NS19XFxubmV0L2F0bS9jb21tb24uYzo1NjpFWFBPUlRfU1lNQk9MKHZjY19pbnNlcnRfc29ja2V0KTtcXG5uZXQvYXRtL2NvbW1vbi5jLTU3LVxcbi0tXFxubmV0L2F0bS9jb21tb24uYz0yMDk9dm9pZCB2Y2NfcmVsZWFzZV9hc3luYyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgcmVwbHkpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTIxNy19XFxubmV0L2F0bS9jb21tb24uYzoyMTg6RVhQT1JUX1NZTUJPTCh2Y2NfcmVsZWFzZV9hc3luYyk7XFxubmV0L2F0bS9jb21tb24uYy0yMTktXFxubmV0L2F0bS9jb21tb24uYz0yMjA9dm9pZCB2Y2NfcHJvY2Vzc19yZWN2X3F1ZXVlKHN0cnVjdCBhdG1fdmNjICp2Y2MpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTIzNy19XFxubmV0L2F0bS9jb21tb24uYzoyMzg6RVhQT1JUX1NZTUJPTCh2Y2NfcHJvY2Vzc19yZWN2X3F1ZXVlKTtcXG5uZXQvYXRtL2NvbW1vbi5jLTIzOS1cXG5uZXQvYXRtL2NvbW1vbi5jPTI0MD12b2lkIGF0bV9kZXZfc2lnbmFsX2NoYW5nZShzdHJ1Y3QgYXRtX2RldiAqZGV2LCBjaGFyIHNpZ25hbClcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtMjU0LX1cXG5uZXQvYXRtL2NvbW1vbi5jOjI1NTpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfc2lnbmFsX2NoYW5nZSk7XFxubmV0L2F0bS9jb21tb24uYy0yNTYtXFxubmV0L2F0bS9jb21tb24uYz0yNTc9dm9pZCBhdG1fZGV2X3JlbGVhc2VfdmNjcyhzdHJ1Y3QgYXRtX2RldiAqZGV2KVxcbi0tXFxubmV0L2F0bS9jb21tb24uYy0yNzctfVxcbm5ldC9hdG0vY29tbW9uLmM6Mjc4OkVYUE9SVF9TWU1CT0woYXRtX2Rldl9yZWxlYXNlX3ZjY3MpO1xcbm5ldC9hdG0vY29tbW9uLmMtMjc5LVxcbi0tXFxubmV0L2F0bS9jb21tb24uYz04MDY9aW50IHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbi0tXFxubmV0L2F0bS9jb21tb24uYy04MDktfVxcbm5ldC9hdG0vY29tbW9uLmM6ODEwOkVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcik7XFxubmV0L2F0bS9jb21tb24uYy04MTEtXFxubmV0L2F0bS9jb21tb24uYz04MTI9dm9pZCB1bnJlZ2lzdGVyX2F0bWRldmljZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbi0tXFxubmV0L2F0bS9jb21tb24uYy04MTUtfVxcbm5ldC9hdG0vY29tbW9uLmM6ODE2OkVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfYXRtZGV2aWNlX25vdGlmaWVyKTtcXG5uZXQvYXRtL2NvbW1vbi5jLTgxNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDI6NTQuNDA4Mjg3ODZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU0NTU5NDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIGB2Y2NfY29ubmVjdGAqKlxuXG5BbHJpZ2h0LCBzbyBgdmNjX2Nvbm5lY3RgIGlzbid0IGEgZ2xvYmFsIHN5bWJvbC4gSXQgbG9va3MgbGlrZSBpdCdzIHN0cmljdGx5IGFuIGludGVybmFsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYG5ldC9hdG0vYCBkaXJlY3RvcnkuIFRoYXQncyBhIGxpdHRsZSBzdXJwcmlzaW5nLCBJIHdvdWxkIGhhdmUgYXNzdW1lZCBpdCB3YXMgbW9yZSB3aWRlbHkgdXNlZC4gQnV0IHdhaXQsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXNuJ3QgYHZjY19jb25uZWN0YCBpbnZva2VkIGJ5IGBzdmNfY29ubmVjdGA/IEknbSBwcmV0dHkgc3VyZSBJJ3ZlIHNlZW4gdGhhdCByZWxhdGlvbnNoaXAgYmVmb3JlLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBieSBwZWVraW5nIGludG8gYHN2Yy5jYCwganVzdCB0byB2ZXJpZnkgdGhlIGNhbGwgaGllcmFyY2h5LiBJJ20gZ29pbmcgdG8gd2FudCB0byBjb25maXJtIHRoZSBpbnRlcmFjdGlvbiwgYmVjYXVzZSBJIGZlZWwgbGlrZSBJJ20gbWlzc2luZyBjb250ZXh0IGhlcmUuIExldCBtZSBzZWUgd2hlcmUgYHN2Y19jb25uZWN0YCBnZXRzIGNhbGxlZCBmcm9tLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDU3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDI6NTkuOTUzODg0NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwODY1NjAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZjY19jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vc3ZjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjAwLjAwMTk3NDc2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMDEwNzU2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKlF1aWNrIENoZWNrIEJlZm9yZSBEaWdnaW5nIERlZXBlcioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gZGlkbid0IEkgYWxyZWFkeSBsb29rIGF0IGBzdmMuY2A/IEkgY291bGQgaGF2ZSBzd29ybiBJIHdhcyBpbiB0aGF0IGZpbGUgZWFybGllci4gTGV0IG1lIGp1c3QgbWFrZSBzdXJlIEknbSBub3QgcmV0cmFjaW5nIHN0ZXBzIGhlcmUuIE9rYXksIHllcC4gSSBkZWZpbml0ZWx5IGFscmVhZHkgY2hlY2tlZCB0aGF0IG9uZS4gQWxyaWdodCwgbGV0J3Mga2VlcCBtb3ZpbmcuIElmIHRoZSBpc3N1ZSBpc24ndCBpbiB0aGUgbW9yZSBnZW5lcmFsIGBzdmMuY2AsIHRoZW4gSSBuZWVkIHRvIG5hcnJvdyB0aGUgc2NvcGUsIGxldCdzIGdvIGRlZXBlciBhbmQgY2hlY2sgdGhlIHNwZWNpZmljcyBmb3IgdGhlIGF0bSBuZXR3b3JrIGxheWVyLiBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGxvb2sgZm9yIHRoZSBgY29ubmVjdGAgZnVuY3Rpb25hbGl0eSBub3csIGFuZCBiYXNlZCBvbiB0aGUgZmlsZSBwYXRoLCBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgaXQgaW4gYG5ldC9hdG0vc3ZjLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc0MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjA3LjIwMzA1MjQxNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4NzY2MTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9zdmMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6MDcuMjQ3OTM0Njc1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjA2NTY2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIGNvZGU6XG5cbioqRGlnZ2luZyBpbnRvIE5ldHdvcmsgU2VydmljZSBDb25uZWN0aW9uKipcblxuSG1tLCBob2xkIG9uIGEgbWludXRlLiBJIHdhcyBleHBlY3RpbmcgdG8gZmluZCB0aGUgYGNvbm5lY3RgIGltcGxlbWVudGF0aW9uIGluIGBzdmMuY2AsIGJ1dCBpdCdzIG5vdCB0aGVyZS4gVGhhdCdzIHVudXN1YWwsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYSBzaG93LXN0b3BwZXIuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgbmV0d29yayBzZXJ2aWNlIGFyY2hpdGVjdHVyZSB1c2VzIHNvbWUgb3RoZXIgbWVhbnMgb2YgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBvciBwZXJoYXBzIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGlzIHNwcmVhZCBkaWZmZXJlbnRseSBhY3Jvc3MgdGhlIG5ldHdvcmtpbmcgc3RhY2suIFNpbmNlIEknbSB3b3JraW5nIHdpdGggQVRNIGluIHBhcnRpY3VsYXIsIGl0J3Mgd29ydGggY2hlY2tpbmcgdG8gc2VlIGhvdyBpdCBiaW5kcyB0byB0aGUgbmV0d29yay4gTGV0J3Mgc2VlIGlmIGBuZXQvYXRtL3N2Yy5jYCBjb250YWlucyB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgYmluZGluZy4gSSBzaG91bGQgZmluZCBpdCBpbiB0aGF0IGNvZGUgZmlsZSwgYXMgSSByZWNhbGwgdGhpcyBpcyBob3cgdGhlIEFUTSBkcml2ZXJzIGltcGxlbWVudCB0aGVpciBzZXJ2aWNlcy4gVGltZSB0byBnZXQgY29kaW5nLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTc2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6MTEuMjA4NTkzMTk4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDczMzcwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL3N2Yy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzoxMS4yNTkzMzEyMzdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0NTgxMzc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBTZXJ2aWNlIENvbnRyb2wgTGF5ZXIqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBzZXJ2aWNlIGNvbnRyb2wgbGF5ZXIgKGBzdmMuY2ApIHdvdWxkIGhhbmRsZSB0aGUgc29ja2V0IGJpbmRpbmcgYW5kIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gQnV0IGxvb2tpbmcgYmFjayBhdCB0aGUgY29kZSwgSSBkb24ndCBzZWUgYGJpbmRgIG9yIGBjb25uZWN0YCBjYWxscyBpbiBgc3ZjLmNgLiBIbW0sIHRoYXQncyB1bnVzdWFsLiBJdCdzIHRpbWUgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgbmV0L2F0bS9zdmMuY2AgZmlsZSBhbmQgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlc2UgY3J1Y2lhbCBuZXR3b3JrIGZ1bmN0aW9uIGNhbGxzLCB0byB1bmRlcnN0YW5kIHRoZWlyIGRlc2lnbiBjaG9pY2VzIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgbmV0d29ya2luZyBzdGFjayBhbmQgc2VlIHdoeSB0aGVzZSBpbXBvcnRhbnQgY2FsbHMgYXJlIG5vdCB3aXRoaW4gYHN2Yy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhvc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBiZWluZyBjYWxsZWQuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoYXQgQVRNLXNwZWNpZmljIHNlcnZpY2UgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzoxNS4zMDUxNDcyMDlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk1OTEsIkVycm9yIjoidGhlIGZpbGUgZG9lcyBub3QgZXhpc3QiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYXRtL3N2Yy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJ0aGUgZmlsZSBkb2VzIG5vdCBleGlzdFwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzoxNS4zMDUxOTEzNThaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1Njk1MTM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBNaXNtYXRjaCBpbiBGaWxlcGF0aHMqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBzb21ldGhpbmcgYW5kIEkgaGl0IGEgc25hZy4gVGhlIHBhdGggcHJvdmlkZWQsIHNwZWNpZmljYWxseSBgc3ZjLmNgLCBpc24ndCB3b3JraW5nIGFzIGV4cGVjdGVkLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCBpdCdzIGp1c3QgYSBzaW1wbGUgdHlwbyBvciwgbW9yZSBsaWtlbHksIGEgbG9jYXRpb24gaXNzdWUuIFRoaXMgaXMgcHJldHR5IGNvbW1vbjsgdGhlc2UgdGhpbmdzIHNoaWZ0IGFyb3VuZCwgZXNwZWNpYWxseSBpbiBvbGRlciBjb2RlYmFzZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIGxldCdzIGNvbmZpcm0gdGhlIGludGVuZGVkIGxvY2F0aW9uLiBJcyB0aGlzIGFjdHVhbGx5IGluIHRoZSBgbmV0L2F0bS9gIGRpcmVjdG9yeT9cIiBJdCdzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSBJJ20gbG9va2luZyBpbiB0aGUgcmlnaHQgc3BvdCwgY29uc2lkZXJpbmcgdGhlIG5ldHdvcmtpbmcgY29udGV4dCBzZWVtcyB0byBiZSBpbXBsaWVkLiBOb3cgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyBleGlzdGVuY2UgdGhlcmUsIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0OTcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjE5LjU2MjE0NDQyN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwibmV0L2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYXRtX21pc2MuY1wiLFxuICAgIFwiYXRtX3N5c2ZzLmNcIixcbiAgICBcImJyMjY4NC5jXCIsXG4gICAgXCJjb21tb24uY1wiLFxuICAgIFwiY29tbW9uLmhcIixcbiAgICBcImlvY3RsLmNcIixcbiAgICBcInBwcG9hdG0uY1wiLFxuICAgIFwicHJvYy5jXCIsXG4gICAgXCJwcm90b2NvbHMuaFwiLFxuICAgIFwicHZjLmNcIixcbiAgICBcInJhdy5jXCIsXG4gICAgXCJyZXNvdXJjZXMuY1wiLFxuICAgIFwicmVzb3VyY2VzLmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6MTkuNTYyMTk2MDQ3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzYzNDE5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipNaXNzaW5nIFNWQy5DIGFuZCBQb3RlbnRpYWwgUFZDIENvbm5lY3Rpb24gUGl0ZmFsbHMqKlxuXG5SaWdodCwgdGhlcmUncyBubyBgc3ZjLmNgIHRvIGNvbnNpZGVyIGhlcmUuIFRoYXQncyBnb29kLCBvbmUgbGVzcyBwbGFjZSB0byBjaGVjayBmb3IgYHZjY19jb25uZWN0YCBjYWxscy4gT2theSwgc28gaXQgbG9va3MgbGlrZSBgcHZjLmNgIGlzIHRoZSBvbmx5IGZpbGUgZGlyZWN0bHkgY2FsbGluZyBgdmNjX2Nvbm5lY3RgLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLCBidXTigKYgd2FpdCBhIG1pbnV0ZS4gQW0gSSBiZWluZyB0b28gaGFzdHk/IEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZS4gV2hhdCBhYm91dCB0aGUgcG90ZW50aWFsIGZvciBpbmRpcmVjdCBjYWxscyB0aHJvdWdoIG90aGVyIG1vZHVsZXM/IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHJ1bGUgb3V0IGBwcHBvYXRtLmNgIGFuZCBgYnIyNjg0LmNgLiBUaG9zZSBhcmUgY2xhc3NpYyBhcmVhcyB0aGF0IGNvdWxkIGJlIGludGVyYWN0aW5nIHdpdGggdGhlIEFUTSBsYXllciwgcGVyaGFwcyBlc3RhYmxpc2hpbmcgUFZDIGNvbm5lY3Rpb25zIHRocm91Z2ggYSBkaWZmZXJlbnQgaW50ZXJmYWNlIHRoYXQgKnVsdGltYXRlbHkqIHRyaWdnZXJzIGB2Y2NfY29ubmVjdGAgY2FsbHMuIEkgbmVlZCB0byBzY2FuIHRob3NlIGZpbGVzLCBhbmQgbWF5YmUgdGhlIHJlbGF0ZWQgaW5jbHVkZSBmaWxlcywgcmlnaHQgbm93IHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLiBXZSBuZWVkIHRvIGJlIGV4aGF1c3RpdmUgdG8gYXZvaWQgY2hhc2luZyByZWQgaGVycmluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODMzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjI0LjA5ODU0MDcxMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMjk3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNjX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9jb21tb24uYz0zMzA9c3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxcbi0tXFxubmV0L2F0bS9jb21tb24uYy0zNzctXFxubmV0L2F0bS9jb21tb24uYzozNzg6c3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSxcXG5uZXQvYXRtL2NvbW1vbi5jLTM3OS1cXHRcXHRcXHQgaW50IHZjaSlcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmMtNDU3LVxcbm5ldC9hdG0vY29tbW9uLmM6NDU4OmludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXFxubmV0L2F0bS9jb21tb24uYy00NTkte1xcbi0tXFxubmV0L2F0bS9jb21tb24uYy01MDUtXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxubmV0L2F0bS9jb21tb24uYzo1MDY6XFx0ZXJyb3IgPSBfX3ZjY19jb25uZWN0KHZjYywgZGV2LCB2cGksIHZjaSk7XFxubmV0L2F0bS9jb21tb24uYy01MDctXFx0aWYgKGVycm9yKSB7XFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5oPTE1PWludCB2Y2NfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKTtcXG5uZXQvYXRtL2NvbW1vbi5oOjE2OmludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpO1xcbm5ldC9hdG0vY29tbW9uLmgtMTctaW50IHZjY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsXFxuLS1cXG5uZXQvYXRtL3B2Yy5jPTI3PXN0YXRpYyBpbnQgcHZjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxcbi0tXFxubmV0L2F0bS9wdmMuYy01MS1cXHR9XFxubmV0L2F0bS9wdmMuYzo1MjpcXHRlcnJvciA9IHZjY19jb25uZWN0KHNvY2ssIGFkZHItXFx1MDAzZXNhcF9hZGRyLml0ZiwgYWRkci1cXHUwMDNlc2FwX2FkZHIudnBpLFxcbm5ldC9hdG0vcHZjLmMtNTMtXFx0XFx0XFx0ICAgIGFkZHItXFx1MDAzZXNhcF9hZGRyLnZjaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjI0LjE0Mjc3NDAyMVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzQwMjI1MzEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0OlxuXG4qKk5hcnJvd2luZyBEb3duIHRoZSBTY29wZSoqXG5cbkFscmlnaHQsIHRoZSBpbml0aWFsIGFuYWx5c2lzIGluZGljYXRlcyB0aGF0IGB2Y2NfY29ubmVjdGAgaXMgZXhjbHVzaXZlbHkgY2FsbGVkIGJ5IGBwdmMuY2AuIFRoYXQncyBhIHN0cm9uZyBzdGFydGluZyBwb2ludC4gTXkgZm9jdXMsIHRoZW4sIHNoaWZ0cyB0byB1bmRlcnN0YW5kaW5nIGhvdyBgcHZjLmNgIHV0aWxpemVzIHRoaXMgZnVuY3Rpb24sIHNvIEknbGwgY29uY2VudHJhdGUgb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBwdmNfYmluZGAgYW5kIGBwdmNfY29ubmVjdGAuIEhvd2V2ZXIsIEkgbmVlZCB0byBrZWVwIGB2Y2NfY29ubmVjdGAgaXRzZWxmIGluIG1pbmQgYXMgYSBrZXkgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgc3lzdGVtLiBMZXQgbWUgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgcHZjX2JpbmRgIGFuZCBgcHZjX2Nvbm5lY3RgIHdpdGhpbiBgcHZjLmNgIHRvIHNlZSBob3cgdGhleSBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzozNy41NDUwMjkwOTdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9wdmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0LyogbmV0L2F0bS9wdmMuYyAtIEFUTSBQVkMgc29ja2V0cyAqL1xcbiAgIDM6XFx0XFxuICAgNDpcXHQvKiBXcml0dGVuIDE5OTUtMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqL1xcbiAgIDU6XFx0XFxuICAgNjpcXHRcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXQuaFxcdTAwM2VcXHRcXHQvKiBzdHJ1Y3Qgc29ja2V0LCBzdHJ1Y3QgcHJvdG9fb3BzICovXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYXRtLmhcXHUwMDNlXFx0XFx0LyogQVRNIHN0dWZmICovXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYXRtZGV2LmhcXHUwMDNlXFx0LyogQVRNIGRldmljZXMgKi9cXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnJuby5oXFx1MDAzZVxcdC8qIGVycm9yIGNvZGVzICovXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFx0LyogcHJpbnRrICovXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG9wcy5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9zb2NrLmhcXHUwMDNlXFx0XFx0LyogZm9yIHNvY2tfbm9fKiAqL1xcbiAgMTc6XFx0XFxuICAxODpcXHQjaW5jbHVkZSBcXFwicmVzb3VyY2VzLmhcXFwiXFx0XFx0LyogZGV2cyBhbmQgdmNjcyAqL1xcbiAgMTk6XFx0I2luY2x1ZGUgXFxcImNvbW1vbi5oXFxcIlxcdFxcdC8qIGNvbW1vbiBmb3IgUFZDcyBhbmQgU1ZDcyAqL1xcbiAgMjA6XFx0XFxuICAyMTpcXHRcXG4gIDIyOlxcdHN0YXRpYyBpbnQgcHZjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpXFxuICAyMzpcXHR7XFxuICAyNDpcXHRcXHRyZXR1cm4gMDtcXG4gIDI1OlxcdH1cXG4gIDI2OlxcdFxcbiAgMjc6XFx0c3RhdGljIGludCBwdmNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqc29ja2FkZHIsXFxuICAyODpcXHRcXHRcXHQgICAgaW50IHNvY2thZGRyX2xlbilcXG4gIDI5OlxcdHtcXG4gIDMwOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiAgMzE6XFx0XFx0c3RydWN0IHNvY2thZGRyX2F0bXB2YyAqYWRkcjtcXG4gIDMyOlxcdFxcdHN0cnVjdCBhdG1fdmNjICp2Y2M7XFxuICAzMzpcXHRcXHRpbnQgZXJyb3I7XFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdGlmIChzb2NrYWRkcl9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKVxcbiAgMzY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuICAzNzpcXHRcXHRhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKilzb2NrYWRkcjtcXG4gIDM4OlxcdFxcdGlmIChhZGRyLVxcdTAwM2VzYXBfZmFtaWx5ICE9IEFGX0FUTVBWQylcXG4gIDM5OlxcdFxcdFxcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xcbiAgNDA6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gIDQxOlxcdFxcdHZjYyA9IEFUTV9TRChzb2NrKTtcXG4gIDQyOlxcdFxcdGlmICghdGVzdF9iaXQoQVRNX1ZGX0hBU1FPUywgXFx1MDAyNnZjYy1cXHUwMDNlZmxhZ3MpKSB7XFxuICA0MzpcXHRcXHRcXHRlcnJvciA9IC1FQkFERkQ7XFxuICA0NDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDQ1OlxcdFxcdH1cXG4gIDQ2OlxcdFxcdGlmICh0ZXN0X2JpdChBVE1fVkZfUEFSVElBTCwgXFx1MDAyNnZjYy1cXHUwMDNlZmxhZ3MpKSB7XFxuICA0NzpcXHRcXHRcXHRpZiAodmNjLVxcdTAwM2V2cGkgIT0gQVRNX1ZQSV9VTlNQRUMpXFxuICA0ODpcXHRcXHRcXHRcXHRhZGRyLVxcdTAwM2VzYXBfYWRkci52cGkgPSB2Y2MtXFx1MDAzZXZwaTtcXG4gIDQ5OlxcdFxcdFxcdGlmICh2Y2MtXFx1MDAzZXZjaSAhPSBBVE1fVkNJX1VOU1BFQylcXG4gIDUwOlxcdFxcdFxcdFxcdGFkZHItXFx1MDAzZXNhcF9hZGRyLnZjaSA9IHZjYy1cXHUwMDNldmNpO1xcbiAgNTE6XFx0XFx0fVxcbiAgNTI6XFx0XFx0ZXJyb3IgPSB2Y2NfY29ubmVjdChzb2NrLCBhZGRyLVxcdTAwM2VzYXBfYWRkci5pdGYsIGFkZHItXFx1MDAzZXNhcF9hZGRyLnZwaSxcXG4gIDUzOlxcdFxcdFxcdFxcdCAgICBhZGRyLVxcdTAwM2VzYXBfYWRkci52Y2kpO1xcbiAgNTQ6XFx0b3V0OlxcbiAgNTU6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gIDU2OlxcdFxcdHJldHVybiBlcnJvcjtcXG4gIDU3OlxcdH1cXG4gIDU4OlxcdFxcbiAgNTk6XFx0c3RhdGljIGludCBwdmNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqc29ja2FkZHIsXFxuICA2MDpcXHRcXHRcXHQgICAgICAgaW50IHNvY2thZGRyX2xlbiwgaW50IGZsYWdzKVxcbiAgNjE6XFx0e1xcbiAgNjI6XFx0XFx0cmV0dXJuIHB2Y19iaW5kKHNvY2ssIHNvY2thZGRyLCBzb2NrYWRkcl9sZW4pO1xcbiAgNjM6XFx0fVxcbiAgNjQ6XFx0XFxuICA2NTpcXHRzdGF0aWMgaW50IHB2Y19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuICA2NjpcXHRcXHRcXHRcXHQgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuICA2NzpcXHR7XFxuICA2ODpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVxcdTAwM2VzaztcXG4gIDY5OlxcdFxcdGludCBlcnJvcjtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gIDcyOlxcdFxcdGVycm9yID0gdmNjX3NldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4gIDczOlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuICA3NDpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuICA3NTpcXHR9XFxuICA3NjpcXHRcXG4gIDc3OlxcdHN0YXRpYyBpbnQgcHZjX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gIDc4OlxcdFxcdFxcdFxcdCAgc29ja29wdF90ICpvcHQpXFxuICA3OTpcXHR7XFxuICA4MDpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVxcdTAwM2VzaztcXG4gIDgxOlxcdFxcdGludCBlcnJvcjtcXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gIDg0OlxcdFxcdGVycm9yID0gdmNjX2dldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdCk7XFxuICA4NTpcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiAgODY6XFx0XFx0cmV0dXJuIGVycm9yO1xcbiAgODc6XFx0fVxcbiAgODg6XFx0XFxuICA4OTpcXHRzdGF0aWMgaW50IHB2Y19nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc29ja2FkZHIsXFxuICA5MDpcXHRcXHRcXHQgICAgICAgaW50IHBlZXIpXFxuICA5MTpcXHR7XFxuICA5MjpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICphZGRyO1xcbiAgOTM6XFx0XFx0c3RydWN0IGF0bV92Y2MgKnZjYyA9IEFUTV9TRChzb2NrKTtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0aWYgKCF2Y2MtXFx1MDAzZWRldiB8fCAhdGVzdF9iaXQoQVRNX1ZGX0FERFIsIFxcdTAwMjZ2Y2MtXFx1MDAzZWZsYWdzKSlcXG4gIDk2OlxcdFxcdFxcdHJldHVybiAtRU5PVENPTk47XFxuICA5NzpcXHRcXHRhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKilzb2NrYWRkcjtcXG4gIDk4OlxcdFxcdG1lbXNldChhZGRyLCAwLCBzaXplb2YoKmFkZHIpKTtcXG4gIDk5OlxcdFxcdGFkZHItXFx1MDAzZXNhcF9mYW1pbHkgPSBBRl9BVE1QVkM7XFxuIDEwMDpcXHRcXHRhZGRyLVxcdTAwM2VzYXBfYWRkci5pdGYgPSB2Y2MtXFx1MDAzZWRldi1cXHUwMDNlbnVtYmVyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowMzozNy41NDUxMjIyNzdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTUwNTQyMTU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQVRNIFBWQyBDb25uZWN0aW9uIGluIHRoZSBMaW51eCBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIEFUTSBQVkMgY29ubmVjdGlvbnMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBgcHZjX2JpbmRgIGFuZCBgcHZjX2Nvbm5lY3RgIGFyZSBzdGF0aWMgZnVuY3Rpb25zIOKAkyB0aGV5J3JlIG5vdCBlbnRyeSBwb2ludHMgb2YgaW50ZXJlc3QgZm9yIGV4dGVybmFsIGludGVyYWN0aW9uLiBCdXQgYHZjY19jb25uZWN0YC4uLiB0aGF0IG9uZSdzIGludGVyZXN0aW5nLiBJdCdzICpub3QqIHN0YXRpYywgYW5kIGl0IHNlZW1zIHRvIGJlIG15IGJlc3QgYmV0IGZvciBhIGNlbnRyYWwgc3ltYm9sIHRvIGZvY3VzIG9uLiBMZXQgbWUgc2VlLi4uIGB2Y2NfY29ubmVjdGAgaXMgZGVjbGFyZWQgaW4gYG5ldC9hdG0vY29tbW9uLmhgIGFuZCBkZWZpbmVkIGluIGBuZXQvYXRtL2NvbW1vbi5jYCwgY29uZmlybWluZyBpdCdzIGEgY3JpdGljYWwgcGllY2UuXG5cblRoZSBwYXRjaCBtb2RpZmllcyBgZmluZF9jaWAgYW5kIGBfX3ZjY19jb25uZWN0YCwgYW5kIGB2Y2NfY29ubmVjdGAgY2FsbHMgYF9fdmNjX2Nvbm5lY3RgLiBUaGVyZWZvcmUsIGB2Y2NfY29ubmVjdGAgaXMgbXkgcHJpbWFyeSBmb2N1czsgSSBzaG91bGQgc3RhcnQgdGhlcmUuXG5cbk5vdywgaG93IGNhbiBJIGFjdHVhbGx5ICp0ZXN0KiB0aGlzIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gQVRNJ3MgYSBuZXR3b3JraW5nIHByb3RvY29sLCBzbyBpZGVhbGx5LCBpdCBzaG91bGQgYmUgdGVzdGFibGUgdmlhIHRoZSBzb2NrZXQgQVBJLCBzcGVjaWZpY2FsbHkgdXNpbmcgc29tZXRoaW5nIGxpa2UgYHNvY2tldChBRl9BVE1QVkMsIFNPQ0tfREdSQU0sIDApYC4gQWgsIGBBRl9BVE1QVkNgIGlzIHRoZSBhZGRyZXNzIGZhbWlseSA4IOKAkyBnb29kLCB0aGF0J3MgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuIE5vIHNwZWNpYWwgaGFyZHdhcmUgcmVxdWlyZWQgdGhlcmUsIGF0IGxlYXN0IGluIHByaW5jaXBsZS5cblxuQnV0IHdhaXQsIGRvZXMgdGhpcyBpbXBseSB0aGF0IHRoZXJlICpuZWVkcyogdG8gYmUgYW4gYWN0dWFsIEFUTSBkZXZpY2UgcHJlc2VudCBmb3IgaXQgdG8gd29yaz8gTG9va2luZyBhdCBgdmNjX2Nvbm5lY3RgLCBpdCB0YWtlcyBhbiBgaXRmYCAoaW50ZXJmYWNlIG51bWJlcikgYXMgaW5wdXQuIElmIG5vIEFUTSBkZXZpY2UgaXMgY29uZmlndXJlZCwgdGhlbiBgdmNjX2Nvbm5lY3RgIHdpbGwgbGlrZWx5IGZhaWwgYXQgdGhlIGBkZXYgPSBhdG1fZGV2X2xvb2t1cChpdGYpO2AgY2FsbC4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIGEgc29mdHdhcmUgQVRNIGRldmljZSwgb3IsIGlmIG5vdCwgaWYgdGhlcmUncyBzb21lIHdheSBJIGNhbiB0ZXN0IHRoaXMgd2l0aG91dCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzM3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6NDcuMDUwNTQ1OTdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTIxOTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0bV9kZXZfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9yZXNvdXJjZXMuYz02OT1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTtcXG5uZXQvYXRtL3Jlc291cmNlcy5jLTcwLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmM6NzE6c3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IGRldmljZSAqcGFyZW50LFxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzItXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsIGludCBudW1iZXIsXFxuLS1cXG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMS19XFxubmV0L2F0bS9yZXNvdXJjZXMuYzoxMzI6RVhQT1JUX1NZTUJPTChhdG1fZGV2X3JlZ2lzdGVyKTtcXG5uZXQvYXRtL3Jlc291cmNlcy5jLTEzMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6NDcuMDk0MDcwODE5WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMDkxMDIwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIEFUTSBEcml2ZXIgUmVnaXN0cmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIHZlcmlmeSB0aGUgZHJpdmVyIHJlZ2lzdHJhdGlvbnMgZm9yIEFUTSBkZXZpY2VzLlwiIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGluIHBsYWNlIGZvciB0aG9zZSBBVE0gZGV2aWNlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZHJpdmVycyBhcmUgY29ycmVjdGx5IGluc3RhbGxlZCBhbmQgcHJvcGVybHkgY29uZmlndXJlZCwgYW5kIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBzeXN0ZW0gcmVnaXN0cnkgb3IgYSBzaW1pbGFyIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBzeXN0ZW0uIEknbSBsaWtlbHkgY29uY2VybmVkIGFib3V0IHBvdGVudGlhbCBjb25mbGljdHMsIHZlcnNpb24gbWlzbWF0Y2hlcywgb3IgZXZlbiB1bnNpZ25lZCBkcml2ZXJzIHRoYXQgY291bGQgaW50cm9kdWNlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBhbHNvIG1ha2VzIG1lIHdvbmRlciBpZiB0aGVyZSdzIGFueSBwZW5kaW5nIHVwZGF0ZSB0byB0aG9zZSBkcml2ZXJzLiBBcmUgdGhleSB1cC10by1kYXRlIHdpdGggdGhlIGxhdGVzdCBzZWN1cml0eSBwYXRjaGVzIGFuZCBmZWF0dXJlcz8gQW5kIEknZCBiZXR0ZXIgY29uZmlybSB0aGUgQVRNIGRldmljZXMgYXJlIHNob3dpbmcgY29ycmVjdGx5IHVuZGVyIGRldmljZSBtYW5hZ2VyLiBVbHRpbWF0ZWx5LCBpdCdzIGFib3V0IGNvbmZpcm1pbmcgdGhlIHN5c3RlbSBpcyBpbiBhIHNlY3VyZSwgc3RhYmxlLCBhbmQgY29tcGxpYW50IHN0YXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIzMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjU0LjMwMzE3NTQ5NVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NjgwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtX2Rldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hdG0vc29sb3MtcGNpLmM9MTM0OD1zdGF0aWMgaW50IGF0bV9pbml0KHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpXFxuLS1cXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzU4LVxcbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jOjEzNTk6XFx0XFx0Y2FyZC1cXHUwMDNlYXRtZGV2W2ldID0gYXRtX2Rldl9yZWdpc3RlcihcXFwic29sb3MtcGNpXFxcIiwgcGFyZW50LCBcXHUwMDI2ZnBnYV9vcHMsIC0xLCBOVUxMKTtcXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzYwLVxcdFxcdGlmICghY2FyZC1cXHUwMDNlYXRtZGV2W2ldKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjU0LjM0ODY0Nzc5NFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTA3Nzg4MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzpcblxuKipDb250ZW1wbGF0aW5nIHRoZSBTY29wZSBvZiB0aGUgU2l0dWF0aW9uKipcblxuSG1tLCBcIkFyZSB0aGVyZSBhbnkgb3RoZXIgQVRNIGRyaXZlcnM/XCIgVGhpcyBpbXBsaWVzIGEgY29udGV4dCwgYW5kIEkgbmVlZCB0byBjb25zaWRlciBpdCBpbW1lZGlhdGVseS4gTXkgbWluZCBpbW1lZGlhdGVseSBiZWdpbnMgdG8gYnJhbmNoIG91dDogaXMgdGhpcyBhYm91dCBhIHNwZWNpZmljIHN5c3RlbT8gQSBwYXJ0aWN1bGFyIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uPyBUaGUgc2VjdXJpdHkgcHJvdG9jb2xzIGludm9sdmVkPyBBcmUgd2UgdGFsa2luZyBhYm91dCB0aGUgcGh5c2ljYWwgbWVjaGFuaXNtcyBvZiB0aGUgQVRNIGl0c2VsZiwgb3IgdGhlIG5ldHdvcmsgdGhhdCBzdXBwb3J0cyBpdD8gT3IsIHBlcmhhcHMsIGlzIGl0IHNvbWV0aGluZyBjb21wbGV0ZWx5IGVzb3RlcmljLCBldmVuIGFic3RyYWN0PyBJcyB0aGlzIHF1ZXN0aW9uIG1lYW50IHRvIGJlIHRha2VuIGxpdGVyYWxseSwgb3IgaXMgaXQgYSBtZXRhcGhvcj8gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIHNpbXBsaWNpdHkgb2YgdGhlIHF1ZXN0aW9uIGZlZWxzLi4uIG1pc2xlYWRpbmcuIE15IGluaXRpYWwgcmVzcG9uc2Ugd291bGQgYmUgdG8ga25vdyB3aGF0IHRoZSBiYWNrZ3JvdW5kIGlzLiBJIG5lZWQgdG8ga25vdyB0aGUgd2h5IGFuZCB3aGF0IG9mIHRoZSBxdWVzdGlvbi4gV2l0aG91dCB0aGF0LCB0aGVyZSBhcmUgdG9vIG1hbnkgcG9zc2liaWxpdGllcyB0byBjb25zaWRlci4gSSBzdXBwb3NlIGl0IGNvdWxkIG1lYW4gc29tZXRoaW5nIGFzIHN0cmFpZ2h0Zm9yd2FyZCBhcywgXCJBcmUgdGhlcmUgb3RoZXIgY29tcGFuaWVzIHRoYXQgYnVpbGQgdGhlIHBoeXNpY2FsIGRyaXZpbmcgbWVjaGFuaXNtcyBvZiB0aGVzZSBtYWNoaW5lcz9cIiwgYnV0IHRoYXQgZmVlbHMgdG9vIGJhc2ljLCBhbG1vc3QgbmFpdmUuIFRoZSBxdWVzdGlvbiBoYXMgdG8gYmUgbW9yZSBudWFuY2VkIHRvIGJlIGEgd29ydGh3aGlsZSBxdWVzdGlvbi4gVGhlcmVmb3JlLCBpZiBJIHdlcmUgdG8gdW5wYWNrIHRoaXMgdG8gc29tZW9uZSB3aXRoIG15IGxldmVsIG9mIGV4cGVydGlzZSwgSSB3b3VsZCBsaWtlbHkgcmVzcG9uZCBieSBhc2tpbmcgYSBzZXJpZXMgb2YgY2xhcmlmeWluZyBxdWVzdGlvbnMsIGFuZCBiZWdpbiB0byBjb25zaWRlciBhbGwgcG9zc2libGUgaW50ZXJwcmV0YXRpb25zIGJlZm9yZSBwcm92aWRpbmcgYSBkZWZpbml0aXZlIGFuc3dlci4gSXQncyB0aGUgbW9zdCBhcHByb3ByaWF0ZSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjAzOjU4LjQ1NjQzODAxNVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1Njk0NTg4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdG1fZGV2X3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDM6NTguNTgyMTQwMzEzWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzQyNDkyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUENJIERyaXZlciBJbnF1aXJ5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgdGhyb3VnaCB0aGUgZHJpdmVyIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL2F0bS9gLCBhbmQgSSBzcG90IGBzb2xvcy1wY2kuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldhaXQgYSBtaW51dGUsIGFyZSB0aGVyZSAqb3RoZXIqIFBDSSBkcml2ZXJzIGluIGhlcmUgdGhhdCBJJ20gb3Zlcmxvb2tpbmc/XCIgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoaXMgaXMgdGhlIG9ubHkgb25lIG9yIGlmIHRoZXJlJ3MgYSBmYW1pbHkgb2YgUENJLWJhc2VkIEFUTSBkcml2ZXJzLiBUaW1lIHRvIHRha2UgYSBicm9hZGVyIGxvb2sgYW5kIGZpbmQgb3V0LiBUaGlzIGNvdWxkIGJlIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIEFUTSBkcml2ZXIgc3VwcG9ydCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTQ1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDQ6MDMuMjU2MzkxMjk2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL2F0bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwic29sb3MtYXR0cmxpc3QuY1wiLFxuICAgIFwic29sb3MtcGNpLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDQ6MDMuMjU2NDM2Njc2WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Mjk2Mzc3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBBVE0gRGV2aWNlIERyaXZlcnMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIHRoYXQgd2UgaGFkIGEgYnJvYWRlciByYW5nZSBvZiBBVE0gKEFzeW5jaHJvbm91cyBUcmFuc2ZlciBNb2RlKSBkcml2ZXJzLCBtYXliZSBldmVuIHNvbWUgbW9yZSByZWNlbnQgYWRkaXRpb25zLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdC4gU28sIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGBuZXQvYXRtL2AgZGlyZWN0b3J5IHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gSSdtIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGZvciBhbnkgcGxhY2Vob2xkZXIgb3IgXCJkdW1teVwiIGRldmljZSBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgcXVpY2sgY2hlY2sgd2lsbCBjb25maXJtIGlmIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgQVRNIGRyaXZlciBsYW5kc2NhcGUgaXMgYWNjdXJhdGUgYW5kIHByZXZlbnQgbWUgZnJvbSBnb2luZyBkb3duIGEgd3JvbmcgcGF0aC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBpbmNsdWRlZCBmb3IgdGVzdGluZyBvciBleHBlcmltZW50YWwgcHVycG9zZXMuIFRoaXMgY291bGQgc2F2ZSBtZSBhIGJ1bmNoIG9mIHRpbWUgaW4gdGhlIGxvbmcgcnVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjEzNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDowNy43ODYwNzY0OFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM3NDczNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtX2Rldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL3Jlc291cmNlcy5jPTY5PUVYUE9SVF9TWU1CT0woYXRtX2Rldl9sb29rdXApO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXFxubmV0L2F0bS9yZXNvdXJjZXMuYzo3MTpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxubmV0L2F0bS9yZXNvdXJjZXMuYy03Mi1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcXG4tLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMxLX1cXG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDowNy44Mjk4MjY3MVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODMwNzI2MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgRHJpdmVyIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGF0bV9kZXZfcmVnaXN0ZXJgIGlzIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIGl0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgdGhvdWdodC4gSWYgKnRoYXQqIGZ1bmN0aW9uIGlzIHZpc2libGUsIGlzIGl0IHBhcnQgb2YgYSBicm9hZGVyLCBtb3JlIGdlbmVyYWwgZnJhbWV3b3JrPyBNeSBpbW1lZGlhdGUgaW1wdWxzZSBpcyB0byBzdGFydCBtYXBwaW5nIHRoZSBsYW5kc2NhcGUuIEFyZSB0aGVyZSBvdGhlciBkcml2ZXJzIHdpdGhpbiB0aGlzIHN5c3RlbT8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZS4gQXJlIHdlIGxvb2tpbmcgYXQgYSB0aWdodGx5IGNvdXBsZWQsIHNwZWNpZmljIHNldCBvZiBtb2R1bGVzLCBvciBkb2VzIHRoaXMgaW5kaWNhdGUgYSBtb3JlIGdlbmVyaWMgZHJpdmVyIHJlZ2lzdHJhdGlvbiBtZWNoYW5pc20gdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhpcyBpcyBhIGNvcm5lciBjYXNlIG9yIGlmIEkndmUgc3R1bWJsZWQgdXBvbiBhIGZvdW5kYXRpb25hbCBwaWVjZSBvZiB0aGlzIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MTAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDoxNi42NjA1NTQ5NzJaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTUwOTQzNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtX2Rldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hdG0vc29sb3MtcGNpLmM9MTM0OD1zdGF0aWMgaW50IGF0bV9pbml0KHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpXFxuLS1cXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzU4LVxcbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jOjEzNTk6XFx0XFx0Y2FyZC1cXHUwMDNlYXRtZGV2W2ldID0gYXRtX2Rldl9yZWdpc3RlcihcXFwic29sb3MtcGNpXFxcIiwgcGFyZW50LCBcXHUwMDI2ZnBnYV9vcHMsIC0xLCBOVUxMKTtcXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYy0xMzYwLVxcdFxcdGlmICghY2FyZC1cXHUwMDNlYXRtZGV2W2ldKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM9OTAxPXN0YXRpYyBpbnQgdXNiYXRtX2F0bV9pbml0KHN0cnVjdCB1c2JhdG1fZGF0YSAqaW5zdGFuY2UpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTA5LVxcdCAqIGFib3J0IGlmIGF0bV9kZXYtXFx1MDAzZWRldl9kYXRhIGlzIE5VTEwuICovXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jOjkxMDpcXHRhdG1fZGV2ID0gYXRtX2Rldl9yZWdpc3RlcihpbnN0YW5jZS1cXHUwMDNlZHJpdmVyX25hbWUsXFxuZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jLTkxMS1cXHRcXHRcXHRcXHQgICBcXHUwMDI2aW5zdGFuY2UtXFx1MDAzZXVzYl9pbnRmLVxcdTAwM2VkZXYsIFxcdTAwMjZ1c2JhdG1fYXRtX2Rldm9wcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvYXRtZGV2Lmg9MTUyPWV4dGVybiByd2xvY2tfdCB2Y2Nfc2tsaXN0X2xvY2s7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oLTE1NS1cXG5pbmNsdWRlL2xpbnV4L2F0bWRldi5oOjE1NjpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxuaW5jbHVkZS9saW51eC9hdG1kZXYuaC0xNTctXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBhdG1kZXZfb3BzICpvcHMsXFxuLS1cXG5uZXQvYXRtL3Jlc291cmNlcy5jPTY5PUVYUE9SVF9TWU1CT0woYXRtX2Rldl9sb29rdXApO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXFxubmV0L2F0bS9yZXNvdXJjZXMuYzo3MTpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxubmV0L2F0bS9yZXNvdXJjZXMuYy03Mi1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcXG4tLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMxLX1cXG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDoxOC4yMTU2NTM5WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MTc3MzQwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVVNCIEFUTSBEZXZpY2UgUmVnaXN0cmF0aW9uIGFuZCBFbXVsYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyByZWdpc3RlcnMgYW4gQVRNIGRldmljZSwgd2hpY2ggaXMgcmVsZXZhbnQuIFRoaW5raW5nIGFib3V0IGZ1enppbmcgYW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YgYHN5emthbGxlcmAsIHBhcnRpY3VsYXJseSB3aXRoIHRoZSB1c2Ugb2YgYGR1bW15X2hjZGAgb3IgYHJhdy1nYWRnZXRgIGZvciBVU0IgZW11bGF0aW9uLCB0aGlzIGdldHMgbWUgdGhpbmtpbmcuIElmIHdlIHdhbnQgdG8gdGFyZ2V0IFVTQiBBVE0gZnVuY3Rpb25hbGl0eSwgZW5hYmxpbmcgYFVTQl9BVE1gIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzZWVtcyBsaWtlIGEgc29saWQgZmlyc3Qgc3RlcC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIHNlZSB3aGF0IG90aGVyIGRlcGVuZGVudCBvcHRpb25zIG1pZ2h0IGJlIGx1cmtpbmcgaW4gdGhlcmUuIEl0J3MgYWxsIGFib3V0IHN0cmF0ZWdpYyBjb25maWd1cmF0aW9uIGZvciBlZmZlY3RpdmUgZnV6emluZywgeW91IGtub3chXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjUwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDQ6MjMuODMzMzkwMzA5WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc1NzIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX0FUTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy01LVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjY6bWVudWNvbmZpZyBVU0JfQVRNXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVVNCIERTTCBtb2RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDoyMy44NzgxNTEyODhaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU4NzA0Mjk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBVU0JfQVRNYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBsaW5lYWdlIG9mIGBVU0JfQVRNYC4gV2UncmUgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgbW9kdWxlLCBsaWtlbHkgaW4gdGhlIGtlcm5lbCBvciBzb21lIGVtYmVkZGVkIHN5c3RlbSwgdGhhdCBoYW5kbGVzIEFUTSBvdmVyIFVTQi4gVGhlcmVmb3JlLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBtYXAgb3V0IGl0cyBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBzeXN0ZW0gY29tcG9uZW50cyBkb2VzIGBVU0JfQVRNYCByZWx5IHVwb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBJcyBpdCBib3VuZCB0byBzcGVjaWZpYyBVU0IgaG9zdCBjb250cm9sbGVyIGRyaXZlcnM/IERvZXMgaXQgbmVlZCBjZXJ0YWluIEFUTSBuZXR3b3JrIGludGVyZmFjZXMgb3IgcHJvdG9jb2xzIHRvIGJlIGFjdGl2ZT8gRG9lcyBpdCByZXF1aXJlIGFueSBzdXBwb3J0aW5nIFVTQiBjbGFzcyBkcml2ZXJzLCBvciBwZXJoYXBzIHNwZWNpZmljIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVycz8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgZWNvc3lzdGVtLCB1bmRlcnN0YW5kaW5nIHdoZXJlIGl0IHNpdHMgaW4gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIGFuZCB3aGF0IGl0IGxlYW5zIG9uIHRvIGRvIGl0cyBqb2IuIEl04oCZcyBsaWtlIHRyYWNpbmcgdGhlIGJyYW5jaGVzIG9mIGEgY29tcGxleCBmYW1pbHkgdHJlZTsgeW91IGNhbid0IHVuZGVyc3RhbmQgb25lIG1lbWJlciBpbiBpc29sYXRpb24uIEdvdHRhIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBwaWVjZXMgbmVlZCB0byBiZSBpbiBwbGFjZSBmb3IgYFVTQl9BVE1gIHRvIGV2ZW4gc3RhcnQgaHVtbWluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NzksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDoyOS40NjUxOTYzNzdaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjUxNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWc9Nj1tZW51Y29uZmlnIFVTQl9BVE1cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJVU0IgRFNMIG1vZGVtIHN1cHBvcnRcXFwiXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6ODpcXHRkZXBlbmRzIG9uIEFUTVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTktXFx0c2VsZWN0IENSQzMyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA0OjI5LjUwOTQ1MDEyN1oiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjkyMzkzNzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRlcGVuZGVuY3kgSW5xdWlyeTogVVNCX0FUTSBhbmQgQVRNIERyaXZlciBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gYFVTQl9BVE1gIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIGBBVE1gIOKAkyBtYWtlcyBzZW5zZS4gTm93LCB0aGUgY29yZSBxdWVzdGlvbiBpcywgZG8gd2UgaGF2ZSBhbnkgKmR1bW15KiBBVE0gZHJpdmVycyBraWNraW5nIGFyb3VuZD8gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyB0aGVyZSAqc2hvdWxkKiBiZSBhdCBsZWFzdCBvbmUsIHBlcmhhcHMgZm9yIHRlc3RpbmcgcHVycG9zZXMgb3IgZWFybHkgZGV2ZWxvcG1lbnQuIFRoZSBleGlzdGVuY2Ugb3IgYWJzZW5jZSBvZiBzdWNoIGRyaXZlcnMgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyB3aGVuIHNldHRpbmcgdXAgdGhpcyBzeXN0ZW0uIEFyZSB0aGVyZSBrbm93biBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUgdXNlZCB0byB0ZXN0IGFuZCB2YWxpZGF0ZSBvdGhlciBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTIzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDQ6MzQuODAxODQ2NzJaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjQ4Njk3MTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVE1fRFVNTVlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDozNi4zNjY3MjE5NDdaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE0MTk1NDgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBBVE0gRGV2aWNlIENyZWF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gY3JlYXRlIGFuIEFUTSBkZXZpY2UsIGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHBvdGVudGlhbCBjb2RlIGxvY2F0aW9ucy4gRmlyc3QgdGhvdWdodDogYGRyaXZlcnMvbmV0L2R1bW15LmNgLiBCdXQgaG9sZCBvbiwgdGhhdCdzIGp1c3QgYW4gRXRoZXJuZXQgZHVtbXkgZHJpdmVyLCBhIHNpbXBsZSBwbGFjZSB0byBzaW11bGF0ZSBhIG5ldHdvcmsgaW50ZXJmYWNlLCBub3QgQVRNLiBEZWZpbml0ZWx5IG5vdCB0aGUgcGxhY2UgdG8gc3RhcnQuXG5cblNvLCB3aGVyZSAqZWxzZSogY291bGQgdGhpcyBsb2dpYyByZXNpZGU/IEkgbmVlZCB0byBjb25zaWRlciBhbGwgcG9zc2liaWxpdGllcy4gQmV5b25kIHRoZSBpbml0aWFsIHRob3VnaHQgb2Ygc2ltdWxhdGluZyBhIG5ldHdvcmsgaW50ZXJmYWNlLCBob3cgZWxzZSB3b3VsZCBvbmUgZ28gYWJvdXQgY3JlYXRpbmcgYW4gQVRNIGRldmljZT8gQXJlIHRoZXJlIG1vcmUgc29waGlzdGljYXRlZCBtZXRob2RzP1xuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2ssIGFuZCBzaGlmdCBvdXIgZm9jdXMgdG8gdGhlIFwibmV0XCIgZGlyZWN0b3J5LCBtYXliZSB0aGUgYG5ldC9hdG0vYCBwYXRoIGlzIHdoZXJlIEkgc2hvdWxkIGNvbmNlbnRyYXRlIG15IGVmZm9ydHMuIFN1cmVseSB0aGVyZSdzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZSB0aGVyZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoYXQgZGlyZWN0b3J5IGhvbGRzLiBJJ2xsIGJldCBpdCdzIHRoZSBtb3JlIGxpa2VseSBsb2NhdGlvbiBmb3IgdGhlIG1lYXQgb2YgdGhlIEFUTSBkZXZpY2UgY29kZS4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTEwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDQ6NDIuNTA4Njc5NDk5WiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzIxOTYxODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtX2Rldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL3Jlc291cmNlcy5jPTY5PUVYUE9SVF9TWU1CT0woYXRtX2Rldl9sb29rdXApO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXFxubmV0L2F0bS9yZXNvdXJjZXMuYzo3MTpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxubmV0L2F0bS9yZXNvdXJjZXMuYy03Mi1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcXG4tLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMxLX1cXG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDo0Mi45NDA4NzkxMjNaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc4MjExMTQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudDpcblxuKipFeGFtaW5pbmcgYGF0bV9kZXZfcmVnaXN0ZXJgIFVzYWdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGF0bV9kZXZfcmVnaXN0ZXJgLCBhbmQgaW1tZWRpYXRlbHkgSSdtIHRoaW5raW5nLCBcIldoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqIGluIHRoZSBrZXJuZWw/XCIgVGhlIGluaXRpYWwgc2NhbiBwb2ludHMgdG8gYHNvbG9zLXBjaWAgYW5kIGB1c2JhdG1gLiBUaGF0IG1ha2VzIHNlbnNlLCB0aG9zZSBhcmUgdGhlIG9idmlvdXMgQVRNIGRyaXZlcnMuIEJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBjb21mb3J0YWJsZSwgbXkgZXhwZXJ0IGluc3RpbmN0cyBhcmUgdGVsbGluZyBtZSB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBcblxuTXkgbWluZCBqdW1wcyB0byBcIkhvbGQgb24sIHdoYXQgYWJvdXQgdGhlIHJlc3Qgb2YgdGhlIEFUTSBzdWJzeXN0ZW0/IEkgY2FuJ3QganVzdCBsaW1pdCBteSBzY29wZSB0byB0aGVzZSBmZXcgbWVudGlvbnMuIFdlIGhhdmUgYSB3aG9sZSBgL2RyaXZlcnMvYXRtL2AgZGlyZWN0b3J5LiBBcmUgdGhlcmUgbW9yZSBmaWxlcyB0aGVyZSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50PyBJIGtub3cgSSBzYXcgYHNvbG9zLXBjaS5jYCBhbmQgYHNvbG9zLWF0dHJsaXN0LmNgLCBidXQgdGhlcmUgY291bGQgYmUgbW9yZSB0aGF0IGFyZSBpbXBsaWNpdGx5IHVzaW5nIHRoYXQgQVBJLiBUaGlzIG5lZWRzIGEgYnJvYWRlciBsb29rLlwiXG5cbk5vdyBJJ20gdGhpbmtpbmcsIFwiTGV0J3MgY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyBpbiBgL2RyaXZlcnMvYXRtL2AuIFRoYXQncyB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIGFsbCByZWxldmFudCBkcml2ZXJzLCBhcyBpdCBsaXN0cyBhbGwgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiBJdOKAmXMgYWxzbyBhIGdvb2Qgd2F5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHRoZSBBUEkgYmVpbmcgdXNlZCwgb3Igb3RoZXIsIGxlc3Mgb2J2aW91cyBtb2R1bGVzLlwiIFRoaXMgd2lsbCBwcm92aWRlIG1lIHdpdGggYSBmdWxsIHZpZXcgb2YgdGhlIGRyaXZlcnMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NjQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNDo0OC43MjI5OTI2NjlaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjcyMjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9hdG0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2F0bS9LY29uZmlnLTItI1xcbmRyaXZlcnMvYXRtL0tjb25maWc6MzojIEFUTSBkZXZpY2UgY29uZmlndXJhdGlvblxcbmRyaXZlcnMvYXRtL0tjb25maWctNC0jXFxuZHJpdmVycy9hdG0vS2NvbmZpZy01LVxcbmRyaXZlcnMvYXRtL0tjb25maWc6NjptZW51Y29uZmlnIEFUTV9EUklWRVJTXFxuZHJpdmVycy9hdG0vS2NvbmZpZy03LVxcdGJvb2wgXFxcIkFUTSBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy9hdG0vS2NvbmZpZz0xNj1pZiBBVE1fRFJJVkVSUyBcXHUwMDI2XFx1MDAyNiBORVRERVZJQ0VTIFxcdTAwMjZcXHUwMDI2IEFUTVxcbmRyaXZlcnMvYXRtL0tjb25maWctMTctXFxuZHJpdmVycy9hdG0vS2NvbmZpZzoxODpjb25maWcgQVRNX1NPTE9TXFxuZHJpdmVycy9hdG0vS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiU29sb3MgQURTTDIrIFBDSSBNdWx0aXBvcnQgY2FyZCBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA0OjQ5LjQzOTcxOTI3OVoiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTIyNDA5MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEFUTSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEFUTSBzaXR1YXRpb24gYW5kLCBpbml0aWFsbHksIEknbSBvbmx5IHNlZWluZyBgQVRNX1NPTE9TYCBwb3BwaW5nIHVwIGluIG15IGNvbnRleHQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoYXQncyB3aGF0J3MgY3VycmVudGx5IGluIHBsYXlcIi4gQnV0IHRoZW4sIHRoZSBnZWFycyBzdGFydCB0dXJuaW5nLiBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbC4gTXkgbWluZCBpbW1lZGlhdGVseSBmbGFzaGVzIHRvIHRoZSBicm9hZGVyIGluZnJhc3RydWN0dXJlLiBXaGVyZSdzIHRoZSBzdXBwb3J0PyBXaGF0IGFib3V0IHRoZSBwb3RlbnRpYWwgZm9yIG90aGVyIGxheWVycyBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG9uZSBwaWVjZT8gU3BlY2lmaWNhbGx5LCB3aGF0IGFib3V0IHRoYXQgYGRyaXZlcnMvdXNiL2F0bS9gIGRpcmVjdG9yeT8gSXMgaXQgc3RpbGwgcmVsZXZhbnQ/IElzIGl0IGFjdGl2ZWx5IHVzZWQ/IElzIGl0IGRlcHJlY2F0ZWQ/IElzIGl0ICpzdXBwb3NlZCogdG8gYmUgdGhlIHRoaW5nIHRoYXQgSSBhbSBjdXJyZW50bHkgc2VlaW5nPyBUaGlzIGNvdWxkIG1lYW4gZXZlcnl0aGluZy4gVGhlIHJlbGF0aW9uc2hpcHMgbmVlZCBleGFtaW5hdGlvbi4gVGhpcyBuZWVkcyB0byBiZSBjb25zaWRlcmVkLiBJdCBjb3VsZCB0b3RhbGx5IGNoYW5nZSBteSBwZXJzcGVjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24sIG9yIGxhY2sgdGhlcmVvZiwgYmV0d2VlbiB0aGVzZSBhcmVhcyBiZWZvcmUgbWFraW5nIGFueSBhc3N1bXB0aW9ucyBvciBkZWNpc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTI2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDQ6NTMuOTYyMTMxMjczWiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY2MzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWctMi0jXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6MzojIFVTQi9BVE0gRFNMIGNvbmZpZ3VyYXRpb25cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy00LSNcXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy01LVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjY6bWVudWNvbmZpZyBVU0JfQVRNXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVVNCIERTTCBtb2RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc9MTg9aWYgVVNCX0FUTVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTE5LVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjIwOmNvbmZpZyBVU0JfU1BFRURUT1VDSFxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJTcGVlZHRvdWNoIFVTQiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctMzEtXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6MzI6Y29uZmlnIFVTQl9DWEFDUlVcXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29uZXhhbnQgQWNjZXNzUnVubmVyIFVTQiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNDMtXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWc6NDQ6Y29uZmlnIFVTQl9VRUFHTEVBVE1cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiQURJIDkzMCBhbmQgZWFnbGUgVVNCIERTTCBtb2RlbVxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTU1LVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjU2OmNvbmZpZyBVU0JfWFVTQkFUTVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJPdGhlciBVU0IgRFNMIG1vZGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA0OjU0LjAwNTc5NjI3M1oiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTI0ODU3MDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVTQiBNb2RlbSBDb25zaWRlcmF0aW9ucyBmb3IgU3l6a2FsbGVyIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgVVNCX1hVU0JBVE1gIOKAkyB0aGF0J3MgXCJPdGhlciBVU0IgRFNMIG1vZGVtIHN1cHBvcnQsXCIgcmlnaHQ/IFRoZSBjcnVjaWFsIHBpZWNlIGhlcmUgaXMgaG93IHN5emthbGxlciB1dGlsaXplcyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi4gSWYgd2UgY2FuIGdldCBzeXprYWxsZXIgdG8gc3VjY2Vzc2Z1bGx5IGVtdWxhdGUgYSBVU0IgZGV2aWNlLCB3ZSBtaWdodCBiZSBhYmxlIHRvIHRyaWNrIHRoZSBrZXJuZWwgaW50byByZWdpc3RlcmluZyBhbiBBVE0gZGV2aWNlIHRocm91Z2ggYHVzYmF0bWAuIFRoYXQgc291bmRzIGxpa2UgYSBnb29kIGxlYWQuIFNvLCBoYXZpbmcgYFVTQl9BVE1gIGFuZCBgVVNCX1hVU0JBVE1gIGVuYWJsZWQsIG9yIGFueXRoaW5nIHNpbWlsYXIsIG1ha2VzIGEgbG90IG9mIHNlbnNlIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIFJpZ2h0LCBgdXNiYXRtYCAqaXMqIGFjdHVhbGx5IGp1c3QgYSBsaWJyYXJ5LCB1c2VkIGJ5IGFsbCBvZiB0aG9zZSBkcml2ZXJzLiBUaGF0IGNoYW5nZXMgdGhlIHdheSBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhpcyBhIGJpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZvY3VzZWQgb24gdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbnMuIExldCdzIGRpZyBkZWVwZXIgaW50byB0aGUgY29uZmlndXJhdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgYFVTQl9YVVNCQVRNYCBzcGVjaWZpY2FsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzY3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDU6MDEuNTMwNjU1NDM0WiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUxODk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnPTY9bWVudWNvbmZpZyBVU0JfQVRNXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVVNCIERTTCBtb2RlbSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBBVE1cXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZy05LVxcdHNlbGVjdCBDUkMzMlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNTowMS41NzUxNzYwMDNaIiwiU2VxIjo3MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3NDIzMTE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIElucXVpcnk6IFVTQi1BVE0gRGV2aWNlIENyZWF0aW9uKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgYFVTQl9YVVNCQVRNYCBpcyBkaXJlY3RseSBkZXBlbmRlbnQgb24gYFVTQl9BVE1gIOKAkyB0aGUgY29uZGl0aW9uYWwgYCNpZiBVU0JfQVRNYCBpcyBhIGRlYWQgZ2l2ZWF3YXkuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkgd29uZGVyLCBpcyB0aGVyZSAqYW55KiBvdGhlciBtZWNoYW5pc20sIGJlc2lkZXMgdGhlIHN0YW5kYXJkIGBVU0JfQVRNYCBwYXRoLCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHVzZWQgdG8gY3JlYXRlIGFuIEFUTSBkZXZpY2U/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdG8gY2hlY2sgYW55IHJlbGV2YW50IGFyZWFzIGZvciBoaWRkZW4gZnVuY3Rpb25hbGl0eS5cblxuQSBxdWljayB0aG91Z2h0IOKAkyB3aGF0IGFib3V0IHRoZSBicm9hZGVyIGBuZXQvYXRtL2AgZGlyZWN0b3J5PyBMZXQncyBkZWx2ZSBpbnRvIHRoYXQgYXJlYSBhbmQgc2VlIGlmIGFueSBraW5kIG9mIGR1bW15IG9yIHBsYWNlaG9sZGVyIGRldmljZSBpcyBkZWNsYXJlZCB0aGVyZS4gSSdsbCBuZWVkIHRvIHJlLWV4YW1pbmUgdGhhdCBkaXJlY3RvcnkgY2xvc2VseSwganVzdCB0byBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsLiBUaW1lIHRvIHRha2UgYSBkZWVwZXIgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxNzksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNTowNi40NDk0MDk2MDNaIiwiU2VxIjo3MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDUwLCJFcnJvciI6IllvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy5cbllvdSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCBvZiB0aGlzIGV4YWN0IHRvb2wgY2FsbCBpbiB5b3VyIGNvbnZlcnNhdGlvbiBoaXN0b3J5LlxuRG8gTk9UIHJlcXVlc3QgaXQgYWdhaW4uIFlvdSBNVVNUIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUsXG50cnkgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCB0b29sLCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IHN0ZXAuIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtX2Rldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIllvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy5cXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cXG5EbyBOT1QgcmVxdWVzdCBpdCBhZ2Fpbi4gWW91IE1VU1Qgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSxcXG50cnkgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCB0b29sLCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IHN0ZXAuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA1OjA2LjQ0OTQ0ODQyM1oiLCJTZXEiOjczLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTc3NDA0MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipOZXR3b3JrIERyaXZlciBEaXJlY3RvcnkgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBsZXQgbWUgcXVpY2tseSByZXRyYWNlIG15IHN0ZXBzLiBJJ3ZlIGFscmVhZHkgc2NydXRpbml6ZWQgYG5ldC9hdG0vYCDigJMgaXQncyB1bmxpa2VseSB0aGUgaXNzdWUgcmVzaWRlcyB0aGVyZSwgZ2l2ZW4gdGhlIHJlY2VudCBjaGFuZ2VzIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhcmNoaXRlY3R1cmUuIE5vdywgdGhlIG1vcmUgbG9naWNhbCBwbGFjZSB0byBzaGlmdCBteSBmb2N1cyBpcyBgZHJpdmVycy9uZXQvYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgYnVsayBvZiB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTklDKSBkcml2ZXIgY29kZS4gSXQncyB0aGUgbW9zdCBwcm9iYWJsZSBsb2NhdGlvbiBmb3IgYW55IHJlY2VudCByZWdyZXNzaW9uIG9yIG5ldyBiZWhhdmlvciBJJ20gb2JzZXJ2aW5nLiBJdOKAmXMgd2hlcmUgbXkgaW52ZXN0aWdhdGlvbiBzaG91bGQgYmVnaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTg5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDU6MTIuMDI2ODU1NjQzWiIsIlNlcSI6NzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIwNDYyOTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0bV9kZXZfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNToxMi4xNTg5MDg1ODFaIiwiU2VxIjo3NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzMDQwODk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIE1vZHVsZSBMb2NhdGlvbiBDaGVjazogUmUtZXZhbHVhdGluZyBTY29wZSoqXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gSSAqa25vdyogSSBtZXRpY3Vsb3VzbHkgaW5zcGVjdGVkIGBkcml2ZXJzL25ldC9gLiBUaGF0IHdhcyBteSBpbml0aWFsIGFwcHJvYWNoLCBhbmQgSSdtIHByZXR0eSBjb25maWRlbnQgSSBjb3ZlcmVkIHRoZSB1c3VhbCBzdXNwZWN0cyB0aGVyZS4gQnV0IHRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gZml4Li4uIGlzIGl0ICpuZWNlc3NhcmlseSogbmV0d29yay1zcGVjaWZpYz8gUGVyaGFwcyBJJ20gYmVpbmcgdG9vIG5hcnJvdy4gVGltZSB0byB6b29tIG91dC4gSSBuZWVkIHRvIHRha2UgYSB3aWRlciB2aWV3LiBSYXRoZXIgdGhhbiBsaW1pdGluZyBteXNlbGYsIEkgdGhpbmsgSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIFRoZSByZWxldmFudCBjb2RlIGNvdWxkIHJlc2lkZSBpbiBhbnkgb2YgdGhlIGRyaXZlcnMsIG5vdCBqdXN0IG5ldHdvcmsgb25lcy4gSXQncyB0aW1lIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgYnJvYWRlciBgZHJpdmVycy9gIGRpcmVjdG9yeSwgYW5kIGF2b2lkIHByZS1qdWRnaW5nIHRoZSBsaWtlbHkgbG9jYXRpb24uIEkgbmVlZCB0byBiZSBicm9hZGVyIGluIG15IHRoaW5raW5nIHRvIGZpeCB0aGlzIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzk1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDU6MTYuNDg5MzIwMjg4WiIsIlNlcSI6NzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjM5OTcwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtX2Rldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2F0bS9zb2xvcy1wY2kuYz0xMzQ4PXN0YXRpYyBpbnQgYXRtX2luaXQoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudClcXG4tLVxcbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jLTEzNTgtXFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmM6MTM1OTpcXHRcXHRjYXJkLVxcdTAwM2VhdG1kZXZbaV0gPSBhdG1fZGV2X3JlZ2lzdGVyKFxcXCJzb2xvcy1wY2lcXFwiLCBwYXJlbnQsIFxcdTAwMjZmcGdhX29wcywgLTEsIE5VTEwpO1xcbmRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jLTEzNjAtXFx0XFx0aWYgKCFjYXJkLVxcdTAwM2VhdG1kZXZbaV0pIHtcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYz05MDE9c3RhdGljIGludCB1c2JhdG1fYXRtX2luaXQoc3RydWN0IHVzYmF0bV9kYXRhICppbnN0YW5jZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS91c2JhdG0uYy05MDktXFx0ICogYWJvcnQgaWYgYXRtX2Rldi1cXHUwMDNlZGV2X2RhdGEgaXMgTlVMTC4gKi9cXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmM6OTEwOlxcdGF0bV9kZXYgPSBhdG1fZGV2X3JlZ2lzdGVyKGluc3RhbmNlLVxcdTAwM2Vkcml2ZXJfbmFtZSxcXG5kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMtOTExLVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZpbnN0YW5jZS1cXHUwMDNldXNiX2ludGYtXFx1MDAzZWRldiwgXFx1MDAyNnVzYmF0bV9hdG1fZGV2b3BzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNToxNy4yNTMzMjUzMjdaIiwiU2VxIjo3NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg1MDc4NTgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQVRNIERldmljZSBSZWdpc3RyYXRpb24gZm9yIFN5emthbGxlciBFbXVsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgd2UgY2FuIGdldCBBVE0gZGV2aWNlcyB3b3JraW5nIHdpdGhpbiBzeXprYWxsZXIuIEZyb20gd2hhdCBJJ3ZlIGdhdGhlcmVkLCBvbmx5IGBzb2xvcy1wY2lgIGFuZCBgdXNiYXRtYCBhcmUgdGhlIGRyaXZlcnMgdGhhdCBhcmUgcmVnaXN0ZXJpbmcgdGhlc2UgQVRNIGRldmljZXMuIFNpbmNlIGBzb2xvcy1wY2lgIGlzIGEgUENJIGRldmljZSwgdGhhdCdzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGZvciBlbXVsYXRpb24sIHVubGVzcyB3ZSd2ZSBnb3Qgc29tZSBzb3J0IG9mIGR1bW15IFBDSSBkZXZpY2Ugc2V0dXAgaW4gc3l6a2FsbGVyLCB3aGljaCBtaWdodCBiZSBhIGJpdCBjb21wbGljYXRlZCB0byBpbXBsZW1lbnQuIEJ1dCBgdXNiYXRtYC4uLiB0aGF0J3MgYSBVU0IgZGV2aWNlISBUaGF0J3MgZXhjZWxsZW50IG5ld3MuIFN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcyB2aWEgaXRzIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eS4gVGhpcyBtZWFucyBpZiB3ZSBjYW4gZ2V0IHRob3NlIFVTQiBBVE0gZGV2aWNlIGNvbmZpZ3VyYXRpb25zIHJpZ2h0LCB3ZSBzaG91bGQgaGF2ZSBhIG11Y2ggZWFzaWVyIHRpbWUuXG5cblNvLCBgVVNCX0FUTWAgYW5kIGBVU0JfWFVTQkFUTWAgYXJlIHRoZSBwcm9taXNpbmcgY29uZmlnIG9wdGlvbnMgdG8gcHVyc3VlLlxuXG5XYWl0IGEgc2Vjb25k4oCmIEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZy4gTG9va2luZyBkZWVwZXIsIGB1c2JhdG1gIGlzbid0IGEgZGlyZWN0IGRyaXZlciBpdHNlbGYuIEl0J3MgYSBtb2R1bGUgdGhhdCBwcm92aWRlcyBgdXNiYXRtX3VzYl9wcm9iZWAsIHdoaWNoIGFjdHMgYXMgdGhlIGVudHJ5IHBvaW50LiBJdCdzIHRoZW4gY2FsbGVkIGJ5IHNwZWNpZmljIFVTQiBBVE0gZHJpdmVycywgbGlrZSBgeHVzYmF0bWAuIEFscmlnaHQsIEkgbmVlZCB0byBjaGVjayBgZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uY2AgdG8gc2VlIGhvdyB0aGUgY29ubmVjdGlvbiBpcyBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMxNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNToyMy4xMDQxMTM1NjJaIiwiU2VxIjo3OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzI3NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInh1c2JhdG1fdXNiX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYz0xNDg9c3RhdGljIGludCB4dXNiYXRtX2F0bV9zdGFydChzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bSxcXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTU5LVxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmM6MTYwOnN0YXRpYyBpbnQgeHVzYmF0bV91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYy0xNjEtXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jPTE2Nz1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgeHVzYmF0bV91c2JfZHJpdmVyID0ge1xcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMtMTY4LVxcdC5uYW1lXFx0XFx0PSB4dXNiYXRtX2RyaXZlcl9uYW1lLFxcbmRyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmM6MTY5OlxcdC5wcm9iZVxcdFxcdD0geHVzYmF0bV91c2JfcHJvYmUsXFxuZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYy0xNzAtXFx0LmRpc2Nvbm5lY3RcXHQ9IHVzYmF0bV91c2JfZGlzY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDU6MjMuMTUwODQzNjYyWiIsIlNlcSI6NzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3ODM0NzQxNjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4cGxvcmluZyBBVE0gRGV2aWNlIENyZWF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgeHVzYmF0bWAgdGhpbmc7IGl0J3MgYSBVU0IgZHJpdmVyLCByaWdodD8gSWYgc3l6a2FsbGVyIGlzIGdvaW5nIHRvIGVtdWxhdGUgdGhpcyBVU0IgZGV2aWNlLCBpdCdzIGdvaW5nIHRvIHJlZ2lzdGVyIGFuIEFUTSBkZXZpY2UuIEJ1dCBob2xkIG9uLCBhcmUgdGhlcmUgYW55ICpvdGhlciogd2F5cyB0byBjcmVhdGUgYW4gQVRNIGRldmljZT8gSSBjYW4ndCBqdXN0IHJlbHkgb24gdGhpcyBvbmUgcGF0aC5cblxuTGV0IG1lIHRoaW5r4oCmIHdoYXQgYWJvdXQgYG5ldC9hdG0vYnIyNjg0LmNgPyBOb3BlLCB0aGF0J3MganVzdCBzZXR0aW5nIHVwIGEgbmV0d29yayBkZXZpY2UgKGxpa2UgRXRoZXJuZXQpIG92ZXIgYW4gQVRNIFBWQy4gQ2xvc2UsIGJ1dCBub3QgcXVpdGUgYW4gQVRNICpkZXZpY2UqIGl0c2VsZi4gV2hhdCBhYm91dCBgbmV0L2F0bS9wcHBvYXRtLmNgPyBUaGF0IHJlZ2lzdGVycyBhIFBQUCBjaGFubmVsIG92ZXIgQVRNLCBzbyBhZ2Fpbiwgbm90IGRpcmVjdGx5IHRoZSBkZXZpY2UuIEFuZCBgbmV0L2F0bS9jbGlwLmNgPyBUaGF0IG9uZSBsb29rcyBsaWtlIGEgbmV0d29yayBkZXZpY2Ugb3ZlciBBVE0uIFxuXG5XYWl0IGEgbWludXRlLi4uIHdoYXQgaWYgSSBqdXN0IHRyeSB0aGUgKm9idmlvdXMqIHRoaW5nPyBDYW4gSSBqdXN0IGNyZWF0ZSBhbiBBVE0gUFZDIHNvY2tldCB3aXRoIGBzb2NrZXQoQUZfQVRNUFZDLCAuLi4pYCBhbmQgdGhlbiBgYmluZGA/IElmIGFuIGFjdHVhbCBBVE0gZGV2aWNlICpkb2Vzbid0KiBleGlzdCwgdGhlIGBiaW5kYCBjYWxsIHNob3VsZCBnaXZlIG1lIGFuIGAtRU5PREVWYCBlcnJvci4gVGhhdCdsbCBiZSB0aGUgZGVmaW5pdGl2ZSB0ZXN0LlxuXG5SaWdodCwgbGV0IG1lIGNoZWNrIHRoZSBgdmNjX2Nvbm5lY3RgIGZ1bmN0aW9uIGluIGBuZXQvYXRtL2NvbW1vbi5jYCwganVzdCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvbm5lY3Rpb24gaXMgbWFuYWdlZCBhbmQgd2hhdCBvdGhlciBwb3NzaWJpbGl0aWVzIHRoZXJlIG1heSBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDU6NDAuOTg1NTg3NTI0WiIsIlNlcSI6ODAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk0ODY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdG1fZGV2X2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL2NvbW1vbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vY29tbW9uLmM9NDU4PWludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTQ5MS1cXHRpZiAobGlrZWx5KGl0ZiAhPSBBVE1fSVRGX0FOWSkpIHtcXG5uZXQvYXRtL2NvbW1vbi5jOjQ5MjpcXHRcXHRkZXYgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZShhdG1fZGV2X2xvb2t1cChpdGYpLFxcbm5ldC9hdG0vY29tbW9uLmMtNDkzLVxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJhdG0tZGV2aWNlLSVkXFxcIiwgaXRmKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDU6NDEuMDI5NTQxMjgzWiIsIlNlcSI6ODEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjQwNzA0MTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBBVE0gRGV2aWNlIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZShhdG1fZGV2X2xvb2t1cChpdGYpLCBcImF0bS1kZXZpY2UtJWRcIiwgaXRmKWAgY2FsbCBpcyBpbnRlcmVzdGluZy4gSXQncyB0cnlpbmcgdG8gbG9hZCBhIG1vZHVsZSBpZiB0aGUgQVRNIGRldmljZSBpc24ndCBmb3VuZC4gVGhlIGNhdGNoIGlzLCBpZiBubyBkZXZpY2UgZXhpc3RzIGluIHRoZSBmaXJzdCBwbGFjZSwgdGhhdCdzIGEgZmFpbHVyZSBwb2ludC5cblxuVGhlIHBhdGNoJ3MgY3J1eCBsaWVzIGluIHRob3NlIGB2cGlfYml0c2AgYW5kIGB2Y2lfYml0c2Agd2l0aGluIGBkZXYtXHUwMDNlY2lfcmFuZ2VgLiBJZiBgZGV2YCBpcyBudWxsLCBrYWJvb20uIEhvd2V2ZXIsIHRoYW5rZnVsbHksIGB2Y2NfY29ubmVjdGAgZXhwbGljaXRseSBjaGVja3MgaWYgYGRldmAgaXMgTlVMTC4gSGVyZSdzIHRoYXQgY2hlY2s6XG5cbmBgYGNcblx0aWYgKGxpa2VseShpdGYgIT0gQVRNX0lURl9BTlkpKSB7XG5cdFx0ZGV2ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoYXRtX2Rldl9sb29rdXAoaXRmKSxcblx0XHRcdFx0XHQgICAgICBcImF0bS1kZXZpY2UtJWRcIiwgaXRmKTtcblx0fSBlbHNlIHtcblx0XHRkZXYgPSBOVUxMO1xuXHRcdG11dGV4X2xvY2soXHUwMDI2YXRtX2Rldl9tdXRleCk7XG5cdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmF0bV9kZXZzKSkge1xuXHRcdFx0ZGV2ID0gbGlzdF9lbnRyeShhdG1fZGV2cy5uZXh0LFxuXHRcdFx0XHRcdCBzdHJ1Y3QgYXRtX2RldiwgZGV2X2xpc3QpO1xuXHRcdFx0YXRtX2Rldl9ob2xkKGRldik7XG5cdFx0fVxuXHRcdG11dGV4X3VubG9jayhcdTAwMjZhdG1fZGV2X211dGV4KTtcblx0fVxuXHRpZiAoIWRldilcblx0XHRyZXR1cm4gLUVOT0RFVjtcbmBgYFxuXG5TbywgaXQncyBjbGVhcjogYW4gQVRNIGRldmljZSAqbXVzdCogYmUgcHJlc2VudCBmb3IgdGhpcyB0byBwcm9jZWVkLiBHaXZlbiBTeXprYWxsZXIncyBhYmlsaXR5IHRvIGVtdWxhdGUgVVNCIGRldmljZXMsIGBVU0JfQVRNYCBhbmQgYFVTQl9YVVNCQVRNYCBhcmUgZ29vZCBjb25maWd1cmF0aW9ucyB0byBzdGFydCB3aXRoLlxuXG5Ib2xkIG9uLCB0aG91Z2guIGBVU0JfWFVTQkFUTWAgbWlnaHQgbm90IGJlIHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQncyBleHBhbmQgdGhlIHNjb3BlIHRvIGluY2x1ZGUgYFVTQl9TUEVFRFRPVUNIYCwgYFVTQl9DWEFDUlVgLCBhbmQgYFVTQl9VRUFHTEVBVE1gIOKAkyB0aG9zZSBhcmUgYWxzbyBVU0IgQVRNIGRyaXZlcnMuIEJ1dCBmb3Igbm93LCBsZXQncyBrZWVwIGl0IGZvY3VzZWQgYW5kIGluY2x1ZGUgYFVTQl9BVE1gIGFuZCBgVVNCX1hVU0JBVE1gLlxuXG5IbW0sIGlzIHRoZXJlIGEgZHVtbXkgQVRNIGRyaXZlciBpbiB0aGUga2VybmVsPyBUaW1lIHRvIHNlYXJjaCB0aGUga2VybmVsIGFnYWluLiBJJ3ZlIGJlZW4gaGVyZSBiZWZvcmUuIFJlbWVtYmVyLCBgYXRtX2Rldl9yZWdpc3RlcmA/IE9ubHkgYHNvbG9zLXBjaWAgYW5kIGB1c2JhdG1gIGFyZSB0aGUgY2FsbGVycy4gV2FpdCwgd2hhdCBhYm91dCBgZHJpdmVycy9uZXQvd2FuL2A/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzMyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA1OjUxLjI3MDI0ODI2NVoiLCJTZXEiOjgyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MTc3NzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0bV9kZXZfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2FuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDU6NTEuMzE3MDczODY0WiIsIlNlcSI6ODMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNjAwNzMyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBkaXJlY3Rvcnk6XG5cbioqRXhhbWluaW5nIHRoZSBFdGhlcm5ldCBOZXR3b3JrIERyaXZlciBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgbmV0d29yayBkcml2ZXJzIGFuZCBuYXR1cmFsbHksIG15IG1pbmQgZHJpZnRzIHRvIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9gLiBUaGF0IGRpcmVjdG9yeSBpcyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGlzbid0IGl0PyBJdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSBrZXJuZWwgaW50ZXJhY3RzIHdpdGggYWxsIHRob3NlIEV0aGVybmV0IGludGVyZmFjZXMgd2UgcmVseSBvbi4gSSdtIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdXN1YWwgc3VzcGVjdHMgaW4gbXkgaGVhZDogdGhlIEJyb2FkY29tcywgdGhlIEludGVscywgdGhlIFJlYWx0ZWtzLCB0aGUgTWVsbGFub3hlcyDigJMgYWxsIHRoZSBtYWpvciBwbGF5ZXJzIGFuZCB0aGVpciByZXNwZWN0aXZlIGRyaXZlciBtb2R1bGVzIGFyZSBsaWtlbHkgcmVwcmVzZW50ZWQgaW4gc29tZSBmYXNoaW9uIHdpdGhpbiB0aGF0IHN0cnVjdHVyZS5cblxuTXkgbWluZCBzdGFydHMgdG8gY2h1cm4gb24gdGhlIGltcGxpY2F0aW9ucy4gSSdtIHdvbmRlcmluZyBhYm91dCB0aGUgc2hlZXIgc2NhbGUgb2YgdGhlIGRyaXZlciBjb2RlIGluIHRoZXJlLiBIb3cgbXVjaCBjb21wbGV4aXR5IGlzIGludm9sdmVkIGluIHN1cHBvcnRpbmcgc28gbWFueSBoYXJkd2FyZSByZXZpc2lvbnMsIGZlYXR1cmUgc2V0cywgYW5kIGRpZmZlcmVudCBjaGlwc2V0cz8gSSdtIGFudGljaXBhdGluZyB0aGUgdXN1YWwgY2hhbGxlbmdlczogZGVhbGluZyB3aXRoIGludGVycnVwdCBoYW5kbGluZywgRE1BLCBNQUMgYWRkcmVzcyBtYW5hZ2VtZW50LCB2YXJpb3VzIG5ldHdvcmsgcHJvdG9jb2xzIGxheWVyZWQgb24gdG9wIG9mIHRoZSBwaHlzaWNhbCBsYXllciwgYW5kIHRoZSBpbmV2aXRhYmxlIHF1aXJrcyBvZiBlYWNoIG1hbnVmYWN0dXJlcidzIHNpbGljb24uIEknbSBwcm9iYWJseSBzdGFydGluZyB0byBtZW50YWxseSBjYXRhbG9nIHRoZSBjb21tb24gZHJpdmVyIGFyY2hpdGVjdHVyZXMg4oCTIHdoZXRoZXIgd2UncmUgc2VlaW5nIE5BUEkgaW1wbGVtZW50YXRpb25zLCB0aGUgb2xkZXIgaW50ZXJydXB0LWRyaXZlbiBtb2RlbHMsIG9yIHNvbWUgaHlicmlkIGFwcHJvYWNoLiBBbHNvLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxldmVsIG9mIGFic3RyYWN0aW9uIHdpdGhpbiB0aGUgZGlyZWN0b3J5LiBJcyB0aGVyZSBhIGNsZWFyIHNlcGFyYXRpb24gYmV0d2VlbiB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgY29kZSBhbmQgdGhlIG1vcmUgZ2VuZXJpYyBuZXR3b3JraW5nIHN0YWNrIGxheWVycz8gQXJlIHRoZXJlIHdlbGwtZGVmaW5lZCBpbnRlcmZhY2VzIGZvciB0aGluZ3MgbGlrZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24sIHN0YXRpc3RpY3MgZ2F0aGVyaW5nLCBhbmQgZXJyb3IgaGFuZGxpbmc/XG5cbkkgYW0gYWxzbyB3b25kZXJpbmcgd2hhdCBraW5kIG9mIHN0YXRlLW9mLXRoZS1hcnQgZGV2ZWxvcG1lbnRzIG1pZ2h0IGJlIGltcGxlbWVudGVkIGluIHRoZXJlLCBhbmQgdGhlIGltcGxpY2F0aW9uIHRob3NlIG1heSBoYXZlIG9uIHRoZSBvdmVyYWxsIGRyaXZlciBjb2RlIGFuZCB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3NDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNTo1OC41NzcxNDk1NzlaIiwiU2VxIjo4NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNTAzNDQ4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdG1fZGV2X3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDU6NTguNjU3NjU5MTQ4WiIsIlNlcSI6ODUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMTQ5ODEzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQVRNIERyaXZlciBEaXNjb3ZlcnkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIEFUTSBkcml2ZXIgY29kZSBhZ2Fpbi4gRmlyc3QsIGxldCBtZSBxdWlja2x5IHJ1bGUgb3V0IHRoZSBvYnZpb3VzOiBgbmV0L2F0bS9gLiBBbHJlYWR5IGxvb2tlZCB0aGVyZSwgbm90aGluZyBuZXcuIEhtbSwgd2FpdC4uLiBgZHJpdmVycy9hdG0vYC4gVGhhdCByaW5ncyBhIGJlbGwuIEFoLCB5ZXMhIEkgcmVtZW1iZXIgc2VlaW5nIGBzb2xvcy1wY2kuY2AgYW5kIGBzb2xvcy1hdHRybGlzdC5jYCB0aGVyZS4gVGhvc2Ugc2VlbSBmYW1pbGlhci4gQXJlIHRoZXJlICphbnkqIG90aGVyIEFUTSBkcml2ZXJzIGx1cmtpbmcgYXJvdW5kIGluIHRoZSBrZXJuZWw/IEkgYmV0dGVyIGRvIGEgdGhvcm91Z2ggY2hlY2sgb2YgdGhlIGBkcml2ZXJzL2F0bS9gIGRpcmVjdG9yeS4gR290dGEgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxNTgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjowMy44NzI2NDI0MDJaIiwiU2VxIjo4NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvYXRtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJzb2xvcy1hdHRybGlzdC5jXCIsXG4gICAgXCJzb2xvcy1wY2kuY1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjowMy44NzI2ODc5NjJaIiwiU2VxIjo4NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTUyNDYyODY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgTW9kdWxlIEV2b2x1dGlvbiAtIEEgTm9zdGFsZ2ljIElucXVpcnkqKlxuXG5IbW0sIG5vdyB0aGF0IEknbSB3b3JraW5nIHdpdGggdGhpcyBrZXJuZWwgY29kZSwgYSBmYW1pbGlhciBxdWVzdGlvbiBwb3BwZWQgaW50byBteSBoZWFkLiBJdCBmZWVscyBsaWtlIGp1c3QgeWVzdGVyZGF5IEkgd2FzIGRlYWxpbmcgd2l0aCB0aG9zZSBvbGRlciBtb2R1bGVzIOKAkyBgaGUuY2AsIGBlbmkuY2AsIGB6YXRtLmNgLCBgaWR0NzcyNTIuY2AuLi4gVGhleSB3ZXJlIHF1aXRlIHByZXZhbGVudCBpbiB0aGUgYXJjaGl0ZWN0dXJlIGJhY2sgaW4gdGhlIGRheSwgd2VyZW4ndCB0aGV5PyBBbmQgbm93LCB3aGVyZSBoYXZlIHRoZXkgdmFuaXNoZWQgdG8/XG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIHRoYXQgdGhleSd2ZSBsaWtlbHkgYmVlbiBkZXByZWNhdGVkIGFuZCByZW1vdmVkIGluIG1vcmUgcmVjZW50IGtlcm5lbCBpdGVyYXRpb25zLCBhcyBpcyB0aGUgbmF0dXJlIG9mIHByb2dyZXNzLiBEZXZlbG9wbWVudCBtYXJjaGVzIG9uLCBhbmQgc29tZXRpbWVzIHRoYXQgbWVhbnMgbGVhdmluZyBjZXJ0YWluIGNvbXBvbmVudHMgYmVoaW5kLiBTdGlsbCwgaXQncyBhbHdheXMgd29ydGggYSBkb3VibGUtY2hlY2sgdG8gY29uZmlybS4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGJhc2UgYW5kIHNlZSBpZiB0aGVzZSBvbGQgZnJpZW5kcyBhcmUgc3RpbGwgaGFuZ2luZyBhcm91bmQgc29tZXdoZXJlLCBwZXJoYXBzIGx1cmtpbmcgaW4gc29tZSBvYnNjdXJlIGxlZ2FjeSBzZWN0aW9uLCBvciBtYXliZSB3ZWxsIGFuZCB0cnVseSBnb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQwNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjoxMy4zOTczMjE3ODRaIiwiU2VxIjo4OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDIwNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0bV9kZXZfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9hdG0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYXRtL3NvbG9zLXBjaS5jPTEzNDg9c3RhdGljIGludCBhdG1faW5pdChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgc3RydWN0IGRldmljZSAqcGFyZW50KVxcbi0tXFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM1OC1cXG5kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYzoxMzU5OlxcdFxcdGNhcmQtXFx1MDAzZWF0bWRldltpXSA9IGF0bV9kZXZfcmVnaXN0ZXIoXFxcInNvbG9zLXBjaVxcXCIsIHBhcmVudCwgXFx1MDAyNmZwZ2Ffb3BzLCAtMSwgTlVMTCk7XFxuZHJpdmVycy9hdG0vc29sb3MtcGNpLmMtMTM2MC1cXHRcXHRpZiAoIWNhcmQtXFx1MDAzZWF0bWRldltpXSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjoxMy40NzUzNDg4OTNaIiwiU2VxIjo4OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg2NTU5NzE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IFRoaW5raW5nIG9uIHRoZSBEcml2ZXIgU2l0dWF0aW9uKipcblxuT2theSwgc28gdGhlIHByb2JsZW1hdGljIGRyaXZlcnMgYXJlIGdvbmUuIFRoYXQncyBnb29kIHByb2dyZXNzLiBMb29raW5nIGF0IHdoYXQncyBsZWZ0LCBpdCBzZWVtcyBsaWtlIGBzb2xvcy1wY2lgIGFuZCBgdXNiYXRtYCBhcmUgdGhlIG9ubHkgb25lcyBzdGFuZGluZy4gU2luY2UgYHVzYmF0bWAgaXMgYSBVU0IgZHJpdmVyLCB0aGF0IHByZXNlbnRzIGEgY2xlYXIgcGF0aC4gV2l0aCBzeXprYWxsZXIncyBVU0IgcmF3IGdhZGdldCBlbXVsYXRpb24sIGVtdWxhdGluZyBgdXNiYXRtYCBzaG91bGQgYmUgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQuIFNvLCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGZvY3VzIG9uIGFyZSBgVVNCX0FUTWAgYW5kIGBVU0JfWFVTQkFUTWAuIE5vdywgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBVU0JfWFVTQkFUTWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMgSSBtaWdodCBiZSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDgzMSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA2OjIxLjM0MDk0OTk3OVoiLCJTZXEiOjkwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyODU2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZz02PW1lbnVjb25maWcgVVNCX0FUTVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlVTQiBEU0wgbW9kZW0gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL3VzYi9hdG0vS2NvbmZpZzo4OlxcdGRlcGVuZHMgb24gQVRNXFxuZHJpdmVycy91c2IvYXRtL0tjb25maWctOS1cXHRzZWxlY3QgQ1JDMzJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDY6MjEuNDA4MjQzNDE4WiIsIlNlcSI6OTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3Mzg1MjgyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVVNCX1hVU0JBVE0gRGVwZW5kZW5jeSBDaGVjayoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHByZXR0eSBzdXJlIGBVU0JfWFVTQkFUTWAgc2hvdWxkIGhhdmUgc29tZSBzb3J0IG9mIGRlcGVuZGVuY3kgc2V0IHVwLCBidXQgdGhlIGJ1aWxkIHN5c3RlbSBpc24ndCBzY3JlYW1pbmcgYXQgbWUuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0LiBMZXQncyBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGUgZm9yIHRoZSBVU0IgQVRNIGRyaXZlcnMsIHdoaWNoIEkga25vdyBpcyBsb2NhdGVkIGluIGBkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ2AuIEl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBjb25maWd1cmF0aW9ucywgYW5kIGEgcXVpY2sgaW5zcGVjdGlvbiBpcyB1c3VhbGx5IHdvcnRoIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE4MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA2OjI5LjE0Njc3NjIyNloiLCJTZXEiOjkyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRcXHQgIGluc3RhbGwgZmlybXdhcmVzIGFuZCBDTVYgKENvbW1hbmQgTWFuYWdlbWVudCBWYXJpYWJsZXMpOyBzZWVcXG4gIDUxOlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vZ25hLm9yZy9wcm9qZWN0cy91ZWFnbGVhdG0vXFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDU0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVlYWdsZS1hdG0uXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBVU0JfWFVTQkFUTVxcbiAgNTc6XFx0XFx0dHJpc3RhdGUgXFxcIk90aGVyIFVTQiBEU0wgbW9kZW0gc3VwcG9ydFxcXCJcXG4gIDU4OlxcdFxcdGhlbHBcXG4gIDU5OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIERTTCBVU0IgbW9kZW0gbm90IGV4cGxpY2l0bHkgc3VwcG9ydGVkIGJ5XFxuICA2MDpcXHRcXHQgIGFub3RoZXIgVVNCIERTTCBkcml2ZXJzLiAgSW4gb3JkZXIgdG8gdXNlIHlvdXIgbW9kZW0geW91IHdpbGwgbmVlZCB0b1xcbiAgNjE6XFx0XFx0ICBwYXNzIHRoZSB2ZW5kb3IgSUQsIHByb2R1Y3QgSUQsIGFuZCBlbmRwb2ludCBudW1iZXJzIGZvciB0cmFuc21pc3Npb25cXG4gIDYyOlxcdFxcdCAgYW5kIHJlY2VwdGlvbiBhcyBtb2R1bGUgcGFyYW1ldGVycy4gIFlvdSBtYXkgbmVlZCB0byBpbml0aWFsaXplXFxuICA2MzpcXHRcXHQgIHRoZSBtb2RlbSB1c2luZyBhIHVzZXIgc3BhY2UgdXRpbGl0eSAoYSBmaXJtd2FyZSBsb2FkZXIgZm9yIGV4YW1wbGUpLlxcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgNjY6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgeHVzYmF0bS5cXG4gIDY3OlxcdFxcbiAgNjg6XFx0ZW5kaWYgIyBVU0JfQVRNXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA2OjI5LjE0Njg3ODY5NloiLCJTZXEiOjkzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTY0OTIyMTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBVE0gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIGVuYWJsaW5nIEFUTSBmdW5jdGlvbmFsaXR5IGluIHRoaXMgc3lzdGVtLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUga2V5IGlzIHdpdGhpbiB0aGUgYGlmIFVTQl9BVE1gIGJsb2NrLiBUaGlzIHRlbGxzIG1lIHRoZSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gZW5hYmxlIGFyZSBgQVRNYCwgYFVTQl9BVE1gLCBhbmQgYFVTQl9YVVNCQVRNYC4gU3RyYWlnaHRmb3J3YXJkLCByaWdodD8gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nLiBgVVNCX0FUTWAgZGVmaW5pdGVseSBkZXBlbmRzIG9uIGBBVE1gLCB0aGF0IG11Y2ggSSByZW1lbWJlciwgYnV0IHdoYXQgYWJvdXQgYFVTQmAgaXRzZWxmPyBJcyBgVVNCX0FUTWAgY29udGluZ2VudCBvbiB0aGUgZ2VuZXJhbCBVU0Igc3Vic3lzdGVtIGJlaW5nIGVuYWJsZWQgdG9vPyBJIGRvbid0IHdhbnQgdG8gYXNzdW1lIGFueXRoaW5nIGFuZCBlbmQgdXAgd2l0aCBhIGJyb2tlbiBjb25maWd1cmF0aW9uLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IOKAkyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgYGRyaXZlcnMvdXNiL2F0bS9gLiBMZXQncyBqdXN0IG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCBoZXJlIGJlZm9yZSBJIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Njc2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjozNS4zMTE4MDYwOTdaIiwiU2VxIjo5NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBVU0IvQVRNIERTTCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgVVNCX0FUTVxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBEU0wgbW9kZW0gc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gQVRNXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgVVNCIERpZ2l0YWwgU3Vic2NyaWJlciBMaW5lIChEU0wpXFxuICAxMjpcXHRcXHQgIG1vZGVtIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4gIFlvdSB3aWxsIHRoZW4gbmVlZCB0byBjaG9vc2UgeW91clxcbiAgMTM6XFx0XFx0ICBtb2RlbSBmcm9tIHRoZSBsaXN0IGJlbG93LlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMTY6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNiYXRtLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBVU0JfQVRNXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBVU0JfU1BFRURUT1VDSFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjozNS4zMTE5MTI3MjZaIiwiU2VxIjo5NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwNjE0NDI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFVTQiBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBhbmQgaXQgKnNlZW1zKiBsaWtlIHRoZXJlIGlzbid0IGEgZGlyZWN0IGV4cGxpY2l0IGRlcGVuZGVuY3kgb24gYFVTQmAgZGVmaW5lZCBoZXJlLiBIb3dldmVyLCBiYXNlZCBvbiB0aGUgc3RydWN0dXJlIG9mIHRoaXMgY29kZSwgaXQncyBoaWdobHkgbGlrZWx5IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgdWx0aW1hdGVseSBzb3VyY2VkIGZyb20gc29tZXRoaW5nIHdpdGhpbiB0aGUgYGRyaXZlcnMvdXNiL0tjb25maWdgIGZpbGUuIEFuZCwgaWYgSSdtIGJldHRpbmcgY29ycmVjdGx5LCB0aGF0IGZpbGUgaXMgZ29pbmcgdG8gaGF2ZSBzb21lIGd1YXJkcyBsaWtlIGBpZiBVU0JfU1VQUE9SVGAgb3IgcGVyaGFwcyBqdXN0IGBpZiBVU0JgIHN1cnJvdW5kaW5nIHRoZSByZWxldmFudCBzZWN0aW9ucy4gVG8gYmUgY2VydGFpbiwgSSBuZWVkIHRvIG9wZW4gYW5kIGludmVzdGlnYXRlIGBkcml2ZXJzL3VzYi9LY29uZmlnYCBkaXJlY3RseS4gTGV0J3MgZ2V0IHRoYXQgZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYyMDMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA2OjM5LjgxODA2MTk3MVoiLCJTZXEiOjk2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMwNzc1NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic291cmNlIFxcXCJkcml2ZXJzL3VzYi9hdG0vS2NvbmZpZ1xcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9LY29uZmlnPTE0OD1zb3VyY2UgXFxcImRyaXZlcnMvdXNiL21pc2MvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL3VzYi9LY29uZmlnLTE0OS1cXG5kcml2ZXJzL3VzYi9LY29uZmlnOjE1MDpzb3VyY2UgXFxcImRyaXZlcnMvdXNiL2F0bS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdXNiL0tjb25maWctMTUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjozOS44ODExNDQyN1oiLCJTZXEiOjk3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzIzODEyNTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVTQiwgQVRNLCBhbmQgdGhlIFBWQyBDb25uZWN0aW9uOiBBIEZ1enppbmcgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCB0aGlzIFVTQiBzdHVmZiBzb3J0ZWQgZm9yIHN5emthbGxlci4gU2VlbXMgbGlrZSBVU0IgaXMgYSBjb3JlIHJlcXVpcmVtZW50IGZvciBmdXp6aW5nIFVTQiBnYWRnZXRzLCBuYXR1cmFsbHkuIEkgcmVtZW1iZXIgc2VlaW5nIGBBVE1gLCBgVVNCX0FUTWAsIGFuZCBgVVNCX1hVU0JBVE1gIGluIHRoZSBjb25maWdzLCBidXQgbGV0J3Mgc2VlLi4ucmlnaHQsIGBBVE1gIGlzIHRoZSBiaWcgb25lIGhlcmUuIE5vdywgY2FuIEkgcmVhY2ggYHZjY19jb25uZWN0YD8gTGV0J3Mgc2VlLi4uIFllcCwgbG9va3MgbGlrZSBJIGNhbiBnZXQgdGhlcmUgdmlhIGBzb2NrZXQoQUZfQVRNUFZDLCBTT0NLX0RHUkFNLCAwKWAgYW5kIGEgYGJpbmQoKWAuIFxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGB2Y2NfY29ubmVjdGAsIGBwdmNfYmluZGAsIGFuZCBgcHZjX2Nvbm5lY3RgLiBIYW5nIG9uLCBhcmVuJ3QgYHB2Y19iaW5kYCBhbmQgYHB2Y19jb25uZWN0YCBzdGF0aWMgZnVuY3Rpb25zPyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdC4gQXJlIHRoZXkgaW5saW5lZCBieSBhbnkgY2hhbmNlPyBUaW1lIHRvIGp1bXAgaW50byBgbmV0L2F0bS9wdmMuY2AgYW5kIHRha2UgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUxMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjo0NS4yMDQ5NjE3OTNaIiwiU2VxIjo5OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjgzNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB2Y19iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vcHZjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9wdmMuYz0yMj1zdGF0aWMgaW50IHB2Y19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxcbi0tXFxubmV0L2F0bS9wdmMuYy0yNi1cXG5uZXQvYXRtL3B2Yy5jOjI3OnN0YXRpYyBpbnQgcHZjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxcbm5ldC9hdG0vcHZjLmMtMjgtXFx0XFx0ICAgIGludCBzb2NrYWRkcl9sZW4pXFxuLS1cXG5uZXQvYXRtL3B2Yy5jPTU5PXN0YXRpYyBpbnQgcHZjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNvY2thZGRyLFxcbi0tXFxubmV0L2F0bS9wdmMuYy02MS17XFxubmV0L2F0bS9wdmMuYzo2MjpcXHRyZXR1cm4gcHZjX2JpbmQoc29jaywgc29ja2FkZHIsIHNvY2thZGRyX2xlbik7XFxubmV0L2F0bS9wdmMuYy02My19XFxuLS1cXG5uZXQvYXRtL3B2Yy5jPTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwdmNfcHJvdG9fb3BzID0ge1xcbi0tXFxubmV0L2F0bS9wdmMuYy0xMTAtXFx0LnJlbGVhc2UgPVxcdHZjY19yZWxlYXNlLFxcbm5ldC9hdG0vcHZjLmM6MTExOlxcdC5iaW5kID1cXHRcXHRwdmNfYmluZCxcXG5uZXQvYXRtL3B2Yy5jLTExMi1cXHQuY29ubmVjdCA9XFx0cHZjX2Nvbm5lY3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA2OjQ1LjI3ODI1MDAwMloiLCJTZXEiOjk5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDkzMTQwMTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBBVE0gUFZDIENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gVGhlIGltcG9ydGFudCBwYXJ0IGhlcmUgaXMgaG93IHRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIEFUTSBQVkMgY29kZSBwYXRoLiBJIHNlZSB0aGVzZSBuZXcgZnVuY3Rpb25zIGFyZSBhc3NpZ25lZCB0byBgcHZjX3Byb3RvX29wc2AgYW5kIHRoZWlyIGFkZHJlc3NlcyBhcmUgYmVpbmcgdGFrZW4sIG1lYW5pbmcgdGhleSB3b24ndCBiZSBpbmxpbmVkLiBUaGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQgZm9yIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5UaGUga2V5IGZvY3VzIGhlcmUgaXMgbGlrZWx5IHRoZSBgdmNjX2Nvbm5lY3RgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSBhbiBleHBvcnRlZCBnbG9iYWwgZnVuY3Rpb24sIHdoaWNoIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBhbmFseXNpcy4gV2UncmUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgZm9jdXMgc3ltYm9sIGZvciB0ZXN0aW5nIHRoZSBjaGFuZ2VzIHRvIGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgIGluIGBuZXQvYXRtL2NvbW1vbi5jYC4gSSBjaGVja2VkLCBhbmQgYGZpbmRfY2lgIGlzIHN0YXRpYywgYW5kIHNvIGlzIGBfX3ZjY19jb25uZWN0YCwgc28gYHZjY19jb25uZWN0YCBpcyBpbmRlZWQgdGhlIGJlc3QgcGxhY2UgdG8gY29uY2VudHJhdGUgb3VyIGVmZm9ydHMuXG5cbkhlcmUncyB0aGUgZ2lzdDogdGhlIHBhdGNoIGFsdGVycyBgZmluZF9jaWAgYW5kIGBfX3ZjY19jb25uZWN0YCBpbiBgbmV0L2F0bS9jb21tb24uY2AuIEl0J3MgZml4aW5nIGEgYnVnIHdoZXJlIHNwZWNpZmljIHZhbHVlcyBmb3IgYHZwaV9iaXRzYCBvciBgdmNpX2JpdHNgIChzcGVjaWZpY2FsbHksIGBBVE1fQ0lfTUFYYCkgY2FuIGxlYWQgdG8gdW5kZWZpbmVkIGJlaGF2aW9yLlxuXG5Ob3csIHdlIGtub3cgdGhhdCB1c2VyLXNwYWNlIGNvZGUgY2FuIGhpdCB0aGlzIGFyZWEgdmlhIGBiaW5kYCBvciBgY29ubmVjdGAgb24gYW4gQVRNIFBWQyBzb2NrZXQuIFRvIHRyaWdnZXIgdGhpcywgd2UnbGwgbmVlZCBhbiBBVE0gZGV2aWNlLCBvZiBjb3Vyc2UuIFRoZSBnb29kIG5ld3MgaXMgdGhhdCBTeXprYWxsZXIgY2FuIGVtdWxhdGUgVVNCIEFUTSBkZXZpY2VzIHVzaW5nIHRoZSBVU0IgZ2FkZ2V0IGFuZCBgdXNiYXRtYCBkcml2ZXIuIFRoYXQncyBwZXJmZWN0IGZvciBjcmVhdGluZyBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQuIFRoZSBjb25maWd1cmF0aW9uIG5lZWRzIHRvIGVuYWJsZSBgQVRNYCwgYFVTQl9BVE1gLCBhbmQgYFVTQl9YVVNCQVRNYC5cblxuRm9yIHRoZSBmdXp6aW5nL3Rlc3RpbmcgZm9jdXMsIGB2Y2NfY29ubmVjdGAsIGBwdmNfYmluZGAsIGFuZCBgcHZjX2Nvbm5lY3RgIGFyZSB0aGUgcHJpbWFyeSBzeW1ib2xzIEknbGwgY29uY2VudHJhdGUgb24uXG5cbldhaXQsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBXaGF0IGFib3V0IGBBVE1fQlIyNjg0YD8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGB2Y2NfY29ubmVjdGA/IEknZCBiZXR0ZXIgaW52ZXN0aWdhdGUgYG5ldC9hdG0vYnIyNjg0LmNgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBjYWxsIGNoYWluIHRoZXJlLiBUaGlzIGNvdWxkIGJlIGEgZ29vZCBhcmVhIHRvIGV4cGFuZCBvbiB0aGUgdGVzdCBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzIzMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNjo1My43NzEzOTMxNzlaIiwiU2VxIjoxMDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODU0NDE2OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNjX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9icjI2ODQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDY6NTMuODU5OTQ0MDU4WiIsIlNlcSI6MTAxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYwMTY4MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQSBRdWljayBUZWNobmljYWwgRmxpY2tlcioqXG5cbkhtbSwganVzdC4uLiBuby4gU29tZXRoaW5nJ3Mgbm90IHF1aXRlIGNsaWNraW5nLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYXNoZXMgdG8gdGhlIEFUTSBsYXllciwgc3BlY2lmaWNhbGx5IHRoZSBQUFBvQS9QUFBvRSBpbXBsZW1lbnRhdGlvbi4gSXMgdGhlcmUgc29tZXRoaW5nIGluIGBuZXQvYXRtL3BwcG9hdG0uY2AgdGhhdCBjb3VsZCBiZSByZWxhdGVkPyBJdCdzIGEgcXVpY2sgdGhvdWdodCwgYSBmbGVldGluZyBwb3NzaWJpbGl0eSwgc29tZXRoaW5nIHRvIGNoZWNrIG91dCBpZiB0aGUgaW5pdGlhbCBhdmVudWVzIGRvbid0IGJlYXIgZnJ1aXQuIEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFuZCBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiB3aXRoaW4gdGhhdCBmaWxlLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgYW5hbHl6ZSB0aGUgbWFpbiBpc3N1ZSBmaXJzdC4gTGV0IG1lIGZvbGxvdyBhIHN0cnVjdHVyZWQgYXBwcm9hY2ggdG8gcHJldmVudCB3YXN0ZWQgZWZmb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODA3NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA2OjU3LjUyMDExNTU5NVoiLCJTZXEiOjEwMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNDQ1MjQwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2Y2NfY29ubmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL3BwcG9hdG0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDY6NTcuNTgwNTY3NTM0WiIsIlNlcSI6MTAzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODA2OTU1OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIGhpZ2hseSBrbm93bGVkZ2VhYmxlIHByb2Zlc3Npb25hbDpcblxuKipEaWdnaW5nIGludG8gdGhlIENhbGwgSGllcmFyY2h5KipcblxuUmlnaHQsIHNvIHdlJ3ZlIGVzdGFibGlzaGVkIHRoYXQgdGhlcmUncyBubyBvdGhlciBkaXJlY3QgY2FsbCB0byBgdmNjX2Nvbm5lY3RgLiBUaGlzIGlzIGdvb2QsIHdlJ3JlIG5hcnJvd2luZyBpdCBkb3duLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgb2YgdGhpcy4gVGhlIGdvYWwgaXMgdG8gY29uY2x1c2l2ZWx5IHZlcmlmeSB0aGF0IHRoZSBgcHZjLmNgIG1vZHVsZSBpcyB0aGUgKm9ubHkqIHBsYWNlIGNhbGxpbmcgYHZjY19jb25uZWN0YC4gV2UgbmVlZCB0byBiZSBhaXJ0aWdodCBvbiB0aGlzIHBvaW50IGJlZm9yZSB3ZSBwcm9jZWVkIHdpdGggYW55IGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbnMuIFRpbWUgZm9yIGEgZGVlcCBkaXZlIHRvIGVuc3VyZSB0aGVyZSBhcmUgKm5vKiBoaWRkZW4gY2FsbCBwYXRocyB3ZSd2ZSBvdmVybG9va2VkLiBJIG5lZWQgdG8gYmUgMTAwJSBjZXJ0YWluIG9mIHRoaXMsIHNvIGxldCdzIGNyb3NzLXJlZmVyZW5jZSBhbmQgZG91YmxlLWNoZWNrIGFueSBzZWNvbmRhcnkgcG90ZW50aWFsIGxvY2F0aW9ucyB0byBmaW5kIGEgbW9yZSByb2J1c3QgY29uY2x1c2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyODEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNzowMi4zODc1MjU2NDRaIiwiU2VxIjoxMDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODk2NzkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3ZjY19jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9hdG0vY29tbW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2F0bS9jb21tb24uYz0zMzA9c3RhdGljIGludCBmaW5kX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0ICp2cGksIGludCAqdmNpKVxcbi0tXFxubmV0L2F0bS9jb21tb24uYy0zNzctXFxubmV0L2F0bS9jb21tb24uYzozNzg6c3RhdGljIGludCBfX3ZjY19jb25uZWN0KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBhdG1fZGV2ICpkZXYsIHNob3J0IHZwaSxcXG5uZXQvYXRtL2NvbW1vbi5jLTM3OS1cXHRcXHRcXHQgaW50IHZjaSlcXG4tLVxcbm5ldC9hdG0vY29tbW9uLmM9NDU4PWludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpXFxuLS1cXG5uZXQvYXRtL2NvbW1vbi5jLTUwNS1cXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG5uZXQvYXRtL2NvbW1vbi5jOjUwNjpcXHRlcnJvciA9IF9fdmNjX2Nvbm5lY3QodmNjLCBkZXYsIHZwaSwgdmNpKTtcXG5uZXQvYXRtL2NvbW1vbi5jLTUwNy1cXHRpZiAoZXJyb3IpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDc6MDIuNDc2NDk4MDIzWiIsIlNlcSI6MTA1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzk1OTIzMTQyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIFJlYXNvbmluZyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBBVE0gZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBmdXp6aW5nIHRhcmdldHMuIFRoZSBrZXkgaGVyZSBpcyBkZWZpbml0ZWx5IGB2Y2NfY29ubmVjdGAuIFRoYXQncyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC5cblxuQnV0LCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEFyZSB0aGVyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9ucyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nPyBMZXQncyBzZWUuLi4gYE5FVGAgaXMgYSBnaXZlbiwgYSBuby1icmFpbmVyLiBUaGUgY29yZSBBVE0gY29uZmlndXJhdGlvbiwgYEFUTWAsIGlzIGNydWNpYWwuIEFuZCB0aGVuIHdlIGhhdmUgdGhvc2UgYFVTQl9BVE1gIGFuZCBgVVNCX1hVU0JBVE1gIG9wdGlvbnMuIFRob3NlIHNlZW0gcmVsYXRlZCB0byB0aGUgZHVtbXkgZGV2aWNlIHNldHVwLlxuXG5XYWl0IGEgc2Vjb25kLi4uIGBVU0JfWFVTQkFUTWAuIFRoYXQncyBhICptb2R1bGUqLCByaWdodD8gSWYgaXQncyBidWlsdC1pbiwgd2hpY2ggSSBuZWVkIHRvIGNoZWNrLCB0aGUgZHJpdmVyIHdvdWxkIHJlZ2lzdGVyIGl0c2VsZiBhdXRvbWF0aWNhbGx5LiBJZiBzeXprYWxsZXIgaXMgZnV6emluZyBVU0IsIGl0IHNob3VsZCBwcm9iZSBgeHVzYmF0bWAgYW5kLCBiaW5nbywgY3JlYXRlIGFuIEFUTSBkZXZpY2UgZm9yIG1lLiBUaGF0J3MgZ29vZCBuZXdzIGFuZCBwb3RlbnRpYWxseSBzaW1wbGlmaWVzIHRoaW5ncy5cblxuTm93LCBhIGJyb2FkZXIgcXVlc3Rpb246IGlzIGB4dXNiYXRtYCB0aGUgKmJlc3QqIEFUTSBkcml2ZXIgdG8gdXNlLCBvciBpcyB0aGVyZSBhIHNpbXBsZXIgb25lPyBQZXJoYXBzIHNvbWV0aGluZyBpbiBgbmV0L2F0bS9gIG1pZ2h0IG9mZmVyIGEgbG93ZXItbGV2ZWwgZW50cnkgcG9pbnQgdGhhdCB3b3VsZCBiZSBlYXNpZXIgdG8gaW50ZXJhY3Qgd2l0aD8gTGV0J3MgZGlnIGludG8gYG5ldC9hdG0vYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgdXNlcyBgYXRtX2Rldl9yZWdpc3RlcmAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBhdmFpbGFibGUgZHJpdmVycyBhbmQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3NzIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDc6MTYuNDM1NzMyNzQxWiIsIlNlcSI6MTA2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzMjc2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRtX2Rldl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYXRtL3Jlc291cmNlcy5jPTY5PUVYUE9SVF9TWU1CT0woYXRtX2Rldl9sb29rdXApO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtNzAtXFxubmV0L2F0bS9yZXNvdXJjZXMuYzo3MTpzdHJ1Y3QgYXRtX2RldiAqYXRtX2Rldl9yZWdpc3Rlcihjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsXFxubmV0L2F0bS9yZXNvdXJjZXMuYy03Mi1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywgaW50IG51bWJlcixcXG4tLVxcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMxLX1cXG5uZXQvYXRtL3Jlc291cmNlcy5jOjEzMjpFWFBPUlRfU1lNQk9MKGF0bV9kZXZfcmVnaXN0ZXIpO1xcbm5ldC9hdG0vcmVzb3VyY2VzLmMtMTMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNzoxNi40ODYwNjQ3WiIsIlNlcSI6MTA3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTg3NDI1NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcm91Ymxlc2hvb3RpbmcgQVRNIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbm8gbG9vcGJhY2sgZGV2aWNlLiBUaGF0IGVsaW1pbmF0ZXMgYSBjb21tb24sIGFuZCBvZnRlbiBlYXNpZXN0LCB0ZXN0aW5nIHBhdGguIENvbnNpZGVyaW5nIHRoZSBsaW1pdGF0aW9ucywgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBmb2N1cyBvbiBgVVNCX0FUTWAuIEl0J3MgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgcHJvdmlkaW5nIGEgdXNhYmxlIGludGVyZmFjZSwgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbkhvd2V2ZXIsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXBseSBpbnRvIHRoZSBgVVNCX0FUTWAgaW1wbGVtZW50YXRpb24sIEkgc2hvdWxkIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gcnVsZSBvdXQgYSBwb3RlbnRpYWwgb3ZlcnNpZ2h0IG9uIG15IHBhcnQsIG9yIGEgc3VidGxlIGRpZmZlcmVuY2UgaW4gdGhlIHRhcmdldCBzeXN0ZW0uIEknbGwgc2VhcmNoIGZvciBgQVRNX0RVTU1ZYCBqdXN0IHRvIGJlIGNlcnRhaW4uIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCBlaXRoZXIgZG9lc24ndCBleGlzdCBhdCBhbGwsIG9yIHBlcmhhcHMgaXMgcHJlc2VudCBidXQgaW4gc29tZSBvdGhlciBzZWN0aW9uIG9mIHRoZSBrZXJuZWwgdHJlZSB0aGF0IEkgaGF2ZW4ndCB5ZXQgY29uc2lkZXJlZC4gVGhpcyBxdWljayBzZWFyY2ggd2lsbCBwcmV2ZW50IG1lIGZyb20gbWFraW5nIGFueSBhc3N1bXB0aW9ucywgb3IgZG9pbmcgYSBidW5jaCBvZiB3b3JrLCB0aGF0IHVsdGltYXRlbHkgd2luZHMgdXAgYmVpbmcgcmVkdW5kYW50LiBJdCdzIGFib3V0IGJlaW5nIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQxNCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA3OjI0LjA3MzQ5Mzg3OVoiLCJTZXEiOjEwOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTU2ODMwOTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFUTV9EVU1NWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA3OjI2LjM2OTE4MzA5NloiLCJTZXEiOjEwOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODczODY0OTMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5lZ2F0aW9uIGFuZCBhIFBpdm90YWwgUXVlcnkqKlxuXG5NeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgYSBmbGF0IFwiTm8uXCIgSSdtIG1lbnRhbGx5IHB1c2hpbmcgYmFjayBhZ2FpbnN0IHNvbWV0aGluZywgd2hhdGV2ZXIgdGhlIGltcGxpZWQgcHJvcG9zaXRpb24gb3IgbGluZSBvZiByZWFzb25pbmcgd2FzLiBJdCdzIGEgZ3V0IHJlc3BvbnNlLCBsaWtlbHkgcm9vdGVkIGluIGV4cGVyaWVuY2UuIEknbSBzZWVpbmcgYSBwb3RlbnRpYWwgZmxhdyBvciBwcm9ibGVtLCBwb3NzaWJseSBhIGtub3duIHBpdGZhbGwgdGhhdCB0aGUgY3VycmVudCB0cmFpbiBvZiB0aG91Z2h0IGlzIG1pc3NpbmcuXG5cblRoZW4sIGFsbW9zdCBpbW1lZGlhdGVseSwgYSBjcnVjaWFsIGNvdW50ZXItY29uc2lkZXJhdGlvbiBzdXJmYWNlczogXCJXaGF0IGFib3V0IGBEVU1NWV9BVE1gP1wiIFRoaXMgaXNuJ3QganVzdCBhIHJhbmRvbSB0aG91Z2h0OyBpdCdzIGEgc3BlY2lmaWMsIHRlY2huaWNhbCBxdWVzdGlvbi4gVGhlIGZvY3VzIG9uIGBEVU1NWV9BVE1gIGlzIGEgdmVyeSBzcGVjaWZpYyBjb25jZXB0IHJlbGF0ZWQgdG8gYSBwb3RlbnRpYWwgcHJvY2Vzcy4gSSdtIHByb2JpbmcgZm9yIGFuIGVkZ2UgY2FzZSwgYSBwb3RlbnRpYWwgYWx0ZXJuYXRpdmUgc29sdXRpb24sIG9yIGEgY3JpdGljYWwgcG9pbnQgdGhhdCBoYXNuJ3QgYmVlbiBhZGVxdWF0ZWx5IGFkZHJlc3NlZC4gSSBzZWUgdGhlIG5lZWQgdG8gZXhhbWluZSB0aGUgaW1wbGljYXRpb25zIHRoYXQgdGhpcyBjb25jZXB0IGNvdWxkIHByb3ZpZGUuIEl0IGhpbnRzIGF0IGEgdmVyeSBzcGVjaWZpYyBkaXJlY3Rpb24gdG8gcHVyc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTcwMiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA3OjM1LjEwNzgzNjI4WiIsIlNlcSI6MTEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3OTMyODk3OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRFVNTVlfQVRNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDc6MzcuMTg3MTcxNzA5WiIsIlNlcSI6MTExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzY5NDkwOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEltbWVkaWF0ZSBUaG91Z2h0cyBvbiBBVE0gVVNCIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgbm8sIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMuIFJpZ2h0LCBzbyBgQVRNYCwgYFVTQl9BVE1gLCBhbmQgYFVTQl9YVVNCQVRNYCBhcmUgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb25zIHdlJ3JlIGRlYWxpbmcgd2l0aC4gSGFuZyBvbiBhIHNlY29uZCwgdGhvdWdoLCBiZWNhdXNlIGBVU0JfWFVTQkFUTWAgaXMgKmRlcGVuZGVudCogb24gYFVTQl9BVE1gLiBIbW0sIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvdXNiL2F0bS9LY29uZmlnYCBmaWxlIGFnYWluIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGF0IGRlcGVuZGVuY3kuIEdvdHRhIGJlIHByZWNpc2UgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5NzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNzo0MS45NTY2NjY1MVoiLCJTZXEiOjExMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDQ2NjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX1hVU0JBVE1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvYXRtL0tjb25maWc9NDQ9Y29uZmlnIFVTQl9VRUFHTEVBVE1cXG4tLVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTU1LVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnOjU2OmNvbmZpZyBVU0JfWFVTQkFUTVxcbmRyaXZlcnMvdXNiL2F0bS9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJPdGhlciBVU0IgRFNMIG1vZGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA3OjQyLjA2MTE0MDYxOVoiLCJTZXEiOjExMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc0MjI1ODc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFUTSBVU0IgQ29uZmlndXJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBmb2N1cyBvbiBoZXJlIGlzIGBVU0JfWFVTQkFUTWAuIExldCdzIHJlLWV4YW1pbmUgdGhpcyBwYXRjaC5cblxuYGBgY1xuIFx0aW50IGVycjtcbitcdGludCB2cGlfYml0cyA9IHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOlxuK1x0XHQgICAgICAgdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0cztcbitcdGludCB2Y2lfYml0cyA9IHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDE2IDpcbitcdFx0ICAgICAgIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHM7XG5gYGBcblxuUmlnaHQsIHRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IHNlZW1zIHRvIGJlIHRoZXJlIHRvIHByZXZlbnQgYW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBvdXQtb2YtYm91bmRzIHNoaWZ0cyBvciBpbmZpbml0ZSBsb29wcyBpZiBgdnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgaGFwcGVuIHRvIGVxdWFsIGBBVE1fQ0lfTUFYYCwgd2hpY2ggYXBwZWFycyB0byBiZSAtMSwgYnV0IGxldCdzIGRvdWJsZS1jaGVjay4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgZnV6emluZzsgaXQncyBhIGdvb2QgcGxhY2UgdG8gcG90ZW50aWFsbHkgZXhwb3NlIHNvbWUgc3VidGxlIGlzc3Vlcy5cblxuVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGhlcmUsIGFzIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgb3IgaW50ZXJlc3RpbmcgbG9jYXRpb25zIGZvciBmdXp6aW5nLCBhcmUgYHZjY19jb25uZWN0YCwgYHB2Y19iaW5kYCwgYW5kIGBwdmNfY29ubmVjdGAuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoaXMga2luZCBvZiBjb25uZWN0aW9uLW9yaWVudGVkIHN0dWZmLlxuXG5Ob3csIHJlZ2FyZGluZyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBJIGtub3cgSSBuZWVkIGBBVE1gLCBgVVNCX0FUTWAsIGFuZCB0aGUgdGFyZ2V0IGBVU0JfWFVTQkFUTWAuIExldCdzIGp1c3QgcXVpY2tseSBjb25maXJtIHdoZXRoZXIgb3Igbm90IGBVU0JfWFVTQkFUTWAgcmVxdWlyZXMgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgVVNCX1hVU0JBVE1gIGlzIG5lc3RlZCBpbnNpZGUgYW4gYGlmIFVTQl9BVE1gIGNvbmRpdGlvbiwgYW5kIGBVU0JfQVRNYCBpdHNlbGYgZGVwZW5kcyBvbiBgQVRNYC4gVGhhdCdzIGdvb2Q7IGl0J3MgY2xlYW4gYW5kIG1ha2VzIHNlbnNlLiBTbywgeWVzLCBgQVRNYCwgYFVTQl9BVE1gLCBhbmQgYFVTQl9YVVNCQVRNYCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBlbmFibGUgaXQuXG5cbkhvbGQgb24sIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgYEFUTV9DSV9NQVhgLiBXZSBrbm93IGl0IF9wcm9iYWJseV8gbWVhbnMgLTEsIGJ1dCBpdCdzIGltcG9ydGFudCB0byBjb25maXJtLiBJIHNob3VsZCBjaGVjayB0aGUgYGluY2x1ZGUvbGludXgvYXRtLmhgIGZpbGUgZm9yIGl0cyBkZWZpbml0aW9uLiBJJ2xsIG5lZWQgdG8ga25vdyBleGFjdGx5IHdoYXQgdmFsdWUgaXQgcmVwcmVzZW50cyBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMjYzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA3OjUwLjgwMzQwNDQ3MloiLCJTZXEiOjExNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMTIyODQ5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBVE1fQ0lfTUFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYXRtLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA3OjUwLjg3MzUzNTY4MVoiLCJTZXEiOjExNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY3Nzc3OTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBBVE0gSGVhZGVyIEZpbGVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgc29tZXRoaW5nIG1pZ2h0IGJlIGFtaXNzIHdpdGggdGhlIEFUTSBsYXllciwgc28gbGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZS4gTGV0J3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS91YXBpL2xpbnV4L2F0bS5oYC4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IHRoZSBkZWZpbml0aW9ucyB0aGF0IGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIEkgd2FudCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbnMsIGFuZCBkYXRhIHNpemVzLCBhbmQgZW5zdXJlIHRoZXJlJ3Mgbm90aGluZyBpbW1lZGlhdGVseSBzdXNwZWN0IGluIGhvdyB0aGV5J3JlIGRlY2xhcmVkLCBvciBhbnkgcG90ZW50aWFsIG9mZi1ieS1vbmUgZXJyb3JzIEkgbWlnaHQgaGF2ZSBvdmVybG9va2VkIGluIHRoZSBwYXN0LiBJdCB3aWxsIGFsc28gYWN0IGFzIGEgZ29vZCByZWZyZXNoZXIgb24gdGhlIGtlcm5lbC1zcGFjZSBBQkksIGFzIGl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkgbGFzdCBkZWFsdCB3aXRoIHRoaXMgc3BlY2lmaWMgYXJlYS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGluZ3MgbGlrZSBhbGlnbm1lbnQsIGVuZGlhbm5lc3MgY29uc2lkZXJhdGlvbnMgKHRob3VnaCB1c3VhbGx5IHRoZSBVQVBJIGhhbmRsZXMgdGhhdCBwcmV0dHkgd2VsbCksIGFuZCBhbnkgcmVjZW50IGNoYW5nZXMgdGhhdCBjb3VsZCBoYXZlIGludHJvZHVjZWQgYSByZWdyZXNzaW9uLiBUaGlzIGhlYWRlciBpcyB0aGUgbHluY2hwaW4gZm9yIGFueSB1c2VyLXNwYWNlIEFUTSBpbnRlcmFjdGlvbnMsIHNvIGl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgcG9raW5nIGFyb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowNzo1Ni41NTEzMTgxOTlaIiwiU2VxIjoxMTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTg1NjEzOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVRNX0NJX01BWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvYXRtLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA3OjU2LjYwNzE4MzQ1OFoiLCJTZXEiOjExNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ5NjU4MzIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKldoZXJlIERpZCBJIERlZmluZSBUaGF0IERhcm5lZCBMaW1pdD8qKlxuXG5Pa2F5LCBzbyBJJ20gaGl0dGluZyBhIHNuYWcuIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSd2ZSBydW4gaW50byBgQVRNX0NJX01BWGAuIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyBpbnRvIHNlYXJjaCBtb2RlLiBXaGVyZSBpbiB0aGUgd29ybGQgKmRpZCogSSBkZWZpbmUgdGhpcyBjb25zdGFudD8gSXMgaXQgaW4gYSBoZWFkZXIgZmlsZT8gTWF5YmUgaXQncyBkZWZpbmVkIGlubGluZSBzb21ld2hlcmUsIHdoaWNoIHdvdWxkIGJlIGluY3JlZGlibHkgYW5ub3lpbmcsIGJ1dCBJIG5lZWQgdG8gcnVsZSB0aGF0IG91dC4gTGV0IG1lIHJldHJhY2UgbXkgc3RlcHMsIGNoZWNraW5nIHRoZSBvYnZpb3VzIGxvY2F0aW9ucyBmaXJzdDogdGhlIHByb2plY3QncyBoZWFkZXIgZmlsZXMsIGFueSBjb25maWd1cmF0aW9uIGZpbGVzIEkgd2FzIHdvcmtpbmcgb24sIGFuZCBkZWZpbml0ZWx5IGFueSByZWxldmFudCB1dGlsaXR5IG9yIGxpYnJhcnkgZmlsZXMuIFBlcmhhcHMgSSBkZWZpbmVkIGl0IGluIGFub3RoZXIgZnVuY3Rpb24/IE9yIGlzIHRoaXMgY29uc3RhbnQgZXZlbiBteSBkb2luZz8gRGlkIGFub3RoZXIgZGV2ZWxvcGVyIHNldCB0aGlzIGNvbnN0YW50IGluIGFub3RoZXIgZmlsZSB0aGF0IEknbSBzdXBwb3NlZCB0byBrbm93IGFib3V0PyBJdCBjb3VsZCBiZSBpbiBhIHNoYXJlZCBpbmNsdWRlIGZpbGUgb3IgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRoYXQgSSd2ZSBjb21wbGV0ZWx5IG92ZXJsb29rZWQuIEkgY2FuJ3QgcHJvY2VlZCB3aXRob3V0IGtub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyB2YWx1ZSwgaG93IGl0J3MgZGVmaW5lZCwgYW5kIHdoYXQgaXQgcmVwcmVzZW50cy4gVGhpcyBjb3VsZCBiZSBhIHNpbXBsZSBvdmVyc2lnaHQsIGJ1dCBpdCBjb3VsZCBiZSBhIGNsdWUgdG8gc29tZXRoaW5nIGJpZ2dlci4gR290dGEgdHJhY2sgaXQgZG93bi4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQ1NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA4OjA0LjEwMzc3MDgxWiIsIlNlcSI6MTE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNDc0ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFUTV9DSV9NQVhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oPTEzOD1zdHJ1Y3QgYXRtX2lvYnVmIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaC0xNDQtXFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oOjE0NTojZGVmaW5lIEFUTV9DSV9NQVggICAgICAtMSAgICAgICAgICAgICAgLyogdXNlIG1heGltdW0gcmFuZ2Ugb2YgVlBJL1ZDSSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaC0xNDYtIFxcbmluY2x1ZGUvdWFwaS9saW51eC9hdG1kZXYuaD0xNDc9c3RydWN0IGF0bV9jaXJhbmdlIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2Lmg6MTQ4OlxcdHNpZ25lZCBjaGFyXFx0dnBpX2JpdHM7XFx0LyogMS4uOCwgQVRNX0NJX01BWCAoLTEpIGZvciBtYXhpbXVtICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oOjE0OTpcXHRzaWduZWQgY2hhclxcdHZjaV9iaXRzO1xcdC8qIDEuLjE2LCBBVE1fQ0lfTUFYICgtMSkgZm9yIG1heGltdW0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2LmgtMTUwLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA4OjA0LjI3NDI0OTkxN1oiLCJTZXEiOjExOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEyNTMyNTE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFUTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY2FsY3VsYXRpb24gaXMgY29uZmlybWluZyB0aGUgYmFzZWxpbmUsIHRoZSByZXN1bHQgaXMgaW5kZWVkIC0xLiBXZSd2ZSBlc3RhYmxpc2hlZCB0aGF0IGBwdmNfYmluZGAgYW5kIGBwdmNfY29ubmVjdGAgYXJlIHRoZSBwcmltYXJ5IHBhdGhzIHRvIGB2Y2NfY29ubmVjdGDigJR3ZSB2ZXJpZmllZCB0aGF0IGVhcmxpZXIuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgYnJvYWRlciBpbXBsaWNhdGlvbnMuIEFyZSB0aGVyZSBhbnkgb3RoZXIgQVRNLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCB3YXJyYW50IGF0dGVudGlvbj8gSG1tLCBwZXJoYXBzIGBBVE1fQlIyNjg0YD8gSXQncyBub3QgKmVzc2VudGlhbCogZm9yIHRoaXMgc3BlY2lmaWMgcGF0Y2ggdG8gZnVuY3Rpb24sIGJ1dCBlbmFibGluZyBpdCBjZXJ0YWlubHkgd291bGRuJ3QgaW50cm9kdWNlIGNvbmZsaWN0cywgc28gaXQncyB3b3J0aCBub3RpbmcuIFRoZSBwYXRjaCBpdHNlbGYgbGl2ZXMgaW4gYG5ldC9hdG0vY29tbW9uLmNgLCBhbmQsIGFzIGV4cGVjdGVkLCB0aGF0IGZpbGUgaXMgY29tcGlsZWQgb25seSBpZiBgQ09ORklHX0FUTWAgaXMgYWN0aXZlLiBUaW1lIHRvIGNoZWNrIHRoZSBgbmV0L2F0bS9NYWtlZmlsZWAgdG8gbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlIGJ1aWxkIHJ1bGVzIGFyZSBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTk3NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowODoxMS4zOTk1Nzg1MDRaIiwiU2VxIjoxMjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTc1NDAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21tb24ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYXRtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9hdG0vTWFrZWZpbGUtNS1cXG5uZXQvYXRtL01ha2VmaWxlOjY6YXRtLXlcXHRcXHQ6PSBwdmMubyBpb2N0bC5vIGNvbW1vbi5vIGF0bV9taXNjLm8gcmF3Lm8gcmVzb3VyY2VzLm8gYXRtX3N5c2ZzLm9cXG5uZXQvYXRtL01ha2VmaWxlLTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA4OjExLjQ3MTMzNzMxM1oiLCJTZXEiOjEyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5NzMwMTMxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGF0bS15YCBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGVzdGFibGlzaGVkIHRoYXQgYGNvbW1vbi5vYCBpcyBpbmRlZWQgYSBjb21wb25lbnQgb2YgYGF0bS15YCwgYW5kIHRoYXQgdGhpcyBlbnRpcmUgbW9kdWxlLCBgYXRtLXlgLCBpcyBidWlsdCBvbmx5IHdoZW4gYENPTkZJR19BVE1gIGlzIGFjdGl2ZS4gVGhhdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJyb2FkZXIgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIGRldGVybWluZSB3aGVyZSBgdmNjX2Nvbm5lY3RgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhpcyBBVE0gc3Vic3lzdGVtLlxuXG5JJ3ZlIGFscmVhZHkgcnVuIGEgYGdyZXBgIGZvciBgdmNjX2Nvbm5lY3RgIHdpdGhpbiBgbmV0L2F0bS9gLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGV4Y2x1c2l2ZWx5IHVzZWQgaW4gYHB2Yy5jYC4gSG93ZXZlciwgbXkgZ3V0IGlzIHRlbGxpbmcgbWUgdGhlcmUgbWlnaHQgYmUgb3RoZXIgbG9jYXRpb25zLiBMZXQncyBkaWcgZGVlcGVyLiBUaGUgbmV4dCBsb2dpY2FsIHBsYWNlIHRvIGNoZWNrIGlzIGBuZXQvYXRtL3N2Yy5jYC4gV2FpdC4uLiB0aGVyZSBpc24ndCBhIGBzdmMuY2AgZmlsZSBpbiB0aGF0IGRpcmVjdG9yeT8gVGhhdCdzIHBlY3VsaWFyLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHN0ZXAgYmFjayBhbmQgdGhpbmsuIENvdWxkIGl0IGJlIHRoYXQgYHN2Yy5jYCBleGlzdGVkIGluIG9sZGVyIGtlcm5lbCB2ZXJzaW9ucyBhbmQgaGFzIHNpbmNlIGJlZW4gcmVuYW1lZCBvciByZWZhY3RvcmVkPyBPciBtYXliZSBpdHMgZnVuY3Rpb25hbGl0eSBpcyBub3cgaW5jb3Jwb3JhdGVkIGVsc2V3aGVyZT8gTGV0J3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBuZXQvYXRtL01ha2VmaWxlYCB0byBjb25maXJtIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cyBhbmQgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGNsdWUgYWJvdXQgdGhlIGN1cnJlbnQgb3JnYW5pemF0aW9uLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGJlZm9yZSBJIGRlY2xhcmUgdGhpcyBpbnZlc3RpZ2F0aW9uIGNvbXBsZXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM4MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowODoyNS40NDQzNTU2MVoiLCJTZXEiOjEyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2F0bS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSBBVE0gUHJvdG9jb2wgRmFtaWxpZXMuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGF0bS15XFx0XFx0Oj0gcHZjLm8gaW9jdGwubyBjb21tb24ubyBhdG1fbWlzYy5vIHJhdy5vIHJlc291cmNlcy5vIGF0bV9zeXNmcy5vXFxuICAgNzpcXHRcXG4gICA4OlxcdG9iai0kKENPTkZJR19BVE0pICs9IGF0bS5vXFxuICAgOTpcXHRvYmotJChDT05GSUdfQVRNX0JSMjY4NCkgKz0gYnIyNjg0Lm9cXG4gIDEwOlxcdGF0bS0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG4gIDExOlxcdFxcbiAgMTI6XFx0b2JqLSQoQ09ORklHX1BQUE9BVE0pICs9IHBwcG9hdG0ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowODoyNS40NDQ0NTcxWiIsIlNlcSI6MTIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE0MzE2NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25uZWN0aW9uIEZ1bmN0aW9ucyoqXG5cbkhtbSwgbG9va3MgbGlrZSBgc3ZjLmNgIGlzbid0IHdoZXJlIEkgZXhwZWN0ZWQgaXQgdG8gYmUuIE9rYXksIHNvIGBwdmMuY2AgaXMgdGhlIHNvbGUgY2FuZGlkYXRlIGZvciBub3cuIEJ1dCBob2xkIG9uLi4uIHdoYXQgYWJvdXQgYHJhdy5jYD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBrbm93IGlmIGByYXcuY2AgYWN0dWFsbHkgbWFrZXMgY2FsbHMgdG8gYHZjY19jb25uZWN0YC4gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLCBzaW5jZSBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBjb25uZWN0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDI4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowODoyOS4xNTg3Nzc4ODZaIiwiU2VxIjoxMjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTIxNDg5MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmNjX2Nvbm5lY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2F0bS9yYXcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDg6MjkuMjE4MDA3NjY2WiIsIlNlcSI6MTI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzA2MDE1NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFUTSBQVkMgQnVnIEZpeCoqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgaXMgYWJvdXQgdGhvc2UgQVRNIFBWQy1yZWxhdGVkIGZ1bmN0aW9uczogYHZjY19jb25uZWN0YCwgYHB2Y19iaW5kYCwgYW5kIGBwdmNfY29ubmVjdGAuIFRob3NlIGFyZSB0aGUgc3ltYm9scyB0byB6ZXJvIGluIG9uLiBUaGUgc3VwcG9ydGluZyBjb25maWd1cmF0aW9ucyBhcmUgYEFUTWAsIGBVU0JfQVRNYCwgYW5kIGBVU0JfWFVTQkFUTWAgLSB3aGljaCBpcyBleHBlY3RlZCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZS5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUgcmVhc29uaW5nLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY3JpdGljYWwgZmxhdyBpbiBgbmV0L2F0bS9jb21tb24uY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAuIEl0IHNlZW1zIHRoYXQgYW4gZWRnZSBjYXNlIHdoZXJlIGB2cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBlcXVhbCBgQVRNX0NJX01BWGAgKC0xKSBsZWFkcyB0byBzb21lIG5hc3R5IHVuZGVmaW5lZCBiZWhhdmlvci4gV2UncmUgdGFsa2luZyBwb3RlbnRpYWwgbmVnYXRpdmUgc2hpZnRzIG9yIGluZmluaXRlIGxvb3BzIGhlcmUg4oCTIGNsYXNzaWMgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGUgY2F0Y2ggaXMsIHRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UuIFNwZWNpZmljYWxseSwgdXNlcnMgY2FuIHRyaWdnZXIgdGhlIGBiaW5kYCBhbmQgYGNvbm5lY3RgIHN5c3RlbSBjYWxscyBvbiBBVE0gUFZDIHNvY2tldHMgKGBBRl9BVE1QVkNgKS4gVGhlIG9ubHkgcHJlLXJlcXVpc2l0ZSBmb3IgdGhpcyB0byBvY2N1ciBpcyBhbiBBVE0gZGV2aWNlIGJlaW5nIHByZXNlbnQuIEdpdmVuIHRoZSBzY2FyY2l0eSBvZiBwaHlzaWNhbCBBVE0gaGFyZHdhcmUgdGhlc2UgZGF5cywgdGhlIHRyaWNrIGlzIHRvIHVzZSBzeXprYWxsZXIgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgVVNCIGdhZGdldCBmcmFtZXdvcmsuIFdlIGNhbiBlZmZlY3RpdmVseSBlbXVsYXRlIGFuIEFUTSBkZXZpY2UsIHdoaWNoIGlzIHdoZXJlIHRoZSBVU0IgQVRNIGRyaXZlcnMgbGlrZSBgeHVzYmF0bWAgY29tZSBpbnRvIHBsYXkuXG5cbkluIHNob3J0LCBiZWNhdXNlIHRoaXMgZml4IGhhcyBhIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHVzZXIgc3BhY2UgdGhyb3VnaCBgYmluZGAgYW5kIGBjb25uZWN0YCBhbmQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gY3Jhc2gvZXhwb3NlIHRoZSBzeXN0ZW0sIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyMzgsIk91dHB1dFRva2VucyI6MjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA4OjM3LjUyNDAyNzU3NVoiLCJTZXEiOjEyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA0NjYxOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFUTVwiLFxuICAgIFwiVVNCX0FUTVwiLFxuICAgIFwiVVNCX1hVU0JBVE1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2Y2NfY29ubmVjdFwiLFxuICAgIFwicHZjX2JpbmRcIixcbiAgICBcInB2Y19jb25uZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgIHdoZXJlIGB2cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBiZWluZyBgQVRNX0NJX01BWGAgKC0xKSB3b3VsZCBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3IgKGUuZy4gbmVnYXRpdmUgc2hpZnRzIG9yIGluZmluaXRlIGxvb3BzKS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGBiaW5kYCBhbmQgYGNvbm5lY3RgIHN5c3RlbSBjYWxscyBvbiBBVE0gUFZDIHNvY2tldHMgKGBBRl9BVE1QVkNgKS4gVG8gcmVhY2ggdGhpcyBjb2RlLCBhbiBBVE0gZGV2aWNlIG11c3QgYmUgcHJlc2VudCBpbiB0aGUgc3lzdGVtLiBTaW5jZSBwaHlzaWNhbCBBVE0gaGFyZHdhcmUgaXMgcmFyZSwgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGFuIEFUTSBkZXZpY2UgdXNpbmcgdGhlIFVTQiBnYWRnZXQgZnJhbWV3b3JrIGNvbWJpbmVkIHdpdGggVVNCIEFUTSBkcml2ZXJzIChlLmcuIGB4dXNiYXRtYCkuIFRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBVE1cIixcbiAgICBcIlVTQl9BVE1cIixcbiAgICBcIlVTQl9YVVNCQVRNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmNjX2Nvbm5lY3RcIixcbiAgICBcInB2Y19iaW5kXCIsXG4gICAgXCJwdmNfY29ubmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgIGluIGBuZXQvYXRtL2NvbW1vbi5jYCB3aGVyZSBgdnBpX2JpdHNgIG9yIGB2Y2lfYml0c2AgYmVpbmcgYEFUTV9DSV9NQVhgICgtMSkgd291bGQgY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIChlLmcuIG5lZ2F0aXZlIHNoaWZ0cyBvciBpbmZpbml0ZSBsb29wcykuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgYmluZGAgYW5kIGBjb25uZWN0YCBzeXN0ZW0gY2FsbHMgb24gQVRNIFBWQyBzb2NrZXRzIChgQUZfQVRNUFZDYCkuIFRvIHJlYWNoIHRoaXMgY29kZSwgYW4gQVRNIGRldmljZSBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIHN5c3RlbS4gU2luY2UgcGh5c2ljYWwgQVRNIGhhcmR3YXJlIGlzIHJhcmUsIHN5emthbGxlciBjYW4gZW11bGF0ZSBhbiBBVE0gZGV2aWNlIHVzaW5nIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yayBjb21iaW5lZCB3aXRoIFVTQiBBVE0gZHJpdmVycyAoZS5nLiBgeHVzYmF0bWApLiBUaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA4OjM3LjY2NDUwMjM5M1oiLCJTZXEiOjEyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Mzc4Mzg0MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MDg6MzcuNjY0OTk0ODAzWiIsIlNlcSI6MTI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTM3Nzg4NDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gdW5kZWZpbmVkIGJlaGF2aW9yIChzaGlmdC1vdXQtb2YtYm91bmRzKSBidWcgaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgLiBXaGVuIGBkZXYtXFx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzYCBvciBgdmNpX2JpdHNgIGlzIHNldCB0byBgQVRNX0NJX01BWGAgKC0xKSwgdGhlIGJpdHdpc2Ugc2hpZnQgb3BlcmF0aW9ucyAoYDEgXFx1MDAzY1xcdTAwM2MgdnBpX2JpdHNgIG9yIGB2cGkgXFx1MDAzZVxcdTAwM2UgdnBpX2JpdHNgKSByZXN1bHQgaW4gYSBzaGlmdCBieSBhIG5lZ2F0aXZlIGFtb3VudCwgd2hpY2ggaXMgdW5kZWZpbmVkIGJlaGF2aW9yLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2NhbCB2YXJpYWJsZXMgdG8gaGFuZGxlIGBBVE1fQ0lfTUFYYCBhbmQgcmVwbGFjZSBpdCB3aXRoIDggb3IgMTYgcmVzcGVjdGl2ZWx5LiBUaGlzIGJ1ZyBpcyBjYXVnaHQgYnkgVUJTQU4gKFVuZGVmaW5lZCBCZWhhdmlvciBTYW5pdGl6ZXIpLCB3aGljaCBpcyBhbHJlYWR5IGVuYWJsZWQgaW4gc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGludm9sdmVkIGluIHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNGIwMzA4NWRjNTU1ZmE3MjMyMTgwNGU2MDEzZjI0YjA4ZTQ0MTRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTY6NTI6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYXRtL2NvbW1vbi5jIGIvbmV0L2F0bS9jb21tb24uY1xuaW5kZXggODExOTU3MjdmYTE4Yi4uYTIxNDM5ZDY5MGYxNCAxMDA2NDRcbi0tLSBhL25ldC9hdG0vY29tbW9uLmNcbisrKyBiL25ldC9hdG0vY29tbW9uLmNcbkBAIC0zMzQsNiArMzM0LDEwIEBAIHN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcbiBcdHNob3J0IG9sZF9wO1xuIFx0aW50IG9sZF9jO1xuIFx0aW50IGVycjtcbitcdGludCB2cGlfYml0cyA9IHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDggOlxuK1x0XHQgICAgICAgdmNjLVx1MDAzZWRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0cztcbitcdGludCB2Y2lfYml0cyA9IHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMgPT0gQVRNX0NJX01BWCA/IDE2IDpcbitcdFx0ICAgICAgIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHM7XG4gXG4gXHRpZiAoKnZwaSAhPSBBVE1fVlBJX0FOWSBcdTAwMjZcdTAwMjYgKnZjaSAhPSBBVE1fVkNJX0FOWSkge1xuIFx0XHRlcnIgPSBjaGVja19jaSh2Y2MsICp2cGksICp2Y2kpO1xuQEAgLTM0MiwxMiArMzQ2LDEyIEBAIHN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcbiBcdC8qIGxhc3Qgc2NhbiBtYXkgaGF2ZSBsZWZ0IHZhbHVlcyBvdXQgb2YgYm91bmRzIGZvciBjdXJyZW50IGRldmljZSAqL1xuIFx0aWYgKCp2cGkgIT0gQVRNX1ZQSV9BTlkpXG4gXHRcdHAgPSAqdnBpO1xuLVx0ZWxzZSBpZiAocCBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudnBpX2JpdHMpXG4rXHRlbHNlIGlmIChwIFx1MDAzZT0gMSBcdTAwM2NcdTAwM2MgdnBpX2JpdHMpXG4gXHRcdHAgPSAwO1xuIFx0aWYgKCp2Y2kgIT0gQVRNX1ZDSV9BTlkpXG4gXHRcdGMgPSAqdmNpO1xuLVx0ZWxzZSBpZiAoYyBcdTAwM2MgQVRNX05PVF9SU1ZfVkNJIHx8IGMgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2Y2MtXHUwMDNlZGV2LVx1MDAzZWNpX3JhbmdlLnZjaV9iaXRzKVxuLVx0XHRcdGMgPSBBVE1fTk9UX1JTVl9WQ0k7XG4rXHRlbHNlIGlmIChjIFx1MDAzYyBBVE1fTk9UX1JTVl9WQ0kgfHwgYyBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjaV9iaXRzKVxuK1x0XHRjID0gQVRNX05PVF9SU1ZfVkNJO1xuIFx0b2xkX3AgPSBwO1xuIFx0b2xkX2MgPSBjO1xuIFx0ZG8ge1xuQEAgLTM1OCwxMyArMzYyLDEzIEBAIHN0YXRpYyBpbnQgZmluZF9jaShjb25zdCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzaG9ydCAqdnBpLCBpbnQgKnZjaSlcbiBcdFx0fVxuIFx0XHRpZiAoKnZjaSA9PSBBVE1fVkNJX0FOWSkge1xuIFx0XHRcdGMrKztcbi1cdFx0XHRpZiAoYyBcdTAwM2U9IDEgXHUwMDNjXHUwMDNjIHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2UudmNpX2JpdHMpXG4rXHRcdFx0aWYgKGMgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2Y2lfYml0cylcbiBcdFx0XHRcdGMgPSBBVE1fTk9UX1JTVl9WQ0k7XG4gXHRcdH1cbiBcdFx0aWYgKChjID09IEFUTV9OT1RfUlNWX1ZDSSB8fCAqdmNpICE9IEFUTV9WQ0lfQU5ZKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICp2cGkgPT0gQVRNX1ZQSV9BTlkpIHtcbiBcdFx0XHRwKys7XG4tXHRcdFx0aWYgKHAgXHUwMDNlPSAxIFx1MDAzY1x1MDAzYyB2Y2MtXHUwMDNlZGV2LVx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzKVxuK1x0XHRcdGlmIChwIFx1MDAzZT0gMSBcdTAwM2NcdTAwM2MgdnBpX2JpdHMpXG4gXHRcdFx0XHRwID0gMDtcbiBcdFx0fVxuIFx0fSB3aGlsZSAob2xkX3AgIT0gcCB8fCBvbGRfYyAhPSBjKTtcbkBAIC0zNzYsMTAgKzM4MCwxNCBAQCBzdGF0aWMgaW50IF9fdmNjX2Nvbm5lY3Qoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IGF0bV9kZXYgKmRldiwgc2hvcnQgdnBpLFxuIHtcbiBcdHN0cnVjdCBzb2NrICpzayA9IHNrX2F0bSh2Y2MpO1xuIFx0aW50IGVycm9yO1xuK1x0aW50IHZwaV9iaXRzID0gZGV2LVx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzID09IEFUTV9DSV9NQVggPyA4IDpcbitcdFx0ICAgICAgIGRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0cztcbitcdGludCB2Y2lfYml0cyA9IGRldi1cdTAwM2VjaV9yYW5nZS52Y2lfYml0cyA9PSBBVE1fQ0lfTUFYID8gMTYgOlxuK1x0XHQgICAgICAgZGV2LVx1MDAzZWNpX3JhbmdlLnZjaV9iaXRzO1xuIFxuIFx0aWYgKCh2cGkgIT0gQVRNX1ZQSV9VTlNQRUMgXHUwMDI2XHUwMDI2IHZwaSAhPSBBVE1fVlBJX0FOWSBcdTAwMjZcdTAwMjZcbi1cdCAgICB2cGkgXHUwMDNlXHUwMDNlIGRldi1cdTAwM2VjaV9yYW5nZS52cGlfYml0cykgfHwgKHZjaSAhPSBBVE1fVkNJX1VOU1BFQyBcdTAwMjZcdTAwMjZcbi1cdCAgICB2Y2kgIT0gQVRNX1ZDSV9BTlkgXHUwMDI2XHUwMDI2IHZjaSBcdTAwM2VcdTAwM2UgZGV2LVx1MDAzZWNpX3JhbmdlLnZjaV9iaXRzKSlcbitcdCAgICB2cGkgXHUwMDNlXHUwMDNlIHZwaV9iaXRzKSB8fCAodmNpICE9IEFUTV9WQ0lfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHZjaSAhPSBBVE1fVkNJX0FOWSBcdTAwMjZcdTAwMjYgdmNpIFx1MDAzZVx1MDAzZSB2Y2lfYml0cykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0aWYgKHZjaSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgdmNpIFx1MDAzYyBBVE1fTk9UX1JTVl9WQ0kgXHUwMDI2XHUwMDI2ICFjYXBhYmxlKENBUF9ORVRfQklORF9TRVJWSUNFKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA4OjM3LjY2NDk5NTY2M1oiLCJTZXEiOjEyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQxOTU4NTM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIEFUTSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgd2l0aGluIGBuZXQvYXRtL2NvbW1vbi5jYC4gSXQncyBpbnRyb2R1Y2luZyB0aGVzZSBgdnBpX2JpdHNgIGFuZCBgdmNpX2JpdHNgIHZhcmlhYmxlcywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgdGhleSdyZSBhZGRyZXNzaW5nIHNvbWUgcmFuZ2UgaGFuZGxpbmcgaXNzdWUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBBVE1fQ0lfTUFYYCBhbmQgaG93IGl0J3MgdXNlZCB3aXRoaW4gYHZjYy1cdTAwM2VkZXYtXHUwMDNlY2lfcmFuZ2VgLiBJdCBsb29rcyBsaWtlIGl0J3MgdHJ5aW5nIHRvIG5vcm1hbGl6ZSBvciBjbGFtcCB0aGUgYml0LXdpZHRoIHZhbHVlcy4gSWYgYHZwaV9iaXRzYCBvciBgdmNpX2JpdHNgIGFyZSBlcXVhbCB0byBgQVRNX0NJX01BWGAgKHdoaWNoLCBsZXQncyBiZSBob25lc3QsIGlzIGFsbW9zdCBjZXJ0YWlubHkgZGVmaW5lZCBhcyAtMSksIGl0J3Mgc2V0dGluZyB0aGVtIHRvIDggYW5kIDE2IHJlc3BlY3RpdmVseS4gVGhlbiwgaXQgdXNlcyB0aGVzZSAqbmV3KiB2YXJpYWJsZXMgaW4gYml0LXNoaWZ0IG9wZXJhdGlvbnMuXG5cblRoYXQgLTEgZm9yIGBBVE1fQ0lfTUFYYCBpbW1lZGlhdGVseSB0aHJvd3MgdXAgYSByZWQgZmxhZy4gV2FpdCBhIHNlY29uZC4uLiBpZiBgdnBpX2JpdHNgICpvciogYHZjaV9iaXRzYCBpcyAtMSwgdGhlbiB0aGUgY29kZSBpcyBkb2luZyB0aGluZ3MgbGlrZSBgMSBcdTAwM2NcdTAwM2MgLTFgIG9yIGB2cGkgXHUwMDNlXHUwMDNlIC0xYCwgYW5kIHRoYXQgaXMgKnRleHRib29rKiB1bmRlZmluZWQgYmVoYXZpb3IuIEMgbGFuZ3VhZ2Ugc3BlYyBzYXlzIHlvdSBjYW5ub3Qgc2hpZnQgYnkgYSBuZWdhdGl2ZSBhbW91bnQuIFRoaXMgcGF0Y2ggaXMgY2xlYXJseSBmaXhpbmcgdGhhdCwgYSBjbGFzc2ljIHNoaWZ0LW91dC1vZi1ib3VuZHMgYnVnLCBhbmQgcHJvYmFibHkgYSBzdWJ0bGUgb25lIHRoYXQgbGlrZWx5IG1hbmlmZXN0ZWQgb24gc29tZSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBvciBtYXliZSBldmVuIHVuZGVyIHNwZWNpZmljIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLlxuXG5UaGlzIGlzIHRoZSBraW5kIG9mIHN0dWZmIHRoYXQgVUJTQU4gbG92ZXMgdG8gY2F0Y2gsIHJpZ2h0PyBVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyPyBHaXZlbiB0aGlzIGlzIGluIHRoZSBBVE0gbmV0d29ya2luZyBjb2RlLCBpdCB3b3VsZG4ndCBzdXJwcmlzZSBtZSBpZiBzb21lIEtBU0FOIGJ1aWxkcyBoYXZlIHBpY2tlZCB0aGlzIHVwLCBjYXVzaW5nIGEgYml0IG9mIGEgcGFuaWMuXG5cbkxldCBtZSB0aGluay4uLiBJcyB0aGlzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCB0aGF0J3Mgbm90IHdoYXQncyBoYXBwZW5pbmcgaGVyZS4gVGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgYGNpX3JhbmdlYCBmaWVsZHMgYXJlIGFsc28gaW5pdGlhbGl6ZWQuIEl0J3Mgbm90ICphYm91dCogdGhlICp2YWx1ZSogb2YgdGhlIGRhdGEgaW4gbWVtb3J5OyBpdCdzIGFib3V0IHRoZSB1c2Ugb2YgdGhhdCB2YWx1ZSBpbiBhIGJpdCBzaGlmdC4gSXQncyBhIHNoaWZ0LW91dC1vZi1ib3VuZHMgaXNzdWUuIFRoZSBidWcgaXMgdGhlIGludmFsaWQgdXNlIG9mIG5lZ2F0aXZlIHNoaWZ0IHZhbHVlcy5cblxuQWxyaWdodCwgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0IGBBVE1fQ0lfTUFYYCBkZWZpbml0aW9uLCB0aG91Z2guIEknbGwganVzdCBncmVwIGZvciBpdCByZWFsIHF1aWNrIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzowODo0Ni4wODQ1ODQzNjFaIiwiU2VxIjoxMzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg3NjY1NTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgQVRNX0NJX01BWFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2Lmg9MTM4PXN0cnVjdCBhdG1faW9idWYge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oLTE0NC1cXG5pbmNsdWRlL3VhcGkvbGludXgvYXRtZGV2Lmg6MTQ1OiNkZWZpbmUgQVRNX0NJX01BWCAgICAgIC0xICAgICAgICAgICAgICAvKiB1c2UgbWF4aW11bSByYW5nZSBvZiBWUEkvVkNJICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2F0bWRldi5oLTE0Ni0gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA4OjQ4LjI3MjI1NTI3OVoiLCJTZXEiOjEzMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc3MDU5ODAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBVE0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgQVRNX0NJX01BWGAgaXMgZGVmaW5pdGVseSBgLTFgLiBUaGF0IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNsYXNzaWMgc2hpZnQtb3V0LW9mLWJvdW5kcyBpc3N1ZS4gQW55IGF0dGVtcHQgdG8gcGVyZm9ybSBgMSBcdTAwM2NcdTAwM2MgLTFgIG9yIGB2cGkgXHUwMDNlXHUwMDNlIC0xYCBpcyBnb2luZyB0byB0cmlnZ2VyIGl0LiBUaGlzIGlzIHRleHRib29rIFVCU0FOIHRlcnJpdG9yeS4gSSBjYW4gc2VlIHRoaXMgcmlnaHQgYXdheS5cblxuVGhlIGdvb2QgbmV3cyBpcywgVUJTQU4gaXMgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBzdGFuZGFyZCBLQVNBTiBidWlsZHMsIHdoaWNoIGlzIGdyZWF0LiBJdCBtZWFucyB0aGlzIHR5cGUgb2YgdW5kZWZpbmVkIGJlaGF2aW9yIGlzIGxpa2VseSBhbHJlYWR5IGJlaW5nIGNhdWdodCBkdXJpbmcgb3VyIHN0YW5kYXJkIHRlc3RpbmcuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gcGxheSBoZXJlLCBub3RoaW5nIHRvIHdhcnJhbnQgYSBLTVNBTiBzZXNzaW9uIG9yIGRlZXBlciBhbmFseXNpcyBmcm9tIHRoYXQgcGVyc3BlY3RpdmUuXG5cblRoZSBwYXRjaCdzIGdvYWwgaXMgdG8gaGFuZGxlIHRoZSBgLTFgIHZhbHVlcywgbGlrZWx5IGJ5IHN1YnN0aXR1dGluZyBgOGAgb3IgYDE2YC4gSXQncyBhIGNsZWFuIGZpeC4gU28sIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIHJlc29sdmVzIHRoZSBzaGlmdC1vdXQtb2YtYm91bmRzIGJ1Zy4gSeKAmW0gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuIFdlJ3JlIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NjQsIk91dHB1dFRva2VucyI6MjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjA4OjU3LjA0Mjg1NjMyM1oiLCJTZXEiOjEzMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIHVuZGVmaW5lZCBiZWhhdmlvciAoc2hpZnQtb3V0LW9mLWJvdW5kcykgYnVnIGluIGBmaW5kX2NpYCBhbmQgYF9fdmNjX2Nvbm5lY3RgIGluIGBuZXQvYXRtL2NvbW1vbi5jYC4gV2hlbiBgZGV2LVxcdTAwM2VjaV9yYW5nZS52cGlfYml0c2Agb3IgYHZjaV9iaXRzYCBpcyBzZXQgdG8gYEFUTV9DSV9NQVhgICgtMSksIHRoZSBiaXR3aXNlIHNoaWZ0IG9wZXJhdGlvbnMgKGAxIFxcdTAwM2NcXHUwMDNjIHZwaV9iaXRzYCBvciBgdnBpIFxcdTAwM2VcXHUwMDNlIHZwaV9iaXRzYCkgcmVzdWx0IGluIGEgc2hpZnQgYnkgYSBuZWdhdGl2ZSBhbW91bnQsIHdoaWNoIGlzIHVuZGVmaW5lZCBiZWhhdmlvci4gVGhlIHBhdGNoIGludHJvZHVjZXMgbG9jYWwgdmFyaWFibGVzIHRvIGhhbmRsZSBgQVRNX0NJX01BWGAgYW5kIHJlcGxhY2UgaXQgd2l0aCA4IG9yIDE2IHJlc3BlY3RpdmVseS4gVGhpcyBidWcgaXMgY2F1Z2h0IGJ5IFVCU0FOIChVbmRlZmluZWQgQmVoYXZpb3IgU2FuaXRpemVyKSwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVhaywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyBpbnZvbHZlZCBpbiB0aGlzIHBhdGNoLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gdW5kZWZpbmVkIGJlaGF2aW9yIChzaGlmdC1vdXQtb2YtYm91bmRzKSBidWcgaW4gYGZpbmRfY2lgIGFuZCBgX192Y2NfY29ubmVjdGAgaW4gYG5ldC9hdG0vY29tbW9uLmNgLiBXaGVuIGBkZXYtXFx1MDAzZWNpX3JhbmdlLnZwaV9iaXRzYCBvciBgdmNpX2JpdHNgIGlzIHNldCB0byBgQVRNX0NJX01BWGAgKC0xKSwgdGhlIGJpdHdpc2Ugc2hpZnQgb3BlcmF0aW9ucyAoYDEgXFx1MDAzY1xcdTAwM2MgdnBpX2JpdHNgIG9yIGB2cGkgXFx1MDAzZVxcdTAwM2UgdnBpX2JpdHNgKSByZXN1bHQgaW4gYSBzaGlmdCBieSBhIG5lZ2F0aXZlIGFtb3VudCwgd2hpY2ggaXMgdW5kZWZpbmVkIGJlaGF2aW9yLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2NhbCB2YXJpYWJsZXMgdG8gaGFuZGxlIGBBVE1fQ0lfTUFYYCBhbmQgcmVwbGFjZSBpdCB3aXRoIDggb3IgMTYgcmVzcGVjdGl2ZWx5LiBUaGlzIGJ1ZyBpcyBjYXVnaHQgYnkgVUJTQU4gKFVuZGVmaW5lZCBCZWhhdmlvciBTYW5pdGl6ZXIpLCB3aGljaCBpcyBhbHJlYWR5IGVuYWJsZWQgaW4gc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIGludm9sdmVkIGluIHRoaXMgcGF0Y2guIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwkz2n[1] Phase: Succeeded StartedAt: 2026-08-26 17:09:09 +0000 UTC FinishedAt: 2026-08-26 17:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 17:09:09 +0000 UTC FinishedAt: 2026-08-26 17:09:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2] Phase: Succeeded StartedAt: 2026-08-26 17:09:09 +0000 UTC FinishedAt: 2026-08-26 21:00:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 17:09:09 +0000 UTC FinishedAt: 2026-08-26 21:00:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 17:09:09 +0000 UTC FinishedAt: 2026-08-26 17:09:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 17:09:09 +0000 UTC FinishedAt: 2026-08-26 17:09:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkz2n/series-workflowwkz2n-convert-artifact-2420870333/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 17:09:19 +0000 UTC FinishedAt: 2026-08-26 17:28:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 17:09:19 +0000 UTC FinishedAt: 2026-08-26 17:28:59 +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:*08b065c0-7aa3-4673-ad7b-14d3a5c0c110,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-workflowwkz2n/series-workflowwkz2n-convert-artifact-2420870333/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": "daa37cbc-fe09-499b-884c-f6dc8fe78703", "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-workflowwkz2n/series-workflowwkz2n-build-action-2997138931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 17:09:19 +0000 UTC FinishedAt: 2026-08-26 17:28:47 +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:*08b065c0-7aa3-4673-ad7b-14d3a5c0c110,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-workflowwkz2n/series-workflowwkz2n-convert-artifact-2420870333/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": "daa37cbc-fe09-499b-884c-f6dc8fe78703", "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-workflowwkz2n/series-workflowwkz2n-build-action-2997138931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 17:28:59 +0000 UTC FinishedAt: 2026-08-26 17:28:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 17:28:59 +0000 UTC FinishedAt: 2026-08-26 17:28:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 17:28:59 +0000 UTC FinishedAt: 2026-08-26 17:29:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 17:28:59 +0000 UTC FinishedAt: 2026-08-26 17:29:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkz2n/series-workflowwkz2n-convert-artifact-1336825112/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 17:29:23 +0000 UTC FinishedAt: 2026-08-26 17:31:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 17:29:23 +0000 UTC FinishedAt: 2026-08-26 17:31:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*daa37cbc-fe09-499b-884c-f6dc8fe78703,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-workflowwkz2n/series-workflowwkz2n-build-action-2997138931/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-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 17:31:34 +0000 UTC FinishedAt: 2026-08-26 17:31:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 17:31:34 +0000 UTC FinishedAt: 2026-08-26 17:31:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 17:31:34 +0000 UTC FinishedAt: 2026-08-26 17:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 17:31:34 +0000 UTC FinishedAt: 2026-08-26 17:55:41 +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:*08b065c0-7aa3-4673-ad7b-14d3a5c0c110,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-workflowwkz2n/series-workflowwkz2n-convert-artifact-1336825112/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": "982cf434-f245-4792-9787-608b884b1f4f", "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-workflowwkz2n/series-workflowwkz2n-build-action-3894521220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 17:31:34 +0000 UTC FinishedAt: 2026-08-26 17:55: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:*08b065c0-7aa3-4673-ad7b-14d3a5c0c110,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-workflowwkz2n/series-workflowwkz2n-convert-artifact-1336825112/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": "982cf434-f245-4792-9787-608b884b1f4f", "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-workflowwkz2n/series-workflowwkz2n-build-action-3894521220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 17:55:41 +0000 UTC FinishedAt: 2026-08-26 17:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 17:55:41 +0000 UTC FinishedAt: 2026-08-26 17:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 17:55:41 +0000 UTC FinishedAt: 2026-08-26 17:57:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 17:55:41 +0000 UTC FinishedAt: 2026-08-26 17:57:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*982cf434-f245-4792-9787-608b884b1f4f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkz2n/series-workflowwkz2n-build-action-3894521220/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-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 17:57:39 +0000 UTC FinishedAt: 2026-08-26 21:00:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 17:57:39 +0000 UTC FinishedAt: 2026-08-26 21:00:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*daa37cbc-fe09-499b-884c-f6dc8fe78703,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*982cf434-f245-4792-9787-608b884b1f4f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkz2n/series-workflowwkz2n-build-action-2997138931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkz2n/series-workflowwkz2n-build-action-3894521220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 17:57:39 +0000 UTC FinishedAt: 2026-08-26 17:57:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 17:57:39 +0000 UTC FinishedAt: 2026-08-26 17:57:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkz2n/series-workflowwkz2n-convert-artifact-218330865/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 17:57:39 +0000 UTC FinishedAt: 2026-08-26 17:57:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 17:57:39 +0000 UTC FinishedAt: 2026-08-26 17:57:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 17:57:39 +0000 UTC FinishedAt: 2026-08-26 17:57:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 17:57:50 +0000 UTC FinishedAt: 2026-08-26 21:00:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwkz2n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vcc_connect","pvc_bind","pvc_connect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATM","USB_ATM","USB_XUSBATM"],"series_id":"93fe25d1-ccb3-4fd5-830d-ee9224a1adcc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 17:57:50 +0000 UTC FinishedAt: 2026-08-26 21:00:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*daa37cbc-fe09-499b-884c-f6dc8fe78703,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*982cf434-f245-4792-9787-608b884b1f4f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkz2n/series-workflowwkz2n-build-action-2997138931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkz2n/series-workflowwkz2n-build-action-3894521220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwkz2n/series-workflowwkz2n-convert-artifact-218330865/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}