Name: series-workflowgrwmg Phase: Succeeded StartedAt: 2026-08-31 09:26:16 +0000 UTC FinishedAt: 2026-08-31 13:57:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[0] Phase: Succeeded StartedAt: 2026-08-31 09:26:16 +0000 UTC FinishedAt: 2026-08-31 10:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 09:26:16 +0000 UTC FinishedAt: 2026-08-31 10:14:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4a6983a217b4358b6c648e5b280261ca533544d9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4a6983a217b4358b6c648e5b280261ca533544d9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "4aca2fa6-2165-4bf5-82d7-168a9218cbd3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__split_huge_page_to_list_to_order", "folio_split", "split_folio_to_list", "folio_split_unmapped", "__folio_unqueue_deferred_split", "deferred_split_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlciYjMzQ7LAogICAgJiMzNDtmb2xpb19zcGxpdCYjMzQ7LAogICAgJiMzNDtzcGxpdF9mb2xpb190b19saXN0JiMzNDssCiAgICAmIzM0O2ZvbGlvX3NwbGl0X3VubWFwcGVkJiMzNDssCiAgICAmIzM0O19fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCYjMzQ7LAogICAgJiMzNDtkZWZlcnJlZF9zcGxpdF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgaGFuZGxpbmcgaW4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZCgpYCBhbmQgYGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoKWAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCByZXBsYWNpbmcgbWFudWFsIExSVSBsb2NraW5nIHByaW9yIHRvIGZvbGlvIHJlZiBmcmVlemluZyB3aXRoIGNhbGxzIHRvIGBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KClgIGFuZCBza2lwcGluZyB1bnJlZmVyZW5jZWQgZm9saW9zIGR1cmluZyBpc29sYXRpb24uXG5cblRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIGZvbGlvIHJlZmVyZW5jZSBjb3VudGluZywgbGlzdCBtYW5hZ2VtZW50IChgX2RlZmVycmVkX2xpc3RgKSwgYW5kIGZvbGlvIGZsYWdzIChgUEdfcGFydGlhbGx5X21hcHBlZGApLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBvciBtYW5pcHVsYXRlZCwgYW5kIG5vIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBjb25jdXJyZW5jeSwgcmVmY291bnQsIG9yIGxpc3QgY29ycnVwdGlvbiBidWdzIGludHJvZHVjZWQgaGVyZSB3b3VsZCBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLCBMT0NLREVQLCBvciBrZXJuZWwgYXNzZXJ0aW9ucywgcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLCBzcGVjaWZpY2FsbHkgaG93IGRlZmVycmVkIHNwbGl0IGxpc3QgbG9ja2luZyBhbmQgcmVmY291bnQgZnJlZXppbmcgc3luY2hyb25pemUgZHVyaW5nIGZvbGlvIHNwbGl0dGluZyBhbmQgc2hyaW5rZXIgaXNvbGF0aW9uIChkZWZlcnJlZF9zcGxpdF9pc29sYXRlIGFuZCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBtZW1vcnkgcmVjbGFpbSBhbmQgVEhQIHNwbGl0dGluZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiMjNiYTYyZWRlMDJmNTgxNzhiYzhkNzdmMDU5YTdmOTFiMTA0YWVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTA6MDc6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGNlZDQwMGY3MmQ0M2EuLmM4NGU4Y2JjOTg2ZDkgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMzkzMSw0MSAmIzQzOzM5MzEsMjcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cbiBcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XG4gXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG4gXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuLVx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1O1xuLVx0Ym9vbCBkZXF1ZXVlX2RlZmVycmVkO1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgXHUwMDI2XHUwMDI2IGVuZCk7XG4tXHQvKlxuLVx0ICogSWYgdGhpcyBmb2xpbyBjYW4gYmUgb24gdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlLCBsb2NrIG91dFxuLVx0ICogdGhlIHNocmlua2VyIGJlZm9yZSBmcmVlemluZyB0aGUgcmVmLiBJZiB0aGUgc2hyaW5rZXIgc2Vlc1xuLVx0ICogYSAwLXJlZiBmb2xpbywgaXQgYXNzdW1lcyBpdCBiZWF0IGZvbGlvX3B1dCgpIHRvIHRoZSBsaXN0XG4tXHQgKiBsb2NrIGFuZCBtdXN0IGNsZWFuIHVwIHRoZSBMUlUgc3RhdGUgLSB0aGUgc2FtZSBkZXF1ZXVlIHdlXG4tXHQgKiB3aWxsIGRvIGJlbG93IGFzIHBhcnQgb2YgdGhlIHNwbGl0LlxuLVx0ICovXG4tXHRkZXF1ZXVlX2RlZmVycmVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgb2xkX29yZGVyIFx1MDAzZSAxO1xuLVx0aWYgKGRlcXVldWVfZGVmZXJyZWQpIHtcbi1cdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuLVxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuLVx0XHRscnUgPSBsaXN0X2xydV9sb2NrKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSxcbi1cdFx0XHRcdCAgICBmb2xpb19uaWQoZm9saW8pLCBcdTAwMjZtZW1jZyk7XG4tXHR9XG4mIzQzO1xuIFx0aWYgKGZvbGlvX3JlZl9mcmVlemUoZm9saW8sIGZvbGlvX2NhY2hlX3JlZl9jb3VudChmb2xpbykgJiM0MzsgMSkpIHtcbiBcdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSA9IE5VTEw7XG4gXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiBcbi1cdFx0aWYgKGRlcXVldWVfZGVmZXJyZWQpIHtcbi1cdFx0XHRfX2xpc3RfbHJ1X2RlbChcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCwgZm9saW9fbmlkKGZvbGlvKSk7XG4tXHRcdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcbi1cdFx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdFx0bW9kX210aHBfc3RhdChvbGRfb3JkZXIsXG4tXHRcdFx0XHRcdE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbi1cdFx0XHR9XG4tXHRcdFx0bGlzdF9scnVfdW5sb2NrKGxydSk7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHQvKiBUYWtlIG9mZiB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cbiYjNDM7XHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0XG4mIzQzO1x0XHQgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kXG4mIzQzO1x0XHQgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuXG4mIzQzO1x0XHQgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcbiYjNDM7XHRcdFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4mIzQzO1x0XHRcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxuJiM0MztcdFx0XHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbiBcdFx0fVxuIFxuIFx0XHRpZiAobWFwcGluZykge1xuQEAgLTQwNjcsMTAgJiM0Mzs0MDUzLDYgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cbiBcdFx0aWYgKGNpKVxuIFx0XHRcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGRlcXVldWVfZGVmZXJyZWQpIHtcbi1cdFx0XHRsaXN0X2xydV91bmxvY2sobHJ1KTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0fVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdH1cbiBcbkBAIC00NTkwLDIyICYjNDM7NDU3MiwxMSBAQCBzdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IGZvbGlvLCBfZGVmZXJyZWRfbGlzdCk7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlYWJsZSA9IGNiX2FyZztcbiBcbi1cdGlmIChmb2xpb190cnlfZ2V0KGZvbGlvKSkge1xuLVx0XHRsaXN0X2xydV9pc29sYXRlX21vdmUobHJ1LCBpdGVtLCBmcmVlYWJsZSk7XG4tXHRcdHJldHVybiBMUlVfUkVNT1ZFRDtcbi1cdH1cbiYjNDM7XHQvKiBMb3N0IHJhY2UgdG8gZm9saW9fcHV0KCkgb3IgdGhlIGZvbGlvIGlzIHVuZGVyIGZvbGlvX3JlZl9mcmVlemUoKSAqL1xuJiM0MztcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gTFJVX1NLSVA7XG4gXG4tXHQvKlxuLVx0ICogV2UgbG9zdCByYWNlIHdpdGggZm9saW9fcHV0KCkuIFJlYWQgZm9saW8gc3RhdGUgYmVmb3JlIHRoZVxuLVx0ICogaXNvbGF0ZTogZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGNoZWNrcyBsaXN0X2VtcHR5KClcbi1cdCAqIGxvY2tsZXNzbHksIHNvIG9uY2UgcmVtb3ZlZCB0aGUgZm9saW8gY2FuIGJlIGZyZWVkIGFueSB0aW1lLlxuLVx0ICovXG4tXHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbi1cdFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4tXHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0fVxuLVx0bGlzdF9scnVfaXNvbGF0ZShscnUsIGl0ZW0pO1xuJiM0MztcdGxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTtcbiBcdHJldHVybiBMUlVfUkVNT1ZFRDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyJiMzNDssCiAgICAmIzM0O2ZvbGlvX3NwbGl0JiMzNDssCiAgICAmIzM0O3NwbGl0X2ZvbGlvX3RvX2xpc3QmIzM0OywKICAgICYjMzQ7Zm9saW9fc3BsaXRfdW5tYXBwZWQmIzM0OywKICAgICYjMzQ7X19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0JiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3NwbGl0X2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCksIHNwZWNpZmljYWxseSBob3cgZGVmZXJyZWQgc3BsaXQgbGlzdCBsb2NraW5nIGFuZCByZWZjb3VudCBmcmVlemluZyBzeW5jaHJvbml6ZSBkdXJpbmcgZm9saW8gc3BsaXR0aW5nIGFuZCBzaHJpbmtlciBpc29sYXRpb24gKGRlZmVycmVkX3NwbGl0X2lzb2xhdGUgYW5kIF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZCkuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IG1lbW9yeSByZWNsYWltIGFuZCBUSFAgc3BsaXR0aW5nIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIyM2JhNjJlZGUwMmY1ODE3OGJjOGQ3N2YwNTlhN2Y5MWIxMDRhZWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDowNzozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGNlZDQwMGY3MmQ0M2EuLmM4NGU4Y2JjOTg2ZDkgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMzkzMSw0MSAmIzQzOzM5MzEsMjcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG4KIAlzdHJ1Y3QgZm9saW8gKmVuZF9mb2xpbyA9IGZvbGlvX25leHQoZm9saW8pOwogCXN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDsKIAlpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwotCXN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTsKLQlib29sIGRlcXVldWVfZGVmZXJyZWQ7CiAJaW50IHJldCA9IDA7CiAKIAlWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgJmFtcDsmYW1wOyBlbmQpOwotCS8qCi0JICogSWYgdGhpcyBmb2xpbyBjYW4gYmUgb24gdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlLCBsb2NrIG91dAotCSAqIHRoZSBzaHJpbmtlciBiZWZvcmUgZnJlZXppbmcgdGhlIHJlZi4gSWYgdGhlIHNocmlua2VyIHNlZXMKLQkgKiBhIDAtcmVmIGZvbGlvLCBpdCBhc3N1bWVzIGl0IGJlYXQgZm9saW9fcHV0KCkgdG8gdGhlIGxpc3QKLQkgKiBsb2NrIGFuZCBtdXN0IGNsZWFuIHVwIHRoZSBMUlUgc3RhdGUgLSB0aGUgc2FtZSBkZXF1ZXVlIHdlCi0JICogd2lsbCBkbyBiZWxvdyBhcyBwYXJ0IG9mIHRoZSBzcGxpdC4KLQkgKi8KLQlkZXF1ZXVlX2RlZmVycmVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmYW1wOyZhbXA7IG9sZF9vcmRlciAmZ3Q7IDE7Ci0JaWYgKGRlcXVldWVfZGVmZXJyZWQpIHsKLQkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJbWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7Ci0JCWxydSA9IGxpc3RfbHJ1X2xvY2soJmFtcDtkZWZlcnJlZF9zcGxpdF9scnUsCi0JCQkJICAgIGZvbGlvX25pZChmb2xpbyksICZhbXA7bWVtY2cpOwotCX0KJiM0MzsKIAlpZiAoZm9saW9fcmVmX2ZyZWV6ZShmb2xpbywgZm9saW9fY2FjaGVfcmVmX2NvdW50KGZvbGlvKSAmIzQzOyAxKSkgewogCQlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpID0gTlVMTDsKIAkJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwogCi0JCWlmIChkZXF1ZXVlX2RlZmVycmVkKSB7Ci0JCQlfX2xpc3RfbHJ1X2RlbCgmYW1wO2RlZmVycmVkX3NwbGl0X2xydSwgbHJ1LAotCQkJCSAgICAgICAmYW1wO2ZvbGlvLSZndDtfZGVmZXJyZWRfbGlzdCwgZm9saW9fbmlkKGZvbGlvKSk7Ci0JCQlpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkgewotCQkJCWZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pOwotCQkJCW1vZF9tdGhwX3N0YXQob2xkX29yZGVyLAotCQkJCQlNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7Ci0JCQl9Ci0JCQlsaXN0X2xydV91bmxvY2sobHJ1KTsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJLyogVGFrZSBvZmYgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoaWxlIGZyb3plbiBhbmQgbWVtY2cgc2V0ICovCiYjNDM7CQlmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0CiYjNDM7CQkgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kCiYjNDM7CQkgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuCiYjNDM7CQkgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKJiM0MzsJCQlmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKJiM0MzsJCQltb2RfbXRocF9zdGF0KG9sZF9vcmRlciwKJiM0MzsJCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwogCQl9CiAKIAkJaWYgKG1hcHBpbmcpIHsKQEAgLTQwNjcsMTAgJiM0Mzs0MDUzLDYgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG4KIAkJaWYgKGNpKQogCQkJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiAJfSBlbHNlIHsKLQkJaWYgKGRlcXVldWVfZGVmZXJyZWQpIHsKLQkJCWxpc3RfbHJ1X3VubG9jayhscnUpOwotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCX0KIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCkBAIC00NTkwLDIyICYjNDM7NDU3MiwxMSBAQCBzdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCBmb2xpbywgX2RlZmVycmVkX2xpc3QpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmZyZWVhYmxlID0gY2JfYXJnOwogCi0JaWYgKGZvbGlvX3RyeV9nZXQoZm9saW8pKSB7Ci0JCWxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTsKLQkJcmV0dXJuIExSVV9SRU1PVkVEOwotCX0KJiM0MzsJLyogTG9zdCByYWNlIHRvIGZvbGlvX3B1dCgpIG9yIHRoZSBmb2xpbyBpcyB1bmRlciBmb2xpb19yZWZfZnJlZXplKCkgKi8KJiM0MzsJaWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSkKJiM0MzsJCXJldHVybiBMUlVfU0tJUDsKIAotCS8qCi0JICogV2UgbG9zdCByYWNlIHdpdGggZm9saW9fcHV0KCkuIFJlYWQgZm9saW8gc3RhdGUgYmVmb3JlIHRoZQotCSAqIGlzb2xhdGU6IGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBjaGVja3MgbGlzdF9lbXB0eSgpCi0JICogbG9ja2xlc3NseSwgc28gb25jZSByZW1vdmVkIHRoZSBmb2xpbyBjYW4gYmUgZnJlZWQgYW55IHRpbWUuCi0JICovCi0JaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKLQkJZm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7Ci0JCW1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLAotCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwotCX0KLQlsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7CiYjNDM7CWxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTsKIAlyZXR1cm4gTFJVX1JFTU9WRUQ7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE1MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEh1Z2UgTWVtb3J5IFBhdGNoKioKCk9rYXksIHNvIGEgcGF0Y2ggZm9yIGBtbS9odWdlX21lbW9yeS5jYCBjYW1lIGluLiBMZXQmIzM5O3MgZ2V0IHRvIHdvcmsgZGlzc2VjdGluZyB0aGlzLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIG1hZGUuIEkmIzM5O2xsIHB1bGwgdXAgdGhlIHBhdGNoIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjb2RlIGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGltZSB0byBzZWUgZXhhY3RseSB3aGF0IGhhcyBiZWVuIHR3ZWFrZWQuIEkmIzM5O2xsIHVzZSBteSB1c3VhbCB0b29scyBoZXJlLiBBIHF1aWNrIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB3aWxsIHBpbnBvaW50IHRoZSByZWxldmFudCBzZWN0aW9ucyBhcm91bmQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCwgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIHByb3Bvc2VkIGZpeC4gR290dGEgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgY2hhbmdlIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgaHVnZSBtZW1vcnkgbWFuYWdlbWVudC4gUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM5MTg9c3RhdGljIHVuc2lnbmVkIGludCBmb2xpb19jYWNoZV9yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5MjQtXG5tbS9odWdlX21lbW9yeS5jOjM5MjU6c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtMzkyNi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDA4Mz1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyMTItXG5tbS9odWdlX21lbW9yeS5jOjQyMTM6XHRyZXQgPSBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIFx1MDAyNnhhcywgbWFwcGluZyxcbm1tL2h1Z2VfbWVtb3J5LmMtNDIxNC1cdFx0XHRcdFx0XHR0cnVlLCBsaXN0LCBzcGxpdF90eXBlLCBlbmQsIFx1MDAyNm5yX3NobWVtX2Ryb3BwZWQpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDMwMT1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQzMTMtXHRsb2NhbF9pcnFfZGlzYWJsZSgpO1xubW0vaHVnZV9tZW1vcnkuYzo0MzE0Olx0cmV0ID0gX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKGZvbGlvLCBuZXdfb3JkZXIsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIE5VTEwsXG5tbS9odWdlX21lbW9yeS5jLTQzMTUtXHRcdFx0XHRcdFx0TlVMTCwgZmFsc2UsIE5VTEwsIFNQTElUX1RZUEVfVU5JRk9STSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzc2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgRGVlcCBpbnRvIGBtbS9odWdlX21lbW9yeS5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBtbS9odWdlX21lbW9yeS5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDM5MDAgYWxsIHRoZSB3YXkgdG8gYWJvdXQgbGluZSA0NjUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBjaHVuayBvZiB0aGUgY29kZSB0byBjaGV3IG9uIGFuZCByZWFsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSBleHBlY3QgdGhhdCBJJiMzOTtsbCBmaW5kIHRoZSBrZXkgbWVjaGFuaXNtcyBmb3IgaGFuZGxpbmcgc29tZSBjb21wbGV4IHBhcnQgb2YgdGhlIGh1Z2UgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0ZWNobmlxdWVzIHRoZSBkZXZlbG9wZXJzIGhhdmUgZW1wbG95ZWQgaGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZWl0aGVyIGZpbmQgYSBwYXJ0aWN1bGFybHkgY2xldmVyIGRhdGEgc3RydWN0dXJlLCBhbiBlZmZpY2llbnQgbG9ja2luZyBzdHJhdGVneSwgb3IgbWF5YmUgZXZlbiBhIG5vdmVsIGFwcHJvYWNoIHRvIGFkZHJlc3NpbmcgYSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvciBhbmQgc3RhcnQgdHJhY2luZyB0aGUgbG9naWMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszOTIwOlx0XHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSlcbjM5MjE6XHRcdFx0cmV0dXJuIDA7XG4zOTIyOlx0XHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuMzkyMzpcdH1cbjM5MjQ6XHRcbjM5MjU6XHRzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuMzkyNjpcdFx0XHRcdFx0XHQgICAgIHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHhhX3N0YXRlICp4YXMsXG4zOTI3Olx0XHRcdFx0XHRcdCAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGJvb2wgZG9fbHJ1LFxuMzkyODpcdFx0XHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGVudW0gc3BsaXRfdHlwZSBzcGxpdF90eXBlLFxuMzkyOTpcdFx0XHRcdFx0XHQgICAgIHBnb2ZmX3QgZW5kLCBpbnQgKm5yX3NobWVtX2Ryb3BwZWQpXG4zOTMwOlx0e1xuMzkzMTpcdFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcbjM5MzI6XHRcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDtcbjM5MzM6XHRcdGludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4zOTM0Olx0XHRpbnQgcmV0ID0gMDtcbjM5MzU6XHRcbjM5MzY6XHRcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcdTAwMjZcdTAwMjYgZW5kKTtcbjM5Mzc6XHRcbjM5Mzg6XHRcdGlmIChmb2xpb19yZWZfZnJlZXplKGZvbGlvLCBmb2xpb19jYWNoZV9yZWZfY291bnQoZm9saW8pICYjNDM7IDEpKSB7XG4zOTM5Olx0XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kgPSBOVUxMO1xuMzk0MDpcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4zOTQxOlx0XG4zOTQyOlx0XHRcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xuMzk0MzpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbjM5NDQ6XHRcbjM5NDU6XHRcdFx0LypcbjM5NDY6XHRcdFx0ICogZGVmZXJyZWRfc3BsaXRfc2NhbigpIHRha2VzIHRoZSBmb2xpbyBvZmYgdGhlIHF1ZXVlIGJlZm9yZSBpdFxuMzk0NzpcdFx0XHQgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kXG4zOTQ4Olx0XHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbjM5NDk6XHRcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG4zOTUwOlx0XHRcdCAqL1xuMzk1MTpcdFx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuMzk1MjpcdFx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuMzk1MzpcdFx0XHRcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxuMzk1NDpcdFx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuMzk1NTpcdFx0XHR9XG4zOTU2Olx0XG4zOTU3Olx0XHRcdGlmIChtYXBwaW5nKSB7XG4zOTU4Olx0XHRcdFx0aW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuMzk1OTpcdFxuMzk2MDpcdFx0XHRcdGlmIChmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbykgXHUwMDI2XHUwMDI2XG4zOTYxOlx0XHRcdFx0ICAgIG5ld19vcmRlciBcdTAwM2MgSFBBR0VfUE1EX09SREVSKSB7XG4zOTYyOlx0XHRcdFx0XHRpZiAoZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSkge1xuMzk2MzpcdFx0XHRcdFx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sXG4zOTY0Olx0XHRcdFx0XHRcdFx0XHROUl9TSE1FTV9USFBTLCAtbnIpO1xuMzk2NTpcdFx0XHRcdFx0fSBlbHNlIHtcbjM5NjY6XHRcdFx0XHRcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLFxuMzk2NzpcdFx0XHRcdFx0XHRcdFx0TlJfRklMRV9USFBTLCAtbnIpO1xuMzk2ODpcdFx0XHRcdFx0fVxuMzk2OTpcdFx0XHRcdH1cbjM5NzA6XHRcdFx0fVxuMzk3MTpcdFxuMzk3MjpcdFx0XHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4zOTczOlx0XHRcdFx0aWYgKG1hcHBpbmcpIHtcbjM5NzQ6XHRcdFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhtYXBwaW5nLCBmb2xpbyk7XG4zOTc1Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjM5NzY6XHRcdFx0XHR9XG4zOTc3Olx0XG4zOTc4Olx0XHRcdFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcbjM5Nzk6XHRcdFx0fVxuMzk4MDpcdFxuMzk4MTpcdFx0XHQvKiBsb2NrIGxydSBsaXN0L1BhZ2VDb21wb3VuZCwgcmVmIGZyb3plbiBieSBwYWdlX3JlZl9mcmVlemUgKi9cbjM5ODI6XHRcdFx0aWYgKGRvX2xydSlcbjM5ODM6XHRcdFx0XHRscnV2ZWMgPSBmb2xpb19scnV2ZWNfbG9jayhmb2xpbyk7XG4zOTg0Olx0XG4zOTg1Olx0XHRcdHJldCA9IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIHhhcyxcbjM5ODY6XHRcdFx0XHRcdFx0ICAgICBtYXBwaW5nLCBzcGxpdF90eXBlKTtcbjM5ODc6XHRcbjM5ODg6XHRcdFx0LypcbjM5ODk6XHRcdFx0ICogVW5mcmVlemUgYWZ0ZXItc3BsaXQgZm9saW9zIGFuZCBwdXQgdGhlbSBiYWNrIHRvIHRoZSByaWdodFxuMzk5MDpcdFx0XHQgKiBsaXN0LiBAZm9saW8gc2hvdWxkIGJlIGtlcHQgZnJvem9uIHVudGlsIHBhZ2UgY2FjaGVcbjM5OTE6XHRcdFx0ICogZW50cmllcyBhcmUgdXBkYXRlZCB3aXRoIGFsbCB0aGUgb3RoZXIgYWZ0ZXItc3BsaXQgZm9saW9zXG4zOTkyOlx0XHRcdCAqIHRvIHByZXZlbnQgb3RoZXJzIHNlZWluZyBzdGFsZSBwYWdlIGNhY2hlIGVudHJpZXMuXG4zOTkzOlx0XHRcdCAqIEFzIGEgcmVzdWx0LCBuZXdfZm9saW8gc3RhcnRzIGZyb20gdGhlIG5leHQgZm9saW8gb2ZcbjM5OTQ6XHRcdFx0ICogQGZvbGlvLlxuMzk5NTpcdFx0XHQgKi9cbjM5OTY6XHRcdFx0Zm9yIChuZXdfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTsgbmV3X2ZvbGlvICE9IGVuZF9mb2xpbztcbjM5OTc6XHRcdFx0ICAgICBuZXdfZm9saW8gPSBuZXh0KSB7XG4zOTk4Olx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKG5ld19mb2xpbyk7XG4zOTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMwMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uY2VwdHMsIHByZXNlbnRlZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIGdlbmVyYWwgdG9waWM6CgoqKkV4YW1pbmluZyBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZWAgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgYW5kIGRpZyBpbnRvIHRob3NlIHR3byBmdW5jdGlvbiBuYW1lczogYGRlZmVycmVkX3NwbGl0X2lzb2xhdGVgIGFuZCBgZGVmZXJyZWRfc3BsaXRfc2NhbmAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGV5IHByb2JhYmx5IG9wZXJhdGUgb24gc29tZSBraW5kIG9mIGRhdGEgc3RydWN0dXJlLCBtYXliZSBhIHNlZ21lbnRlZCBvbmUsIGFuZCB0aGV5IGxpa2VseSByZXByZXNlbnQgb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gc2VnbWVudHMgdGhhdCBhcmUgbm90IGluc3RhbnRseSBwcm9jZXNzZWQuIFRoZSAmIzM0O2RlZmVycmVkJiMzNDsgcGFydCBpbW1lZGlhdGVseSBzY3JlYW1zIGxhenkgZXZhbHVhdGlvbiBvciBwZXJoYXBzIGFzeW5jaHJvbm91cyBleGVjdXRpb24sIGNvcnJlY3Q/IFRoZXkgYXJlIHByb2JhYmx5IHRyeWluZyB0byBvcHRpbWl6ZSBzb21lIHBpcGVsaW5lLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIHNwbGl0dGluZyBhIGRhdGFzZXQgZm9yIHBhcmFsbGVsIHByb2Nlc3NpbmcuIFRoZSBuYW1pbmcgc3VnZ2VzdHMgdGhhdCB0aGUgYWN0dWFsIHNwbGl0dGluZyBtaWdodCBub3Qgb2NjdXIgaW1tZWRpYXRlbHksIGJ1dCByYXRoZXIgYmUgc2NoZWR1bGVkIG9yIHRyaWdnZXJlZCBsYXRlciwgcHJvYmFibHkgd2hlbiB0aGUgZGF0YSBpcyBuZWVkZWQuCgpJJiMzOTttIGJldHRpbmcgYGlzb2xhdGVgIGltcGxpZXMgc2VwYXJhdGluZyBvbmUgc2VnbWVudCwgb3Igb25lIGVsZW1lbnQgZnJvbSBhIHNwbGl0IChvciBncm91cCBvZiBzcGxpdHMpLCBmb3IgaW5kZXBlbmRlbnQgY29tcHV0YXRpb24uIEl0IG1pZ2h0IGJlIHVzZWQgZm9yIG9wZXJhdGlvbnMgd2hlcmUgYSBzaW5nbGUgc3BsaXQgbmVlZHMgc3BlY2lhbCBwcm9jZXNzaW5nLiBUaGUgd29yZCAmIzM0O2lzb2xhdGUmIzM0OyBzZWVtcyB0byBzdWdnZXN0IHRoYXQgeW91IG5lZWQgdG8gYmUgYWJsZSB0byBwdWxsIGEgcG9ydGlvbiBhd2F5IGZyb20gdGhlIHJlc3Qgb2YgdGhlIHdvcmsuCgpgU2NhbmAgb24gdGhlIG90aGVyIGhhbmQsIG1ha2VzIG1lIHRoaW5rIHRoYXQgdGhlIGRhdGEgaXMgc3RyZWFtZWQgb3IgYWNjZXNzZWQgc2VyaWFsbHkuIE1heWJlIGl0IHJlcHJlc2VudHMgYW4gaXRlcmF0aXZlIG9wZXJhdGlvbiBhY3Jvc3MgbXVsdGlwbGUgc2VnbWVudHMgb3IgYSBzZXF1ZW50aWFsIGFwcGxpY2F0aW9uIG9mIHNvbWV0aGluZy4gVGhlICYjMzQ7c2NhbiYjMzQ7IGxpa2VseSBtZWFucyB3ZSYjMzk7cmUgcGVyZm9ybWluZyBzb21lIGtpbmQgb2YgY3VtdWxhdGl2ZSBjYWxjdWxhdGlvbiBvciB0cmFuc2Zvcm1hdGlvbiBhcyB3ZSBzdGVwIHRocm91Z2ggdGhvc2Ugc3BsaXRzLiBJdCBjb3VsZCBiZSBzb21ldGhpbmcgbGlrZSBhIHJ1bm5pbmcgc3VtLCBhIHJvbGxpbmcgYXZlcmFnZSwgb3IgbWF5YmUgZXZlbiBhIHNsaWRpbmcgd2luZG93IG9wZXJhdGlvbi4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIG9wZXJhdGlvbnMgdGhhdCBkZXBlbmQgb24gcHJldmlvdXMgcmVzdWx0cy4KCkkmIzM5O2Qgd2FudCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aGVpciBpbnB1dHMgYW5kIG91dHB1dHMuIFdoYXQga2luZCBvZiBkYXRhIGFyZSB0aGV5IHdvcmtpbmcgd2l0aD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBkaXN0cmlidXRlZCBzeXN0ZW0/IFdoYXQgaXMgdGhlIGdvYWwgb2Ygc3BsaXR0aW5nIHRoZSBkYXRhIGluIHRoZSBmaXJzdCBwbGFjZT8gQW5kLCBtb3N0IGltcG9ydGFudGx5LCB3aGVyZSBhcmUgdGhlIGNvbXB1dGF0aW9uYWwgYm90dGxlbmVja3MgdGhhdCBuZWNlc3NpdGF0ZSB0aGVzZSAmIzM0O2RlZmVycmVkJiMzNDsgb3BlcmF0aW9ucz8gQ29udGV4dCB3b3VsZCBzb2xpZGlmeSBteSBpbml0aWFsIGh5cG90aGVzaXMsIHdoaWNoLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgSSBob3BlIGlzIHJlYXNvbmFibHkgYWNjdXJhdGUhIEkgdGhpbmsgSSBhbSBsb29raW5nIGF0IHNvbWUgc29ydCBvZiBkYXRhIHByb2Nlc3Npbmcgc3RyYXRlZ3ksIHdpdGggYSBmb2N1cyBvbiBtYXhpbWl6aW5nIHBhcmFsbGVsaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ1NjA6XHRcdFx0XHQgKi9cbjQ1NjE6XHRcdFx0XHRpZiAoJiM0MzsmIzQzO251bV9maWxsZWRfcGFnZXMgXHUwMDNlPSBIUEFHRV9QTURfTlIgLSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUpXG40NTYyOlx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG40NTYzOlx0XHRcdH1cbjQ1NjQ6XHRcdH1cbjQ1NjU6XHRcdHJldHVybiBmYWxzZTtcbjQ1NjY6XHR9XG40NTY3Olx0XG40NTY4Olx0c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG40NTY5Olx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSxcbjQ1NzA6XHRcdFx0XHRcdFx0ICAgICAgdm9pZCAqY2JfYXJnKVxuNDU3MTpcdHtcbjQ1NzI6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IGZvbGlvLCBfZGVmZXJyZWRfbGlzdCk7XG40NTczOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlYWJsZSA9IGNiX2FyZztcbjQ1NzQ6XHRcbjQ1NzU6XHRcdC8qIExvc3QgcmFjZSB0byBmb2xpb19wdXQoKSBvciB0aGUgZm9saW8gaXMgdW5kZXIgZm9saW9fcmVmX2ZyZWV6ZSgpICovXG40NTc2Olx0XHRpZiAoIWZvbGlvX3RyeV9nZXQoZm9saW8pKVxuNDU3NzpcdFx0XHRyZXR1cm4gTFJVX1NLSVA7XG40NTc4Olx0XG40NTc5Olx0XHRsaXN0X2xydV9pc29sYXRlX21vdmUobHJ1LCBpdGVtLCBmcmVlYWJsZSk7XG40NTgwOlx0XHRyZXR1cm4gTFJVX1JFTU9WRUQ7XG40NTgxOlx0fVxuNDU4MjpcdFxuNDU4MzpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG40NTg0Olx0XHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG40NTg1Olx0e1xuNDU4NjpcdFx0TElTVF9IRUFEKGRpc3Bvc2UpO1xuNDU4NzpcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7XG40NTg4Olx0XHRpbnQgc3BsaXQgPSAwO1xuNDU4OTpcdFx0dW5zaWduZWQgbG9uZyBpc29sYXRlZDtcbjQ1OTA6XHRcbjQ1OTE6XHRcdGlzb2xhdGVkID0gbGlzdF9scnVfc2hyaW5rX3dhbGtfaXJxKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgc2MsXG40NTkyOlx0XHRcdFx0XHRcdCAgICBkZWZlcnJlZF9zcGxpdF9pc29sYXRlLCBcdTAwMjZkaXNwb3NlKTtcbjQ1OTM6XHRcbjQ1OTQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXHUwMDI2ZGlzcG9zZSwgX2RlZmVycmVkX2xpc3QpIHtcbjQ1OTU6XHRcdFx0Ym9vbCBkaWRfc3BsaXQgPSBmYWxzZTtcbjQ1OTY6XHRcdFx0Ym9vbCB1bmRlcnVzZWQgPSBmYWxzZTtcbjQ1OTc6XHRcbjQ1OTg6XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCk7XG40NTk5Olx0XG40NjAwOlx0XHRcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuNDYwMTpcdFx0XHRcdC8qXG40NjAyOlx0XHRcdFx0ICogU2VlIHRyeV90b19tYXBfdW51c2VkX3RvX3plcm9wYWdlKCk6IHdlIGNhbm5vdFxuNDYwMzpcdFx0XHRcdCAqIG9wdGltaXplIHplcm8tZmlsbGVkIHBhZ2VzIGFmdGVyIHNwbGl0dGluZyBhblxuNDYwNDpcdFx0XHRcdCAqIG1sb2NrZWQgZm9saW8uXG40NjA1Olx0XHRcdFx0ICovXG40NjA2Olx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfbWxvY2tlZChmb2xpbykpXG40NjA3Olx0XHRcdFx0XHRnb3RvIG5leHQ7XG40NjA4Olx0XHRcdFx0dW5kZXJ1c2VkID0gdGhwX3VuZGVydXNlZChmb2xpbyk7XG40NjA5Olx0XHRcdFx0aWYgKCF1bmRlcnVzZWQpXG40NjEwOlx0XHRcdFx0XHRnb3RvIG5leHQ7XG40NjExOlx0XHRcdH1cbjQ2MTI6XHRcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbjQ2MTM6XHRcdFx0XHRnb3RvIHJlcXVldWU7XG40NjE0Olx0XHRcdGlmICghc3BsaXRfZm9saW8oZm9saW8pKSB7XG40NjE1Olx0XHRcdFx0ZGlkX3NwbGl0ID0gdHJ1ZTtcbjQ2MTY6XHRcdFx0XHRpZiAodW5kZXJ1c2VkKVxuNDYxNzpcdFx0XHRcdFx0Y291bnRfdm1fZXZlbnQoVEhQX1VOREVSVVNFRF9TUExJVF9QQUdFKTtcbjQ2MTg6XHRcdFx0XHRzcGxpdCYjNDM7JiM0Mzs7XG40NjE5Olx0XHRcdH1cbjQ2MjA6XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjQ2MjE6XHRuZXh0OlxuNDYyMjpcdFx0XHQvKlxuNDYyMzpcdFx0XHQgKiBJZiB0aHBfdW5kZXJ1c2VkKCkgcmV0dXJucyBmYWxzZSwgb3IgaWYgc3BsaXRfZm9saW8oKVxuNDYyNDpcdFx0XHQgKiBzdWNjZWVkcywgb3IgaWYgc3BsaXRfZm9saW8oKSBmYWlscyBpbiB0aGUgY2FzZSBpdCB3YXNcbjQ2MjU6XHRcdFx0ICogdW5kZXJ1c2VkLCB0aGVuIGNvbnNpZGVyIGl0IHVzZWQgYW5kIGRvbiYjMzk7dCBhZGQgaXQgYmFjayB0b1xuNDYyNjpcdFx0XHQgKiBzcGxpdF9xdWV1ZS5cbjQ2Mjc6XHRcdFx0ICovXG40NjI4Olx0XHRcdGlmICghZGlkX3NwbGl0IFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG40NjI5Olx0cmVxdWV1ZTpcbjQ2MzA6XHRcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG40NjMxOlx0XHRcdFx0bGlzdF9scnVfYWRkX2lycShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsXG40NjMyOlx0XHRcdFx0XHRcdCBcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCxcbjQ2MzM6XHRcdFx0XHRcdFx0IGZvbGlvX25pZChmb2xpbyksXG40NjM0Olx0XHRcdFx0XHRcdCBmb2xpb19tZW1jZyhmb2xpbykpO1xuNDYzNTpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuNDYzNjpcdFx0XHR9XG40NjM3Olx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG40NjM4Olx0XHR9XG40NjM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgdGhlIERlZmVycmVkIFNwbGl0IFF1ZXVlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBpdCYjMzk7cyBkb2luZyB3aXRoaW4gdGhlIG1tL2h1Z2VfbWVtb3J5IGNvbnRleHQuIEl0JiMzOTtzIG9idmlvdXNseSByZWxhdGVkIHRvIGhhbmRsaW5nIGh1Z2UgcGFnZSBzcGxpdHMsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgZGVmZXJyYWwgbWVjaGFuaXNtLiBJcyBpdCBqdXN0IHJlbW92aW5nIGVudHJpZXMgZnJvbSBhIHF1ZXVlLCBvciBpcyB0aGVyZSBtb3JlIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBpbXBsaWNhdGlvbnMgZm9yIGF0b21pY2l0eSwgbG9ja2luZywgb3IgdGhlIG92ZXJhbGwgZWZmaWNpZW5jeSBvZiB0aGUgc3BsaXQgcHJvY2Vzcz8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGltcGxlbWVudGF0aW9uLCBub3QganVzdCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIGJ1dCBhbnl3aGVyZSBlbHNlIGl0IG1pZ2h0IGJlIGNhbGxlZC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIFRoaXMgbGlrZWx5IGhvbGRzIHRoZSBrZXkgdG8gdGhlIHNwZWNpZmljIGxvZ2ljIGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9mb2xpby5jPTkwPXZvaWQgX19mb2xpb19wdXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTEwMi1cdHBhZ2VfY2FjaGVfcmVsZWFzZShmb2xpbyk7XG5tbS9mb2xpby5jOjEwMzpcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vZm9saW8uYy0xMDQtXHRtZW1fY2dyb3VwX3VuY2hhcmdlKGZvbGlvKTtcbi0tXG5tbS9mb2xpby5jPTE1MT1zdGF0aWMgdm9pZCBmb2xpb19iYXRjaF9tb3ZlX2xydShzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCwgbW92ZV9mbl90IG1vdmVfZm4pXG4tLVxubW0vZm9saW8uYy0xODUtXHRcdFx0X19mb2xpb19jbGVhcl91bmV2aWN0YWJsZShmb2xpbyk7XG5tbS9mb2xpby5jOjE4NjpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL2ZvbGlvLmMtMTg3LVx0XHRcdGZiYXRjaC1cdTAwM2Vmb2xpb3NbaV0gPSBOVUxMO1xuLS1cbm1tL2ZvbGlvLmM9OTc5PXZvaWQgZm9saW9zX3B1dF9yZWZzKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zLCB1bnNpZ25lZCBpbnQgKnJlZnMpXG4tLVxubW0vZm9saW8uYy0xMDE3LVx0XHR9XG5tbS9mb2xpby5jOjEwMTg6XHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vZm9saW8uYy0xMDE5LVx0XHRfX3BhZ2VfY2FjaGVfcmVsZWFzZShmb2xpbywgXHUwMDI2bHJ1dmVjLCBcdTAwMjZmbGFncyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zOTI1PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTQyLVx0XHQvKiBUYWtlIG9mZiB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6Mzk0MzpcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jLTM5NDQtXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NDM1PWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDQwLS8qXG5tbS9odWdlX21lbW9yeS5jOjQ0NDE6ICogX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaXMgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseTpcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ0MjogKiB0aGUgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlubGluZSB3cmFwcGVyIGluIG1tL2ludGVybmFsLmhcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0My0gKiBsaW1pdHMgaXRzIGNhbGxzIHRvIHRob3NlIGZvbGlvcyB3aGljaCBtYXkgaGF2ZSBhIF9kZWZlcnJlZF9saXN0IGZvclxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0NS0gKlxubW0vaHVnZV9tZW1vcnkuYzo0NDQ2OiAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xubW0vaHVnZV9tZW1vcnkuYy00NDQ3LSAqIHplcm86IGJlY2F1c2UgZXZlbiB3aGVuIHRoZSBsaXN0X2xydSBsb2NrIGlzIGhlbGQsIGEgbm9uLWVtcHR5XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDUzLSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0NDU0OmJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9odWdlX21lbW9yeS5jLTQ0NTUte1xuLS1cbm1tL2ludGVybmFsLmg9NzM1PXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL2ludGVybmFsLmgtNzQ2LVxubW0vaW50ZXJuYWwuaDo3NDc6Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9pbnRlcm5hbC5oOjc0ODpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaW50ZXJuYWwuaC03NDkte1xuLS1cbm1tL2ludGVybmFsLmgtNzYwLVxubW0vaW50ZXJuYWwuaDo3NjE6XHRyZXR1cm4gX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL2ludGVybmFsLmgtNzYyLX1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9NjE4PXZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy02NTMtXG5tbS9tZW1jb250cm9sLXYxLmM6NjU0Olx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9tZW1jb250cm9sLXYxLmMtNjU1LVx0Zm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IDA7XG4tLVxubW0vbWVtY29udHJvbC5jPTUzMzU9c3RhdGljIHZvaWQgdW5jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXG4tLVxubW0vbWVtY29udHJvbC5jLTUzNzMtXG5tbS9tZW1jb250cm9sLmM6NTM3NDpcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01Mzc1LVx0fVxuLS1cbm1tL21lbWNvbnRyb2wuYz01NTEzPXZvaWQgbWVtX2Nncm91cF9taWdyYXRlKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTU1NC1cdC8qIFdhcm5pbmcgc2hvdWxkIG5ldmVyIGhhcHBlbiwgc28gZG9uJiMzOTt0IHdvcnJ5IGFib3V0IHJlZmNvdW50IG5vbi0wICovXG5tbS9tZW1jb250cm9sLmM6NTU1NTpcdFdBUk5fT05fT05DRShmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KG9sZCkpO1xubW0vbWVtY29udHJvbC5jLTU1NTYtXHRvbGQtXHUwMDNlbWVtY2dfZGF0YSA9IDA7XG4tLVxubW0vbWlncmF0ZS5jPTU4Mz1zdGF0aWMgaW50IF9fZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL21pZ3JhdGUuYy01OTctXHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbm1tL21pZ3JhdGUuYzo1OTg6XHRcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9taWdyYXRlLmMtNTk5LVx0XHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgZXhwZWN0ZWRfY291bnQpO1xuLS1cbm1tL21pZ3JhdGUuYy02MzAtXHQvKiBUYWtlIG9mZiBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xubW0vbWlncmF0ZS5jOjYzMTpcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vbWlncmF0ZS5jLTYzMi1cbi0tXG5tbS92bXNjYW4uYz0xMDU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xNTA2LVxubW0vdm1zY2FuLmM6MTUwNzpcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS92bXNjYW4uYy0xNTA4LVx0XHRpZiAoZm9saW9fYmF0Y2hfYWRkKFx1MDAyNmZyZWVfZm9saW9zLCBmb2xpbykgPT0gMCkge1xuLS1cbm1tL3Ztc2Nhbi5jPTE4NjY9c3RhdGljIHVuc2lnbmVkIGludCBtb3ZlX2ZvbGlvc190b19scnUoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS92bXNjYW4uYy0xOTAxLVxubW0vdm1zY2FuLmM6MTkwMjpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL3Ztc2Nhbi5jLTE5MDMtXHRcdFx0aWYgKGZvbGlvX2JhdGNoX2FkZChcdTAwMjZmcmVlX2ZvbGlvcywgZm9saW8pID09IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc3NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgbWFuYWdpbmcgc3BsaXQgb3BlcmF0aW9ucywgZGVmZXJyZWQgb3Igb3RoZXJ3aXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCBoYW5kbGVzIHRoZSB1bnF1ZXVpbmcgcHJvY2Vzcy4gQXJlIHRoZXJlIHN1YnRsZSBsb2NraW5nIGlzc3Vlcz8gSG93IGVmZmljaWVudGx5IGRvZXMgaXQgaXRlcmF0ZSB0aHJvdWdoIHRoZSBkZWZlcnJlZCBzcGxpdHM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBJ4oCZbGwgYmUgcGF5aW5nIHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZvbGlvIHN0cnVjdHVyZXMgYW5kIGRhdGEgbW9kZWxzLCBhbmQgaG93IGl0IGhhbmRsZXMgZXJyb3JzIG9yIGVkZ2UgY2FzZXMuIEEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgdGhlIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIHNwbGl0IGxvZ2ljLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NDQwOlx0LypcbjQ0NDE6XHQgKiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpcyBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5OlxuNDQ0MjpcdCAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxuNDQ0MzpcdCAqIGxpbWl0cyBpdHMgY2FsbHMgdG8gdGhvc2UgZm9saW9zIHdoaWNoIG1heSBoYXZlIGEgX2RlZmVycmVkX2xpc3QgZm9yXG40NDQ0Olx0ICogcXVldWVpbmcgVEhQIHNwbGl0cywgYW5kIHRoYXQgbGlzdCBpcyAocmFjaWx5IG9ic2VydmVkIHRvIGJlKSBub24tZW1wdHkuXG40NDQ1Olx0ICpcbjQ0NDY6XHQgKiBJdCBpcyB1bnNhZmUgdG8gY2FsbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgdW50aWwgZm9saW8gcmVmY291bnQgaXNcbjQ0NDc6XHQgKiB6ZXJvOiBiZWNhdXNlIGV2ZW4gd2hlbiB0aGUgbGlzdF9scnUgbG9jayBpcyBoZWxkLCBhIG5vbi1lbXB0eVxuNDQ0ODpcdCAqIF9kZWZlcnJlZF9saXN0IG1pZ2h0IGJlIGluIHVzZSBvbiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkmIzM5O3MgdW5sb2NrZWRcbjQ0NDk6XHQgKiBvbi1zdGFjayBsaXN0LlxuNDQ1MDpcdCAqXG40NDUxOlx0ICogVGhlIGxpc3RfbHJ1IHN1Ymxpc3QgaXMgZGV0ZXJtaW5lZCBieSBmb2xpbyYjMzk7cyBtZW1jZzogaXQgaXMgdGhlcmVmb3JlXG40NDUyOlx0ICogaW1wb3J0YW50IHRvIHVucXVldWUgZGVmZXJyZWQgc3BsaXQgYmVmb3JlIGNoYW5naW5nIGZvbGlvIG1lbWNnLlxuNDQ1MzpcdCAqL1xuNDQ1NDpcdGJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG40NDU1Olx0e1xuNDQ1NjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNDQ1NzpcdFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1O1xuNDQ1ODpcdFx0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XG40NDU5Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuNDQ2MDpcdFx0Ym9vbCB1bnF1ZXVlZCA9IGZhbHNlO1xuNDQ2MTpcdFxuNDQ2MjpcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xuNDQ2MzpcdFx0V0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2ICFmb2xpb19tZW1jZ19jaGFyZ2VkKGZvbGlvKSk7XG40NDY0Olx0XG40NDY1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG40NDY2Olx0XHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbjQ0Njc6XHRcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgXHUwMDI2bWVtY2csIFx1MDAyNmZsYWdzKTtcbjQ0Njg6XHRcdGlmIChfX2xpc3RfbHJ1X2RlbChcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCkpIHtcbjQ0Njk6XHRcdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcbjQ0NzA6XHRcdFx0XHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbjQ0NzE6XHRcdFx0XHRtb2RfbXRocF9zdGF0KGZvbGlvX29yZGVyKGZvbGlvKSxcbjQ0NzI6XHRcdFx0XHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbjQ0NzM6XHRcdFx0fVxuNDQ3NDpcdFx0XHR1bnF1ZXVlZCA9IHRydWU7XG40NDc1Olx0XHR9XG40NDc2Olx0XHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbjQ0Nzc6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuNDQ3ODpcdFxuNDQ3OTpcdFx0cmV0dXJuIHVucXVldWVkO1x0LyogdXNlZnVsIGZvciBkZWJ1ZyB3YXJuaW5ncyAqL1xuNDQ4MDpcdH1cbjQ0ODE6XHRcbjQ0ODI6XHQvKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbiYjMzk7dCBjbGVhciBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgKi9cbjQ0ODM6XHR2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcbjQ0ODQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NTMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA4OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29yZSBNTSBUSFAgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgZXhwZXJ0IGV5ZSBpbW1lZGlhdGVseSBob25lcyBpbiBvbiB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZTogaXQmIzM5O3MgYSBkZWVwIGRpdmUgaW50byB0aGUgbW0vaHVnZV9tZW1vcnkuYyBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLCBwYXJ0aWN1bGFybHkgYW5vbnltb3VzIGFuZCBtdWx0aS1zaXplIFRIUHMgKG1USFBzKSwgYXJlIGhhbmRsZWQgZHVyaW5nIGRlZmVycmVkIHNwbGl0dGluZy4KClByZXZpb3VzbHksIHRoZSBjb2RlIGluIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGhhZCBhIHNwZWNpZmljIGxvY2tpbmcgbWVjaGFuaXNtIGludm9sdmluZyBgZGVmZXJyZWRfc3BsaXRfbHJ1YCBiZWZvcmUgZnJlZXppbmcgdGhlIGZvbGlvJiMzOTtzIHJlZmVyZW5jZSBjb3VudC4gSWYgYGRlcXVldWVfZGVmZXJyZWRgIHdhcyB0cnVlIGFuZCB0aGUgZm9saW8gd2FzIGFub255bW91cyB3aXRoIGFuIG9yZGVyIGdyZWF0ZXIgdGhhbiAxLCBpdCB3b3VsZCBsb2NrIHRoZSBMUlUsIHRoZW4gZnJlZXplIHRoZSBmb2xpbyByZWZlcmVuY2UgY291bnQsIGFuZCBpZiBzdWNjZXNzZnVsLCByZW1vdmUgdGhlIGl0ZW0gZnJvbSB0aGUgTFJVLiBBIHJlZiBmcmVlemUgZmFpbHVyZSB3b3VsZCByZXN1bHQgaW4gdW5sb2NraW5nIHRoZSBMUlUgYW5kIHJldHVybmluZyAtRUFHQUlOLgoKVGhlIGNoYW5nZSBjZW50ZXJzIGFyb3VuZCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZWAsIGFuZCB0aGUgcmVtb3ZhbCBvZiB0aGUgZXhwbGljaXQgbG9ja2luZy4gVGhlIHByZXZpb3VzIHZlcnNpb24gdHJpZWQgdG8gZ2V0IHRoZSBmb2xpbywgYW5kIGlmIGl0IGNvdWxkLCBpc29sYXRlZCBpdCBmcm9tIHRoZSBMUlUsIG90aGVyd2lzZSwgY2xlYXJlZCB0aGUgcGFydGlhbGx5IG1hcHBlZCBmbGFnIChpZiBzZXQpIGFuZCBpc29sYXRlZCBpdCBmcm9tIHRoZSBMUlUuIFRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIG1vcmUgc3RyZWFtbGluZWQgYXBwcm9hY2guIE5vdyBgZm9saW9fdHJ5X2dldGAgaXMgdGhlIG9ubHkgY2hlY2sgZm9yIHdoZXRoZXIgdGhlIGZvbGlvIGNhbiBiZSBpc29sYXRlZC4gSWYgYGZvbGlvX3RyeV9nZXRgIGZhaWxzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBMUlVfU0tJUCwgbGVhdmluZyB0aGUgaXRlbSBvbiB0aGUgTFJVLCBidXQgdGhlIHBhcnRpYWxseSBtYXBwZWQgZmxhZyAqc3RpbGwqIG5lZWRzIHRvIGJlIGNsZWFyZWQgKGlmIHNldCkgdmlhIGBmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWRgLgoKSW4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAsIHRoZSBtYW51YWwgbG9ja2luZyBiZWZvcmUgdGhlIHJlZiBmcmVlemUgaXMgcmVtb3ZlZC4gSW5zdGVhZCwgaXQgdXRpbGl6ZXMgYGZvbGlvX3JlZl9mcmVlemVgLiBJZiBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZWAgcnVucyBjb25jdXJyZW50bHkgd2hpbGUgYGZvbGlvX3JlZl9mcmVlemVgIGlzIGFjdGl2ZSwgYGZvbGlvX3RyeV9nZXRgIHdpbGwgZmFpbC4gYGRlZmVycmVkX3NwbGl0X2lzb2xhdGVgIHJldHVybnMgTFJVX1NLSVAsIHByZXZlbnRpbmcgcmVtb3ZhbCBmcm9tIHRoZSBMUlUuIFRoZSBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgY2FuIHNhZmVseSB1bnF1ZXVlIHRoZSBmb2xpbyB3aGlsZSByZWYgaXMgZnJvemVuIGFuZCBtZW1jZyBpcyBzZXQsIG9yIGlmIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCBoYWQgYWxyZWFkeSBpc29sYXRlZCBpdCBiZWZvcmUgYGZvbGlvX3JlZl9mcmVlemVgLCBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgZmluZHMgaXQgbm90IG9uIHRoZSBscnUsIGFuZCB0aGVuIGBmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWRgIGNsZWFycyB0aGUgZmxhZy4KClNvLCB0aGlzIGlzIGFsbCBhYm91dCBzeW5jaHJvbml6aW5nIHJlZmNvdW50aW5nIGFuZCBsb2NraW5nIGFyb3VuZCBkZWZlcnJlZCBzcGxpdHMsIHdoaWNoIGlzIGEgY3JpdGljYWwgYXJlYSBmb3IgY29uY3VycmVuY3kgaW4gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IGZvciBUSFBzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBkaXJlY3QgaW1wYWN0cyBvbiBtZW1vcnkgbWFuYWdlbWVudCBpdHNlbGYsIFRIUCBzcGxpdHRpbmcsIGFub255bW91cyBUSFAvbVRIUCBwYXJ0aWFsIG1hcHBpbmcsIG1lbW9yeSByZWNsYWltIHRocm91Z2ggYGRlZmVycmVkX3NwbGl0X3NjYW5gLCBgc3BsaXRfaHVnZV9wYWdlYCwgYG1hZHZpc2UoTUFEVl9ET05UTkVFRClgLCB1bm1hcHBpbmcgcGFydGlhbCBUSFAsIGFuZCBzbyBvbi4KClRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGlzIGlzIGFic29sdXRlbHkgdGVzdGFibGUgYW5kIHJlYWNoYWJsZSwgZXZlbiBpbiBhIFFFTVUtYmFzZWQgZnV6emluZyBlbnZpcm9ubWVudC4gVEhQcyBhcmUgc3RhbmRhcmQgZmVhdHVyZXMuIFdlIGNhbiB0cmlnZ2VyIHRoZXNlIHBhdGhzIHRocm91Z2ggdXNlcmxhbmQgc3lzY2FsbHMsIHN1Y2ggYXMgYG1hZHZpc2VgLCBgbXByb3RlY3RgLCBgbXVubWFwYCwgYXMgd2VsbCBhcyBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcGFnZSBmYXVsdHMuCgpJcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgVEhQIHNwbGl0dGluZyBsb2dpYywgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUsIHRoZSBwb3RlbnRpYWwgcmFjZXMgYmV0d2VlbiBwYWdlIHJlY2xhbWF0aW9uL3Nocmlua2VycyAoYGRlZmVycmVkX3NwbGl0X3NjYW5gKSwgc3BsaXR0aW5nL2ZyZWVpbmcgZm9saW9zIChgc3BsaXRfaHVnZV9wYWdlYCwgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgLCBgZm9saW9fc3BsaXRfdW5tYXBwZWRgKSwgYXMgd2VsbCBhcyB0aGUgZWZmZWN0cyBvZiBgbWFkdmlzZWAsIGFsbCBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhlc2UgYXJlYXMgYXJlIGZyYXVnaHQgd2l0aCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBzdWJ0bGUgcmVmY291bnRpbmcgZXJyb3JzLCB0cmlja3kgbG9ja2luZywgYW5kIGNvbXBsZXggc3RhdGUgdHJhbnNpdGlvbnMuCgpJJiMzOTtsbCBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIG5leHQgdG8gY29uZmlybSB0aGUgYnVpbGQgcmVxdWlyZW1lbnRzLCBidXQgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBwcmlvcml0aXplIGluIG15IHRlc3RpbmcgYW5kIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlX21lbW9yeVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjc1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgVEhQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgY29uZmlndXJlZC4gVGhhdCYjMzk7cyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZSwgc28gbmF0dXJhbGx5LCBJIHNob3VsZCBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgZmluZCBpdHMgZGVmaW5pdGlvbiBpbiBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHNldHRpbmdzIGFyZSB1c3VhbGx5IGhhbmRsZWQuIExldCYjMzk7cyBzZWUgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgYW5kIGhvdyB0aGlzIGlzIGNvbnRyb2xsZWQgYXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MzQtXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzNi1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODUzPWNob2ljZVxuLS1cbm1tL0tjb25maWctODU4LVxubW0vS2NvbmZpZzo4NTk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg2MC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2NS1cbm1tL0tjb25maWc6ODY2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODY3LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3NC1cbm1tL0tjb25maWc6ODc1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3Ni1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODgyPWNob2ljZVxuLS1cbm1tL0tjb25maWctODkxLVxubW0vS2NvbmZpZzo4OTI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04OTMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwMS1cbm1tL0tjb25maWc6OTAyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkwMy1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwOS1cbm1tL0tjb25maWc6OTEwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTExLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTctXG5tbS9LY29uZmlnOjkxODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTktXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05Mjc9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzYtXG5tbS9LY29uZmlnOjkzNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzOC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQ1LVxubW0vS2NvbmZpZzo5NDY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQ3LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTUzLVxubW0vS2NvbmZpZzo5NTQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTUtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk2MS1cbm1tL0tjb25maWc6OTYyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk2My1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NjMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIFJhdGhlciB0aGFuIGp1c3QgcmVseWluZyBvbiBtZW1vcnksIEkga25vdyB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoaXMgaXMgaW4gdGhlIGBLY29uZmlnYCBmaWxlcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG1tL0tjb25maWdgLCBhbmQgcGlucG9pbnQgdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmUgODM1LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2Ugc29ydHMgb2YgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcyBhcmUgZGVmaW5lZCBvciBhdCBsZWFzdCBoYXZlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uIEhvcGVmdWxseSwgdGhpcyBzZWN0aW9uIHdpbGwgY2xlYXJseSBzcGVsbCBvdXQgYW55IGRlcGVuZGVuY2llcyB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaGFzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBoYXJkd2FyZSBzdXBwb3J0LiBLbm93aW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBrZXkgdG8gZGVidWdnaW5nIGlzc3VlcywgY29uZmlndXJpbmcgc3lzdGVtcyBwcm9wZXJseSwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSByZXZlYWxzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODMwOlx0XHQgIG1lbW9yeSBjb25zdHJhaW5lZC5cbiA4MzE6XHRcbiA4MzI6XHRjb25maWcgTU1fSURcbiA4MzM6XHRcdGRlZl9ib29sIG5cbiA4MzQ6XHRcbiA4MzU6XHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODM2Olx0XHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbiA4Mzc6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuIDgzODpcdFx0c2VsZWN0IENPTVBBQ1RJT05cbiA4Mzk6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiA4NDA6XHRcdHNlbGVjdCBNTV9JRFxuIDg0MTpcdFx0aGVscFxuIDg0MjpcdFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXG4gODQzOlx0XHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cbiA4NDQ6XHRcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXG4gODQ1Olx0XHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XG4gODQ2Olx0XHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcbiA4NDc6XHRcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxuIDg0ODpcdFxuIDg0OTpcdFx0ICBJZiBtZW1vcnkgY29uc3RyYWluZWQgb24gZW1iZWRkZWQsIHlvdSBtYXkgd2FudCB0byBzYXkgTi5cbiA4NTA6XHRcbiA4NTE6XHRpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIDg1MjpcdFxuIDg1MzpcdGNob2ljZVxuIDg1NDpcdFx0cHJvbXB0IFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQgc3lzZnMgZGVmYXVsdHNcJiMzNDtcbiA4NTU6XHRcdGRlZmF1bHQgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG4gODU2Olx0XHRoZWxwXG4gODU3Olx0XHQgIFNlbGVjdHMgdGhlIHN5c2ZzIGRlZmF1bHRzIGZvciBUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0LlxuIDg1ODpcdFxuIDg1OTpcdFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xuIDg2MDpcdFx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuIDg2MTpcdFx0aGVscFxuIDg2MjpcdFx0ICBFbmFibGluZyBUcmFuc3BhcmVudCBIdWdlcGFnZSBhbHdheXMsIGNhbiBpbmNyZWFzZSB0aGVcbiA4NjM6XHRcdCAgbWVtb3J5IGZvb3RwcmludCBvZiBhcHBsaWNhdGlvbnMgd2l0aG91dCBhIGd1YXJhbnRlZWRcbiA4NjQ6XHRcdCAgYmVuZWZpdCBidXQgaXQgd2lsbCB3b3JrIGF1dG9tYXRpY2FsbHkgZm9yIGFsbCBhcHBsaWNhdGlvbnMuXG4gODY1Olx0XG4gODY2Olx0XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxuIDg2NzpcdFx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbiA4Njg6XHRcdGhlbHBcbiA4Njk6XHRcdCAgRW5hYmxpbmcgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgbWFkdmlzZSwgd2lsbCBvbmx5IHByb3ZpZGUgYVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM2MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgSHVnZXBhZ2UgVHJhbnNwYXJlbmN5IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGdvZXMgdG8gdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBpc3N1ZSBhdCBoYW5kLiBCdXQgSSBjYW4mIzM5O3QganVzdCBzdG9wIHRoZXJlLiBJIGtub3cgdGhlcmUmIzM5O3MgYWxtb3N0IGFsd2F5cyBtb3JlIHRvIHRoZSBzdG9yeSwgZXNwZWNpYWxseSB3aGVuIGl0IGNvbWVzIHRvIG1lbW9yeSBtYW5hZ2VtZW50LiBJIGhhdmUgdG8gdGhpbmsgbW9yZSBicm9hZGx5LgoKTXkgbmV4dCBsaW5lIG9mIGludmVzdGlnYXRpb24gaW52b2x2ZXMgY29uc2lkZXJpbmcgYE1FTUNHYCDigJMgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIG1lbW9yeSBjZ3JvdXBzIGFyZSBzb21laG93IGVudGFuZ2xlZCB3aXRoIHRoZSBiZWhhdmlvciBvZiBgbGlzdF9scnVgIGFuZCBwb3RlbnRpYWxseSBkZWZlcnJlZCBzcGxpdHMuIFRoZSBpbnRyaWNhY2llcyB0aGVyZSBhcmUgZWFzaWx5IG1pc3NlZCwgYW5kIGFyZSB3ZWxsIGtub3duIHRvIGJlIGludGVydHdpbmVkLgoKRnVydGhlcm1vcmUsIEkgaGF2ZSB0byBleGFtaW5lIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQuIEl0IHNvdW5kcyBsaWtlIGBkZWZlcnJlZF9zcGxpdF9scnVgIGFuZCBgZGVmZXJyZWRfc3BsaXRfc2NhbmAgbWlnaHQgcHJvdmlkZSBhZGRpdGlvbmFsIGNsdWVzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZGVlcGx5IGF0IGhvdyB0aGV5JiMzOTtyZSB1c2VkLiBJIG5lZWQgdG8gbWFwIG91dCB0aGUgZW50aXJlIGxhbmRzY2FwZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSBjb25maWdzIGFuZCBmdW5jdGlvbnMsIHRvIHNlZSB3aGVyZSB0aGUgYm90dGxlbmVjayBjb3VsZCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmZXJyZWRfc3BsaXRfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NjE9dW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyBfX3JlYWRfbW9zdGx5ID1cbi0tXG5tbS9odWdlX21lbW9yeS5jLTcxLVxubW0vaHVnZV9tZW1vcnkuYzo3MjpzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGRlZmVycmVkX3NwbGl0X2tleTtcbm1tL2h1Z2VfbWVtb3J5LmM6NzM6c3RhdGljIHN0cnVjdCBsaXN0X2xydSBkZWZlcnJlZF9zcGxpdF9scnU7XG5tbS9odWdlX21lbW9yeS5jOjc0OnN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKmRlZmVycmVkX3NwbGl0X3Nocmlua2VyO1xubW0vaHVnZV9tZW1vcnkuYzo3NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbm1tL2h1Z2VfbWVtb3J5LmMtNzYtXHRcdFx0XHRcdCAgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7XG5tbS9odWdlX21lbW9yeS5jOjc3OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG5tbS9odWdlX21lbW9yeS5jLTc4LVx0XHRcdFx0XHQgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zNDA9c3RhdGljIGludCBfX2luaXQgaHVnZV96ZXJvX2luaXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM0My1cdGlmICghaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKSB7XG5tbS9odWdlX21lbW9yeS5jOjM0NDpcdFx0c2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XG5tbS9odWdlX21lbW9yeS5jOjM0NTpcdFx0bGlzdF9scnVfZGVzdHJveShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xubW0vaHVnZV9tZW1vcnkuYy0zNDYtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTAxNT1pbnQgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEwMTgtXHRcdHJldHVybiAwO1xubW0vaHVnZV9tZW1vcnkuYzoxMDE5Olx0cmV0dXJuIGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jKGZvbGlvLCBcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIEdGUF9LRVJORUwpO1xubW0vaHVnZV9tZW1vcnkuYy0xMDIwLX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTEwMjI9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbm1tL2h1Z2VfbWVtb3J5LmMtMTAyMy17XG5tbS9odWdlX21lbW9yeS5jOjEwMjQ6XHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxubW0vaHVnZV9tZW1vcnkuYy0xMDI1LVx0XHRcdFx0XHRcdCBTSFJJTktFUl9NRU1DR19BV0FSRSxcbm1tL2h1Z2VfbWVtb3J5LmMtMTAyNi1cdFx0XHRcdFx0XHQgXCYjMzQ7dGhwLWRlZmVycmVkX3NwbGl0XCYjMzQ7KTtcbm1tL2h1Z2VfbWVtb3J5LmM6MTAyNzpcdGlmICghZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpXG5tbS9odWdlX21lbW9yeS5jLTEwMjgtXHRcdHJldHVybiAtRU5PTUVNO1xubW0vaHVnZV9tZW1vcnkuYy0xMDI5LVxubW0vaHVnZV9tZW1vcnkuYzoxMDMwOlx0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2dfa2V5KFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSxcbm1tL2h1Z2VfbWVtb3J5LmM6MTAzMTpcdFx0XHRcdCAgICBkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcixcbm1tL2h1Z2VfbWVtb3J5LmM6MTAzMjpcdFx0XHRcdCAgICBcdTAwMjZkZWZlcnJlZF9zcGxpdF9rZXkpKSB7XG5tbS9odWdlX21lbW9yeS5jOjEwMzM6XHRcdHNocmlua2VyX2ZyZWUoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xubW0vaHVnZV9tZW1vcnkuYy0xMDM0LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEwMzYtXG5tbS9odWdlX21lbW9yeS5jOjEwMzc6XHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0gZGVmZXJyZWRfc3BsaXRfY291bnQ7XG5tbS9odWdlX21lbW9yeS5jOjEwMzg6XHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlci1cdTAwM2VzY2FuX29iamVjdHMgPSBkZWZlcnJlZF9zcGxpdF9zY2FuO1xubW0vaHVnZV9tZW1vcnkuYzoxMDM5Olx0c2hyaW5rZXJfcmVnaXN0ZXIoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xubW0vaHVnZV9tZW1vcnkuYy0xMDQwLVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTA0ND1zdGF0aWMgdm9pZCBfX2luaXQgdGhwX3Nocmlua2VyX2V4aXQodm9pZClcbm1tL2h1Z2VfbWVtb3J5LmMtMTA0NS17XG5tbS9odWdlX21lbW9yeS5jOjEwNDY6XHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbm1tL2h1Z2VfbWVtb3J5LmM6MTA0NzpcdGxpc3RfbHJ1X2Rlc3Ryb3koXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1KTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTA0OC1cdGh1Z2VfemVyb19zaHJpbmtlcl9leGl0KCk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMzU4PXZvaWQgbWFwX2Fub25fZm9saW9fcG1kX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcG1kX3QgKnBtZCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEzNjgtXHR1cGRhdGVfbW11X2NhY2hlX3BtZCh2bWEsIGhhZGRyLCBwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoxMzY5Olx0ZGVmZXJyZWRfc3BsaXRfZm9saW8oZm9saW8sIGZhbHNlKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTM3MC19XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zOTI1PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTQ1LVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzozOTQ2Olx0XHQgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0XG5tbS9odWdlX21lbW9yeS5jLTM5NDctXHRcdCAqIHNwbGl0cyBpdCwgc28gdGhlIHVucXVldWUgYWJvdmUgZmluZHMgYW4gZW1wdHkgbGlzdCBhbmRcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0MzU9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0NDctICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ0ODogKiBfZGVmZXJyZWRfbGlzdCBtaWdodCBiZSBpbiB1c2Ugb24gZGVmZXJyZWRfc3BsaXRfc2NhbigpJiMzOTtzIHVubG9ja2VkXG5tbS9odWdlX21lbW9yeS5jLTQ0NDktICogb24tc3RhY2sgbGlzdC5cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0NTQ9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0NjYtXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ2NzpcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgXHUwMDI2bWVtY2csIFx1MDAyNmZsYWdzKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ2ODpcdGlmIChfX2xpc3RfbHJ1X2RlbChcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ2OS1cdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0ODItLyogcGFydGlhbGx5X21hcHBlZD1mYWxzZSB3b24mIzM5O3QgY2xlYXIgUEdfcGFydGlhbGx5X21hcHBlZCBmb2xpbyBmbGFnICovXG5tbS9odWdlX21lbW9yeS5jOjQ0ODM6dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXG5tbS9odWdlX21lbW9yeS5jLTQ0ODQte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDUxMy1cdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYzo0NTE0Olx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcdTAwMjZtZW1jZywgXHUwMDI2ZmxhZ3MpO1xubW0vaHVnZV9tZW1vcnkuYy00NTE1LVx0aWYgKHBhcnRpYWxseV9tYXBwZWQpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MjYtXHR9XG5tbS9odWdlX21lbW9yeS5jOjQ1Mjc6XHRfX2xpc3RfbHJ1X2FkZChcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCwgbWVtY2cpO1xubW0vaHVnZV9tZW1vcnkuYy00NTI4LVx0bGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUobHJ1LCBcdTAwMjZmbGFncyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NTMxLVxubW0vaHVnZV9tZW1vcnkuYzo0NTMyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxubW0vaHVnZV9tZW1vcnkuYy00NTMzLVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDUzNi1cbm1tL2h1Z2VfbWVtb3J5LmM6NDUzNzpcdGNvdW50ID0gbGlzdF9scnVfc2hyaW5rX2NvdW50KFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgc2MpO1xubW0vaHVnZV9tZW1vcnkuYy00NTM4LVx0cmV0dXJuIGNvdW50ID86IFNIUklOS19FTVBUWTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ1NDE9c3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU2Ny1cbm1tL2h1Z2VfbWVtb3J5LmM6NDU2ODpzdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU2OS1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU4Mi1cbm1tL2h1Z2VfbWVtb3J5LmM6NDU4MzpzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxubW0vaHVnZV9tZW1vcnkuYy00NTg0LVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU5MC1cbm1tL2h1Z2VfbWVtb3J5LmM6NDU5MTpcdGlzb2xhdGVkID0gbGlzdF9scnVfc2hyaW5rX3dhbGtfaXJxKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgc2MsXG5tbS9odWdlX21lbW9yeS5jOjQ1OTI6XHRcdFx0XHRcdCAgICBkZWZlcnJlZF9zcGxpdF9pc29sYXRlLCBcdTAwMjZkaXNwb3NlKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDU5My1cbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ2MzAtXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xubW0vaHVnZV9tZW1vcnkuYzo0NjMxOlx0XHRcdGxpc3RfbHJ1X2FkZF9pcnEoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LFxubW0vaHVnZV9tZW1vcnkuYy00NjMyLVx0XHRcdFx0XHQgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsXG4tLVxubW0vbWlncmF0ZS5jPTEzNjM9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi0tXG5tbS9taWdyYXRlLmMtMTQwMi1cdGlmIChzcmNfZGVmZXJyZWRfc3BsaXQpXG5tbS9taWdyYXRlLmM6MTQwMzpcdFx0ZGVmZXJyZWRfc3BsaXRfZm9saW8oZHN0LCBzcmNfcGFydGlhbGx5X21hcHBlZCk7XG5tbS9taWdyYXRlLmMtMTQwNC1cbi0tXG5tbS9taWdyYXRlLmM9MTgxMT1zdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcbi0tXG5tbS9taWdyYXRlLmMtMTg1Ny1cdFx0XHQgKiBPbmx5IGNoZWNrIGl0IHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgbGlzdC5cbm1tL21pZ3JhdGUuYzoxODU4Olx0XHRcdCAqIFNpbmNlIHRoZSBmb2xpbyBjYW4gYmUgb24gZGVmZXJyZWRfc3BsaXRfc2NhbigpXG5tbS9taWdyYXRlLmMtMTg1OS1cdFx0XHQgKiBsb2NhbCBsaXN0IGFuZCByZW1vdmluZyBpdCBjYW4gY2F1c2UgdGhlIGxvY2FsIGxpc3Rcbi0tXG5tbS9ybWFwLmM9MTc4Mj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19mb2xpb19yZW1vdmVfcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy0xODc2LVx0ICAgICFmb2xpb19pc19kZXZpY2VfcHJpdmF0ZShmb2xpbykpXG5tbS9ybWFwLmM6MTg3NzpcdFx0ZGVmZXJyZWRfc3BsaXRfZm9saW8oZm9saW8sIHRydWUpO1xubW0vcm1hcC5jLTE4NzgtXG4tLVxubW0vdm1zdGF0LmM9MTE5OT1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbi0tXG5tbS92bXN0YXQuYy0xNDI0LVx0W0koVEhQX1NQTElUX1BBR0VfRkFJTEVEKV1cdFx0PSBcJiMzNDt0aHBfc3BsaXRfcGFnZV9mYWlsZWRcJiMzNDssXG5tbS92bXN0YXQuYzoxNDI1Olx0W0koVEhQX0RFRkVSUkVEX1NQTElUX1BBR0UpXVx0XHQ9IFwmIzM0O3RocF9kZWZlcnJlZF9zcGxpdF9wYWdlXCYjMzQ7LFxubW0vdm1zdGF0LmMtMTQyNi1cdFtJKFRIUF9VTkRFUlVTRURfU1BMSVRfUEFHRSldXHRcdD0gXCYjMzQ7dGhwX3VuZGVydXNlZF9zcGxpdF9wYWdlXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ1MAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbnZlc3RpZ2F0aW9uIG9mIFRIUCBTcGxpdHRpbmcgYW5kIERlZmVycmVkIFNwbGl0IEFQSSBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUga2VybmVsJiMzOTtzIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgc3BsaXR0aW5nIGFuZCBkZWZlcnJlZCBzcGxpdCBmdW5jdGlvbmFsaXR5LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgQVBJIGVudHJ5IHBvaW50cyBpbnZvbHZlZCBpbiB0aGVzZSBwcm9jZXNzZXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjYWxsIGNoYWlucyBhbmQgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcy4KCkZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgaXMgY2FsbGVkLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHByZXR0eSBjZW50cmFsLiBGcm9tIG15IGluaXRpYWwgcmVzZWFyY2gsIGl0IGFwcGVhcnMgdGhhdCBgX19mb2xpb19zcGxpdGAgaXMgYSBrZXkgZnVuY3Rpb24sIGFuZCB0aGF0JiMzOTtzIGNhbGxlZCBieSBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGFuZCBgc3BsaXRfZm9saW9fdG9fbGlzdGAuIEkgYWxzbyBzZWUgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCAobW0pIGNvZGUuCgpGdXJ0aGVybW9yZSwgSSYjMzk7bSBub3RpbmcgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgYGRlZmVycmVkX3NwbGl0X3NjYW5gIHNocmlua2VyIGNhbGxiYWNrLCBhbG9uZyB3aXRoIGBkZWZlcnJlZF9zcGxpdF9mb2xpb2AsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIHRoZSBybWFwIGNvZGUuIFRoZSBvdGhlciBjYWxscyBJIG5lZWQgdG8gd2F0Y2ggYXJlLCBhZ2FpbiwgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCwgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0YCwgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgLCBgZm9saW9fc3BsaXRfdW5tYXBwZWRgLCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFRoaXMgbGlzdCBnaXZlcyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdy4KCkZpbmFsbHksIEkmIzM5O2xsIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBtbS9odWdlX21lbW9yeS5jYC4gSSBuZWVkIHRvIHJldmlldyB0aGUgZXhwb3J0ZWQgc3ltYm9scyBhbmQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSByZWdpb25zIHN1cnJvdW5kaW5nIHRoZSBzcGxpdCBvcGVyYXRpb25zLiBUaGlzIHNob3VsZCBvZmZlciBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBwdWJsaWMgQVBJIHJlbGF0ZWQgdG8gc3BsaXR0aW5nIGFuZCBkZWZlcnJlZCBzcGxpdHMuIEkmIzM5O20gaG9waW5nIHRvIGRpc2NvdmVyIGFueSB1bmRvY3VtZW50ZWQgb3IgbGVzcyBvYnZpb3VzIGVudHJ5IHBvaW50cyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBsYXJnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KHNwbGl0X2ZvbGlvfHNwbGl0X2h1Z2VfcGFnZXxmb2xpb19zcGxpdCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MTM1OD12b2lkIG1hcF9hbm9uX2ZvbGlvX3BtZF9ub3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMzY4LVx0dXBkYXRlX21tdV9jYWNoZV9wbWQodm1hLCBoYWRkciwgcG1kKTtcbm1tL2h1Z2VfbWVtb3J5LmM6MTM2OTpcdGRlZmVycmVkX3NwbGl0X2ZvbGlvKGZvbGlvLCBmYWxzZSk7XG5tbS9odWdlX21lbW9yeS5jLTEzNzAtfVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjM1OD1ib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI0MDAtXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG5tbS9odWdlX21lbW9yeS5jOjI0MDE6XHRcdHNwbGl0X2ZvbGlvKGZvbGlvKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjQwMi1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM1ODg9c3RhdGljIHZvaWQgcmVtYXBfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIG5yLCBpbnQgZmxhZ3MpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNjAzLVxubW0vaHVnZV9tZW1vcnkuYzozNjA0OnN0YXRpYyB2b2lkIGxydV9hZGRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXG5tbS9odWdlX21lbW9yeS5jLTM2MDUtXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM2Mjk9c3RhdGljIGJvb2wgcGFnZV9yYW5nZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgbG9uZyBucl9wYWdlcylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM2NDAtICovXG5tbS9odWdlX21lbW9yeS5jOjM2NDE6c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy0zNjQyLVx0XHRpbnQgbmV3X29yZGVyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzc4MS0gKiAxLiB1bmlmb3JtIHNwbGl0OiBAeGFzIGlzIHNwbGl0IHdpdGggbm8gZXhwZWN0YXRpb24gb2YgZmFpbHVyZSBhbmQgYSBzaW5nbGVcbm1tL2h1Z2VfbWVtb3J5LmM6Mzc4MjogKiAgICBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKCkgaXMgY2FsbGVkIHRvIHNwbGl0IHRoZSBAZm9saW8gaW50byBAbmV3X29yZGVyXG5tbS9odWdlX21lbW9yeS5jLTM3ODMtICogICAgYWxvbmcgd2l0aCBzdGF0cyB1cGRhdGUuXG5tbS9odWdlX21lbW9yeS5jLTM3ODQtICogMi4gbm9uLXVuaWZvcm0gc3BsaXQ6IGZvbGlvX29yZGVyIC0gQG5ld19vcmRlciBjYWxscyB0b1xubW0vaHVnZV9tZW1vcnkuYzozNzg1OiAqICAgIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoKSBhcmUgZXhwZWN0ZWQgdG8gYmUgbWFkZSBpbiBhIGZvciBsb29wIHRvIHNwbGl0XG5tbS9odWdlX21lbW9yeS5jLTM3ODYtICogICAgdGhlIEBmb2xpbyB0byBvbmUgbG93ZXIgb3JkZXIgYXQgYSB0aW1lLiBUaGUgZm9saW8gY29udGFpbmluZyBAc3BsaXRfYXRcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM3OTg9c3RhdGljIGludCBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zODQwLVxubW0vaHVnZV9tZW1vcnkuYzozODQxOlx0XHRmb2xpb19zcGxpdF9tZW1jZ19yZWZzKGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzg0Mi1cdFx0c3BsaXRfcGFnZV9vd25lcihcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzg0My1cdFx0cGdhbGxvY190YWdfc3BsaXQoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xubW0vaHVnZV9tZW1vcnkuYzozODQ0Olx0XHRfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzg0NS1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTM5MjU9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwMDctXHRcdFx0aWYgKGRvX2xydSlcbm1tL2h1Z2VfbWVtb3J5LmM6NDAwODpcdFx0XHRcdGxydV9hZGRfc3BsaXRfZm9saW8oZm9saW8sIG5ld19mb2xpbywgbHJ1dmVjLCBsaXN0KTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDAwOS1cbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwNjItLyoqXG5tbS9odWdlX21lbW9yeS5jOjQwNjM6ICogX19mb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXG5tbS9odWdlX21lbW9yeS5jLTQwNjQtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDA4Mi0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDA4MzpzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtNDA4NC1cdFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgcGFnZSAqbG9ja19hdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNzktLyoqXG5tbS9odWdlX21lbW9yeS5jOjQyODA6ICogZm9saW9fc3BsaXRfdW5tYXBwZWQoKSAtIHNwbGl0IGEgbGFyZ2UgYW5vbiBmb2xpbyB0aGF0IGlzIGFscmVhZHkgdW5tYXBwZWRcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MzAwLSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0MzAxOmludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxubW0vaHVnZV9tZW1vcnkuYy00MzAyLXtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQzNjctICovXG5tbS9odWdlX21lbW9yeS5jOjQzNjg6aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQzNjktXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MzcyLVxubW0vaHVnZV9tZW1vcnkuYzo0MzczOlx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgcGFnZSwgbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDM3NC1cdFx0XHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Mzc3LS8qKlxubW0vaHVnZV9tZW1vcnkuYzo0Mzc4OiAqIGZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cbm1tL2h1Z2VfbWVtb3J5LmMtNDM3OS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Mzg1LSAqIEl0IGhhcyB0aGUgc2FtZSBwcmVyZXF1aXNpdGVzIGFuZCByZXR1cm5zIGFzXG5tbS9odWdlX21lbW9yeS5jOjQzODY6ICogc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKS5cbm1tL2h1Z2VfbWVtb3J5LmMtNDM4Ny0gKlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQwMC0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDQwMTppbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtNDQwMi1cdFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxubW0vaHVnZV9tZW1vcnkuYy00NDAzLXtcbm1tL2h1Z2VfbWVtb3J5LmM6NDQwNDpcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X2F0LCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00NDA1LVx0XHRcdCAgICAgU1BMSVRfVFlQRV9OT05fVU5JRk9STSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NDE4PXVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDM0LVxubW0vaHVnZV9tZW1vcnkuYzo0NDM1OmludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG5tbS9odWdlX21lbW9yeS5jLTQ0MzYte1xubW0vaHVnZV9tZW1vcnkuYzo0NDM3Olx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGxpc3QsIDApO1xubW0vaHVnZV9tZW1vcnkuYy00NDM4LX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0NTQ9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0ODItLyogcGFydGlhbGx5X21hcHBlZD1mYWxzZSB3b24mIzM5O3QgY2xlYXIgUEdfcGFydGlhbGx5X21hcHBlZCBmb2xpbyBmbGFnICovXG5tbS9odWdlX21lbW9yeS5jOjQ0ODM6dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXG5tbS9odWdlX21lbW9yeS5jLTQ0ODQte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDU4Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDYxMy1cdFx0XHRnb3RvIHJlcXVldWU7XG5tbS9odWdlX21lbW9yeS5jOjQ2MTQ6XHRcdGlmICghc3BsaXRfZm9saW8oZm9saW8pKSB7XG5tbS9odWdlX21lbW9yeS5jLTQ2MTUtXHRcdFx0ZGlkX3NwbGl0ID0gdHJ1ZTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ2MjItXHRcdC8qXG5tbS9odWdlX21lbW9yeS5jOjQ2MjM6XHRcdCAqIElmIHRocF91bmRlcnVzZWQoKSByZXR1cm5zIGZhbHNlLCBvciBpZiBzcGxpdF9mb2xpbygpXG5tbS9odWdlX21lbW9yeS5jOjQ2MjQ6XHRcdCAqIHN1Y2NlZWRzLCBvciBpZiBzcGxpdF9mb2xpbygpIGZhaWxzIGluIHRoZSBjYXNlIGl0IHdhc1xubW0vaHVnZV9tZW1vcnkuYy00NjI1LVx0XHQgKiB1bmRlcnVzZWQsIHRoZW4gY29uc2lkZXIgaXQgdXNlZCBhbmQgZG9uJiMzOTt0IGFkZCBpdCBiYWNrIHRvXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NjQ1LSNpZmRlZiBDT05GSUdfREVCVUdfRlNcbm1tL2h1Z2VfbWVtb3J5LmM6NDY0NjpzdGF0aWMgdm9pZCBzcGxpdF9odWdlX3BhZ2VzX2FsbCh2b2lkKVxubW0vaHVnZV9tZW1vcnkuYy00NjQ3LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ2ODItXHRcdFx0bnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jOjQ2ODM6XHRcdFx0aWYgKCFzcGxpdF9mb2xpbyhmb2xpbykpXG5tbS9odWdlX21lbW9yeS5jLTQ2ODQtXHRcdFx0XHRzcGxpdCYjNDM7JiM0Mzs7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00Njk2PXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfbm90X3N1aXRhYmxlX2Zvcl90aHBfc3BsaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NzA5LVxubW0vaHVnZV9tZW1vcnkuYzo0NzEwOnN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDcxMS1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgdmFkZHJfZW5kLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDc3OS1cdFx0Lypcbm1tL2h1Z2VfbWVtb3J5LmM6NDc4MDpcdFx0ICogRm9yIGZvbGlvcyB3aXRoIHByaXZhdGUsIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKClcbm1tL2h1Z2VfbWVtb3J5LmMtNDc4MS1cdFx0ICogd2lsbCB0cnkgdG8gZHJvcCBpdCBiZWZvcmUgc3BsaXQgYW5kIHRoZW4gY2hlY2sgaWYgdGhlIGZvbGlvXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Nzk3LVx0XHQgICAgaW5fZm9saW9fb2Zmc2V0IFx1MDAzZT0gZm9saW9fbnJfcGFnZXMoZm9saW8pKSB7XG5tbS9odWdlX21lbW9yeS5jOjQ3OTg6XHRcdFx0aWYgKCFzcGxpdF9mb2xpb190b19vcmRlcihmb2xpbywgdGFyZ2V0X29yZGVyKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDc5OS1cdFx0XHRcdHNwbGl0JiM0MzsmIzQzOztcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4MDItXHRcdFx0XHRcdFx0XHQgICBpbl9mb2xpb19vZmZzZXQpO1xubW0vaHVnZV9tZW1vcnkuYzo0ODAzOlx0XHRcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxubW0vaHVnZV9tZW1vcnkuYy00ODA0LVx0XHRcdFx0c3BsaXQmIzQzOyYjNDM7O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDgyNi1cbm1tL2h1Z2VfbWVtb3J5LmM6NDgyNzpzdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShjb25zdCBjaGFyICpmaWxlX3BhdGgsIHBnb2ZmX3Qgb2ZmX3N0YXJ0LFxubW0vaHVnZV9tZW1vcnkuYy00ODI4LVx0XHRcdFx0cGdvZmZfdCBvZmZfZW5kLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDg3My1cdFx0aWYgKGluX2ZvbGlvX29mZnNldCBcdTAwM2MgMCB8fCBpbl9mb2xpb19vZmZzZXQgXHUwMDNlPSBucl9wYWdlcykge1xubW0vaHVnZV9tZW1vcnkuYzo0ODc0Olx0XHRcdGlmICghc3BsaXRfZm9saW9fdG9fb3JkZXIoZm9saW8sIHRhcmdldF9vcmRlcikpXG5tbS9odWdlX21lbW9yeS5jLTQ4NzUtXHRcdFx0XHRzcGxpdCYjNDM7JiM0Mzs7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODc4LVx0XHRcdFx0XHRcdFx0ICAgaW5fZm9saW9fb2Zmc2V0KTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDg3OTpcdFx0XHRpZiAoIWZvbGlvX3NwbGl0KGZvbGlvLCB0YXJnZXRfb3JkZXIsIHNwbGl0X2F0LCBOVUxMKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDg4MC1cdFx0XHRcdHNwbGl0JiM0MzsmIzQzOztcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4OTYtXG5tbS9odWdlX21lbW9yeS5jOjQ4OTc6c3RhdGljIHNzaXplX3Qgc3BsaXRfaHVnZV9wYWdlc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbm1tL2h1Z2VfbWVtb3J5LmMtNDg5OC1cdFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9wcylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ5NDQtXHRcdH1cbm1tL2h1Z2VfbWVtb3J5LmM6NDk0NTpcdFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGZpbGVfcGF0aCwgb2ZmX3N0YXJ0LCBvZmZfZW5kLFxubW0vaHVnZV9tZW1vcnkuYy00OTQ2LVx0XHRcdFx0bmV3X29yZGVyLCBpbl9mb2xpb19vZmZzZXQpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDk1NS1cdGlmIChyZXQgPT0gMSBcdTAwMjZcdTAwMjYgcGlkID09IDEpIHtcbm1tL2h1Z2VfbWVtb3J5LmM6NDk1NjpcdFx0c3BsaXRfaHVnZV9wYWdlc19hbGwoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDk1Ny1cdFx0cmV0ID0gc3RybGVuKGlucHV0X2J1Zik7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00OTYzLVxubW0vaHVnZV9tZW1vcnkuYzo0OTY0Olx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlc19waWQocGlkLCB2YWRkcl9zdGFydCwgdmFkZHJfZW5kLCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTQ5NjUtXHRcdFx0aW5fZm9saW9fb2Zmc2V0KTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ5NzMtXG5tbS9odWdlX21lbW9yeS5jOjQ5NzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3BsaXRfaHVnZV9wYWdlc19mb3BzID0ge1xubW0vaHVnZV9tZW1vcnkuYy00OTc1LVx0Lm93bmVyXHQgPSBUSElTX01PRFVMRSxcbm1tL2h1Z2VfbWVtb3J5LmM6NDk3NjpcdC53cml0ZVx0ID0gc3BsaXRfaHVnZV9wYWdlc193cml0ZSxcbm1tL2h1Z2VfbWVtb3J5LmMtNDk3Ny19O1xubW0vaHVnZV9tZW1vcnkuYy00OTc4LVxubW0vaHVnZV9tZW1vcnkuYzo0OTc5OnN0YXRpYyBpbnQgX19pbml0IHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyh2b2lkKVxubW0vaHVnZV9tZW1vcnkuYy00OTgwLXtcbm1tL2h1Z2VfbWVtb3J5LmM6NDk4MTpcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c3BsaXRfaHVnZV9wYWdlc1wmIzM0OywgMDIwMCwgTlVMTCwgTlVMTCxcbm1tL2h1Z2VfbWVtb3J5LmM6NDk4MjpcdFx0XHQgICAgXHUwMDI2c3BsaXRfaHVnZV9wYWdlc19mb3BzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDk4My1cdHJldHVybiAwO1xubW0vaHVnZV9tZW1vcnkuYy00OTg0LX1cbm1tL2h1Z2VfbWVtb3J5LmM6NDk4NTpsYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XG5tbS9odWdlX21lbW9yeS5jLTQ5ODYtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjQ5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGb2xpbyBTcGxpdHRpbmcgU3ltYm9scyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGZvbGlvIHNwbGl0dGluZyBzeW1ib2xzIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNvbGlkIGdyYXNwIG9uIHRoZW0uIEkgc2VlIGEgZmV3IGtleSBwbGF5ZXJzIGhlcmU6IGBzcGxpdF9mb2xpb190b19saXN0YCwgYGZvbGlvX3NwbGl0YCwgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCwgYGRlZmVycmVkX3NwbGl0X2ZvbGlvYCwgYW5kIGBzcGxpdF9odWdlX3BhZ2VzX3dyaXRlYCAodGhhdCBsYXN0IG9uZSwgYmVpbmcgdGhlIGRlYnVnZnMgaW50ZXJmYWNlLCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbikuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGNvdmVyIGEgc3BlY3RydW0gb2Ygc3BsaXR0aW5nIG9wZXJhdGlvbnMuIEkgc3VzcGVjdCB0aGVyZSB3aWxsIGJlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBzeW1ib2xzLiBNeSBodW5jaCBpcyB0aGF0IHRoZXkgcHJvYmFibHkgaGF2ZSBzb21lIHNoYXJlZCBmdW5jdGlvbmFsaXR5IGFuZCBwZXJoYXBzIGFyZSBjYWxsZWQgaW4gYSBzZXF1ZW5jZS4KClRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB3aGV0aGVyIGBzcGxpdF9mb2xpb2AgaXMgZGVmaW5lZCBpbmxpbmUsIG9yIHN0YXRpYy4gVGhhdCBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGZvciBvcHRpbWl6YXRpb24uIElzIGl0IHR1Y2tlZCBhd2F5IGluIGEgaGVhZGVyLCBvciBpcyBpdCBhIGxvY2FsLCBzdGF0aWMgZnVuY3Rpb24/IEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhhdCBiZWZvcmUgSSBjYW4gZHJhdyB0b28gbWFueSBjb25jbHVzaW9ucy4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGltcG9ydGFudCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzcGxpdF9mb2xpb1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTk3PWVudW0gdHZhX3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwNi1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjEwNzojZGVmaW5lIHNwbGl0X2ZvbGlvKGYpIHNwbGl0X2ZvbGlvX3RvX2xpc3QoZiwgTlVMTClcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwOC1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00Mjg9aW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDI5LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDMwOnZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQzMS1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD02ODI9c3RhdGljIGlubGluZSBpbnQgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02ODYtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo2ODc6c3RhdGljIGlubGluZSB2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzIyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBIdWdlIFBhZ2UgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIGh1Z2UgcGFnZXMgYXQgdGhlIGtlcm5lbCBsZXZlbCwgc3BlY2lmaWNhbGx5IHRoZSBzcGxpdHRpbmcgYW5kIG9yZGVyaW5nLiBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9uIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgbXVzdCByZXNpZGUgZm9yIGJyZWFraW5nIGRvd24gdGhvc2UgbWFzc2l2ZSBwYWdlcyBhbmQgaW50ZWdyYXRpbmcgdGhlbSBpbnRvIHRoZSBidWRkeSBhbGxvY2F0b3ImIzM5O3Mgb3JkZXJlZCBsaXN0cy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBncmFudWxhciBkZXRhaWxzIG9mIGZyYWdtZW50YXRpb24sIHBvdGVudGlhbCB3YXN0ZSwgYW5kIHVsdGltYXRlbHksIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGltaXphdGlvbiB3aGVuIGRlYWxpbmcgd2l0aCBodWdlIHBhZ2VzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGluc2lnaHRzIGludG8gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGh1Z2UgcGFnZSBzdHJ1Y3R1cmVzLCB0aGUgYnVkZHkgc3lzdGVtJiMzOTtzIG1ldGFkYXRhLCBhbmQgaG93IHRoZSBrZXJuZWwgbWFpbnRhaW5zIGNvbnNpc3RlbmN5IHRocm91Z2hvdXQgdGhlc2Ugb3BlcmF0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NwbGl0X2h1Z2VfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTM5OD1lbnVtIHNwbGl0X3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwMi1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQwMzppbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwNC1cdFx0dW5zaWduZWQgaW50IG5ld19vcmRlcik7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDEwPWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTItXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MTM6c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTQtXHRcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTUte1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDE2Olx0cmV0dXJuIF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgbGlzdCwgbmV3X29yZGVyKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxNy19XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MTg6c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDE5LXtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQyMDpcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBOVUxMLCBuZXdfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDIxLX1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQyMi1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQyMzpzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MjQte1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDI1Olx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIE5VTEwsIDApO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDI2LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD02NDU9c3RhdGljIGlubGluZSBpbnRcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjY0NjpzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY0Ny1cdFx0dW5zaWduZWQgaW50IG5ld19vcmRlcilcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NTEtfVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjUyOnN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY1My17XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjU2LX1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjY1NzpzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NTgte1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTgyNj1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODI3LXtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjgyODpcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBOVUxMLCBuZXdfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODI5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg9MTA9ZW51bSBwYWdlX3dhbGtfbG9jayB7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTI4LSAqXHRcdFx0cG1kX3RyYW5zX2h1Z2UoKSBwbWRzLiAgVGhleSBtYXkgc2ltcGx5IGNob29zZSB0b1xuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oOjI5OiAqXHRcdFx0c3BsaXRfaHVnZV9wYWdlKCkgaW5zdGVhZCBvZiBoYW5kbGluZyBpdCBleHBsaWNpdGx5LlxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTMwLSAqIEBwdGVfZW50cnk6XHRcdGlmIHNldCwgY2FsbGVkIGZvciBlYWNoIFBURSAobG93ZXN0LWxldmVsKSBlbnRyeVxuLS1cbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaD0yMDA9c3RhdGljIGlubGluZSB2b2lkIHNobWVtX2ZyZWV6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGZyZWV6ZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMjEwLSAqIGJleW9uZCBpX3NpemUmIzM5O3Mgbm90aW9uIG9mIEVPRiwgd2hpY2ggZmFsbG9jYXRlIGhhcyBjb21taXR0ZWQgdG8gcmVzZXJ2aW5nOlxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjIxMTogKiB3aGljaCBzcGxpdF9odWdlX3BhZ2UoKSBtdXN0IHRoZXJlZm9yZSBub3QgZGVsZXRlLiAgVGhpcyB1c2Ugb2YgYSBzaW5nbGVcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0yMTItICogXCYjMzQ7ZmFsbG9jZW5kXCYjMzQ7IHBlciBpbm9kZSBlcnJzIG9uIHRoZSBzaWRlIG9mIG5vdCBkZWxldGluZyBhIHJlc2VydmF0aW9uIHdoZW5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2NzgKCQkJCQkJCW91dHB1dDogMTc1CgkJCQkJCQl0aG91Z2h0czogNDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRIUCBEZWZlcnJlZCBTcGxpdCBRdWV1ZSBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2suIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9uczogYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBgZm9saW9fc3BsaXRgLCBgc3BsaXRfZm9saW9fdG9fbGlzdGAsIGBmb2xpb19zcGxpdF91bm1hcHBlZGAsIGBkZWZlcnJlZF9zcGxpdF9mb2xpb2AsIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gVGhleSYjMzk7cmUgYWxsIGluIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgdGhleSBhcmVuJiMzOTt0IHN0YXRpYyBmdW5jdGlvbnMsIGdvb2QgdG8ga25vdy4KCk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBvYnZpb3VzIG9uZSBpcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBidXQgSSBzaG91bGQgdmVyaWZ5IGlmIGl0IGhhcyBkZXBlbmRlbmNpZXMgb3Igc3ViLW9wdGlvbnMuIFRpbWUgdG8gbG9vayBpbnRvIGBtbS9LY29uZmlnYC4gWXVwLCBgbWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgcHJlc2VudC4gSXQgYGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFICZhbXA7JmFtcDsgIVBSRUVNUFRfUlRgLCBhbmQgaXQgYHNlbGVjdHMgQ09NUEFDVElPTmAsIGBYQVJSQVlfTVVMVElgLCBhbmQgYE1NX0lEYC4gQWxyaWdodCwgYW5kIGxldCYjMzk7cyBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gaXQgYnVpbGRzIHRoZSBuZWNlc3Nhcnkgb2JqZWN0cy4gWWVzLCBgb2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9gIGNvbmZpcm1zIHRoZSBpbmNsdXNpb24uIFNvLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZywgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLgoKRmluYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gZXZlcnl0aGluZyBhbGlnbnMgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2UgKFRIUCkgZGVmZXJyZWQgc3BsaXQgcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCByZWZjb3VudCBmcmVlemUgbG9naWMgd2hlbiBzcGxpdHRpbmcgdW5tYXBwZWQgZm9saW9zIGFuZCBpc29sYXRpbmcgZGVmZXJyZWQgc3BsaXQgTFJVIGl0ZW1zLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjb3JyZWN0IOKAkyB0aGF0JiMzOTtzIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyBJIGlkZW50aWZpZWQgZWFybGllci4gVGhlIGBFbmFibGVDb25maWdzYCBpcyBqdXN0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkmIzM5O20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLiBPa2F5LCBmaW5hbCBjaGVjayBhbmQgdGhlbiBpdCYjMzk7cyB0aW1lIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAgICYjMzQ7Zm9saW9fc3BsaXQmIzM0OywKICAgICYjMzQ7c3BsaXRfZm9saW9fdG9fbGlzdCYjMzQ7LAogICAgJiMzNDtmb2xpb19zcGxpdF91bm1hcHBlZCYjMzQ7LAogICAgJiMzNDtfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQmIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSwgc3BlY2lmaWNhbGx5IGhvdyBkZWZlcnJlZCBzcGxpdCBsaXN0IGxvY2tpbmcgYW5kIHJlZmNvdW50IGZyZWV6aW5nIHN5bmNocm9uaXplIGR1cmluZyBmb2xpbyBzcGxpdHRpbmcgYW5kIHNocmlua2VyIGlzb2xhdGlvbiAoZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSBhbmQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKS4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgbWVtb3J5IHJlY2xhaW0gYW5kIFRIUCBzcGxpdHRpbmcgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAgICYjMzQ7Zm9saW9fc3BsaXQmIzM0OywKICAgICYjMzQ7c3BsaXRfZm9saW9fdG9fbGlzdCYjMzQ7LAogICAgJiMzNDtmb2xpb19zcGxpdF91bm1hcHBlZCYjMzQ7LAogICAgJiMzNDtfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQmIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSwgc3BlY2lmaWNhbGx5IGhvdyBkZWZlcnJlZCBzcGxpdCBsaXN0IGxvY2tpbmcgYW5kIHJlZmNvdW50IGZyZWV6aW5nIHN5bmNocm9uaXplIGR1cmluZyBmb2xpbyBzcGxpdHRpbmcgYW5kIHNocmlua2VyIGlzb2xhdGlvbiAoZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSBhbmQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKS4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgbWVtb3J5IHJlY2xhaW0gYW5kIFRIUCBzcGxpdHRpbmcgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSBoYW5kbGluZyBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKClgIGFuZCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSgpYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHJlcGxhY2luZyBtYW51YWwgTFJVIGxvY2tpbmcgcHJpb3IgdG8gZm9saW8gcmVmIGZyZWV6aW5nIHdpdGggY2FsbHMgdG8gYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKWAgYW5kIHNraXBwaW5nIHVucmVmZXJlbmNlZCBmb2xpb3MgZHVyaW5nIGlzb2xhdGlvbi5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggZm9saW8gcmVmZXJlbmNlIGNvdW50aW5nLCBsaXN0IG1hbmFnZW1lbnQgKGBfZGVmZXJyZWRfbGlzdGApLCBhbmQgZm9saW8gZmxhZ3MgKGBQR19wYXJ0aWFsbHlfbWFwcGVkYCkuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHN0YWNrIG9yIGhlYXAgYnVmZmVycyBhcmUgYWxsb2NhdGVkIG9yIG1hbmlwdWxhdGVkLCBhbmQgbm8gdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGNvbmN1cnJlbmN5LCByZWZjb3VudCwgb3IgbGlzdCBjb3JydXB0aW9uIGJ1Z3MgaW50cm9kdWNlZCBoZXJlIHdvdWxkIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4sIExPQ0tERVAsIG9yIGtlcm5lbCBhc3NlcnRpb25zLCByYXRoZXIgdGhhbiBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3Rpb24uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIyM2JhNjJlZGUwMmY1ODE3OGJjOGQ3N2YwNTlhN2Y5MWIxMDRhZWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDowNzozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGNlZDQwMGY3MmQ0M2EuLmM4NGU4Y2JjOTg2ZDkgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMzkzMSw0MSAmIzQzOzM5MzEsMjcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG4KIAlzdHJ1Y3QgZm9saW8gKmVuZF9mb2xpbyA9IGZvbGlvX25leHQoZm9saW8pOwogCXN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDsKIAlpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwotCXN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTsKLQlib29sIGRlcXVldWVfZGVmZXJyZWQ7CiAJaW50IHJldCA9IDA7CiAKIAlWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgJmFtcDsmYW1wOyBlbmQpOwotCS8qCi0JICogSWYgdGhpcyBmb2xpbyBjYW4gYmUgb24gdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlLCBsb2NrIG91dAotCSAqIHRoZSBzaHJpbmtlciBiZWZvcmUgZnJlZXppbmcgdGhlIHJlZi4gSWYgdGhlIHNocmlua2VyIHNlZXMKLQkgKiBhIDAtcmVmIGZvbGlvLCBpdCBhc3N1bWVzIGl0IGJlYXQgZm9saW9fcHV0KCkgdG8gdGhlIGxpc3QKLQkgKiBsb2NrIGFuZCBtdXN0IGNsZWFuIHVwIHRoZSBMUlUgc3RhdGUgLSB0aGUgc2FtZSBkZXF1ZXVlIHdlCi0JICogd2lsbCBkbyBiZWxvdyBhcyBwYXJ0IG9mIHRoZSBzcGxpdC4KLQkgKi8KLQlkZXF1ZXVlX2RlZmVycmVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmYW1wOyZhbXA7IG9sZF9vcmRlciAmZ3Q7IDE7Ci0JaWYgKGRlcXVldWVfZGVmZXJyZWQpIHsKLQkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJbWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7Ci0JCWxydSA9IGxpc3RfbHJ1X2xvY2soJmFtcDtkZWZlcnJlZF9zcGxpdF9scnUsCi0JCQkJICAgIGZvbGlvX25pZChmb2xpbyksICZhbXA7bWVtY2cpOwotCX0KJiM0MzsKIAlpZiAoZm9saW9fcmVmX2ZyZWV6ZShmb2xpbywgZm9saW9fY2FjaGVfcmVmX2NvdW50KGZvbGlvKSAmIzQzOyAxKSkgewogCQlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpID0gTlVMTDsKIAkJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwogCi0JCWlmIChkZXF1ZXVlX2RlZmVycmVkKSB7Ci0JCQlfX2xpc3RfbHJ1X2RlbCgmYW1wO2RlZmVycmVkX3NwbGl0X2xydSwgbHJ1LAotCQkJCSAgICAgICAmYW1wO2ZvbGlvLSZndDtfZGVmZXJyZWRfbGlzdCwgZm9saW9fbmlkKGZvbGlvKSk7Ci0JCQlpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkgewotCQkJCWZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pOwotCQkJCW1vZF9tdGhwX3N0YXQob2xkX29yZGVyLAotCQkJCQlNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7Ci0JCQl9Ci0JCQlsaXN0X2xydV91bmxvY2sobHJ1KTsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJLyogVGFrZSBvZmYgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoaWxlIGZyb3plbiBhbmQgbWVtY2cgc2V0ICovCiYjNDM7CQlmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0CiYjNDM7CQkgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kCiYjNDM7CQkgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuCiYjNDM7CQkgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKJiM0MzsJCQlmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKJiM0MzsJCQltb2RfbXRocF9zdGF0KG9sZF9vcmRlciwKJiM0MzsJCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwogCQl9CiAKIAkJaWYgKG1hcHBpbmcpIHsKQEAgLTQwNjcsMTAgJiM0Mzs0MDUzLDYgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG4KIAkJaWYgKGNpKQogCQkJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiAJfSBlbHNlIHsKLQkJaWYgKGRlcXVldWVfZGVmZXJyZWQpIHsKLQkJCWxpc3RfbHJ1X3VubG9jayhscnUpOwotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCX0KIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCkBAIC00NTkwLDIyICYjNDM7NDU3MiwxMSBAQCBzdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCBmb2xpbywgX2RlZmVycmVkX2xpc3QpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmZyZWVhYmxlID0gY2JfYXJnOwogCi0JaWYgKGZvbGlvX3RyeV9nZXQoZm9saW8pKSB7Ci0JCWxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTsKLQkJcmV0dXJuIExSVV9SRU1PVkVEOwotCX0KJiM0MzsJLyogTG9zdCByYWNlIHRvIGZvbGlvX3B1dCgpIG9yIHRoZSBmb2xpbyBpcyB1bmRlciBmb2xpb19yZWZfZnJlZXplKCkgKi8KJiM0MzsJaWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSkKJiM0MzsJCXJldHVybiBMUlVfU0tJUDsKIAotCS8qCi0JICogV2UgbG9zdCByYWNlIHdpdGggZm9saW9fcHV0KCkuIFJlYWQgZm9saW8gc3RhdGUgYmVmb3JlIHRoZQotCSAqIGlzb2xhdGU6IGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBjaGVja3MgbGlzdF9lbXB0eSgpCi0JICogbG9ja2xlc3NseSwgc28gb25jZSByZW1vdmVkIHRoZSBmb2xpbyBjYW4gYmUgZnJlZWQgYW55IHRpbWUuCi0JICovCi0JaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKLQkJZm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7Ci0JCW1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLAotCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwotCX0KLQlsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7CiYjNDM7CWxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTsKIAlyZXR1cm4gTFJVX1JFTU9WRUQ7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdlIFBhZ2VzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBwYXRjaCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgc28gbGV0JiMzOTtzIGJyZWFrIGl0IGRvd24gbWV0aG9kaWNhbGx5LgoKRmlyc3QsIEkgc2VlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBjZW50ZXJlZCBhcm91bmQgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHN0cmVhbWxpbmluZyB0aGUgbG9ja2luZyBtZWNoYW5pc20uIEluc3RlYWQgb2YgdGhlIGN1c3RvbSBsb2NraW5nIG9mIGBkZWZlcnJlZF9zcGxpdF9scnVgIGFuZCBtYW51YWwgbWFuaXB1bGF0aW9uIG9mIGBfX2xpc3RfbHJ1X2RlbGAsIHRoZSBwYXRjaCBpcyBzd2l0Y2hpbmcgdG8gYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQmIzM5O3MgbGlrZWx5IGludHJvZHVjaW5nIGEgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBhbmQgaXRzIGJlbmVmaXRzIGNvbXBhcmVkIHRvIHRoZSBwcmV2aW91cyBhcHByb2FjaC4gVGhlIHBhdGNoIGFsc28gcmVtb3ZlcyBgUEdfcGFydGlhbGx5X21hcHBlZGAgYW5kIHVwZGF0ZXMgc3RhdHMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgc2lkZSBlZmZlY3RzIGFyZS4KCk5leHQsIEkgc2VlIGEgY2hhbmdlIGluIGBkZWZlcnJlZF9zcGxpdF9pc29sYXRlYC4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgbmV3IHJldHVybiBjb25kaXRpb24gaWYgYGZvbGlvX3RyeV9nZXQoZm9saW8pYCBmYWlsczsgaXQgbm93IHJldHVybnMgYExSVV9TS0lQYCBpbnN0ZWFkIG9mIGlzb2xhdGluZyB0aGUgcGFnZSBhbmQgY2xlYXJpbmcgc3RhdHMuIFRoaXMgaXMgbGlrZWx5IGFuIG9wdGltaXphdGlvbiB0byBhZGRyZXNzIGEgcmFjZSBjb25kaXRpb24sIG1heWJlPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dHMgd2hlcmUgYGZvbGlvX3RyeV9nZXRgIGNhbiBmYWlsIOKAkyBhIGxvc3QgcmFjZSB0byBgZm9saW9fcHV0KClgIG9yIGEgZmFpbHVyZSBkdXJpbmcgYGZvbGlvX3JlZl9mcmVlemUoKWAgcGVyaGFwcy4gVGhpcyBjaGFuZ2UgaXMgdHJ5aW5nIHRvIHByZXZlbnQgdW5uZWNlc3Nhcnkgd29yay4KClRvIGZ1bGx5IGdyYXNwIHRoZSBpbnRlbnQsIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIEkmIzM5O2xsIHJlYWNoIGZvciBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZXhwbG9yZSB0aGF0IGZ1bmN0aW9uJiMzOTtzIGltcGxlbWVudGF0aW9uIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkgbmVlZCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMgb24gdGhlIGh1Z2UgcGFnZSBzcGxpdHRpbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9mb2xpby5jPTkwPXZvaWQgX19mb2xpb19wdXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTEwMi1cdHBhZ2VfY2FjaGVfcmVsZWFzZShmb2xpbyk7XG5tbS9mb2xpby5jOjEwMzpcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vZm9saW8uYy0xMDQtXHRtZW1fY2dyb3VwX3VuY2hhcmdlKGZvbGlvKTtcbi0tXG5tbS9mb2xpby5jPTE1MT1zdGF0aWMgdm9pZCBmb2xpb19iYXRjaF9tb3ZlX2xydShzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCwgbW92ZV9mbl90IG1vdmVfZm4pXG4tLVxubW0vZm9saW8uYy0xODUtXHRcdFx0X19mb2xpb19jbGVhcl91bmV2aWN0YWJsZShmb2xpbyk7XG5tbS9mb2xpby5jOjE4NjpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL2ZvbGlvLmMtMTg3LVx0XHRcdGZiYXRjaC1cdTAwM2Vmb2xpb3NbaV0gPSBOVUxMO1xuLS1cbm1tL2ZvbGlvLmM9OTc5PXZvaWQgZm9saW9zX3B1dF9yZWZzKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zLCB1bnNpZ25lZCBpbnQgKnJlZnMpXG4tLVxubW0vZm9saW8uYy0xMDE3LVx0XHR9XG5tbS9mb2xpby5jOjEwMTg6XHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vZm9saW8uYy0xMDE5LVx0XHRfX3BhZ2VfY2FjaGVfcmVsZWFzZShmb2xpbywgXHUwMDI2bHJ1dmVjLCBcdTAwMjZmbGFncyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zOTI1PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTQyLVx0XHQvKiBUYWtlIG9mZiB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6Mzk0MzpcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jLTM5NDQtXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NDM1PWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDQwLS8qXG5tbS9odWdlX21lbW9yeS5jOjQ0NDE6ICogX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaXMgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseTpcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ0MjogKiB0aGUgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlubGluZSB3cmFwcGVyIGluIG1tL2ludGVybmFsLmhcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0My0gKiBsaW1pdHMgaXRzIGNhbGxzIHRvIHRob3NlIGZvbGlvcyB3aGljaCBtYXkgaGF2ZSBhIF9kZWZlcnJlZF9saXN0IGZvclxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0NS0gKlxubW0vaHVnZV9tZW1vcnkuYzo0NDQ2OiAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xubW0vaHVnZV9tZW1vcnkuYy00NDQ3LSAqIHplcm86IGJlY2F1c2UgZXZlbiB3aGVuIHRoZSBsaXN0X2xydSBsb2NrIGlzIGhlbGQsIGEgbm9uLWVtcHR5XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDUzLSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0NDU0OmJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9odWdlX21lbW9yeS5jLTQ0NTUte1xuLS1cbm1tL2ludGVybmFsLmg9NzM1PXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL2ludGVybmFsLmgtNzQ2LVxubW0vaW50ZXJuYWwuaDo3NDc6Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9pbnRlcm5hbC5oOjc0ODpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaW50ZXJuYWwuaC03NDkte1xuLS1cbm1tL2ludGVybmFsLmgtNzYwLVxubW0vaW50ZXJuYWwuaDo3NjE6XHRyZXR1cm4gX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL2ludGVybmFsLmgtNzYyLX1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9NjE4PXZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy02NTMtXG5tbS9tZW1jb250cm9sLXYxLmM6NjU0Olx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9tZW1jb250cm9sLXYxLmMtNjU1LVx0Zm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IDA7XG4tLVxubW0vbWVtY29udHJvbC5jPTUzMzU9c3RhdGljIHZvaWQgdW5jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXG4tLVxubW0vbWVtY29udHJvbC5jLTUzNzMtXG5tbS9tZW1jb250cm9sLmM6NTM3NDpcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01Mzc1LVx0fVxuLS1cbm1tL21lbWNvbnRyb2wuYz01NTEzPXZvaWQgbWVtX2Nncm91cF9taWdyYXRlKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTU1NC1cdC8qIFdhcm5pbmcgc2hvdWxkIG5ldmVyIGhhcHBlbiwgc28gZG9uJiMzOTt0IHdvcnJ5IGFib3V0IHJlZmNvdW50IG5vbi0wICovXG5tbS9tZW1jb250cm9sLmM6NTU1NTpcdFdBUk5fT05fT05DRShmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KG9sZCkpO1xubW0vbWVtY29udHJvbC5jLTU1NTYtXHRvbGQtXHUwMDNlbWVtY2dfZGF0YSA9IDA7XG4tLVxubW0vbWlncmF0ZS5jPTU4Mz1zdGF0aWMgaW50IF9fZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL21pZ3JhdGUuYy01OTctXHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbm1tL21pZ3JhdGUuYzo1OTg6XHRcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9taWdyYXRlLmMtNTk5LVx0XHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgZXhwZWN0ZWRfY291bnQpO1xuLS1cbm1tL21pZ3JhdGUuYy02MzAtXHQvKiBUYWtlIG9mZiBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xubW0vbWlncmF0ZS5jOjYzMTpcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vbWlncmF0ZS5jLTYzMi1cbi0tXG5tbS92bXNjYW4uYz0xMDU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xNTA2LVxubW0vdm1zY2FuLmM6MTUwNzpcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS92bXNjYW4uYy0xNTA4LVx0XHRpZiAoZm9saW9fYmF0Y2hfYWRkKFx1MDAyNmZyZWVfZm9saW9zLCBmb2xpbykgPT0gMCkge1xuLS1cbm1tL3Ztc2Nhbi5jPTE4NjY9c3RhdGljIHVuc2lnbmVkIGludCBtb3ZlX2ZvbGlvc190b19scnUoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS92bXNjYW4uYy0xOTAxLVxubW0vdm1zY2FuLmM6MTkwMjpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL3Ztc2Nhbi5jLTE5MDMtXHRcdFx0aWYgKGZvbGlvX2JhdGNoX2FkZChcdTAwMjZmcmVlX2ZvbGlvcywgZm9saW8pID09IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIGZpbGUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDQ0NDAgdG8gNDYwMC4gVGhhdCByYW5nZSB1c3VhbGx5IGNvdmVycyBhIGZhaXJseSBzdWJzdGFudGlhbCBzZWN0aW9uLCBsaWtlbHkgaW52b2x2aW5nIGVpdGhlciBzb21lIGNvcmUgYWxsb2NhdGlvbiBsb2dpYyBvciBtYW5pcHVsYXRpb24gcmVsYXRlZCB0byBodWdlIHBhZ2VzLCBnaXZlbiB0aGUgZmlsZSYjMzk7cyBuYW1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiBkZXRhaWwsIHNvIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgY2FyZWZ1bGx5IHJlYWRpbmcgdGhyb3VnaCB0aGF0IHNlY3Rpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBhbnkgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMuIE15IGludGVudCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIGltcHJvdmVtZW50LCBhbmQgcHJvYmFibHkgYWxzbyB0byByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCBhbnkgY2hhbmdlcyBzaW5jZSB0aGUgbGFzdCB0aW1lIEkgbG9va2VkIGF0IHRoaXMgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NDQwOlx0LypcbjQ0NDE6XHQgKiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpcyBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5OlxuNDQ0MjpcdCAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxuNDQ0MzpcdCAqIGxpbWl0cyBpdHMgY2FsbHMgdG8gdGhvc2UgZm9saW9zIHdoaWNoIG1heSBoYXZlIGEgX2RlZmVycmVkX2xpc3QgZm9yXG40NDQ0Olx0ICogcXVldWVpbmcgVEhQIHNwbGl0cywgYW5kIHRoYXQgbGlzdCBpcyAocmFjaWx5IG9ic2VydmVkIHRvIGJlKSBub24tZW1wdHkuXG40NDQ1Olx0ICpcbjQ0NDY6XHQgKiBJdCBpcyB1bnNhZmUgdG8gY2FsbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgdW50aWwgZm9saW8gcmVmY291bnQgaXNcbjQ0NDc6XHQgKiB6ZXJvOiBiZWNhdXNlIGV2ZW4gd2hlbiB0aGUgbGlzdF9scnUgbG9jayBpcyBoZWxkLCBhIG5vbi1lbXB0eVxuNDQ0ODpcdCAqIF9kZWZlcnJlZF9saXN0IG1pZ2h0IGJlIGluIHVzZSBvbiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkmIzM5O3MgdW5sb2NrZWRcbjQ0NDk6XHQgKiBvbi1zdGFjayBsaXN0LlxuNDQ1MDpcdCAqXG40NDUxOlx0ICogVGhlIGxpc3RfbHJ1IHN1Ymxpc3QgaXMgZGV0ZXJtaW5lZCBieSBmb2xpbyYjMzk7cyBtZW1jZzogaXQgaXMgdGhlcmVmb3JlXG40NDUyOlx0ICogaW1wb3J0YW50IHRvIHVucXVldWUgZGVmZXJyZWQgc3BsaXQgYmVmb3JlIGNoYW5naW5nIGZvbGlvIG1lbWNnLlxuNDQ1MzpcdCAqL1xuNDQ1NDpcdGJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG40NDU1Olx0e1xuNDQ1NjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNDQ1NzpcdFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1O1xuNDQ1ODpcdFx0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XG40NDU5Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuNDQ2MDpcdFx0Ym9vbCB1bnF1ZXVlZCA9IGZhbHNlO1xuNDQ2MTpcdFxuNDQ2MjpcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xuNDQ2MzpcdFx0V0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2ICFmb2xpb19tZW1jZ19jaGFyZ2VkKGZvbGlvKSk7XG40NDY0Olx0XG40NDY1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG40NDY2Olx0XHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbjQ0Njc6XHRcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgXHUwMDI2bWVtY2csIFx1MDAyNmZsYWdzKTtcbjQ0Njg6XHRcdGlmIChfX2xpc3RfbHJ1X2RlbChcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCkpIHtcbjQ0Njk6XHRcdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcbjQ0NzA6XHRcdFx0XHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbjQ0NzE6XHRcdFx0XHRtb2RfbXRocF9zdGF0KGZvbGlvX29yZGVyKGZvbGlvKSxcbjQ0NzI6XHRcdFx0XHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbjQ0NzM6XHRcdFx0fVxuNDQ3NDpcdFx0XHR1bnF1ZXVlZCA9IHRydWU7XG40NDc1Olx0XHR9XG40NDc2Olx0XHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbjQ0Nzc6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuNDQ3ODpcdFxuNDQ3OTpcdFx0cmV0dXJuIHVucXVldWVkO1x0LyogdXNlZnVsIGZvciBkZWJ1ZyB3YXJuaW5ncyAqL1xuNDQ4MDpcdH1cbjQ0ODE6XHRcbjQ0ODI6XHQvKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbiYjMzk7dCBjbGVhciBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgKi9cbjQ0ODM6XHR2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcbjQ0ODQ6XHR7XG40NDg1Olx0XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XG40NDg2Olx0XHRpbnQgbmlkO1xuNDQ4NzpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNDQ4ODpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjQ0ODk6XHRcbjQ0OTA6XHRcdC8qXG40NDkxOlx0XHQgKiBPcmRlciAxIGZvbGlvcyBoYXZlIG5vIHNwYWNlIGZvciBhIGRlZmVycmVkIGxpc3QsIGJ1dCB3ZSBhbHNvXG40NDkyOlx0XHQgKiB3b24mIzM5O3Qgd2FzdGUgbXVjaCBtZW1vcnkgYnkgbm90IGFkZGluZyB0aGVtIHRvIHRoZSBkZWZlcnJlZCBsaXN0LlxuNDQ5MzpcdFx0ICovXG40NDk0Olx0XHRpZiAoZm9saW9fb3JkZXIoZm9saW8pIFx1MDAzYz0gMSlcbjQ0OTU6XHRcdFx0cmV0dXJuO1xuNDQ5NjpcdFxuNDQ5NzpcdFx0aWYgKCFwYXJ0aWFsbHlfbWFwcGVkIFx1MDAyNlx1MDAyNiAhc3BsaXRfdW5kZXJ1c2VkX3RocClcbjQ0OTg6XHRcdFx0cmV0dXJuO1xuNDQ5OTpcdFxuNDUwMDpcdFx0LypcbjQ1MDE6XHRcdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxuNDUwMjpcdFx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcbjQ1MDM6XHRcdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcbjQ1MDQ6XHRcdCAqIHVubmVjZXNzYXJ5IHRvIGhhbmRsZSBpdCBhZ2FpbiBpbiB0aGUgc2hyaW5rZXIsIHNvIGV4Y2x1ZGluZ1xuNDUwNTpcdFx0ICogc3dhcGNhY2hlIGhlcmUgbWF5IHN0aWxsIGJlIGEgdXNlZnVsIG9wdGltaXphdGlvbi5cbjQ1MDY6XHRcdCAqL1xuNDUwNzpcdFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSlcbjQ1MDg6XHRcdFx0cmV0dXJuO1xuNDUwOTpcdFxuNDUxMDpcdFx0bmlkID0gZm9saW9fbmlkKGZvbGlvKTtcbjQ1MTE6XHRcbjQ1MTI6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjQ1MTM6XHRcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuNDUxNDpcdFx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcdTAwMjZtZW1jZywgXHUwMDI2ZmxhZ3MpO1xuNDUxNTpcdFx0aWYgKHBhcnRpYWxseV9tYXBwZWQpIHtcbjQ1MTY6XHRcdFx0aWYgKCFmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG40NTE3Olx0XHRcdFx0Zm9saW9fc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuNDUxODpcdFx0XHRcdGlmIChmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbykpXG40NTE5Olx0XHRcdFx0XHRjb3VudF92bV9ldmVudChUSFBfREVGRVJSRURfU1BMSVRfUEFHRSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NzQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGBtbS9odWdlX21lbW9yeS5jYCBmdW5jdGlvbnM6CgoqKkRpdmluZyBpbnRvIERlZmVycmVkIFNwbGl0IFNjYW5zIGFuZCBJc29sYXRlcyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCBhbmQgYGRlZmVycmVkX3NwbGl0X2lzb2xhdGVgIHdpdGhpbiB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIGZpbGUuIEkmIzM5O20gZ3Vlc3NpbmcgdGhlc2UgYXJlIGNydWNpYWwgZm9yIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgaHVnZSBwYWdlcyBhbmQgaGFuZGxlcyB0aGVpciBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24sIHBhcnRpY3VsYXJseSB3aGVuIGl0IGNvbWVzIHRvIGRlYWxpbmcgd2l0aCBmcmFnbWVudGF0aW9uIG9yIGNvbnRlbnRpb24uIFRoZSAmIzM0O2RlZmVycmVkJiMzNDsgcGFydCBpbW1lZGlhdGVseSBzdWdnZXN0cyBzb21lIHNvcnQgb2YgbGF6eSBldmFsdWF0aW9uIG9yIGJhY2tncm91bmQgcHJvY2Vzc2luZywgbGlrZWx5IHRvIGF2b2lkIGJsb2NraW5nIGNyaXRpY2FsIHBhdGhzLiBJJiMzOTttIGtlZW4gdG8gc2VlIGhvdyB0aGUgY29kZSBjb29yZGluYXRlcyB0aGUgY29tcGxleCBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIHBoeXNpY2FsIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsbHkgZXZlbiBOVU1BIGNvbnNpZGVyYXRpb25zIHRoYXQgYXJpc2Ugd2l0aCBodWdlIHBhZ2VzLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgY2xldmVyIGFsZ29yaXRobXMgaGVyZSwgZXNwZWNpYWxseSBpZiB0aGVzZSBmdW5jdGlvbnMgcGxheSBhIHBhcnQgaW4gbWluaW1pemluZyBUTEIgbWlzc2VzIG9yIHJlZHVjaW5nIGZyYWdtZW50YXRpb24gb3ZlciB0aW1lLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgZm9jdXNlZCBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjcml0ZXJpYSB0aGF0IHRyaWdnZXIgdGhlIGRlZmVycmVkIGFjdGlvbnMgYW5kIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCB0byBtYWludGFpbiBjb25zaXN0ZW5jeSBkdXJpbmcgdGhlc2Ugb3BlcmF0aW9ucy4gTGV0JiMzOTtzIHNlZSBob3cgc21hcnQgdGhlIGtlcm5lbCByZWFsbHkgaXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDU2MDpcdFx0XHRcdCAqL1xuNDU2MTpcdFx0XHRcdGlmICgmIzQzOyYjNDM7bnVtX2ZpbGxlZF9wYWdlcyBcdTAwM2U9IEhQQUdFX1BNRF9OUiAtIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSlcbjQ1NjI6XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbjQ1NjM6XHRcdFx0fVxuNDU2NDpcdFx0fVxuNDU2NTpcdFx0cmV0dXJuIGZhbHNlO1xuNDU2NjpcdH1cbjQ1Njc6XHRcbjQ1Njg6XHRzdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbjQ1Njk6XHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxuNDU3MDpcdFx0XHRcdFx0XHQgICAgICB2b2lkICpjYl9hcmcpXG40NTcxOlx0e1xuNDU3MjpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGNvbnRhaW5lcl9vZihpdGVtLCBzdHJ1Y3QgZm9saW8sIF9kZWZlcnJlZF9saXN0KTtcbjQ1NzM6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmZyZWVhYmxlID0gY2JfYXJnO1xuNDU3NDpcdFxuNDU3NTpcdFx0LyogTG9zdCByYWNlIHRvIGZvbGlvX3B1dCgpIG9yIHRoZSBmb2xpbyBpcyB1bmRlciBmb2xpb19yZWZfZnJlZXplKCkgKi9cbjQ1NzY6XHRcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXG40NTc3Olx0XHRcdHJldHVybiBMUlVfU0tJUDtcbjQ1Nzg6XHRcbjQ1Nzk6XHRcdGxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTtcbjQ1ODA6XHRcdHJldHVybiBMUlVfUkVNT1ZFRDtcbjQ1ODE6XHR9XG40NTgyOlx0XG40NTgzOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbjQ1ODQ6XHRcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcbjQ1ODU6XHR7XG40NTg2Olx0XHRMSVNUX0hFQUQoZGlzcG9zZSk7XG40NTg3Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqbmV4dDtcbjQ1ODg6XHRcdGludCBzcGxpdCA9IDA7XG40NTg5Olx0XHR1bnNpZ25lZCBsb25nIGlzb2xhdGVkO1xuNDU5MDpcdFxuNDU5MTpcdFx0aXNvbGF0ZWQgPSBsaXN0X2xydV9zaHJpbmtfd2Fsa19pcnEoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBzYyxcbjQ1OTI6XHRcdFx0XHRcdFx0ICAgIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUsIFx1MDAyNmRpc3Bvc2UpO1xuNDU5MzpcdFxuNDU5NDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCBuZXh0LCBcdTAwMjZkaXNwb3NlLCBfZGVmZXJyZWRfbGlzdCkge1xuNDU5NTpcdFx0XHRib29sIGRpZF9zcGxpdCA9IGZhbHNlO1xuNDU5NjpcdFx0XHRib29sIHVuZGVydXNlZCA9IGZhbHNlO1xuNDU5NzpcdFxuNDU5ODpcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0KTtcbjQ1OTk6XHRcbjQ2MDA6XHRcdFx0aWYgKCFmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG40NjAxOlx0XHRcdFx0LypcbjQ2MDI6XHRcdFx0XHQgKiBTZWUgdHJ5X3RvX21hcF91bnVzZWRfdG9femVyb3BhZ2UoKTogd2UgY2Fubm90XG40NjAzOlx0XHRcdFx0ICogb3B0aW1pemUgemVyby1maWxsZWQgcGFnZXMgYWZ0ZXIgc3BsaXR0aW5nIGFuXG40NjA0Olx0XHRcdFx0ICogbWxvY2tlZCBmb2xpby5cbjQ2MDU6XHRcdFx0XHQgKi9cbjQ2MDY6XHRcdFx0XHRpZiAoZm9saW9fdGVzdF9tbG9ja2VkKGZvbGlvKSlcbjQ2MDc6XHRcdFx0XHRcdGdvdG8gbmV4dDtcbjQ2MDg6XHRcdFx0XHR1bmRlcnVzZWQgPSB0aHBfdW5kZXJ1c2VkKGZvbGlvKTtcbjQ2MDk6XHRcdFx0XHRpZiAoIXVuZGVydXNlZClcbjQ2MTA6XHRcdFx0XHRcdGdvdG8gbmV4dDtcbjQ2MTE6XHRcdFx0fVxuNDYxMjpcdFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxuNDYxMzpcdFx0XHRcdGdvdG8gcmVxdWV1ZTtcbjQ2MTQ6XHRcdFx0aWYgKCFzcGxpdF9mb2xpbyhmb2xpbykpIHtcbjQ2MTU6XHRcdFx0XHRkaWRfc3BsaXQgPSB0cnVlO1xuNDYxNjpcdFx0XHRcdGlmICh1bmRlcnVzZWQpXG40NjE3Olx0XHRcdFx0XHRjb3VudF92bV9ldmVudChUSFBfVU5ERVJVU0VEX1NQTElUX1BBR0UpO1xuNDYxODpcdFx0XHRcdHNwbGl0JiM0MzsmIzQzOztcbjQ2MTk6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTI5CgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDczMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2ggaXMgdGhhdCBpdCYjMzk7cyBmb2N1c2luZyBvbiBzaW1wbGlmeWluZyB0aGUgbG9ja2luZyBhbmQgZGVmZXJyZWQgc3BsaXQgcXVldWUgaGFuZGxpbmcgd2l0aGluIHRoZSBodWdlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEl0IGxvb2tzIGxpa2UgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGFuZCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZWAuCgpFc3NlbnRpYWxseSwgSSBzZWUgYSByZWZhY3RvcmluZyBvZiB0aGUgbG9ja2luZyBvcmRlciBhbmQgbG9naWMgYXJvdW5kIGZyZWV6aW5nIGZvbGlvcyBhbmQgZGVhbGluZyB3aXRoIHBhcnRpYWxseSBtYXBwZWQgcGFnZXMgaW4gdGhlIGRlZmVycmVkIHNwbGl0IExSVS4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBMUlUgbG9jayBjb3VsZCBiZSB0YWtlbiAqYmVmb3JlKiBmcmVlemluZyB0aGUgcmVmY291bnQsIHdoaWNoIGhhcyBub3cgYmVlbiByZWFycmFuZ2VkIHRvIGZyZWV6ZSBmaXJzdCBhbmQgKnRoZW4qIGRlYWwgd2l0aCB0aGUgTFJVLiBBbHNvLCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZWAgaGFzIGJlZW4gc2ltcGxpZmllZCBieSBqdXN0IHJldHVybmluZyBgTFJVX1NLSVBgIG9uIGBmb2xpb190cnlfZ2V0YCBmYWlsdXJlcy4KCk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIGFueSBuZXcgcmlza3MsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3Mgc2VlOgoKKiAgIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UgaW4gYSBtYW5uZXIgdGhhdCB3b3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgVGhlIGxvZ2ljIGl0c2VsZiBkb2VzbiYjMzk7dCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCiogICBUaGVyZSBhcmVuJiMzOTt0IGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgd2hpY2ggaXMgZ29vZC4KKiAgIEkgZG9uJiMzOTt0IHNlZSBhbnkgY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWQgdG8gYm91bmRzIGNoZWNrIHZ1bG5lcmFiaWxpdGllcywgb3IgdGhlIGxlYWtpbmcgb2YgdW5pbml0aWFsaXplZCBieXRlcyB0aHJvdWdoIGV4aXN0aW5nIGJ1ZmZlcnMuCiogICBDcnVjaWFsbHksIHRoZXJlIGFyZSBubyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgb3IgaW9jdGwgY2FsbHMgdGhhdCBjb3VsZCBsZWFkIHRvIHVzZXItc3BhY2UgbGVha3MuCiogICBJJiMzOTttIGFsc28gbm90IHNlZWluZyBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IHJpc2tzIGhlcmUuCgpUaGlzIGxvb2tzIGxpa2UgcHVyZSBNTSBzeW5jaHJvbml6YXRpb246IGNoYW5nZXMgdG8gcGFnZSBzcGxpdHRpbmcsIExSVSBsaXN0IGhhbmRsaW5nLCBhbmQgbG9ja2luZy4gQWxsIHRoZSBjaGFuZ2VzIGludm9sdmUgbWFuaXB1bGF0aW5nIGxpc3QgcG9pbnRlcnMsIHBhZ2UgZmxhZ3MsIHJlZmNvdW50cywgYW5kIG1lbW9yeSBjZ3JvdXAgc3RhdHMuIFNvLCB3aXRoIHRoaXMga2luZCBvZiB3b3JrLCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgYXJlOiByYWNlIGNvbmRpdGlvbnMsIGxvY2sgb3JkZXIgcHJvYmxlbXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGRvdWJsZSBsaXN0IGRlbGV0aW9ucywgcmVmY291bnQgdW5kZXJmbG93IG9yIGxlYWtzLgoKSG93ZXZlciwgYWxsIG9mIHRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIGtpbmRzIG9mIGlzc3VlcyB0aGF0IEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtcyAoZS5nLiwgYXNzZXJ0aW9ucyBsaWtlIGBWTV9XQVJOX09OYCwgYFdBUk5fT05fT05DRWApIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gQW5kIEkgZG9uJiMzOTt0IHNlZSBhbnkgdmVjdG9yIGZvciBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGxlYWsgKnRoYXQgd291bGQgb25seSBiZSBkZXRlY3RhYmxlIGJ5IEtNU0FOKi4KClRoZXJlZm9yZSwgYmFzZWQgb24gbXkgYW5hbHlzaXMgb2YgdGhlIHBhdGNoIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIG1lbW9yeSBzYWZldHkgdG9vbHMsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuCgpTbywgdGhlIHN1bW1hcnkgaXMgdGhhdDogdGhpcyBwYXRjaCBzaW1wbGlmaWVzIGxvY2tpbmcgYW5kIGRlZmVycmVkIHNwbGl0IHF1ZXVlIGhhbmRsaW5nIGluIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoKWAgYW5kIGBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKClgIGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGhlIGNoYW5nZXMgb25seSBtYW5pcHVsYXRlIGxpc3QgcG9pbnRlcnMgKGBfZGVmZXJyZWRfbGlzdGApLCBwYWdlIGZsYWdzIChgUEdfcGFydGlhbGx5X21hcHBlZGApLCBmb2xpbyByZWZjb3VudHMsIGFuZCBtZW1vcnkgY2dyb3VwIHN0YXRzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHN0YWNrL2hlYXAgYnVmZmVycyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCwgbm9yIGFyZSB0aGVyZSBhbnkgdXNlci1zcGFjZSBjb3B5IG1lY2hhbmlzbXMgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL3BhZGRpbmcuIEFueSBjb25jdXJyZW5jeSBvciByZWZlcmVuY2UgY291bnRpbmcgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYXNzZXJ0aW9ucy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgaGFuZGxpbmcgaW4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZCgpYCBhbmQgYGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoKWAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCByZXBsYWNpbmcgbWFudWFsIExSVSBsb2NraW5nIHByaW9yIHRvIGZvbGlvIHJlZiBmcmVlemluZyB3aXRoIGNhbGxzIHRvIGBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KClgIGFuZCBza2lwcGluZyB1bnJlZmVyZW5jZWQgZm9saW9zIGR1cmluZyBpc29sYXRpb24uXG5cblRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIGZvbGlvIHJlZmVyZW5jZSBjb3VudGluZywgbGlzdCBtYW5hZ2VtZW50IChgX2RlZmVycmVkX2xpc3RgKSwgYW5kIGZvbGlvIGZsYWdzIChgUEdfcGFydGlhbGx5X21hcHBlZGApLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBvciBtYW5pcHVsYXRlZCwgYW5kIG5vIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBjb25jdXJyZW5jeSwgcmVmY291bnQsIG9yIGxpc3QgY29ycnVwdGlvbiBidWdzIGludHJvZHVjZWQgaGVyZSB3b3VsZCBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLCBMT0NLREVQLCBvciBrZXJuZWwgYXNzZXJ0aW9ucywgcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSBoYW5kbGluZyBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKClgIGFuZCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSgpYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHJlcGxhY2luZyBtYW51YWwgTFJVIGxvY2tpbmcgcHJpb3IgdG8gZm9saW8gcmVmIGZyZWV6aW5nIHdpdGggY2FsbHMgdG8gYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKWAgYW5kIHNraXBwaW5nIHVucmVmZXJlbmNlZCBmb2xpb3MgZHVyaW5nIGlzb2xhdGlvbi5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggZm9saW8gcmVmZXJlbmNlIGNvdW50aW5nLCBsaXN0IG1hbmFnZW1lbnQgKGBfZGVmZXJyZWRfbGlzdGApLCBhbmQgZm9saW8gZmxhZ3MgKGBQR19wYXJ0aWFsbHlfbWFwcGVkYCkuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHN0YWNrIG9yIGhlYXAgYnVmZmVycyBhcmUgYWxsb2NhdGVkIG9yIG1hbmlwdWxhdGVkLCBhbmQgbm8gdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGNvbmN1cnJlbmN5LCByZWZjb3VudCwgb3IgbGlzdCBjb3JydXB0aW9uIGJ1Z3MgaW50cm9kdWNlZCBoZXJlIHdvdWxkIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4sIExPQ0tERVAsIG9yIGtlcm5lbCBhc3NlcnRpb25zLCByYXRoZXIgdGhhbiBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3Rpb24uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA3OjM4LjkwMzgxMzUyMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTExOTk0MzY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJcIixcbiAgICBcImZvbGlvX3NwbGl0XCIsXG4gICAgXCJzcGxpdF9mb2xpb190b19saXN0XCIsXG4gICAgXCJmb2xpb19zcGxpdF91bm1hcHBlZFwiLFxuICAgIFwiX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0XCIsXG4gICAgXCJkZWZlcnJlZF9zcGxpdF9mb2xpb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSBoYW5kbGluZyBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKClgIGFuZCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSgpYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHJlcGxhY2luZyBtYW51YWwgTFJVIGxvY2tpbmcgcHJpb3IgdG8gZm9saW8gcmVmIGZyZWV6aW5nIHdpdGggY2FsbHMgdG8gYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKWAgYW5kIHNraXBwaW5nIHVucmVmZXJlbmNlZCBmb2xpb3MgZHVyaW5nIGlzb2xhdGlvbi5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBmb2xpbyByZWZlcmVuY2UgY291bnRpbmcsIGxpc3QgbWFuYWdlbWVudCAoYF9kZWZlcnJlZF9saXN0YCksIGFuZCBmb2xpbyBmbGFncyAoYFBHX3BhcnRpYWxseV9tYXBwZWRgKS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gc3RhY2sgb3IgaGVhcCBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgb3IgbWFuaXB1bGF0ZWQsIGFuZCBubyB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgY29uY3VycmVuY3ksIHJlZmNvdW50LCBvciBsaXN0IGNvcnJ1cHRpb24gYnVncyBpbnRyb2R1Y2VkIGhlcmUgd291bGQgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiwgTE9DS0RFUCwgb3Iga2VybmVsIGFzc2VydGlvbnMsIHJhdGhlciB0aGFuIEtNU0FOIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdGlvbi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLCBzcGVjaWZpY2FsbHkgaG93IGRlZmVycmVkIHNwbGl0IGxpc3QgbG9ja2luZyBhbmQgcmVmY291bnQgZnJlZXppbmcgc3luY2hyb25pemUgZHVyaW5nIGZvbGlvIHNwbGl0dGluZyBhbmQgc2hyaW5rZXIgaXNvbGF0aW9uIChkZWZlcnJlZF9zcGxpdF9pc29sYXRlIGFuZCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBtZW1vcnkgcmVjbGFpbSBhbmQgVEhQIHNwbGl0dGluZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA3OjM4LjkwMzgyMDc4MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMjI0MjAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIyM2JhNjJlZGUwMmY1ODE3OGJjOGQ3N2YwNTlhN2Y5MWIxMDRhZWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTA6MDc6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCBjZWQ0MDBmNzJkNDNhLi5jODRlOGNiYzk4NmQ5IDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTM5MzEsNDEgKzM5MzEsMjcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cXG4gXFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcXG4gXFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0O1xcbiBcXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xcbi1cXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XFxuLVxcdGJvb2wgZGVxdWV1ZV9kZWZlcnJlZDtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgXFx1MDAyNlxcdTAwMjYgZW5kKTtcXG4tXFx0LypcXG4tXFx0ICogSWYgdGhpcyBmb2xpbyBjYW4gYmUgb24gdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlLCBsb2NrIG91dFxcbi1cXHQgKiB0aGUgc2hyaW5rZXIgYmVmb3JlIGZyZWV6aW5nIHRoZSByZWYuIElmIHRoZSBzaHJpbmtlciBzZWVzXFxuLVxcdCAqIGEgMC1yZWYgZm9saW8sIGl0IGFzc3VtZXMgaXQgYmVhdCBmb2xpb19wdXQoKSB0byB0aGUgbGlzdFxcbi1cXHQgKiBsb2NrIGFuZCBtdXN0IGNsZWFuIHVwIHRoZSBMUlUgc3RhdGUgLSB0aGUgc2FtZSBkZXF1ZXVlIHdlXFxuLVxcdCAqIHdpbGwgZG8gYmVsb3cgYXMgcGFydCBvZiB0aGUgc3BsaXQuXFxuLVxcdCAqL1xcbi1cXHRkZXF1ZXVlX2RlZmVycmVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBvbGRfb3JkZXIgXFx1MDAzZSAxO1xcbi1cXHRpZiAoZGVxdWV1ZV9kZWZlcnJlZCkge1xcbi1cXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuLVxcbi1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdFxcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xcbi1cXHRcXHRscnUgPSBsaXN0X2xydV9sb2NrKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsXFxuLVxcdFxcdFxcdFxcdCAgICBmb2xpb19uaWQoZm9saW8pLCBcXHUwMDI2bWVtY2cpO1xcbi1cXHR9XFxuK1xcbiBcXHRpZiAoZm9saW9fcmVmX2ZyZWV6ZShmb2xpbywgZm9saW9fY2FjaGVfcmVmX2NvdW50KGZvbGlvKSArIDEpKSB7XFxuIFxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kgPSBOVUxMO1xcbiBcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XFxuIFxcbi1cXHRcXHRpZiAoZGVxdWV1ZV9kZWZlcnJlZCkge1xcbi1cXHRcXHRcXHRfX2xpc3RfbHJ1X2RlbChcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0LCBmb2xpb19uaWQoZm9saW8pKTtcXG4tXFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcXG4tXFx0XFx0XFx0XFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxuLVxcdFxcdFxcdFxcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxcbi1cXHRcXHRcXHRcXHRcXHRNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0bGlzdF9scnVfdW5sb2NrKGxydSk7XFxuLVxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHQvKiBUYWtlIG9mZiB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cXG4rXFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0XFxuK1xcdFxcdCAqIHNwbGl0cyBpdCwgc28gdGhlIHVucXVldWUgYWJvdmUgZmluZHMgYW4gZW1wdHkgbGlzdCBhbmRcXG4rXFx0XFx0ICogbGVhdmVzIFBHX3BhcnRpYWxseV9tYXBwZWQgc2V0LlxcbitcXHRcXHQgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuK1xcdFxcdFxcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xcbitcXHRcXHRcXHRtb2RfbXRocF9zdGF0KG9sZF9vcmRlcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAobWFwcGluZykge1xcbkBAIC00MDY3LDEwICs0MDUzLDYgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cXG4gXFx0XFx0aWYgKGNpKVxcbiBcXHRcXHRcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0aWYgKGRlcXVldWVfZGVmZXJyZWQpIHtcXG4tXFx0XFx0XFx0bGlzdF9scnVfdW5sb2NrKGxydSk7XFxuLVxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRcXHR9XFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXHR9XFxuIFxcbkBAIC00NTkwLDIyICs0NTcyLDExIEBAIHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCBmb2xpbywgX2RlZmVycmVkX2xpc3QpO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlYWJsZSA9IGNiX2FyZztcXG4gXFxuLVxcdGlmIChmb2xpb190cnlfZ2V0KGZvbGlvKSkge1xcbi1cXHRcXHRsaXN0X2xydV9pc29sYXRlX21vdmUobHJ1LCBpdGVtLCBmcmVlYWJsZSk7XFxuLVxcdFxcdHJldHVybiBMUlVfUkVNT1ZFRDtcXG4tXFx0fVxcbitcXHQvKiBMb3N0IHJhY2UgdG8gZm9saW9fcHV0KCkgb3IgdGhlIGZvbGlvIGlzIHVuZGVyIGZvbGlvX3JlZl9mcmVlemUoKSAqL1xcbitcXHRpZiAoIWZvbGlvX3RyeV9nZXQoZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gTFJVX1NLSVA7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBXZSBsb3N0IHJhY2Ugd2l0aCBmb2xpb19wdXQoKS4gUmVhZCBmb2xpbyBzdGF0ZSBiZWZvcmUgdGhlXFxuLVxcdCAqIGlzb2xhdGU6IGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBjaGVja3MgbGlzdF9lbXB0eSgpXFxuLVxcdCAqIGxvY2tsZXNzbHksIHNvIG9uY2UgcmVtb3ZlZCB0aGUgZm9saW8gY2FuIGJlIGZyZWVkIGFueSB0aW1lLlxcbi1cXHQgKi9cXG4tXFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcXG4tXFx0XFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxuLVxcdFxcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxcbi1cXHRcXHRcXHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XFxuLVxcdH1cXG4tXFx0bGlzdF9scnVfaXNvbGF0ZShscnUsIGl0ZW0pO1xcbitcXHRsaXN0X2xydV9pc29sYXRlX21vdmUobHJ1LCBpdGVtLCBmcmVlYWJsZSk7XFxuIFxcdHJldHVybiBMUlVfUkVNT1ZFRDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDc6NDAuNDM3MDc5Njg4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNDQ0NDEwNzMwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gICAgXCJmb2xpb19zcGxpdFwiLFxuICAgIFwic3BsaXRfZm9saW9fdG9fbGlzdFwiLFxuICAgIFwiZm9saW9fc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcIl9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdFwiLFxuICAgIFwiZGVmZXJyZWRfc3BsaXRfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLCBzcGVjaWZpY2FsbHkgaG93IGRlZmVycmVkIHNwbGl0IGxpc3QgbG9ja2luZyBhbmQgcmVmY291bnQgZnJlZXppbmcgc3luY2hyb25pemUgZHVyaW5nIGZvbGlvIHNwbGl0dGluZyBhbmQgc2hyaW5rZXIgaXNvbGF0aW9uIChkZWZlcnJlZF9zcGxpdF9pc29sYXRlIGFuZCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBtZW1vcnkgcmVjbGFpbSBhbmQgVEhQIHNwbGl0dGluZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIyM2JhNjJlZGUwMmY1ODE3OGJjOGQ3N2YwNTlhN2Y5MWIxMDRhZWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDowNzozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBjZWQ0MDBmNzJkNDNhLi5jODRlOGNiYzk4NmQ5IDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTM5MzEsNDEgKzM5MzEsMjcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cbiBcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XG4gXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG4gXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuLVx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1O1xuLVx0Ym9vbCBkZXF1ZXVlX2RlZmVycmVkO1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgXHUwMDI2XHUwMDI2IGVuZCk7XG4tXHQvKlxuLVx0ICogSWYgdGhpcyBmb2xpbyBjYW4gYmUgb24gdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlLCBsb2NrIG91dFxuLVx0ICogdGhlIHNocmlua2VyIGJlZm9yZSBmcmVlemluZyB0aGUgcmVmLiBJZiB0aGUgc2hyaW5rZXIgc2Vlc1xuLVx0ICogYSAwLXJlZiBmb2xpbywgaXQgYXNzdW1lcyBpdCBiZWF0IGZvbGlvX3B1dCgpIHRvIHRoZSBsaXN0XG4tXHQgKiBsb2NrIGFuZCBtdXN0IGNsZWFuIHVwIHRoZSBMUlUgc3RhdGUgLSB0aGUgc2FtZSBkZXF1ZXVlIHdlXG4tXHQgKiB3aWxsIGRvIGJlbG93IGFzIHBhcnQgb2YgdGhlIHNwbGl0LlxuLVx0ICovXG4tXHRkZXF1ZXVlX2RlZmVycmVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgb2xkX29yZGVyIFx1MDAzZSAxO1xuLVx0aWYgKGRlcXVldWVfZGVmZXJyZWQpIHtcbi1cdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuLVxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuLVx0XHRscnUgPSBsaXN0X2xydV9sb2NrKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSxcbi1cdFx0XHRcdCAgICBmb2xpb19uaWQoZm9saW8pLCBcdTAwMjZtZW1jZyk7XG4tXHR9XG4rXG4gXHRpZiAoZm9saW9fcmVmX2ZyZWV6ZShmb2xpbywgZm9saW9fY2FjaGVfcmVmX2NvdW50KGZvbGlvKSArIDEpKSB7XG4gXHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kgPSBOVUxMO1xuIFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4gXG4tXHRcdGlmIChkZXF1ZXVlX2RlZmVycmVkKSB7XG4tXHRcdFx0X19saXN0X2xydV9kZWwoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsIGZvbGlvX25pZChmb2xpbykpO1xuLVx0XHRcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG4tXHRcdFx0XHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbi1cdFx0XHRcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxuLVx0XHRcdFx0XHRNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XG4tXHRcdFx0fVxuLVx0XHRcdGxpc3RfbHJ1X3VubG9jayhscnUpO1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHQvKiBUYWtlIG9mZiB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cbitcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIGRlZmVycmVkX3NwbGl0X3NjYW4oKSB0YWtlcyB0aGUgZm9saW8gb2ZmIHRoZSBxdWV1ZSBiZWZvcmUgaXRcbitcdFx0ICogc3BsaXRzIGl0LCBzbyB0aGUgdW5xdWV1ZSBhYm92ZSBmaW5kcyBhbiBlbXB0eSBsaXN0IGFuZFxuK1x0XHQgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuXG4rXHRcdCAqIENsZWFyIGl0IGhlcmU6IHRoZSBmbGFnIGRvZXMgbm90IHN1cnZpdmUgdGhlIHNwbGl0LlxuK1x0XHQgKi9cbitcdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcbitcdFx0XHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbitcdFx0XHRtb2RfbXRocF9zdGF0KG9sZF9vcmRlcixcbitcdFx0XHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbiBcdFx0fVxuIFxuIFx0XHRpZiAobWFwcGluZykge1xuQEAgLTQwNjcsMTAgKzQwNTMsNiBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgblxuIFx0XHRpZiAoY2kpXG4gXHRcdFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXHR9IGVsc2Uge1xuLVx0XHRpZiAoZGVxdWV1ZV9kZWZlcnJlZCkge1xuLVx0XHRcdGxpc3RfbHJ1X3VubG9jayhscnUpO1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHR9XG4gXHRcdHJldHVybiAtRUFHQUlOO1xuIFx0fVxuIFxuQEAgLTQ1OTAsMjIgKzQ1NzIsMTEgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCBmb2xpbywgX2RlZmVycmVkX2xpc3QpO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqZnJlZWFibGUgPSBjYl9hcmc7XG4gXG4tXHRpZiAoZm9saW9fdHJ5X2dldChmb2xpbykpIHtcbi1cdFx0bGlzdF9scnVfaXNvbGF0ZV9tb3ZlKGxydSwgaXRlbSwgZnJlZWFibGUpO1xuLVx0XHRyZXR1cm4gTFJVX1JFTU9WRUQ7XG4tXHR9XG4rXHQvKiBMb3N0IHJhY2UgdG8gZm9saW9fcHV0KCkgb3IgdGhlIGZvbGlvIGlzIHVuZGVyIGZvbGlvX3JlZl9mcmVlemUoKSAqL1xuK1x0aWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSlcbitcdFx0cmV0dXJuIExSVV9TS0lQO1xuIFxuLVx0Lypcbi1cdCAqIFdlIGxvc3QgcmFjZSB3aXRoIGZvbGlvX3B1dCgpLiBSZWFkIGZvbGlvIHN0YXRlIGJlZm9yZSB0aGVcbi1cdCAqIGlzb2xhdGU6IGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBjaGVja3MgbGlzdF9lbXB0eSgpXG4tXHQgKiBsb2NrbGVzc2x5LCBzbyBvbmNlIHJlbW92ZWQgdGhlIGZvbGlvIGNhbiBiZSBmcmVlZCBhbnkgdGltZS5cbi1cdCAqL1xuLVx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcbi1cdFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4tXHRcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxuLVx0XHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbi1cdH1cbi1cdGxpc3RfbHJ1X2lzb2xhdGUobHJ1LCBpdGVtKTtcbitcdGxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTtcbiBcdHJldHVybiBMUlVfUkVNT1ZFRDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowNzo0MC40MzcxMTcxMThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjI3OTI2NzMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBIdWdlIE1lbW9yeSBQYXRjaCoqXG5cbk9rYXksIHNvIGEgcGF0Y2ggZm9yIGBtbS9odWdlX21lbW9yeS5jYCBjYW1lIGluLiBMZXQncyBnZXQgdG8gd29yayBkaXNzZWN0aW5nIHRoaXMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgbWFkZS4gSSdsbCBwdWxsIHVwIHRoZSBwYXRjaCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY29kZSBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFRpbWUgdG8gc2VlIGV4YWN0bHkgd2hhdCBoYXMgYmVlbiB0d2Vha2VkLiBJJ2xsIHVzZSBteSB1c3VhbCB0b29scyBoZXJlLiBBIHF1aWNrIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB3aWxsIHBpbnBvaW50IHRoZSByZWxldmFudCBzZWN0aW9ucyBhcm91bmQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCwgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIHByb3Bvc2VkIGZpeC4gR290dGEgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgY2hhbmdlIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgaHVnZSBtZW1vcnkgbWFuYWdlbWVudC4gUmlnaHQsIGxldCdzIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA4OjIyLjcxNjM4NzU4M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTY3NzcyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MzkxOD1zdGF0aWMgdW5zaWduZWQgaW50IGZvbGlvX2NhY2hlX3JlZl9jb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTI0LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzkyNTpzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzkyNi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHhhX3N0YXRlICp4YXMsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQwODM9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyMTItXFxubW0vaHVnZV9tZW1vcnkuYzo0MjEzOlxcdHJldCA9IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXFx1MDAyNnhhcywgbWFwcGluZyxcXG5tbS9odWdlX21lbW9yeS5jLTQyMTQtXFx0XFx0XFx0XFx0XFx0XFx0dHJ1ZSwgbGlzdCwgc3BsaXRfdHlwZSwgZW5kLCBcXHUwMDI2bnJfc2htZW1fZHJvcHBlZCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQzMDE9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQzMTMtXFx0bG9jYWxfaXJxX2Rpc2FibGUoKTtcXG5tbS9odWdlX21lbW9yeS5jOjQzMTQ6XFx0cmV0ID0gX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKGZvbGlvLCBuZXdfb3JkZXIsIFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgTlVMTCxcXG5tbS9odWdlX21lbW9yeS5jLTQzMTUtXFx0XFx0XFx0XFx0XFx0XFx0TlVMTCwgZmFsc2UsIE5VTEwsIFNQTElUX1RZUEVfVU5JRk9STSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDg6MjIuNzgyMDY5MTgyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQzMTcyNTE1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIERlZXAgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIGZpbGUgYW5kIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMzkwMCBhbGwgdGhlIHdheSB0byBhYm91dCBsaW5lIDQ2NTAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGNodW5rIG9mIHRoZSBjb2RlIHRvIGNoZXcgb24gYW5kIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcuIEkgZXhwZWN0IHRoYXQgSSdsbCBmaW5kIHRoZSBrZXkgbWVjaGFuaXNtcyBmb3IgaGFuZGxpbmcgc29tZSBjb21wbGV4IHBhcnQgb2YgdGhlIGh1Z2UgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRlY2huaXF1ZXMgdGhlIGRldmVsb3BlcnMgaGF2ZSBlbXBsb3llZCBoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGVpdGhlciBmaW5kIGEgcGFydGljdWxhcmx5IGNsZXZlciBkYXRhIHN0cnVjdHVyZSwgYW4gZWZmaWNpZW50IGxvY2tpbmcgc3RyYXRlZ3ksIG9yIG1heWJlIGV2ZW4gYSBub3ZlbCBhcHByb2FjaCB0byBhZGRyZXNzaW5nIGEgc3BlY2lmaWMgcGVyZm9ybWFuY2UgYm90dGxlbmVjay4gVGltZSB0byBmaXJlIHVwIHRoZSBlZGl0b3IgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGxvZ2ljIVxuXG5cbiIsIklucHV0VG9rZW5zIjozNzc2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDg6NDcuMDk5MzIyNTQ2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzkyMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzkyMDpcXHRcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKVxcbjM5MjE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzkyMjpcXHRcXHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjM5MjM6XFx0fVxcbjM5MjQ6XFx0XFxuMzkyNTpcXHRzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbjM5MjY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxcbjM5Mjc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgYm9vbCBkb19scnUsXFxuMzkyODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGVudW0gc3BsaXRfdHlwZSBzcGxpdF90eXBlLFxcbjM5Mjk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBwZ29mZl90IGVuZCwgaW50ICpucl9zaG1lbV9kcm9wcGVkKVxcbjM5MzA6XFx0e1xcbjM5MzE6XFx0XFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcXG4zOTMyOlxcdFxcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDtcXG4zOTMzOlxcdFxcdGludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XFxuMzkzNDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4zOTM1OlxcdFxcbjM5MzY6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFtYXBwaW5nIFxcdTAwMjZcXHUwMDI2IGVuZCk7XFxuMzkzNzpcXHRcXG4zOTM4OlxcdFxcdGlmIChmb2xpb19yZWZfZnJlZXplKGZvbGlvLCBmb2xpb19jYWNoZV9yZWZfY291bnQoZm9saW8pICsgMSkpIHtcXG4zOTM5OlxcdFxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kgPSBOVUxMO1xcbjM5NDA6XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbjM5NDE6XFx0XFxuMzk0MjpcXHRcXHRcXHQvKiBUYWtlIG9mZiB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cXG4zOTQzOlxcdFxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbjM5NDQ6XFx0XFxuMzk0NTpcXHRcXHRcXHQvKlxcbjM5NDY6XFx0XFx0XFx0ICogZGVmZXJyZWRfc3BsaXRfc2NhbigpIHRha2VzIHRoZSBmb2xpbyBvZmYgdGhlIHF1ZXVlIGJlZm9yZSBpdFxcbjM5NDc6XFx0XFx0XFx0ICogc3BsaXRzIGl0LCBzbyB0aGUgdW5xdWV1ZSBhYm92ZSBmaW5kcyBhbiBlbXB0eSBsaXN0IGFuZFxcbjM5NDg6XFx0XFx0XFx0ICogbGVhdmVzIFBHX3BhcnRpYWxseV9tYXBwZWQgc2V0LlxcbjM5NDk6XFx0XFx0XFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXFxuMzk1MDpcXHRcXHRcXHQgKi9cXG4zOTUxOlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuMzk1MjpcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG4zOTUzOlxcdFxcdFxcdFxcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxcbjM5NTQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xcbjM5NTU6XFx0XFx0XFx0fVxcbjM5NTY6XFx0XFxuMzk1NzpcXHRcXHRcXHRpZiAobWFwcGluZykge1xcbjM5NTg6XFx0XFx0XFx0XFx0aW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjM5NTk6XFx0XFxuMzk2MDpcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9wbWRfbWFwcGFibGUoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuMzk2MTpcXHRcXHRcXHRcXHQgICAgbmV3X29yZGVyIFxcdTAwM2MgSFBBR0VfUE1EX09SREVSKSB7XFxuMzk2MjpcXHRcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSkge1xcbjM5NjM6XFx0XFx0XFx0XFx0XFx0XFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLFxcbjM5NjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0TlJfU0hNRU1fVEhQUywgLW5yKTtcXG4zOTY1OlxcdFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMzk2NjpcXHRcXHRcXHRcXHRcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sXFxuMzk2NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHROUl9GSUxFX1RIUFMsIC1ucik7XFxuMzk2ODpcXHRcXHRcXHRcXHRcXHR9XFxuMzk2OTpcXHRcXHRcXHRcXHR9XFxuMzk3MDpcXHRcXHRcXHR9XFxuMzk3MTpcXHRcXG4zOTcyOlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG4zOTczOlxcdFxcdFxcdFxcdGlmIChtYXBwaW5nKSB7XFxuMzk3NDpcXHRcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8obWFwcGluZywgZm9saW8pO1xcbjM5NzU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzk3NjpcXHRcXHRcXHRcXHR9XFxuMzk3NzpcXHRcXG4zOTc4OlxcdFxcdFxcdFxcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XFxuMzk3OTpcXHRcXHRcXHR9XFxuMzk4MDpcXHRcXG4zOTgxOlxcdFxcdFxcdC8qIGxvY2sgbHJ1IGxpc3QvUGFnZUNvbXBvdW5kLCByZWYgZnJvemVuIGJ5IHBhZ2VfcmVmX2ZyZWV6ZSAqL1xcbjM5ODI6XFx0XFx0XFx0aWYgKGRvX2xydSlcXG4zOTgzOlxcdFxcdFxcdFxcdGxydXZlYyA9IGZvbGlvX2xydXZlY19sb2NrKGZvbGlvKTtcXG4zOTg0OlxcdFxcbjM5ODU6XFx0XFx0XFx0cmV0ID0gX19zcGxpdF91bm1hcHBlZF9mb2xpbyhmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgeGFzLFxcbjM5ODY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBtYXBwaW5nLCBzcGxpdF90eXBlKTtcXG4zOTg3OlxcdFxcbjM5ODg6XFx0XFx0XFx0LypcXG4zOTg5OlxcdFxcdFxcdCAqIFVuZnJlZXplIGFmdGVyLXNwbGl0IGZvbGlvcyBhbmQgcHV0IHRoZW0gYmFjayB0byB0aGUgcmlnaHRcXG4zOTkwOlxcdFxcdFxcdCAqIGxpc3QuIEBmb2xpbyBzaG91bGQgYmUga2VwdCBmcm96b24gdW50aWwgcGFnZSBjYWNoZVxcbjM5OTE6XFx0XFx0XFx0ICogZW50cmllcyBhcmUgdXBkYXRlZCB3aXRoIGFsbCB0aGUgb3RoZXIgYWZ0ZXItc3BsaXQgZm9saW9zXFxuMzk5MjpcXHRcXHRcXHQgKiB0byBwcmV2ZW50IG90aGVycyBzZWVpbmcgc3RhbGUgcGFnZSBjYWNoZSBlbnRyaWVzLlxcbjM5OTM6XFx0XFx0XFx0ICogQXMgYSByZXN1bHQsIG5ld19mb2xpbyBzdGFydHMgZnJvbSB0aGUgbmV4dCBmb2xpbyBvZlxcbjM5OTQ6XFx0XFx0XFx0ICogQGZvbGlvLlxcbjM5OTU6XFx0XFx0XFx0ICovXFxuMzk5NjpcXHRcXHRcXHRmb3IgKG5ld19mb2xpbyA9IGZvbGlvX25leHQoZm9saW8pOyBuZXdfZm9saW8gIT0gZW5kX2ZvbGlvO1xcbjM5OTc6XFx0XFx0XFx0ICAgICBuZXdfZm9saW8gPSBuZXh0KSB7XFxuMzk5ODpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMobmV3X2ZvbGlvKTtcXG4zOTk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowODo0Ny4wOTk1NDYzNTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDg2NTYwMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25jZXB0cywgcHJlc2VudGVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIHRvcGljOlxuXG4qKkV4YW1pbmluZyBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZWAgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCoqXG5cbkFscmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIGFuZCBkaWcgaW50byB0aG9zZSB0d28gZnVuY3Rpb24gbmFtZXM6IGBkZWZlcnJlZF9zcGxpdF9pc29sYXRlYCBhbmQgYGRlZmVycmVkX3NwbGl0X3NjYW5gLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhleSBwcm9iYWJseSBvcGVyYXRlIG9uIHNvbWUga2luZCBvZiBkYXRhIHN0cnVjdHVyZSwgbWF5YmUgYSBzZWdtZW50ZWQgb25lLCBhbmQgdGhleSBsaWtlbHkgcmVwcmVzZW50IG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIHNlZ21lbnRzIHRoYXQgYXJlIG5vdCBpbnN0YW50bHkgcHJvY2Vzc2VkLiBUaGUgXCJkZWZlcnJlZFwiIHBhcnQgaW1tZWRpYXRlbHkgc2NyZWFtcyBsYXp5IGV2YWx1YXRpb24gb3IgcGVyaGFwcyBhc3luY2hyb25vdXMgZXhlY3V0aW9uLCBjb3JyZWN0PyBUaGV5IGFyZSBwcm9iYWJseSB0cnlpbmcgdG8gb3B0aW1pemUgc29tZSBwaXBlbGluZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byBzcGxpdHRpbmcgYSBkYXRhc2V0IGZvciBwYXJhbGxlbCBwcm9jZXNzaW5nLiBUaGUgbmFtaW5nIHN1Z2dlc3RzIHRoYXQgdGhlIGFjdHVhbCBzcGxpdHRpbmcgbWlnaHQgbm90IG9jY3VyIGltbWVkaWF0ZWx5LCBidXQgcmF0aGVyIGJlIHNjaGVkdWxlZCBvciB0cmlnZ2VyZWQgbGF0ZXIsIHByb2JhYmx5IHdoZW4gdGhlIGRhdGEgaXMgbmVlZGVkLlxuXG5JJ20gYmV0dGluZyBgaXNvbGF0ZWAgaW1wbGllcyBzZXBhcmF0aW5nIG9uZSBzZWdtZW50LCBvciBvbmUgZWxlbWVudCBmcm9tIGEgc3BsaXQgKG9yIGdyb3VwIG9mIHNwbGl0cyksIGZvciBpbmRlcGVuZGVudCBjb21wdXRhdGlvbi4gSXQgbWlnaHQgYmUgdXNlZCBmb3Igb3BlcmF0aW9ucyB3aGVyZSBhIHNpbmdsZSBzcGxpdCBuZWVkcyBzcGVjaWFsIHByb2Nlc3NpbmcuIFRoZSB3b3JkIFwiaXNvbGF0ZVwiIHNlZW1zIHRvIHN1Z2dlc3QgdGhhdCB5b3UgbmVlZCB0byBiZSBhYmxlIHRvIHB1bGwgYSBwb3J0aW9uIGF3YXkgZnJvbSB0aGUgcmVzdCBvZiB0aGUgd29yay5cblxuYFNjYW5gIG9uIHRoZSBvdGhlciBoYW5kLCBtYWtlcyBtZSB0aGluayB0aGF0IHRoZSBkYXRhIGlzIHN0cmVhbWVkIG9yIGFjY2Vzc2VkIHNlcmlhbGx5LiBNYXliZSBpdCByZXByZXNlbnRzIGFuIGl0ZXJhdGl2ZSBvcGVyYXRpb24gYWNyb3NzIG11bHRpcGxlIHNlZ21lbnRzIG9yIGEgc2VxdWVudGlhbCBhcHBsaWNhdGlvbiBvZiBzb21ldGhpbmcuIFRoZSBcInNjYW5cIiBsaWtlbHkgbWVhbnMgd2UncmUgcGVyZm9ybWluZyBzb21lIGtpbmQgb2YgY3VtdWxhdGl2ZSBjYWxjdWxhdGlvbiBvciB0cmFuc2Zvcm1hdGlvbiBhcyB3ZSBzdGVwIHRocm91Z2ggdGhvc2Ugc3BsaXRzLiBJdCBjb3VsZCBiZSBzb21ldGhpbmcgbGlrZSBhIHJ1bm5pbmcgc3VtLCBhIHJvbGxpbmcgYXZlcmFnZSwgb3IgbWF5YmUgZXZlbiBhIHNsaWRpbmcgd2luZG93IG9wZXJhdGlvbi4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gb3BlcmF0aW9ucyB0aGF0IGRlcGVuZCBvbiBwcmV2aW91cyByZXN1bHRzLlxuXG5JJ2Qgd2FudCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aGVpciBpbnB1dHMgYW5kIG91dHB1dHMuIFdoYXQga2luZCBvZiBkYXRhIGFyZSB0aGV5IHdvcmtpbmcgd2l0aD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBkaXN0cmlidXRlZCBzeXN0ZW0/IFdoYXQgaXMgdGhlIGdvYWwgb2Ygc3BsaXR0aW5nIHRoZSBkYXRhIGluIHRoZSBmaXJzdCBwbGFjZT8gQW5kLCBtb3N0IGltcG9ydGFudGx5LCB3aGVyZSBhcmUgdGhlIGNvbXB1dGF0aW9uYWwgYm90dGxlbmVja3MgdGhhdCBuZWNlc3NpdGF0ZSB0aGVzZSBcImRlZmVycmVkXCIgb3BlcmF0aW9ucz8gQ29udGV4dCB3b3VsZCBzb2xpZGlmeSBteSBpbml0aWFsIGh5cG90aGVzaXMsIHdoaWNoLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgSSBob3BlIGlzIHJlYXNvbmFibHkgYWNjdXJhdGUhIEkgdGhpbmsgSSBhbSBsb29raW5nIGF0IHNvbWUgc29ydCBvZiBkYXRhIHByb2Nlc3Npbmcgc3RyYXRlZ3ksIHdpdGggYSBmb2N1cyBvbiBtYXhpbWl6aW5nIHBhcmFsbGVsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDg6NTEuNTg2MTA4MjI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDU2MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDU2MDpcXHRcXHRcXHRcXHQgKi9cXG40NTYxOlxcdFxcdFxcdFxcdGlmICgrK251bV9maWxsZWRfcGFnZXMgXFx1MDAzZT0gSFBBR0VfUE1EX05SIC0ga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lKVxcbjQ1NjI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjQ1NjM6XFx0XFx0XFx0fVxcbjQ1NjQ6XFx0XFx0fVxcbjQ1NjU6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjQ1NjY6XFx0fVxcbjQ1Njc6XFx0XFxuNDU2ODpcXHRzdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG40NTY5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSxcXG40NTcwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmNiX2FyZylcXG40NTcxOlxcdHtcXG40NTcyOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IGZvbGlvLCBfZGVmZXJyZWRfbGlzdCk7XFxuNDU3MzpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlYWJsZSA9IGNiX2FyZztcXG40NTc0OlxcdFxcbjQ1NzU6XFx0XFx0LyogTG9zdCByYWNlIHRvIGZvbGlvX3B1dCgpIG9yIHRoZSBmb2xpbyBpcyB1bmRlciBmb2xpb19yZWZfZnJlZXplKCkgKi9cXG40NTc2OlxcdFxcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXFxuNDU3NzpcXHRcXHRcXHRyZXR1cm4gTFJVX1NLSVA7XFxuNDU3ODpcXHRcXG40NTc5OlxcdFxcdGxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTtcXG40NTgwOlxcdFxcdHJldHVybiBMUlVfUkVNT1ZFRDtcXG40NTgxOlxcdH1cXG40NTgyOlxcdFxcbjQ1ODM6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG40NTg0OlxcdFxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuNDU4NTpcXHR7XFxuNDU4NjpcXHRcXHRMSVNUX0hFQUQoZGlzcG9zZSk7XFxuNDU4NzpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqbmV4dDtcXG40NTg4OlxcdFxcdGludCBzcGxpdCA9IDA7XFxuNDU4OTpcXHRcXHR1bnNpZ25lZCBsb25nIGlzb2xhdGVkO1xcbjQ1OTA6XFx0XFxuNDU5MTpcXHRcXHRpc29sYXRlZCA9IGxpc3RfbHJ1X3Nocmlua193YWxrX2lycShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBzYyxcXG40NTkyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBkZWZlcnJlZF9zcGxpdF9pc29sYXRlLCBcXHUwMDI2ZGlzcG9zZSk7XFxuNDU5MzpcXHRcXG40NTk0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXFx1MDAyNmRpc3Bvc2UsIF9kZWZlcnJlZF9saXN0KSB7XFxuNDU5NTpcXHRcXHRcXHRib29sIGRpZF9zcGxpdCA9IGZhbHNlO1xcbjQ1OTY6XFx0XFx0XFx0Ym9vbCB1bmRlcnVzZWQgPSBmYWxzZTtcXG40NTk3OlxcdFxcbjQ1OTg6XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0KTtcXG40NTk5OlxcdFxcbjQ2MDA6XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuNDYwMTpcXHRcXHRcXHRcXHQvKlxcbjQ2MDI6XFx0XFx0XFx0XFx0ICogU2VlIHRyeV90b19tYXBfdW51c2VkX3RvX3plcm9wYWdlKCk6IHdlIGNhbm5vdFxcbjQ2MDM6XFx0XFx0XFx0XFx0ICogb3B0aW1pemUgemVyby1maWxsZWQgcGFnZXMgYWZ0ZXIgc3BsaXR0aW5nIGFuXFxuNDYwNDpcXHRcXHRcXHRcXHQgKiBtbG9ja2VkIGZvbGlvLlxcbjQ2MDU6XFx0XFx0XFx0XFx0ICovXFxuNDYwNjpcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9tbG9ja2VkKGZvbGlvKSlcXG40NjA3OlxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG40NjA4OlxcdFxcdFxcdFxcdHVuZGVydXNlZCA9IHRocF91bmRlcnVzZWQoZm9saW8pO1xcbjQ2MDk6XFx0XFx0XFx0XFx0aWYgKCF1bmRlcnVzZWQpXFxuNDYxMDpcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuNDYxMTpcXHRcXHRcXHR9XFxuNDYxMjpcXHRcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxcbjQ2MTM6XFx0XFx0XFx0XFx0Z290byByZXF1ZXVlO1xcbjQ2MTQ6XFx0XFx0XFx0aWYgKCFzcGxpdF9mb2xpbyhmb2xpbykpIHtcXG40NjE1OlxcdFxcdFxcdFxcdGRpZF9zcGxpdCA9IHRydWU7XFxuNDYxNjpcXHRcXHRcXHRcXHRpZiAodW5kZXJ1c2VkKVxcbjQ2MTc6XFx0XFx0XFx0XFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX1VOREVSVVNFRF9TUExJVF9QQUdFKTtcXG40NjE4OlxcdFxcdFxcdFxcdHNwbGl0Kys7XFxuNDYxOTpcXHRcXHRcXHR9XFxuNDYyMDpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjQ2MjE6XFx0bmV4dDpcXG40NjIyOlxcdFxcdFxcdC8qXFxuNDYyMzpcXHRcXHRcXHQgKiBJZiB0aHBfdW5kZXJ1c2VkKCkgcmV0dXJucyBmYWxzZSwgb3IgaWYgc3BsaXRfZm9saW8oKVxcbjQ2MjQ6XFx0XFx0XFx0ICogc3VjY2VlZHMsIG9yIGlmIHNwbGl0X2ZvbGlvKCkgZmFpbHMgaW4gdGhlIGNhc2UgaXQgd2FzXFxuNDYyNTpcXHRcXHRcXHQgKiB1bmRlcnVzZWQsIHRoZW4gY29uc2lkZXIgaXQgdXNlZCBhbmQgZG9uJ3QgYWRkIGl0IGJhY2sgdG9cXG40NjI2OlxcdFxcdFxcdCAqIHNwbGl0X3F1ZXVlLlxcbjQ2Mjc6XFx0XFx0XFx0ICovXFxuNDYyODpcXHRcXHRcXHRpZiAoIWRpZF9zcGxpdCBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuNDYyOTpcXHRyZXF1ZXVlOlxcbjQ2MzA6XFx0XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjQ2MzE6XFx0XFx0XFx0XFx0bGlzdF9scnVfYWRkX2lycShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LFxcbjQ2MzI6XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3QsXFxuNDYzMzpcXHRcXHRcXHRcXHRcXHRcXHQgZm9saW9fbmlkKGZvbGlvKSxcXG40NjM0OlxcdFxcdFxcdFxcdFxcdFxcdCBmb2xpb19tZW1jZyhmb2xpbykpO1xcbjQ2MzU6XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuNDYzNjpcXHRcXHRcXHR9XFxuNDYzNzpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjQ2Mzg6XFx0XFx0fVxcbjQ2Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA4OjUxLjU4NjMwMzQ2N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NzQyOTIxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIERlZmVycmVkIFNwbGl0IFF1ZXVlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaXQncyBkb2luZyB3aXRoaW4gdGhlIG1tL2h1Z2VfbWVtb3J5IGNvbnRleHQuIEl0J3Mgb2J2aW91c2x5IHJlbGF0ZWQgdG8gaGFuZGxpbmcgaHVnZSBwYWdlIHNwbGl0cywgYW5kIEkgbmVlZCB0byBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBkZWZlcnJhbCBtZWNoYW5pc20uIElzIGl0IGp1c3QgcmVtb3ZpbmcgZW50cmllcyBmcm9tIGEgcXVldWUsIG9yIGlzIHRoZXJlIG1vcmUgaW52b2x2ZWQ/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGltcGxpY2F0aW9ucyBmb3IgYXRvbWljaXR5LCBsb2NraW5nLCBvciB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIHRoZSBzcGxpdCBwcm9jZXNzPyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgaW1wbGVtZW50YXRpb24sIG5vdCBqdXN0IGluIGBtbS9odWdlX21lbW9yeS5jYCwgYnV0IGFueXdoZXJlIGVsc2UgaXQgbWlnaHQgYmUgY2FsbGVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLiBUaGlzIGxpa2VseSBob2xkcyB0aGUga2V5IHRvIHRoZSBzcGVjaWZpYyBsb2dpYyBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA4OjU2LjA2MDU5ODA4OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE2MDk1NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZvbGlvLmM9OTA9dm9pZCBfX2ZvbGlvX3B1dChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy0xMDItXFx0cGFnZV9jYWNoZV9yZWxlYXNlKGZvbGlvKTtcXG5tbS9mb2xpby5jOjEwMzpcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9mb2xpby5jLTEwNC1cXHRtZW1fY2dyb3VwX3VuY2hhcmdlKGZvbGlvKTtcXG4tLVxcbm1tL2ZvbGlvLmM9MTUxPXN0YXRpYyB2b2lkIGZvbGlvX2JhdGNoX21vdmVfbHJ1KHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoLCBtb3ZlX2ZuX3QgbW92ZV9mbilcXG4tLVxcbm1tL2ZvbGlvLmMtMTg1LVxcdFxcdFxcdF9fZm9saW9fY2xlYXJfdW5ldmljdGFibGUoZm9saW8pO1xcbm1tL2ZvbGlvLmM6MTg2OlxcdFxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL2ZvbGlvLmMtMTg3LVxcdFxcdFxcdGZiYXRjaC1cXHUwMDNlZm9saW9zW2ldID0gTlVMTDtcXG4tLVxcbm1tL2ZvbGlvLmM9OTc5PXZvaWQgZm9saW9zX3B1dF9yZWZzKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zLCB1bnNpZ25lZCBpbnQgKnJlZnMpXFxuLS1cXG5tbS9mb2xpby5jLTEwMTctXFx0XFx0fVxcbm1tL2ZvbGlvLmM6MTAxODpcXHRcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9mb2xpby5jLTEwMTktXFx0XFx0X19wYWdlX2NhY2hlX3JlbGVhc2UoZm9saW8sIFxcdTAwMjZscnV2ZWMsIFxcdTAwMjZmbGFncyk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM5MjU9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk0Mi1cXHRcXHQvKiBUYWtlIG9mZiB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjM5NDM6XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYy0zOTQ0LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NDM1PWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0NDAtLypcXG5tbS9odWdlX21lbW9yeS5jOjQ0NDE6ICogX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaXMgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseTpcXG5tbS9odWdlX21lbW9yeS5jOjQ0NDI6ICogdGhlIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpbmxpbmUgd3JhcHBlciBpbiBtbS9pbnRlcm5hbC5oXFxubW0vaHVnZV9tZW1vcnkuYy00NDQzLSAqIGxpbWl0cyBpdHMgY2FsbHMgdG8gdGhvc2UgZm9saW9zIHdoaWNoIG1heSBoYXZlIGEgX2RlZmVycmVkX2xpc3QgZm9yXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0NDUtICpcXG5tbS9odWdlX21lbW9yeS5jOjQ0NDY6ICogSXQgaXMgdW5zYWZlIHRvIGNhbGwgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIHVudGlsIGZvbGlvIHJlZmNvdW50IGlzXFxubW0vaHVnZV9tZW1vcnkuYy00NDQ3LSAqIHplcm86IGJlY2F1c2UgZXZlbiB3aGVuIHRoZSBsaXN0X2xydSBsb2NrIGlzIGhlbGQsIGEgbm9uLWVtcHR5XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0NTMtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0NDU0OmJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZV9tZW1vcnkuYy00NDU1LXtcXG4tLVxcbm1tL2ludGVybmFsLmg9NzM1PXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vaW50ZXJuYWwuaC03NDYtXFxubW0vaW50ZXJuYWwuaDo3NDc6Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vaW50ZXJuYWwuaDo3NDg6c3RhdGljIGlubGluZSBib29sIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9pbnRlcm5hbC5oLTc0OS17XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTc2MC1cXG5tbS9pbnRlcm5hbC5oOjc2MTpcXHRyZXR1cm4gX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9pbnRlcm5hbC5oLTc2Mi19XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9NjE4PXZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTY1My1cXG5tbS9tZW1jb250cm9sLXYxLmM6NjU0OlxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL21lbWNvbnRyb2wtdjEuYy02NTUtXFx0Zm9saW8tXFx1MDAzZW1lbWNnX2RhdGEgPSAwO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUzMzU9c3RhdGljIHZvaWQgdW5jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTM3My1cXG5tbS9tZW1jb250cm9sLmM6NTM3NDpcXHRcXHRXQVJOX09OX09OQ0UoZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbykpO1xcbm1tL21lbWNvbnRyb2wuYy01Mzc1LVxcdH1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NTEzPXZvaWQgbWVtX2Nncm91cF9taWdyYXRlKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NTU0LVxcdC8qIFdhcm5pbmcgc2hvdWxkIG5ldmVyIGhhcHBlbiwgc28gZG9uJ3Qgd29ycnkgYWJvdXQgcmVmY291bnQgbm9uLTAgKi9cXG5tbS9tZW1jb250cm9sLmM6NTU1NTpcXHRXQVJOX09OX09OQ0UoZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChvbGQpKTtcXG5tbS9tZW1jb250cm9sLmMtNTU1Ni1cXHRvbGQtXFx1MDAzZW1lbWNnX2RhdGEgPSAwO1xcbi0tXFxubW0vbWlncmF0ZS5jPTU4Mz1zdGF0aWMgaW50IF9fZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vbWlncmF0ZS5jLTU5Ny1cXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG5tbS9taWdyYXRlLmM6NTk4OlxcdFxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL21pZ3JhdGUuYy01OTktXFx0XFx0XFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCBleHBlY3RlZF9jb3VudCk7XFxuLS1cXG5tbS9taWdyYXRlLmMtNjMwLVxcdC8qIFRha2Ugb2ZmIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoaWxlIGZyb3plbiBhbmQgbWVtY2cgc2V0ICovXFxubW0vbWlncmF0ZS5jOjYzMTpcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9taWdyYXRlLmMtNjMyLVxcbi0tXFxubW0vdm1zY2FuLmM9MTA1OD1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xNTA2LVxcbm1tL3Ztc2Nhbi5jOjE1MDc6XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vdm1zY2FuLmMtMTUwOC1cXHRcXHRpZiAoZm9saW9fYmF0Y2hfYWRkKFxcdTAwMjZmcmVlX2ZvbGlvcywgZm9saW8pID09IDApIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTE4NjY9c3RhdGljIHVuc2lnbmVkIGludCBtb3ZlX2ZvbGlvc190b19scnUoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE5MDEtXFxubW0vdm1zY2FuLmM6MTkwMjpcXHRcXHRcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS92bXNjYW4uYy0xOTAzLVxcdFxcdFxcdGlmIChmb2xpb19iYXRjaF9hZGQoXFx1MDAyNmZyZWVfZm9saW9zLCBmb2xpbykgPT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowODo1Ni44NzY2OTg4MDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTIxMDQ1MzE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBmb2N1c2luZyBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24sIGFuZCBpdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgbWFuYWdpbmcgc3BsaXQgb3BlcmF0aW9ucywgZGVmZXJyZWQgb3Igb3RoZXJ3aXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCBoYW5kbGVzIHRoZSB1bnF1ZXVpbmcgcHJvY2Vzcy4gQXJlIHRoZXJlIHN1YnRsZSBsb2NraW5nIGlzc3Vlcz8gSG93IGVmZmljaWVudGx5IGRvZXMgaXQgaXRlcmF0ZSB0aHJvdWdoIHRoZSBkZWZlcnJlZCBzcGxpdHM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBJ4oCZbGwgYmUgcGF5aW5nIHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZvbGlvIHN0cnVjdHVyZXMgYW5kIGRhdGEgbW9kZWxzLCBhbmQgaG93IGl0IGhhbmRsZXMgZXJyb3JzIG9yIGVkZ2UgY2FzZXMuIEEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgdGhlIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIHNwbGl0IGxvZ2ljLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NzcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowOTowMi4wODcxNTQ4NjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ0MDpcXHQvKlxcbjQ0NDE6XFx0ICogX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaXMgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseTpcXG40NDQyOlxcdCAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxcbjQ0NDM6XFx0ICogbGltaXRzIGl0cyBjYWxscyB0byB0aG9zZSBmb2xpb3Mgd2hpY2ggbWF5IGhhdmUgYSBfZGVmZXJyZWRfbGlzdCBmb3JcXG40NDQ0OlxcdCAqIHF1ZXVlaW5nIFRIUCBzcGxpdHMsIGFuZCB0aGF0IGxpc3QgaXMgKHJhY2lseSBvYnNlcnZlZCB0byBiZSkgbm9uLWVtcHR5LlxcbjQ0NDU6XFx0ICpcXG40NDQ2OlxcdCAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xcbjQ0NDc6XFx0ICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcXG40NDQ4OlxcdCAqIF9kZWZlcnJlZF9saXN0IG1pZ2h0IGJlIGluIHVzZSBvbiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkncyB1bmxvY2tlZFxcbjQ0NDk6XFx0ICogb24tc3RhY2sgbGlzdC5cXG40NDUwOlxcdCAqXFxuNDQ1MTpcXHQgKiBUaGUgbGlzdF9scnUgc3VibGlzdCBpcyBkZXRlcm1pbmVkIGJ5IGZvbGlvJ3MgbWVtY2c6IGl0IGlzIHRoZXJlZm9yZVxcbjQ0NTI6XFx0ICogaW1wb3J0YW50IHRvIHVucXVldWUgZGVmZXJyZWQgc3BsaXQgYmVmb3JlIGNoYW5naW5nIGZvbGlvIG1lbWNnLlxcbjQ0NTM6XFx0ICovXFxuNDQ1NDpcXHRib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjQ0NTU6XFx0e1xcbjQ0NTY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjQ0NTc6XFx0XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1O1xcbjQ0NTg6XFx0XFx0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XFxuNDQ1OTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjQ0NjA6XFx0XFx0Ym9vbCB1bnF1ZXVlZCA9IGZhbHNlO1xcbjQ0NjE6XFx0XFxuNDQ2MjpcXHRcXHRXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7XFxuNDQ2MzpcXHRcXHRXQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpO1xcbjQ0NjQ6XFx0XFxuNDQ2NTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuNDQ2NjpcXHRcXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG40NDY3OlxcdFxcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFxcdTAwMjZtZW1jZywgXFx1MDAyNmZsYWdzKTtcXG40NDY4OlxcdFxcdGlmIChfX2xpc3RfbHJ1X2RlbChcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFxcdTAwMjZmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCkpIHtcXG40NDY5OlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuNDQ3MDpcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG40NDcxOlxcdFxcdFxcdFxcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxcbjQ0NzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xcbjQ0NzM6XFx0XFx0XFx0fVxcbjQ0NzQ6XFx0XFx0XFx0dW5xdWV1ZWQgPSB0cnVlO1xcbjQ0NzU6XFx0XFx0fVxcbjQ0NzY6XFx0XFx0bGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUobHJ1LCBcXHUwMDI2ZmxhZ3MpO1xcbjQ0Nzc6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuNDQ3ODpcXHRcXG40NDc5OlxcdFxcdHJldHVybiB1bnF1ZXVlZDtcXHQvKiB1c2VmdWwgZm9yIGRlYnVnIHdhcm5pbmdzICovXFxuNDQ4MDpcXHR9XFxuNDQ4MTpcXHRcXG40NDgyOlxcdC8qIHBhcnRpYWxseV9tYXBwZWQ9ZmFsc2Ugd29uJ3QgY2xlYXIgUEdfcGFydGlhbGx5X21hcHBlZCBmb2xpbyBmbGFnICovXFxuNDQ4MzpcXHR2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcXG40NDg0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDk6MDIuMDg3MzQ2OTM0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MDg3MTgzNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgTU0gVEhQIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGhvbmVzIGluIG9uIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlOiBpdCdzIGEgZGVlcCBkaXZlIGludG8gdGhlIG1tL2h1Z2VfbWVtb3J5LmMgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSwgcGFydGljdWxhcmx5IGFub255bW91cyBhbmQgbXVsdGktc2l6ZSBUSFBzIChtVEhQcyksIGFyZSBoYW5kbGVkIGR1cmluZyBkZWZlcnJlZCBzcGxpdHRpbmcuXG5cblByZXZpb3VzbHksIHRoZSBjb2RlIGluIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGhhZCBhIHNwZWNpZmljIGxvY2tpbmcgbWVjaGFuaXNtIGludm9sdmluZyBgZGVmZXJyZWRfc3BsaXRfbHJ1YCBiZWZvcmUgZnJlZXppbmcgdGhlIGZvbGlvJ3MgcmVmZXJlbmNlIGNvdW50LiBJZiBgZGVxdWV1ZV9kZWZlcnJlZGAgd2FzIHRydWUgYW5kIHRoZSBmb2xpbyB3YXMgYW5vbnltb3VzIHdpdGggYW4gb3JkZXIgZ3JlYXRlciB0aGFuIDEsIGl0IHdvdWxkIGxvY2sgdGhlIExSVSwgdGhlbiBmcmVlemUgdGhlIGZvbGlvIHJlZmVyZW5jZSBjb3VudCwgYW5kIGlmIHN1Y2Nlc3NmdWwsIHJlbW92ZSB0aGUgaXRlbSBmcm9tIHRoZSBMUlUuIEEgcmVmIGZyZWV6ZSBmYWlsdXJlIHdvdWxkIHJlc3VsdCBpbiB1bmxvY2tpbmcgdGhlIExSVSBhbmQgcmV0dXJuaW5nIC1FQUdBSU4uXG5cblRoZSBjaGFuZ2UgY2VudGVycyBhcm91bmQgYGRlZmVycmVkX3NwbGl0X2lzb2xhdGVgLCBhbmQgdGhlIHJlbW92YWwgb2YgdGhlIGV4cGxpY2l0IGxvY2tpbmcuIFRoZSBwcmV2aW91cyB2ZXJzaW9uIHRyaWVkIHRvIGdldCB0aGUgZm9saW8sIGFuZCBpZiBpdCBjb3VsZCwgaXNvbGF0ZWQgaXQgZnJvbSB0aGUgTFJVLCBvdGhlcndpc2UsIGNsZWFyZWQgdGhlIHBhcnRpYWxseSBtYXBwZWQgZmxhZyAoaWYgc2V0KSBhbmQgaXNvbGF0ZWQgaXQgZnJvbSB0aGUgTFJVLiBUaGlzIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBtb3JlIHN0cmVhbWxpbmVkIGFwcHJvYWNoLiBOb3cgYGZvbGlvX3RyeV9nZXRgIGlzIHRoZSBvbmx5IGNoZWNrIGZvciB3aGV0aGVyIHRoZSBmb2xpbyBjYW4gYmUgaXNvbGF0ZWQuIElmIGBmb2xpb190cnlfZ2V0YCBmYWlscywgdGhlIGZ1bmN0aW9uIHJldHVybnMgTFJVX1NLSVAsIGxlYXZpbmcgdGhlIGl0ZW0gb24gdGhlIExSVSwgYnV0IHRoZSBwYXJ0aWFsbHkgbWFwcGVkIGZsYWcgKnN0aWxsKiBuZWVkcyB0byBiZSBjbGVhcmVkIChpZiBzZXQpIHZpYSBgZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkYC5cblxuSW4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAsIHRoZSBtYW51YWwgbG9ja2luZyBiZWZvcmUgdGhlIHJlZiBmcmVlemUgaXMgcmVtb3ZlZC4gSW5zdGVhZCwgaXQgdXRpbGl6ZXMgYGZvbGlvX3JlZl9mcmVlemVgLiBJZiBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZWAgcnVucyBjb25jdXJyZW50bHkgd2hpbGUgYGZvbGlvX3JlZl9mcmVlemVgIGlzIGFjdGl2ZSwgYGZvbGlvX3RyeV9nZXRgIHdpbGwgZmFpbC4gYGRlZmVycmVkX3NwbGl0X2lzb2xhdGVgIHJldHVybnMgTFJVX1NLSVAsIHByZXZlbnRpbmcgcmVtb3ZhbCBmcm9tIHRoZSBMUlUuIFRoZSBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgY2FuIHNhZmVseSB1bnF1ZXVlIHRoZSBmb2xpbyB3aGlsZSByZWYgaXMgZnJvemVuIGFuZCBtZW1jZyBpcyBzZXQsIG9yIGlmIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCBoYWQgYWxyZWFkeSBpc29sYXRlZCBpdCBiZWZvcmUgYGZvbGlvX3JlZl9mcmVlemVgLCBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgZmluZHMgaXQgbm90IG9uIHRoZSBscnUsIGFuZCB0aGVuIGBmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWRgIGNsZWFycyB0aGUgZmxhZy5cblxuU28sIHRoaXMgaXMgYWxsIGFib3V0IHN5bmNocm9uaXppbmcgcmVmY291bnRpbmcgYW5kIGxvY2tpbmcgYXJvdW5kIGRlZmVycmVkIHNwbGl0cywgd2hpY2ggaXMgYSBjcml0aWNhbCBhcmVhIGZvciBjb25jdXJyZW5jeSBpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSBmb3IgVEhQcy4gV2UncmUgdGFsa2luZyBhYm91dCBkaXJlY3QgaW1wYWN0cyBvbiBtZW1vcnkgbWFuYWdlbWVudCBpdHNlbGYsIFRIUCBzcGxpdHRpbmcsIGFub255bW91cyBUSFAvbVRIUCBwYXJ0aWFsIG1hcHBpbmcsIG1lbW9yeSByZWNsYWltIHRocm91Z2ggYGRlZmVycmVkX3NwbGl0X3NjYW5gLCBgc3BsaXRfaHVnZV9wYWdlYCwgYG1hZHZpc2UoTUFEVl9ET05UTkVFRClgLCB1bm1hcHBpbmcgcGFydGlhbCBUSFAsIGFuZCBzbyBvbi5cblxuVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoaXMgaXMgYWJzb2x1dGVseSB0ZXN0YWJsZSBhbmQgcmVhY2hhYmxlLCBldmVuIGluIGEgUUVNVS1iYXNlZCBmdXp6aW5nIGVudmlyb25tZW50LiBUSFBzIGFyZSBzdGFuZGFyZCBmZWF0dXJlcy4gV2UgY2FuIHRyaWdnZXIgdGhlc2UgcGF0aHMgdGhyb3VnaCB1c2VybGFuZCBzeXNjYWxscywgc3VjaCBhcyBgbWFkdmlzZWAsIGBtcHJvdGVjdGAsIGBtdW5tYXBgLCBhcyB3ZWxsIGFzIHN0YW5kYXJkIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBwYWdlIGZhdWx0cy5cblxuSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIFRIUCBzcGxpdHRpbmcgbG9naWMsIGludGVyYWN0aW9uIHdpdGggdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlLCB0aGUgcG90ZW50aWFsIHJhY2VzIGJldHdlZW4gcGFnZSByZWNsYW1hdGlvbi9zaHJpbmtlcnMgKGBkZWZlcnJlZF9zcGxpdF9zY2FuYCksIHNwbGl0dGluZy9mcmVlaW5nIGZvbGlvcyAoYHNwbGl0X2h1Z2VfcGFnZWAsIGBzcGxpdF9mb2xpb190b19saXN0YCwgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCksIGFzIHdlbGwgYXMgdGhlIGVmZmVjdHMgb2YgYG1hZHZpc2VgLCBhbGwgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIFRoZXNlIGFyZWFzIGFyZSBmcmF1Z2h0IHdpdGggcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgc3VidGxlIHJlZmNvdW50aW5nIGVycm9ycywgdHJpY2t5IGxvY2tpbmcsIGFuZCBjb21wbGV4IHN0YXRlIHRyYW5zaXRpb25zLlxuXG5JJ2xsIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgbmV4dCB0byBjb25maXJtIHRoZSBidWlsZCByZXF1aXJlbWVudHMsIGJ1dCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHByaW9yaXRpemUgaW4gbXkgdGVzdGluZyBhbmQgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowOToyMC4xNzQ1MzMyNTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjQyMTE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX21lbW9yeVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDk6MjAuMjg2OTU4NzkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzIzMjcxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIFRIUCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgY29uZmlndXJlZC4gVGhhdCdzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlLCBzbyBuYXR1cmFsbHksIEkgc2hvdWxkIGhlYWQgc3RyYWlnaHQgdG8gdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEknbGwgZmluZCBpdHMgZGVmaW5pdGlvbiBpbiBgbW0vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgc2V0dGluZ3MgYXJlIHVzdWFsbHkgaGFuZGxlZC4gTGV0J3Mgc2VlIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhpcyBpcyBjb250cm9sbGVkIGF0IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowOToyMi43NTkyODg1ODRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjkxMzQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9ODMyPWNvbmZpZyBNTV9JRFxcbi0tXFxubW0vS2NvbmZpZy04MzQtXFxubW0vS2NvbmZpZzo4MzU6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODM2LVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg1Mz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODU4LVxcbm1tL0tjb25maWc6ODU5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg2MC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg2NS1cXG5tbS9LY29uZmlnOjg2NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxcbm1tL0tjb25maWctODY3LVxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg3NC1cXG5tbS9LY29uZmlnOjg3NTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg3Ni1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODgyPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04OTEtXFxubW0vS2NvbmZpZzo4OTI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg5My1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTAxLVxcbm1tL0tjb25maWc6OTAyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTAzLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTA5LVxcbm1tL0tjb25maWc6OTEwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05MTEtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxNy1cXG5tbS9LY29uZmlnOjkxODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTkxOS1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTkyNz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTM2LVxcbm1tL0tjb25maWc6OTM3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05MzgtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0NS1cXG5tbS9LY29uZmlnOjk0NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTk0Ny1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1My1cXG5tbS9LY29uZmlnOjk1NDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTU1LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NjEtXFxubW0vS2NvbmZpZzo5NjI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05NjMtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowOToyMi44NzYyMDYzNzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ4OTQ3NDE3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZm9yIFRyYW5zcGFyZW50IEh1Z2VwYWdlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBSYXRoZXIgdGhhbiBqdXN0IHJlbHlpbmcgb24gbWVtb3J5LCBJIGtub3cgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGlzIGlzIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEknbSBnb2luZyB0byBqdW1wIGludG8gYG1tL0tjb25maWdgLCBhbmQgcGlucG9pbnQgdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmUgODM1LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGVzZSBzb3J0cyBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzIGFyZSBkZWZpbmVkIG9yIGF0IGxlYXN0IGhhdmUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gd2lsbCBjbGVhcmx5IHNwZWxsIG91dCBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBoYXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlIHN1cHBvcnQuIEtub3dpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIGlzIGtleSB0byBkZWJ1Z2dpbmcgaXNzdWVzLCBjb25maWd1cmluZyBzeXN0ZW1zIHByb3Blcmx5LCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU2MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA5OjM3Ljc3MDk1MDE1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDExMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzA6XFx0XFx0ICBtZW1vcnkgY29uc3RyYWluZWQuXFxuIDgzMTpcXHRcXG4gODMyOlxcdGNvbmZpZyBNTV9JRFxcbiA4MzM6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4MzQ6XFx0XFxuIDgzNTpcXHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDgzNjpcXHRcXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbiA4Mzc6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4gODM4OlxcdFxcdHNlbGVjdCBDT01QQUNUSU9OXFxuIDgzOTpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuIDg0MDpcXHRcXHRzZWxlY3QgTU1fSURcXG4gODQxOlxcdFxcdGhlbHBcXG4gODQyOlxcdFxcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxcbiA4NDM6XFx0XFx0ICBodWdlIHRsYiB0cmFuc3BhcmVudGx5IHRvIHRoZSBhcHBsaWNhdGlvbnMgd2hlbmV2ZXIgcG9zc2libGUuXFxuIDg0NDpcXHRcXHQgIFRoaXMgZmVhdHVyZSBjYW4gaW1wcm92ZSBjb21wdXRpbmcgcGVyZm9ybWFuY2UgdG8gY2VydGFpblxcbiA4NDU6XFx0XFx0ICBhcHBsaWNhdGlvbnMgYnkgc3BlZWRpbmcgdXAgcGFnZSBmYXVsdHMgZHVyaW5nIG1lbW9yeVxcbiA4NDY6XFx0XFx0ICBhbGxvY2F0aW9uLCBieSByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIHRsYiBtaXNzZXMgYW5kIGJ5IHNwZWVkaW5nXFxuIDg0NzpcXHRcXHQgIHVwIHRoZSBwYWdldGFibGUgd2Fsa2luZy5cXG4gODQ4OlxcdFxcbiA4NDk6XFx0XFx0ICBJZiBtZW1vcnkgY29uc3RyYWluZWQgb24gZW1iZWRkZWQsIHlvdSBtYXkgd2FudCB0byBzYXkgTi5cXG4gODUwOlxcdFxcbiA4NTE6XFx0aWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gODUyOlxcdFxcbiA4NTM6XFx0Y2hvaWNlXFxuIDg1NDpcXHRcXHRwcm9tcHQgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQgc3lzZnMgZGVmYXVsdHNcXFwiXFxuIDg1NTpcXHRcXHRkZWZhdWx0IFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbiA4NTY6XFx0XFx0aGVscFxcbiA4NTc6XFx0XFx0ICBTZWxlY3RzIHRoZSBzeXNmcyBkZWZhdWx0cyBmb3IgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydC5cXG4gODU4OlxcdFxcbiA4NTk6XFx0XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbiA4NjA6XFx0XFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbiA4NjE6XFx0XFx0aGVscFxcbiA4NjI6XFx0XFx0ICBFbmFibGluZyBUcmFuc3BhcmVudCBIdWdlcGFnZSBhbHdheXMsIGNhbiBpbmNyZWFzZSB0aGVcXG4gODYzOlxcdFxcdCAgbWVtb3J5IGZvb3RwcmludCBvZiBhcHBsaWNhdGlvbnMgd2l0aG91dCBhIGd1YXJhbnRlZWRcXG4gODY0OlxcdFxcdCAgYmVuZWZpdCBidXQgaXQgd2lsbCB3b3JrIGF1dG9tYXRpY2FsbHkgZm9yIGFsbCBhcHBsaWNhdGlvbnMuXFxuIDg2NTpcXHRcXG4gODY2OlxcdFxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxuIDg2NzpcXHRcXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbiA4Njg6XFx0XFx0aGVscFxcbiA4Njk6XFx0XFx0ICBFbmFibGluZyBUcmFuc3BhcmVudCBIdWdlcGFnZSBtYWR2aXNlLCB3aWxsIG9ubHkgcHJvdmlkZSBhXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA5OjM3Ljc3MTA1MzMwMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDUyOTYzOTY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEh1Z2VwYWdlIFRyYW5zcGFyZW5jeSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQgZ29lcyB0byB0aGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBjb25maWd1cmF0aW9uLiBUaGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgaXNzdWUgYXQgaGFuZC4gQnV0IEkgY2FuJ3QganVzdCBzdG9wIHRoZXJlLiBJIGtub3cgdGhlcmUncyBhbG1vc3QgYWx3YXlzIG1vcmUgdG8gdGhlIHN0b3J5LCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQuIEkgaGF2ZSB0byB0aGluayBtb3JlIGJyb2FkbHkuXG5cbk15IG5leHQgbGluZSBvZiBpbnZlc3RpZ2F0aW9uIGludm9sdmVzIGNvbnNpZGVyaW5nIGBNRU1DR2Ag4oCTIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBtZW1vcnkgY2dyb3VwcyBhcmUgc29tZWhvdyBlbnRhbmdsZWQgd2l0aCB0aGUgYmVoYXZpb3Igb2YgYGxpc3RfbHJ1YCBhbmQgcG90ZW50aWFsbHkgZGVmZXJyZWQgc3BsaXRzLiBUaGUgaW50cmljYWNpZXMgdGhlcmUgYXJlIGVhc2lseSBtaXNzZWQsIGFuZCBhcmUgd2VsbCBrbm93biB0byBiZSBpbnRlcnR3aW5lZC5cblxuRnVydGhlcm1vcmUsIEkgaGF2ZSB0byBleGFtaW5lIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQuIEl0IHNvdW5kcyBsaWtlIGBkZWZlcnJlZF9zcGxpdF9scnVgIGFuZCBgZGVmZXJyZWRfc3BsaXRfc2NhbmAgbWlnaHQgcHJvdmlkZSBhZGRpdGlvbmFsIGNsdWVzLiBJJ2xsIG5lZWQgdG8gbG9vayBkZWVwbHkgYXQgaG93IHRoZXkncmUgdXNlZC4gSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGVudGlyZSBsYW5kc2NhcGUgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgY29uZmlncyBhbmQgZnVuY3Rpb25zLCB0byBzZWUgd2hlcmUgdGhlIGJvdHRsZW5lY2sgY291bGQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzYyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowOTo1Mi4zMDA2OTU3MzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMDAwNjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmVycmVkX3NwbGl0X1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz02MT11bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzIF9fcmVhZF9tb3N0bHkgPVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy03MS1cXG5tbS9odWdlX21lbW9yeS5jOjcyOnN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgZGVmZXJyZWRfc3BsaXRfa2V5O1xcbm1tL2h1Z2VfbWVtb3J5LmM6NzM6c3RhdGljIHN0cnVjdCBsaXN0X2xydSBkZWZlcnJlZF9zcGxpdF9scnU7XFxubW0vaHVnZV9tZW1vcnkuYzo3NDpzdGF0aWMgc3RydWN0IHNocmlua2VyICpkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcjtcXG5tbS9odWdlX21lbW9yeS5jOjc1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNzYtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKTtcXG5tbS9odWdlX21lbW9yeS5jOjc3OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxubW0vaHVnZV9tZW1vcnkuYy03OC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM0MD1zdGF0aWMgaW50IF9faW5pdCBodWdlX3plcm9faW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNDMtXFx0aWYgKCFodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpIHtcXG5tbS9odWdlX21lbW9yeS5jOjM0NDpcXHRcXHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG5tbS9odWdlX21lbW9yeS5jOjM0NTpcXHRcXHRsaXN0X2xydV9kZXN0cm95KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzQ2LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMDE1PWludCBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMDE4LVxcdFxcdHJldHVybiAwO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTAxOTpcXHRyZXR1cm4gZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2MoZm9saW8sIFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIEdGUF9LRVJORUwpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTAyMC19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEwMjI9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcXG5tbS9odWdlX21lbW9yeS5jLTEwMjMte1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTAyNDpcXHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTAyNS1cXHRcXHRcXHRcXHRcXHRcXHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsXFxubW0vaHVnZV9tZW1vcnkuYy0xMDI2LVxcdFxcdFxcdFxcdFxcdFxcdCBcXFwidGhwLWRlZmVycmVkX3NwbGl0XFxcIik7XFxubW0vaHVnZV9tZW1vcnkuYzoxMDI3OlxcdGlmICghZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpXFxubW0vaHVnZV9tZW1vcnkuYy0xMDI4LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTAyOS1cXG5tbS9odWdlX21lbW9yeS5jOjEwMzA6XFx0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2dfa2V5KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsXFxubW0vaHVnZV9tZW1vcnkuYzoxMDMxOlxcdFxcdFxcdFxcdCAgICBkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcixcXG5tbS9odWdlX21lbW9yeS5jOjEwMzI6XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9rZXkpKSB7XFxubW0vaHVnZV9tZW1vcnkuYzoxMDMzOlxcdFxcdHNocmlua2VyX2ZyZWUoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTAzNC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTAzNi1cXG5tbS9odWdlX21lbW9yeS5jOjEwMzc6XFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXFx1MDAzZWNvdW50X29iamVjdHMgPSBkZWZlcnJlZF9zcGxpdF9jb3VudDtcXG5tbS9odWdlX21lbW9yeS5jOjEwMzg6XFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXFx1MDAzZXNjYW5fb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X3NjYW47XFxubW0vaHVnZV9tZW1vcnkuYzoxMDM5OlxcdHNocmlua2VyX3JlZ2lzdGVyKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG5tbS9odWdlX21lbW9yeS5jLTEwNDAtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEwNDQ9c3RhdGljIHZvaWQgX19pbml0IHRocF9zaHJpbmtlcl9leGl0KHZvaWQpXFxubW0vaHVnZV9tZW1vcnkuYy0xMDQ1LXtcXG5tbS9odWdlX21lbW9yeS5jOjEwNDY6XFx0c2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XFxubW0vaHVnZV9tZW1vcnkuYzoxMDQ3OlxcdGxpc3RfbHJ1X2Rlc3Ryb3koXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMDQ4LVxcdGh1Z2VfemVyb19zaHJpbmtlcl9leGl0KCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEzNTg9dm9pZCBtYXBfYW5vbl9mb2xpb19wbWRfbm9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMzY4LVxcdHVwZGF0ZV9tbXVfY2FjaGVfcG1kKHZtYSwgaGFkZHIsIHBtZCk7XFxubW0vaHVnZV9tZW1vcnkuYzoxMzY5OlxcdGRlZmVycmVkX3NwbGl0X2ZvbGlvKGZvbGlvLCBmYWxzZSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMzcwLX1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzkyNT1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTQ1LVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzozOTQ2OlxcdFxcdCAqIGRlZmVycmVkX3NwbGl0X3NjYW4oKSB0YWtlcyB0aGUgZm9saW8gb2ZmIHRoZSBxdWV1ZSBiZWZvcmUgaXRcXG5tbS9odWdlX21lbW9yeS5jLTM5NDctXFx0XFx0ICogc3BsaXRzIGl0LCBzbyB0aGUgdW5xdWV1ZSBhYm92ZSBmaW5kcyBhbiBlbXB0eSBsaXN0IGFuZFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NDM1PWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0NDctICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcXG5tbS9odWdlX21lbW9yeS5jOjQ0NDg6ICogX2RlZmVycmVkX2xpc3QgbWlnaHQgYmUgaW4gdXNlIG9uIGRlZmVycmVkX3NwbGl0X3NjYW4oKSdzIHVubG9ja2VkXFxubW0vaHVnZV9tZW1vcnkuYy00NDQ5LSAqIG9uLXN0YWNrIGxpc3QuXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ0NTQ9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ2Ni1cXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jOjQ0Njc6XFx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgXFx1MDAyNm1lbWNnLCBcXHUwMDI2ZmxhZ3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ2ODpcXHRpZiAoX19saXN0X2xydV9kZWwoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy00NDY5LVxcdFxcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0ODItLyogcGFydGlhbGx5X21hcHBlZD1mYWxzZSB3b24ndCBjbGVhciBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgKi9cXG5tbS9odWdlX21lbW9yeS5jOjQ0ODM6dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXFxubW0vaHVnZV9tZW1vcnkuYy00NDg0LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxMy1cXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jOjQ1MTQ6XFx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgXFx1MDAyNm1lbWNnLCBcXHUwMDI2ZmxhZ3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxNS1cXHRpZiAocGFydGlhbGx5X21hcHBlZCkge1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTI2LVxcdH1cXG5tbS9odWdlX21lbW9yeS5jOjQ1Mjc6XFx0X19saXN0X2xydV9hZGQoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQsIG1lbWNnKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1MjgtXFx0bGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUobHJ1LCBcXHUwMDI2ZmxhZ3MpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTMxLVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDUzMjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG5tbS9odWdlX21lbW9yeS5jLTQ1MzMtXFx0XFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUzNi1cXG5tbS9odWdlX21lbW9yeS5jOjQ1Mzc6XFx0Y291bnQgPSBsaXN0X2xydV9zaHJpbmtfY291bnQoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgc2MpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDUzOC1cXHRyZXR1cm4gY291bnQgPzogU0hSSU5LX0VNUFRZO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTQxPXN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU2Ny1cXG5tbS9odWdlX21lbW9yeS5jOjQ1Njg6c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXFxubW0vaHVnZV9tZW1vcnkuYy00NTY5LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU4Mi1cXG5tbS9odWdlX21lbW9yeS5jOjQ1ODM6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG5tbS9odWdlX21lbW9yeS5jLTQ1ODQtXFx0XFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU5MC1cXG5tbS9odWdlX21lbW9yeS5jOjQ1OTE6XFx0aXNvbGF0ZWQgPSBsaXN0X2xydV9zaHJpbmtfd2Fsa19pcnEoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgc2MsXFxubW0vaHVnZV9tZW1vcnkuYzo0NTkyOlxcdFxcdFxcdFxcdFxcdCAgICBkZWZlcnJlZF9zcGxpdF9pc29sYXRlLCBcXHUwMDI2ZGlzcG9zZSk7XFxubW0vaHVnZV9tZW1vcnkuYy00NTkzLVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NjMwLVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9odWdlX21lbW9yeS5jOjQ2MzE6XFx0XFx0XFx0bGlzdF9scnVfYWRkX2lycShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDYzMi1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCxcXG4tLVxcbm1tL21pZ3JhdGUuYz0xMzYzPXN0YXRpYyBpbnQgbWlncmF0ZV9mb2xpb19tb3ZlKGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXFxuLS1cXG5tbS9taWdyYXRlLmMtMTQwMi1cXHRpZiAoc3JjX2RlZmVycmVkX3NwbGl0KVxcbm1tL21pZ3JhdGUuYzoxNDAzOlxcdFxcdGRlZmVycmVkX3NwbGl0X2ZvbGlvKGRzdCwgc3JjX3BhcnRpYWxseV9tYXBwZWQpO1xcbm1tL21pZ3JhdGUuYy0xNDA0LVxcbi0tXFxubW0vbWlncmF0ZS5jPTE4MTE9c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTg1Ny1cXHRcXHRcXHQgKiBPbmx5IGNoZWNrIGl0IHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgbGlzdC5cXG5tbS9taWdyYXRlLmM6MTg1ODpcXHRcXHRcXHQgKiBTaW5jZSB0aGUgZm9saW8gY2FuIGJlIG9uIGRlZmVycmVkX3NwbGl0X3NjYW4oKVxcbm1tL21pZ3JhdGUuYy0xODU5LVxcdFxcdFxcdCAqIGxvY2FsIGxpc3QgYW5kIHJlbW92aW5nIGl0IGNhbiBjYXVzZSB0aGUgbG9jYWwgbGlzdFxcbi0tXFxubW0vcm1hcC5jPTE3ODI9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fcmVtb3ZlX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy0xODc2LVxcdCAgICAhZm9saW9faXNfZGV2aWNlX3ByaXZhdGUoZm9saW8pKVxcbm1tL3JtYXAuYzoxODc3OlxcdFxcdGRlZmVycmVkX3NwbGl0X2ZvbGlvKGZvbGlvLCB0cnVlKTtcXG5tbS9ybWFwLmMtMTg3OC1cXG4tLVxcbm1tL3Ztc3RhdC5jPTExOTk9Y29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XFxuLS1cXG5tbS92bXN0YXQuYy0xNDI0LVxcdFtJKFRIUF9TUExJVF9QQUdFX0ZBSUxFRCldXFx0XFx0PSBcXFwidGhwX3NwbGl0X3BhZ2VfZmFpbGVkXFxcIixcXG5tbS92bXN0YXQuYzoxNDI1OlxcdFtJKFRIUF9ERUZFUlJFRF9TUExJVF9QQUdFKV1cXHRcXHQ9IFxcXCJ0aHBfZGVmZXJyZWRfc3BsaXRfcGFnZVxcXCIsXFxubW0vdm1zdGF0LmMtMTQyNi1cXHRbSShUSFBfVU5ERVJVU0VEX1NQTElUX1BBR0UpXVxcdFxcdD0gXFxcInRocF91bmRlcnVzZWRfc3BsaXRfcGFnZVxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA5OjUyLjM5MDcwMDQyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTI2MjI4MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gb2YgVEhQIFNwbGl0dGluZyBhbmQgRGVmZXJyZWQgU3BsaXQgQVBJIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUga2VybmVsJ3MgVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSBzcGxpdHRpbmcgYW5kIGRlZmVycmVkIHNwbGl0IGZ1bmN0aW9uYWxpdHkuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBBUEkgZW50cnkgcG9pbnRzIGludm9sdmVkIGluIHRoZXNlIHByb2Nlc3Nlcy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNhbGwgY2hhaW5zIGFuZCB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLlxuXG5GaXJzdCwgSSdtIGdvaW5nIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgaXMgY2FsbGVkLiBJdCBsb29rcyBsaWtlIGl0J3MgcHJldHR5IGNlbnRyYWwuIEZyb20gbXkgaW5pdGlhbCByZXNlYXJjaCwgaXQgYXBwZWFycyB0aGF0IGBfX2ZvbGlvX3NwbGl0YCBpcyBhIGtleSBmdW5jdGlvbiwgYW5kIHRoYXQncyBjYWxsZWQgYnkgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCBhbmQgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgLiBJIGFsc28gc2VlIGBmb2xpb19zcGxpdF91bm1hcHBlZGAgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tKSBjb2RlLlxuXG5GdXJ0aGVybW9yZSwgSSdtIG5vdGluZyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBgZGVmZXJyZWRfc3BsaXRfc2NhbmAgc2hyaW5rZXIgY2FsbGJhY2ssIGFsb25nIHdpdGggYGRlZmVycmVkX3NwbGl0X2ZvbGlvYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gdGhlIHJtYXAgY29kZS4gVGhlIG90aGVyIGNhbGxzIEkgbmVlZCB0byB3YXRjaCBhcmUsIGFnYWluLCBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RgLCBgc3BsaXRfZm9saW9fdG9fbGlzdGAsIGBmb2xpb19zcGxpdF91bm1hcHBlZGAsIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gVGhpcyBsaXN0IGdpdmVzIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93LlxuXG5GaW5hbGx5LCBJJ2xsIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBtbS9odWdlX21lbW9yeS5jYC4gSSBuZWVkIHRvIHJldmlldyB0aGUgZXhwb3J0ZWQgc3ltYm9scyBhbmQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSByZWdpb25zIHN1cnJvdW5kaW5nIHRoZSBzcGxpdCBvcGVyYXRpb25zLiBUaGlzIHNob3VsZCBvZmZlciBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBwdWJsaWMgQVBJIHJlbGF0ZWQgdG8gc3BsaXR0aW5nIGFuZCBkZWZlcnJlZCBzcGxpdHMuIEknbSBob3BpbmcgdG8gZGlzY292ZXIgYW55IHVuZG9jdW1lbnRlZCBvciBsZXNzIG9idmlvdXMgZW50cnkgcG9pbnRzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGxhcmdlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ1MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoxMDowMS41MTY5MzE0MjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxOTIxMDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihzcGxpdF9mb2xpb3xzcGxpdF9odWdlX3BhZ2V8Zm9saW9fc3BsaXQpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0xMzU4PXZvaWQgbWFwX2Fub25fZm9saW9fcG1kX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcG1kX3QgKnBtZCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTM2OC1cXHR1cGRhdGVfbW11X2NhY2hlX3BtZCh2bWEsIGhhZGRyLCBwbWQpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTM2OTpcXHRkZWZlcnJlZF9zcGxpdF9mb2xpbyhmb2xpbywgZmFsc2UpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTM3MC19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIzNTg9Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI0MDAtXFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG5tbS9odWdlX21lbW9yeS5jOjI0MDE6XFx0XFx0c3BsaXRfZm9saW8oZm9saW8pO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjQwMi1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNTg4PXN0YXRpYyB2b2lkIHJlbWFwX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBuciwgaW50IGZsYWdzKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNjAzLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzYwNDpzdGF0aWMgdm9pZCBscnVfYWRkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzYwNS1cXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM2Mjk9c3RhdGljIGJvb2wgcGFnZV9yYW5nZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY0MC0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjM2NDE6c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY0Mi1cXHRcXHRpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzgxLSAqIDEuIHVuaWZvcm0gc3BsaXQ6IEB4YXMgaXMgc3BsaXQgd2l0aCBubyBleHBlY3RhdGlvbiBvZiBmYWlsdXJlIGFuZCBhIHNpbmdsZVxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzc4MjogKiAgICBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKCkgaXMgY2FsbGVkIHRvIHNwbGl0IHRoZSBAZm9saW8gaW50byBAbmV3X29yZGVyXFxubW0vaHVnZV9tZW1vcnkuYy0zNzgzLSAqICAgIGFsb25nIHdpdGggc3RhdHMgdXBkYXRlLlxcbm1tL2h1Z2VfbWVtb3J5LmMtMzc4NC0gKiAyLiBub24tdW5pZm9ybSBzcGxpdDogZm9saW9fb3JkZXIgLSBAbmV3X29yZGVyIGNhbGxzIHRvXFxubW0vaHVnZV9tZW1vcnkuYzozNzg1OiAqICAgIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoKSBhcmUgZXhwZWN0ZWQgdG8gYmUgbWFkZSBpbiBhIGZvciBsb29wIHRvIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYy0zNzg2LSAqICAgIHRoZSBAZm9saW8gdG8gb25lIGxvd2VyIG9yZGVyIGF0IGEgdGltZS4gVGhlIGZvbGlvIGNvbnRhaW5pbmcgQHNwbGl0X2F0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM3OTg9c3RhdGljIGludCBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM4NDAtXFxubW0vaHVnZV9tZW1vcnkuYzozODQxOlxcdFxcdGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzg0Mi1cXHRcXHRzcGxpdF9wYWdlX293bmVyKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XFxubW0vaHVnZV9tZW1vcnkuYy0zODQzLVxcdFxcdHBnYWxsb2NfdGFnX3NwbGl0KGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcXG5tbS9odWdlX21lbW9yeS5jOjM4NDQ6XFx0XFx0X19zcGxpdF9mb2xpb190b19vcmRlcihmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XFxubW0vaHVnZV9tZW1vcnkuYy0zODQ1LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zOTI1PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQwMDctXFx0XFx0XFx0aWYgKGRvX2xydSlcXG5tbS9odWdlX21lbW9yeS5jOjQwMDg6XFx0XFx0XFx0XFx0bHJ1X2FkZF9zcGxpdF9mb2xpbyhmb2xpbywgbmV3X2ZvbGlvLCBscnV2ZWMsIGxpc3QpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDAwOS1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDA2Mi0vKipcXG5tbS9odWdlX21lbW9yeS5jOjQwNjM6ICogX19mb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXFxubW0vaHVnZV9tZW1vcnkuYy00MDY0LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDA4Mi0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQwODM6c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxubW0vaHVnZV9tZW1vcnkuYy00MDg0LVxcdFxcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHBhZ2UgKmxvY2tfYXQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNzktLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0MjgwOiAqIGZvbGlvX3NwbGl0X3VubWFwcGVkKCkgLSBzcGxpdCBhIGxhcmdlIGFub24gZm9saW8gdGhhdCBpcyBhbHJlYWR5IHVubWFwcGVkXFxubW0vaHVnZV9tZW1vcnkuYy00MjgxLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDMwMC0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQzMDE6aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxubW0vaHVnZV9tZW1vcnkuYy00MzAyLXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDM2Ny0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQzNjg6aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00MzY5LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5ld19vcmRlcilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDM3Mi1cXG5tbS9odWdlX21lbW9yeS5jOjQzNzM6XFx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDM3NC1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQzNzctLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0Mzc4OiAqIGZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cXG5tbS9odWdlX21lbW9yeS5jLTQzNzktICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Mzg1LSAqIEl0IGhhcyB0aGUgc2FtZSBwcmVyZXF1aXNpdGVzIGFuZCByZXR1cm5zIGFzXFxubW0vaHVnZV9tZW1vcnkuYzo0Mzg2OiAqIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKCkuXFxubW0vaHVnZV9tZW1vcnkuYy00Mzg3LSAqXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0MDAtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0NDAxOmludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQwMi1cXHRcXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxubW0vaHVnZV9tZW1vcnkuYy00NDAzLXtcXG5tbS9odWdlX21lbW9yeS5jOjQ0MDQ6XFx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgbGlzdCxcXG5tbS9odWdlX21lbW9yeS5jLTQ0MDUtXFx0XFx0XFx0ICAgICBTUExJVF9UWVBFX05PTl9VTklGT1JNKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDQxOD11bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDM0LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQzNTppbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzNi17XFxubW0vaHVnZV9tZW1vcnkuYzo0NDM3OlxcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsIDApO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzOC19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ0NTQ9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ4Mi0vKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbid0IGNsZWFyIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ4Mzp2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcXG5tbS9odWdlX21lbW9yeS5jLTQ0ODQte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTgzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ2MTMtXFx0XFx0XFx0Z290byByZXF1ZXVlO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDYxNDpcXHRcXHRpZiAoIXNwbGl0X2ZvbGlvKGZvbGlvKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDYxNS1cXHRcXHRcXHRkaWRfc3BsaXQgPSB0cnVlO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NjIyLVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzo0NjIzOlxcdFxcdCAqIElmIHRocF91bmRlcnVzZWQoKSByZXR1cm5zIGZhbHNlLCBvciBpZiBzcGxpdF9mb2xpbygpXFxubW0vaHVnZV9tZW1vcnkuYzo0NjI0OlxcdFxcdCAqIHN1Y2NlZWRzLCBvciBpZiBzcGxpdF9mb2xpbygpIGZhaWxzIGluIHRoZSBjYXNlIGl0IHdhc1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDYyNS1cXHRcXHQgKiB1bmRlcnVzZWQsIHRoZW4gY29uc2lkZXIgaXQgdXNlZCBhbmQgZG9uJ3QgYWRkIGl0IGJhY2sgdG9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY0NS0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxubW0vaHVnZV9tZW1vcnkuYzo0NjQ2OnN0YXRpYyB2b2lkIHNwbGl0X2h1Z2VfcGFnZXNfYWxsKHZvaWQpXFxubW0vaHVnZV9tZW1vcnkuYy00NjQ3LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY4Mi1cXHRcXHRcXHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jOjQ2ODM6XFx0XFx0XFx0aWYgKCFzcGxpdF9mb2xpbyhmb2xpbykpXFxubW0vaHVnZV9tZW1vcnkuYy00Njg0LVxcdFxcdFxcdFxcdHNwbGl0Kys7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ2OTY9c3RhdGljIGlubGluZSBib29sIHZtYV9ub3Rfc3VpdGFibGVfZm9yX3RocF9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDcwOS1cXG5tbS9odWdlX21lbW9yeS5jOjQ3MTA6c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDcxMS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHZhZGRyX2VuZCwgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDc3OS1cXHRcXHQvKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDc4MDpcXHRcXHQgKiBGb3IgZm9saW9zIHdpdGggcHJpdmF0ZSwgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDc4MS1cXHRcXHQgKiB3aWxsIHRyeSB0byBkcm9wIGl0IGJlZm9yZSBzcGxpdCBhbmQgdGhlbiBjaGVjayBpZiB0aGUgZm9saW9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDc5Ny1cXHRcXHQgICAgaW5fZm9saW9fb2Zmc2V0IFxcdTAwM2U9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDc5ODpcXHRcXHRcXHRpZiAoIXNwbGl0X2ZvbGlvX3RvX29yZGVyKGZvbGlvLCB0YXJnZXRfb3JkZXIpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDc5OS1cXHRcXHRcXHRcXHRzcGxpdCsrO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODAyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGluX2ZvbGlvX29mZnNldCk7XFxubW0vaHVnZV9tZW1vcnkuYzo0ODAzOlxcdFxcdFxcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDgwNC1cXHRcXHRcXHRcXHRzcGxpdCsrO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODI2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDgyNzpzdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShjb25zdCBjaGFyICpmaWxlX3BhdGgsIHBnb2ZmX3Qgb2ZmX3N0YXJ0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDgyOC1cXHRcXHRcXHRcXHRwZ29mZl90IG9mZl9lbmQsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ4NzMtXFx0XFx0aWYgKGluX2ZvbGlvX29mZnNldCBcXHUwMDNjIDAgfHwgaW5fZm9saW9fb2Zmc2V0IFxcdTAwM2U9IG5yX3BhZ2VzKSB7XFxubW0vaHVnZV9tZW1vcnkuYzo0ODc0OlxcdFxcdFxcdGlmICghc3BsaXRfZm9saW9fdG9fb3JkZXIoZm9saW8sIHRhcmdldF9vcmRlcikpXFxubW0vaHVnZV9tZW1vcnkuYy00ODc1LVxcdFxcdFxcdFxcdHNwbGl0Kys7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ4NzgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5fZm9saW9fb2Zmc2V0KTtcXG5tbS9odWdlX21lbW9yeS5jOjQ4Nzk6XFx0XFx0XFx0aWYgKCFmb2xpb19zcGxpdChmb2xpbywgdGFyZ2V0X29yZGVyLCBzcGxpdF9hdCwgTlVMTCkpXFxubW0vaHVnZV9tZW1vcnkuYy00ODgwLVxcdFxcdFxcdFxcdHNwbGl0Kys7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ4OTYtXFxubW0vaHVnZV9tZW1vcnkuYzo0ODk3OnN0YXRpYyBzc2l6ZV90IHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxubW0vaHVnZV9tZW1vcnkuYy00ODk4LVxcdFxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9wcylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDk0NC1cXHRcXHR9XFxubW0vaHVnZV9tZW1vcnkuYzo0OTQ1OlxcdFxcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShmaWxlX3BhdGgsIG9mZl9zdGFydCwgb2ZmX2VuZCxcXG5tbS9odWdlX21lbW9yeS5jLTQ5NDYtXFx0XFx0XFx0XFx0bmV3X29yZGVyLCBpbl9mb2xpb19vZmZzZXQpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00OTU1LVxcdGlmIChyZXQgPT0gMSBcXHUwMDI2XFx1MDAyNiBwaWQgPT0gMSkge1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDk1NjpcXHRcXHRzcGxpdF9odWdlX3BhZ2VzX2FsbCgpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDk1Ny1cXHRcXHRyZXQgPSBzdHJsZW4oaW5wdXRfYnVmKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDk2My1cXG5tbS9odWdlX21lbW9yeS5jOjQ5NjQ6XFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlc19waWQocGlkLCB2YWRkcl9zdGFydCwgdmFkZHJfZW5kLCBuZXdfb3JkZXIsXFxubW0vaHVnZV9tZW1vcnkuYy00OTY1LVxcdFxcdFxcdGluX2ZvbGlvX29mZnNldCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ5NzMtXFxubW0vaHVnZV9tZW1vcnkuYzo0OTc0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwbGl0X2h1Z2VfcGFnZXNfZm9wcyA9IHtcXG5tbS9odWdlX21lbW9yeS5jLTQ5NzUtXFx0Lm93bmVyXFx0ID0gVEhJU19NT0RVTEUsXFxubW0vaHVnZV9tZW1vcnkuYzo0OTc2OlxcdC53cml0ZVxcdCA9IHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGUsXFxubW0vaHVnZV9tZW1vcnkuYy00OTc3LX07XFxubW0vaHVnZV9tZW1vcnkuYy00OTc4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDk3OTpzdGF0aWMgaW50IF9faW5pdCBzcGxpdF9odWdlX3BhZ2VzX2RlYnVnZnModm9pZClcXG5tbS9odWdlX21lbW9yeS5jLTQ5ODAte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDk4MTpcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzcGxpdF9odWdlX3BhZ2VzXFxcIiwgMDIwMCwgTlVMTCwgTlVMTCxcXG5tbS9odWdlX21lbW9yeS5jOjQ5ODI6XFx0XFx0XFx0ICAgIFxcdTAwMjZzcGxpdF9odWdlX3BhZ2VzX2ZvcHMpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDk4My1cXHRyZXR1cm4gMDtcXG5tbS9odWdlX21lbW9yeS5jLTQ5ODQtfVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDk4NTpsYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XFxubW0vaHVnZV9tZW1vcnkuYy00OTg2LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoxMDowMS41ODg4NTU5NTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ1Mzg3MDMxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZvbGlvIFNwbGl0dGluZyBTeW1ib2xzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIGZvbGlvIHNwbGl0dGluZyBzeW1ib2xzIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNvbGlkIGdyYXNwIG9uIHRoZW0uIEkgc2VlIGEgZmV3IGtleSBwbGF5ZXJzIGhlcmU6IGBzcGxpdF9mb2xpb190b19saXN0YCwgYGZvbGlvX3NwbGl0YCwgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCwgYGRlZmVycmVkX3NwbGl0X2ZvbGlvYCwgYW5kIGBzcGxpdF9odWdlX3BhZ2VzX3dyaXRlYCAodGhhdCBsYXN0IG9uZSwgYmVpbmcgdGhlIGRlYnVnZnMgaW50ZXJmYWNlLCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbikuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGNvdmVyIGEgc3BlY3RydW0gb2Ygc3BsaXR0aW5nIG9wZXJhdGlvbnMuIEkgc3VzcGVjdCB0aGVyZSB3aWxsIGJlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBzeW1ib2xzLiBNeSBodW5jaCBpcyB0aGF0IHRoZXkgcHJvYmFibHkgaGF2ZSBzb21lIHNoYXJlZCBmdW5jdGlvbmFsaXR5IGFuZCBwZXJoYXBzIGFyZSBjYWxsZWQgaW4gYSBzZXF1ZW5jZS5cblxuVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHdoZXRoZXIgYHNwbGl0X2ZvbGlvYCBpcyBkZWZpbmVkIGlubGluZSwgb3Igc3RhdGljLiBUaGF0IGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgZm9yIG9wdGltaXphdGlvbi4gSXMgaXQgdHVja2VkIGF3YXkgaW4gYSBoZWFkZXIsIG9yIGlzIGl0IGEgbG9jYWwsIHN0YXRpYyBmdW5jdGlvbj8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGF0IGJlZm9yZSBJIGNhbiBkcmF3IHRvbyBtYW55IGNvbmNsdXNpb25zLiBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgaW1wb3J0YW50IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjQ5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjEwOjM2LjEyNzU2MjA1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0MzQ5NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwbGl0X2ZvbGlvXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9OTc9ZW51bSB0dmFfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMDYtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTA3OiNkZWZpbmUgc3BsaXRfZm9saW8oZikgc3BsaXRfZm9saW9fdG9fbGlzdChmLCBOVUxMKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwOC1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQyOD1pbnQgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDI5LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQzMDp2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZCk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDMxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NjgyPXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02ODYtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Njg3OnN0YXRpYyBpbmxpbmUgdm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjg4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MTA6MzYuMzcxOTIwNTU0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2OTAwNTc3MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEh1Z2UgUGFnZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJ3JlIGhhbmRsaW5nIGh1Z2UgcGFnZXMgYXQgdGhlIGtlcm5lbCBsZXZlbCwgc3BlY2lmaWNhbGx5IHRoZSBzcGxpdHRpbmcgYW5kIG9yZGVyaW5nLiBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gSSdtIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbiBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG11c3QgcmVzaWRlIGZvciBicmVha2luZyBkb3duIHRob3NlIG1hc3NpdmUgcGFnZXMgYW5kIGludGVncmF0aW5nIHRoZW0gaW50byB0aGUgYnVkZHkgYWxsb2NhdG9yJ3Mgb3JkZXJlZCBsaXN0cy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBncmFudWxhciBkZXRhaWxzIG9mIGZyYWdtZW50YXRpb24sIHBvdGVudGlhbCB3YXN0ZSwgYW5kIHVsdGltYXRlbHksIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGltaXphdGlvbiB3aGVuIGRlYWxpbmcgd2l0aCBodWdlIHBhZ2VzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgaW5zaWdodHMgaW50byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgaHVnZSBwYWdlIHN0cnVjdHVyZXMsIHRoZSBidWRkeSBzeXN0ZW0ncyBtZXRhZGF0YSwgYW5kIGhvdyB0aGUga2VybmVsIG1haW50YWlucyBjb25zaXN0ZW5jeSB0aHJvdWdob3V0IHRoZXNlIG9wZXJhdGlvbnMuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMjIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoxMTo0My4yNzI1MDEzNTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NjYyODg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzcGxpdF9odWdlX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9Mzk4PWVudW0gc3BsaXRfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MDItXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDAzOmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwNC1cXHRcXHR1bnNpZ25lZCBpbnQgbmV3X29yZGVyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQxMD1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlciwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTItXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDEzOnN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxNC1cXHRcXHR1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxNS17XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDE2OlxcdHJldHVybiBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIGxpc3QsIG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDE3LX1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MTg6c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxOS17XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDIwOlxcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBOVUxMLCBuZXdfb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQyMS19XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDIyLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQyMzpzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDI0LXtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MjU6XFx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIE5VTEwsIDApO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQyNi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD02NDU9c3RhdGljIGlubGluZSBpbnRcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo2NDY6c3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjQ3LVxcdFxcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NTEtfVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjY1MjpzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjUzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY1Ni19XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjU3OnN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NTgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9ODI2PXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIpXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODI3LXtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo4Mjg6XFx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgTlVMTCwgbmV3X29yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC04MjktfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oPTEwPWVudW0gcGFnZV93YWxrX2xvY2sge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTI4LSAqXFx0XFx0XFx0cG1kX3RyYW5zX2h1Z2UoKSBwbWRzLiAgVGhleSBtYXkgc2ltcGx5IGNob29zZSB0b1xcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaDoyOTogKlxcdFxcdFxcdHNwbGl0X2h1Z2VfcGFnZSgpIGluc3RlYWQgb2YgaGFuZGxpbmcgaXQgZXhwbGljaXRseS5cXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMzAtICogQHB0ZV9lbnRyeTpcXHRcXHRpZiBzZXQsIGNhbGxlZCBmb3IgZWFjaCBQVEUgKGxvd2VzdC1sZXZlbCkgZW50cnlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaD0yMDA9c3RhdGljIGlubGluZSB2b2lkIHNobWVtX2ZyZWV6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGZyZWV6ZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0yMTAtICogYmV5b25kIGlfc2l6ZSdzIG5vdGlvbiBvZiBFT0YsIHdoaWNoIGZhbGxvY2F0ZSBoYXMgY29tbWl0dGVkIHRvIHJlc2VydmluZzpcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MjExOiAqIHdoaWNoIHNwbGl0X2h1Z2VfcGFnZSgpIG11c3QgdGhlcmVmb3JlIG5vdCBkZWxldGUuICBUaGlzIHVzZSBvZiBhIHNpbmdsZVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0yMTItICogXFxcImZhbGxvY2VuZFxcXCIgcGVyIGlub2RlIGVycnMgb24gdGhlIHNpZGUgb2Ygbm90IGRlbGV0aW5nIGEgcmVzZXJ2YXRpb24gd2hlblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoxMTo0My41NjkxMzU4NzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAxMTU3ODMxMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRIUCBEZWZlcnJlZCBTcGxpdCBRdWV1ZSBMb2dpYyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCwgYGZvbGlvX3NwbGl0YCwgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgLCBgZm9saW9fc3BsaXRfdW5tYXBwZWRgLCBgZGVmZXJyZWRfc3BsaXRfZm9saW9gLCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFRoZXkncmUgYWxsIGluIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgdGhleSBhcmVuJ3Qgc3RhdGljIGZ1bmN0aW9ucywgZ29vZCB0byBrbm93LlxuXG5Ob3csIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBvYnZpb3VzIG9uZSBpcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBidXQgSSBzaG91bGQgdmVyaWZ5IGlmIGl0IGhhcyBkZXBlbmRlbmNpZXMgb3Igc3ViLW9wdGlvbnMuIFRpbWUgdG8gbG9vayBpbnRvIGBtbS9LY29uZmlnYC4gWXVwLCBgbWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgcHJlc2VudC4gSXQgYGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVGAsIGFuZCBpdCBgc2VsZWN0cyBDT01QQUNUSU9OYCwgYFhBUlJBWV9NVUxUSWAsIGFuZCBgTU1fSURgLiBBbHJpZ2h0LCBhbmQgbGV0J3MgY2hlY2sgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIGl0IGJ1aWxkcyB0aGUgbmVjZXNzYXJ5IG9iamVjdHMuIFllcywgYG9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9gIGNvbmZpcm1zIHRoZSBpbmNsdXNpb24uIFNvLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZywgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY29uZmlybSBldmVyeXRoaW5nIGFsaWducyB3aXRoIHRoZSByZXF1aXJlbWVudHMgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSBzeW5jaHJvbml6YXRpb24gYW5kIHJlZmNvdW50IGZyZWV6ZSBsb2dpYyB3aGVuIHNwbGl0dGluZyB1bm1hcHBlZCBmb2xpb3MgYW5kIGlzb2xhdGluZyBkZWZlcnJlZCBzcGxpdCBMUlUgaXRlbXMuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNvcnJlY3Qg4oCTIHRoYXQncyB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgSSBpZGVudGlmaWVkIGVhcmxpZXIuIFRoZSBgRW5hYmxlQ29uZmlnc2AgaXMganVzdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJJ20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLiBPa2F5LCBmaW5hbCBjaGVjayBhbmQgdGhlbiBpdCdzIHRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NzgsIk91dHB1dFRva2VucyI6MTc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjEzOjI0LjcyNjk3MDk3MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTE3ODk1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gICAgXCJmb2xpb19zcGxpdFwiLFxuICAgIFwic3BsaXRfZm9saW9fdG9fbGlzdFwiLFxuICAgIFwiZm9saW9fc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcIl9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdFwiLFxuICAgIFwiZGVmZXJyZWRfc3BsaXRfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLCBzcGVjaWZpY2FsbHkgaG93IGRlZmVycmVkIHNwbGl0IGxpc3QgbG9ja2luZyBhbmQgcmVmY291bnQgZnJlZXppbmcgc3luY2hyb25pemUgZHVyaW5nIGZvbGlvIHNwbGl0dGluZyBhbmQgc2hyaW5rZXIgaXNvbGF0aW9uIChkZWZlcnJlZF9zcGxpdF9pc29sYXRlIGFuZCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBtZW1vcnkgcmVjbGFpbSBhbmQgVEhQIHNwbGl0dGluZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gICAgXCJmb2xpb19zcGxpdFwiLFxuICAgIFwic3BsaXRfZm9saW9fdG9fbGlzdFwiLFxuICAgIFwiZm9saW9fc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcIl9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdFwiLFxuICAgIFwiZGVmZXJyZWRfc3BsaXRfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLCBzcGVjaWZpY2FsbHkgaG93IGRlZmVycmVkIHNwbGl0IGxpc3QgbG9ja2luZyBhbmQgcmVmY291bnQgZnJlZXppbmcgc3luY2hyb25pemUgZHVyaW5nIGZvbGlvIHNwbGl0dGluZyBhbmQgc2hyaW5rZXIgaXNvbGF0aW9uIChkZWZlcnJlZF9zcGxpdF9pc29sYXRlIGFuZCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBtZW1vcnkgcmVjbGFpbSBhbmQgVEhQIHNwbGl0dGluZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjEzOjI0Ljg3ODE1NjQ0OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNDU1ODc5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoxMzoyNC44Nzg1OTAxMTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTE0NTE0OTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSBoYW5kbGluZyBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKClgIGFuZCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSgpYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHJlcGxhY2luZyBtYW51YWwgTFJVIGxvY2tpbmcgcHJpb3IgdG8gZm9saW8gcmVmIGZyZWV6aW5nIHdpdGggY2FsbHMgdG8gYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKWAgYW5kIHNraXBwaW5nIHVucmVmZXJlbmNlZCBmb2xpb3MgZHVyaW5nIGlzb2xhdGlvbi5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBmb2xpbyByZWZlcmVuY2UgY291bnRpbmcsIGxpc3QgbWFuYWdlbWVudCAoYF9kZWZlcnJlZF9saXN0YCksIGFuZCBmb2xpbyBmbGFncyAoYFBHX3BhcnRpYWxseV9tYXBwZWRgKS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gc3RhY2sgb3IgaGVhcCBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgb3IgbWFuaXB1bGF0ZWQsIGFuZCBubyB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgY29uY3VycmVuY3ksIHJlZmNvdW50LCBvciBsaXN0IGNvcnJ1cHRpb24gYnVncyBpbnRyb2R1Y2VkIGhlcmUgd291bGQgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiwgTE9DS0RFUCwgb3Iga2VybmVsIGFzc2VydGlvbnMsIHJhdGhlciB0aGFuIEtNU0FOIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdGlvbi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMjNiYTYyZWRlMDJmNTgxNzhiYzhkNzdmMDU5YTdmOTFiMTA0YWVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTA6MDc6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggY2VkNDAwZjcyZDQzYS4uYzg0ZThjYmM5ODZkOSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0zOTMxLDQxICszOTMxLDI3IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4gXHRzdHJ1Y3QgZm9saW8gKmVuZF9mb2xpbyA9IGZvbGlvX25leHQoZm9saW8pO1xuIFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0O1xuIFx0aW50IG9sZF9vcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbi1cdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTtcbi1cdGJvb2wgZGVxdWV1ZV9kZWZlcnJlZDtcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKCFtYXBwaW5nIFx1MDAyNlx1MDAyNiBlbmQpO1xuLVx0Lypcbi1cdCAqIElmIHRoaXMgZm9saW8gY2FuIGJlIG9uIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSwgbG9jayBvdXRcbi1cdCAqIHRoZSBzaHJpbmtlciBiZWZvcmUgZnJlZXppbmcgdGhlIHJlZi4gSWYgdGhlIHNocmlua2VyIHNlZXNcbi1cdCAqIGEgMC1yZWYgZm9saW8sIGl0IGFzc3VtZXMgaXQgYmVhdCBmb2xpb19wdXQoKSB0byB0aGUgbGlzdFxuLVx0ICogbG9jayBhbmQgbXVzdCBjbGVhbiB1cCB0aGUgTFJVIHN0YXRlIC0gdGhlIHNhbWUgZGVxdWV1ZSB3ZVxuLVx0ICogd2lsbCBkbyBiZWxvdyBhcyBwYXJ0IG9mIHRoZSBzcGxpdC5cbi1cdCAqL1xuLVx0ZGVxdWV1ZV9kZWZlcnJlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IG9sZF9vcmRlciBcdTAwM2UgMTtcbi1cdGlmIChkZXF1ZXVlX2RlZmVycmVkKSB7XG4tXHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbi1cbi1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbi1cdFx0bHJ1ID0gbGlzdF9scnVfbG9jayhcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsXG4tXHRcdFx0XHQgICAgZm9saW9fbmlkKGZvbGlvKSwgXHUwMDI2bWVtY2cpO1xuLVx0fVxuK1xuIFx0aWYgKGZvbGlvX3JlZl9mcmVlemUoZm9saW8sIGZvbGlvX2NhY2hlX3JlZl9jb3VudChmb2xpbykgKyAxKSkge1xuIFx0XHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpID0gTlVMTDtcbiBcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFxuLVx0XHRpZiAoZGVxdWV1ZV9kZWZlcnJlZCkge1xuLVx0XHRcdF9fbGlzdF9scnVfZGVsKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LFxuLVx0XHRcdFx0ICAgICAgIFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0LCBmb2xpb19uaWQoZm9saW8pKTtcbi1cdFx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4tXHRcdFx0XHRtb2RfbXRocF9zdGF0KG9sZF9vcmRlcixcbi1cdFx0XHRcdFx0TVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHRcdH1cbi1cdFx0XHRsaXN0X2xydV91bmxvY2sobHJ1KTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0LyogVGFrZSBvZmYgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoaWxlIGZyb3plbiBhbmQgbWVtY2cgc2V0ICovXG4rXHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0XG4rXHRcdCAqIHNwbGl0cyBpdCwgc28gdGhlIHVucXVldWUgYWJvdmUgZmluZHMgYW4gZW1wdHkgbGlzdCBhbmRcbitcdFx0ICogbGVhdmVzIFBHX3BhcnRpYWxseV9tYXBwZWQgc2V0LlxuK1x0XHQgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC5cbitcdFx0ICovXG4rXHRcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG4rXHRcdFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4rXHRcdFx0bW9kX210aHBfc3RhdChvbGRfb3JkZXIsXG4rXHRcdFx0XHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKG1hcHBpbmcpIHtcbkBAIC00MDY3LDEwICs0MDUzLDYgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cbiBcdFx0aWYgKGNpKVxuIFx0XHRcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGRlcXVldWVfZGVmZXJyZWQpIHtcbi1cdFx0XHRsaXN0X2xydV91bmxvY2sobHJ1KTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0fVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdH1cbiBcbkBAIC00NTkwLDIyICs0NTcyLDExIEBAIHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGNvbnRhaW5lcl9vZihpdGVtLCBzdHJ1Y3QgZm9saW8sIF9kZWZlcnJlZF9saXN0KTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKmZyZWVhYmxlID0gY2JfYXJnO1xuIFxuLVx0aWYgKGZvbGlvX3RyeV9nZXQoZm9saW8pKSB7XG4tXHRcdGxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTtcbi1cdFx0cmV0dXJuIExSVV9SRU1PVkVEO1xuLVx0fVxuK1x0LyogTG9zdCByYWNlIHRvIGZvbGlvX3B1dCgpIG9yIHRoZSBmb2xpbyBpcyB1bmRlciBmb2xpb19yZWZfZnJlZXplKCkgKi9cbitcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXG4rXHRcdHJldHVybiBMUlVfU0tJUDtcbiBcbi1cdC8qXG4tXHQgKiBXZSBsb3N0IHJhY2Ugd2l0aCBmb2xpb19wdXQoKS4gUmVhZCBmb2xpbyBzdGF0ZSBiZWZvcmUgdGhlXG4tXHQgKiBpc29sYXRlOiBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgY2hlY2tzIGxpc3RfZW1wdHkoKVxuLVx0ICogbG9ja2xlc3NseSwgc28gb25jZSByZW1vdmVkIHRoZSBmb2xpbyBjYW4gYmUgZnJlZWQgYW55IHRpbWUuXG4tXHQgKi9cbi1cdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG4tXHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRtb2RfbXRocF9zdGF0KGZvbGlvX29yZGVyKGZvbGlvKSxcbi1cdFx0XHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XG4tXHR9XG4tXHRsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7XG4rXHRsaXN0X2xydV9pc29sYXRlX21vdmUobHJ1LCBpdGVtLCBmcmVlYWJsZSk7XG4gXHRyZXR1cm4gTFJVX1JFTU9WRUQ7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MTM6MjQuODc4NTkwODM5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4OTg3NDU5MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZSBQYWdlcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHBhdGNoIGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLCBzbyBsZXQncyBicmVhayBpdCBkb3duIG1ldGhvZGljYWxseS5cblxuRmlyc3QsIEkgc2VlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBjZW50ZXJlZCBhcm91bmQgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAuIEl0IGxvb2tzIGxpa2Ugd2UncmUgc3RyZWFtbGluaW5nIHRoZSBsb2NraW5nIG1lY2hhbmlzbS4gSW5zdGVhZCBvZiB0aGUgY3VzdG9tIGxvY2tpbmcgb2YgYGRlZmVycmVkX3NwbGl0X2xydWAgYW5kIG1hbnVhbCBtYW5pcHVsYXRpb24gb2YgYF9fbGlzdF9scnVfZGVsYCwgdGhlIHBhdGNoIGlzIHN3aXRjaGluZyB0byBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbylgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0J3MgbGlrZWx5IGludHJvZHVjaW5nIGEgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBhbmQgaXRzIGJlbmVmaXRzIGNvbXBhcmVkIHRvIHRoZSBwcmV2aW91cyBhcHByb2FjaC4gVGhlIHBhdGNoIGFsc28gcmVtb3ZlcyBgUEdfcGFydGlhbGx5X21hcHBlZGAgYW5kIHVwZGF0ZXMgc3RhdHMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgc2lkZSBlZmZlY3RzIGFyZS5cblxuTmV4dCwgSSBzZWUgYSBjaGFuZ2UgaW4gYGRlZmVycmVkX3NwbGl0X2lzb2xhdGVgLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBuZXcgcmV0dXJuIGNvbmRpdGlvbiBpZiBgZm9saW9fdHJ5X2dldChmb2xpbylgIGZhaWxzOyBpdCBub3cgcmV0dXJucyBgTFJVX1NLSVBgIGluc3RlYWQgb2YgaXNvbGF0aW5nIHRoZSBwYWdlIGFuZCBjbGVhcmluZyBzdGF0cy4gVGhpcyBpcyBsaWtlbHkgYW4gb3B0aW1pemF0aW9uIHRvIGFkZHJlc3MgYSByYWNlIGNvbmRpdGlvbiwgbWF5YmU/IEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbnRleHRzIHdoZXJlIGBmb2xpb190cnlfZ2V0YCBjYW4gZmFpbCDigJMgYSBsb3N0IHJhY2UgdG8gYGZvbGlvX3B1dCgpYCBvciBhIGZhaWx1cmUgZHVyaW5nIGBmb2xpb19yZWZfZnJlZXplKClgIHBlcmhhcHMuIFRoaXMgY2hhbmdlIGlzIHRyeWluZyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHdvcmsuXG5cblRvIGZ1bGx5IGdyYXNwIHRoZSBpbnRlbnQsIEknbGwgbmVlZCB0byBleGFtaW5lIGBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gSSdsbCByZWFjaCBmb3IgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGV4cGxvcmUgdGhhdCBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uIGFuZCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcyBvbiB0aGUgaHVnZSBwYWdlIHNwbGl0dGluZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQ4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MTM6NDMuODY2MDUzMTQ1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQxOTE1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZm9saW8uYz05MD12b2lkIF9fZm9saW9fcHV0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTEwMi1cXHRwYWdlX2NhY2hlX3JlbGVhc2UoZm9saW8pO1xcbm1tL2ZvbGlvLmM6MTAzOlxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL2ZvbGlvLmMtMTA0LVxcdG1lbV9jZ3JvdXBfdW5jaGFyZ2UoZm9saW8pO1xcbi0tXFxubW0vZm9saW8uYz0xNTE9c3RhdGljIHZvaWQgZm9saW9fYmF0Y2hfbW92ZV9scnUoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gsIG1vdmVfZm5fdCBtb3ZlX2ZuKVxcbi0tXFxubW0vZm9saW8uYy0xODUtXFx0XFx0XFx0X19mb2xpb19jbGVhcl91bmV2aWN0YWJsZShmb2xpbyk7XFxubW0vZm9saW8uYzoxODY6XFx0XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vZm9saW8uYy0xODctXFx0XFx0XFx0ZmJhdGNoLVxcdTAwM2Vmb2xpb3NbaV0gPSBOVUxMO1xcbi0tXFxubW0vZm9saW8uYz05Nzk9dm9pZCBmb2xpb3NfcHV0X3JlZnMoc3RydWN0IGZvbGlvX2JhdGNoICpmb2xpb3MsIHVuc2lnbmVkIGludCAqcmVmcylcXG4tLVxcbm1tL2ZvbGlvLmMtMTAxNy1cXHRcXHR9XFxubW0vZm9saW8uYzoxMDE4OlxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL2ZvbGlvLmMtMTAxOS1cXHRcXHRfX3BhZ2VfY2FjaGVfcmVsZWFzZShmb2xpbywgXFx1MDAyNmxydXZlYywgXFx1MDAyNmZsYWdzKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzkyNT1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTQyLVxcdFxcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk0MzpcXHRcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jLTM5NDQtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ0MzU9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0MC0vKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ0MTogKiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpcyBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5Olxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ0MjogKiB0aGUgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlubGluZSB3cmFwcGVyIGluIG1tL2ludGVybmFsLmhcXG5tbS9odWdlX21lbW9yeS5jLTQ0NDMtICogbGltaXRzIGl0cyBjYWxscyB0byB0aG9zZSBmb2xpb3Mgd2hpY2ggbWF5IGhhdmUgYSBfZGVmZXJyZWRfbGlzdCBmb3JcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0NS0gKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ0NjogKiBJdCBpcyB1bnNhZmUgdG8gY2FsbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgdW50aWwgZm9saW8gcmVmY291bnQgaXNcXG5tbS9odWdlX21lbW9yeS5jLTQ0NDctICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ1My0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQ0NTQ6Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9odWdlX21lbW9yeS5jLTQ0NTUte1xcbi0tXFxubW0vaW50ZXJuYWwuaD03MzU9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTc0Ni1cXG5tbS9pbnRlcm5hbC5oOjc0Nzpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9pbnRlcm5hbC5oOjc0ODpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ludGVybmFsLmgtNzQ5LXtcXG4tLVxcbm1tL2ludGVybmFsLmgtNzYwLVxcbm1tL2ludGVybmFsLmg6NzYxOlxcdHJldHVybiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL2ludGVybmFsLmgtNzYyLX1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz02MTg9dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtNjUzLVxcbm1tL21lbWNvbnRyb2wtdjEuYzo2NTQ6XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vbWVtY29udHJvbC12MS5jLTY1NS1cXHRmb2xpby1cXHUwMDNlbWVtY2dfZGF0YSA9IDA7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTMzNT1zdGF0aWMgdm9pZCB1bmNoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MzczLVxcbm1tL21lbWNvbnRyb2wuYzo1Mzc0OlxcdFxcdFdBUk5fT05fT05DRShmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTUzNzUtXFx0fVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU1MTM9dm9pZCBtZW1fY2dyb3VwX21pZ3JhdGUoc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU1NTQtXFx0LyogV2FybmluZyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBzbyBkb24ndCB3b3JyeSBhYm91dCByZWZjb3VudCBub24tMCAqL1xcbm1tL21lbWNvbnRyb2wuYzo1NTU1OlxcdFdBUk5fT05fT05DRShmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KG9sZCkpO1xcbm1tL21lbWNvbnRyb2wuYy01NTU2LVxcdG9sZC1cXHUwMDNlbWVtY2dfZGF0YSA9IDA7XFxuLS1cXG5tbS9taWdyYXRlLmM9NTgzPXN0YXRpYyBpbnQgX19mb2xpb19taWdyYXRlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9taWdyYXRlLmMtNTk3LVxcdFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbm1tL21pZ3JhdGUuYzo1OTg6XFx0XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vbWlncmF0ZS5jLTU5OS1cXHRcXHRcXHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIGV4cGVjdGVkX2NvdW50KTtcXG4tLVxcbm1tL21pZ3JhdGUuYy02MzAtXFx0LyogVGFrZSBvZmYgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cXG5tbS9taWdyYXRlLmM6NjMxOlxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL21pZ3JhdGUuYy02MzItXFxuLS1cXG5tbS92bXNjYW4uYz0xMDU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE1MDYtXFxubW0vdm1zY2FuLmM6MTUwNzpcXHRcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS92bXNjYW4uYy0xNTA4LVxcdFxcdGlmIChmb2xpb19iYXRjaF9hZGQoXFx1MDAyNmZyZWVfZm9saW9zLCBmb2xpbykgPT0gMCkge1xcbi0tXFxubW0vdm1zY2FuLmM9MTg2Nj1zdGF0aWMgdW5zaWduZWQgaW50IG1vdmVfZm9saW9zX3RvX2xydShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vdm1zY2FuLmMtMTkwMS1cXG5tbS92bXNjYW4uYzoxOTAyOlxcdFxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL3Ztc2Nhbi5jLTE5MDMtXFx0XFx0XFx0aWYgKGZvbGlvX2JhdGNoX2FkZChcXHUwMDI2ZnJlZV9mb2xpb3MsIGZvbGlvKSA9PSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjEzOjQzLjk5MDI0OTY3MloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTgwNjE3MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYG1tL2h1Z2VfbWVtb3J5LmNgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIGZpbGUuIEknbSBmb2N1c2luZyBvbiB0aGUgY29kZSBhcm91bmQgbGluZXMgNDQ0MCB0byA0NjAwLiBUaGF0IHJhbmdlIHVzdWFsbHkgY292ZXJzIGEgZmFpcmx5IHN1YnN0YW50aWFsIHNlY3Rpb24sIGxpa2VseSBpbnZvbHZpbmcgZWl0aGVyIHNvbWUgY29yZSBhbGxvY2F0aW9uIGxvZ2ljIG9yIG1hbmlwdWxhdGlvbiByZWxhdGVkIHRvIGh1Z2UgcGFnZXMsIGdpdmVuIHRoZSBmaWxlJ3MgbmFtZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBpbiBkZXRhaWwsIHNvIEknbSBnb2luZyB0byBzdGFydCBieSBjYXJlZnVsbHkgcmVhZGluZyB0aHJvdWdoIHRoYXQgc2VjdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYW55IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLiBNeSBpbnRlbnQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBpbXByb3ZlbWVudCwgYW5kIHByb2JhYmx5IGFsc28gdG8gcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggYW55IGNoYW5nZXMgc2luY2UgdGhlIGxhc3QgdGltZSBJIGxvb2tlZCBhdCB0aGlzIHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoxMzo0OC41NzA4Njg4OTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEwMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ0MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ0MDpcXHQvKlxcbjQ0NDE6XFx0ICogX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaXMgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseTpcXG40NDQyOlxcdCAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxcbjQ0NDM6XFx0ICogbGltaXRzIGl0cyBjYWxscyB0byB0aG9zZSBmb2xpb3Mgd2hpY2ggbWF5IGhhdmUgYSBfZGVmZXJyZWRfbGlzdCBmb3JcXG40NDQ0OlxcdCAqIHF1ZXVlaW5nIFRIUCBzcGxpdHMsIGFuZCB0aGF0IGxpc3QgaXMgKHJhY2lseSBvYnNlcnZlZCB0byBiZSkgbm9uLWVtcHR5LlxcbjQ0NDU6XFx0ICpcXG40NDQ2OlxcdCAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xcbjQ0NDc6XFx0ICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcXG40NDQ4OlxcdCAqIF9kZWZlcnJlZF9saXN0IG1pZ2h0IGJlIGluIHVzZSBvbiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkncyB1bmxvY2tlZFxcbjQ0NDk6XFx0ICogb24tc3RhY2sgbGlzdC5cXG40NDUwOlxcdCAqXFxuNDQ1MTpcXHQgKiBUaGUgbGlzdF9scnUgc3VibGlzdCBpcyBkZXRlcm1pbmVkIGJ5IGZvbGlvJ3MgbWVtY2c6IGl0IGlzIHRoZXJlZm9yZVxcbjQ0NTI6XFx0ICogaW1wb3J0YW50IHRvIHVucXVldWUgZGVmZXJyZWQgc3BsaXQgYmVmb3JlIGNoYW5naW5nIGZvbGlvIG1lbWNnLlxcbjQ0NTM6XFx0ICovXFxuNDQ1NDpcXHRib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjQ0NTU6XFx0e1xcbjQ0NTY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjQ0NTc6XFx0XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1O1xcbjQ0NTg6XFx0XFx0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XFxuNDQ1OTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjQ0NjA6XFx0XFx0Ym9vbCB1bnF1ZXVlZCA9IGZhbHNlO1xcbjQ0NjE6XFx0XFxuNDQ2MjpcXHRcXHRXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7XFxuNDQ2MzpcXHRcXHRXQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpO1xcbjQ0NjQ6XFx0XFxuNDQ2NTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuNDQ2NjpcXHRcXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG40NDY3OlxcdFxcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFxcdTAwMjZtZW1jZywgXFx1MDAyNmZsYWdzKTtcXG40NDY4OlxcdFxcdGlmIChfX2xpc3RfbHJ1X2RlbChcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFxcdTAwMjZmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCkpIHtcXG40NDY5OlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuNDQ3MDpcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG40NDcxOlxcdFxcdFxcdFxcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxcbjQ0NzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xcbjQ0NzM6XFx0XFx0XFx0fVxcbjQ0NzQ6XFx0XFx0XFx0dW5xdWV1ZWQgPSB0cnVlO1xcbjQ0NzU6XFx0XFx0fVxcbjQ0NzY6XFx0XFx0bGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUobHJ1LCBcXHUwMDI2ZmxhZ3MpO1xcbjQ0Nzc6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuNDQ3ODpcXHRcXG40NDc5OlxcdFxcdHJldHVybiB1bnF1ZXVlZDtcXHQvKiB1c2VmdWwgZm9yIGRlYnVnIHdhcm5pbmdzICovXFxuNDQ4MDpcXHR9XFxuNDQ4MTpcXHRcXG40NDgyOlxcdC8qIHBhcnRpYWxseV9tYXBwZWQ9ZmFsc2Ugd29uJ3QgY2xlYXIgUEdfcGFydGlhbGx5X21hcHBlZCBmb2xpbyBmbGFnICovXFxuNDQ4MzpcXHR2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcXG40NDg0OlxcdHtcXG40NDg1OlxcdFxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTtcXG40NDg2OlxcdFxcdGludCBuaWQ7XFxuNDQ4NzpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNDQ4ODpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjQ0ODk6XFx0XFxuNDQ5MDpcXHRcXHQvKlxcbjQ0OTE6XFx0XFx0ICogT3JkZXIgMSBmb2xpb3MgaGF2ZSBubyBzcGFjZSBmb3IgYSBkZWZlcnJlZCBsaXN0LCBidXQgd2UgYWxzb1xcbjQ0OTI6XFx0XFx0ICogd29uJ3Qgd2FzdGUgbXVjaCBtZW1vcnkgYnkgbm90IGFkZGluZyB0aGVtIHRvIHRoZSBkZWZlcnJlZCBsaXN0LlxcbjQ0OTM6XFx0XFx0ICovXFxuNDQ5NDpcXHRcXHRpZiAoZm9saW9fb3JkZXIoZm9saW8pIFxcdTAwM2M9IDEpXFxuNDQ5NTpcXHRcXHRcXHRyZXR1cm47XFxuNDQ5NjpcXHRcXG40NDk3OlxcdFxcdGlmICghcGFydGlhbGx5X21hcHBlZCBcXHUwMDI2XFx1MDAyNiAhc3BsaXRfdW5kZXJ1c2VkX3RocClcXG40NDk4OlxcdFxcdFxcdHJldHVybjtcXG40NDk5OlxcdFxcbjQ1MDA6XFx0XFx0LypcXG40NTAxOlxcdFxcdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxcbjQ1MDI6XFx0XFx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcXG40NTAzOlxcdFxcdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcXG40NTA0OlxcdFxcdCAqIHVubmVjZXNzYXJ5IHRvIGhhbmRsZSBpdCBhZ2FpbiBpbiB0aGUgc2hyaW5rZXIsIHNvIGV4Y2x1ZGluZ1xcbjQ1MDU6XFx0XFx0ICogc3dhcGNhY2hlIGhlcmUgbWF5IHN0aWxsIGJlIGEgdXNlZnVsIG9wdGltaXphdGlvbi5cXG40NTA2OlxcdFxcdCAqL1xcbjQ1MDc6XFx0XFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSlcXG40NTA4OlxcdFxcdFxcdHJldHVybjtcXG40NTA5OlxcdFxcbjQ1MTA6XFx0XFx0bmlkID0gZm9saW9fbmlkKGZvbGlvKTtcXG40NTExOlxcdFxcbjQ1MTI6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjQ1MTM6XFx0XFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxuNDUxNDpcXHRcXHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcXHUwMDI2bWVtY2csIFxcdTAwMjZmbGFncyk7XFxuNDUxNTpcXHRcXHRpZiAocGFydGlhbGx5X21hcHBlZCkge1xcbjQ1MTY6XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuNDUxNzpcXHRcXHRcXHRcXHRmb2xpb19zZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxuNDUxODpcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9wbWRfbWFwcGFibGUoZm9saW8pKVxcbjQ1MTk6XFx0XFx0XFx0XFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX0RFRkVSUkVEX1NQTElUX1BBR0UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoxMzo0OC41NzExODE0NDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzc3NjIyNzExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgYG1tL2h1Z2VfbWVtb3J5LmNgIGZ1bmN0aW9uczpcblxuKipEaXZpbmcgaW50byBEZWZlcnJlZCBTcGxpdCBTY2FucyBhbmQgSXNvbGF0ZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCBhbmQgYGRlZmVycmVkX3NwbGl0X2lzb2xhdGVgIHdpdGhpbiB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIGZpbGUuIEknbSBndWVzc2luZyB0aGVzZSBhcmUgY3J1Y2lhbCBmb3IgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBodWdlIHBhZ2VzIGFuZCBoYW5kbGVzIHRoZWlyIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gaXQgY29tZXMgdG8gZGVhbGluZyB3aXRoIGZyYWdtZW50YXRpb24gb3IgY29udGVudGlvbi4gVGhlIFwiZGVmZXJyZWRcIiBwYXJ0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHNvbWUgc29ydCBvZiBsYXp5IGV2YWx1YXRpb24gb3IgYmFja2dyb3VuZCBwcm9jZXNzaW5nLCBsaWtlbHkgdG8gYXZvaWQgYmxvY2tpbmcgY3JpdGljYWwgcGF0aHMuIEknbSBrZWVuIHRvIHNlZSBob3cgdGhlIGNvZGUgY29vcmRpbmF0ZXMgdGhlIGNvbXBsZXggaW50ZXJwbGF5IGJldHdlZW4gdGhlIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCBwaHlzaWNhbCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gTlVNQSBjb25zaWRlcmF0aW9ucyB0aGF0IGFyaXNlIHdpdGggaHVnZSBwYWdlcy4gSSBleHBlY3QgdG8gZmluZCBzb21lIGNsZXZlciBhbGdvcml0aG1zIGhlcmUsIGVzcGVjaWFsbHkgaWYgdGhlc2UgZnVuY3Rpb25zIHBsYXkgYSBwYXJ0IGluIG1pbmltaXppbmcgVExCIG1pc3NlcyBvciByZWR1Y2luZyBmcmFnbWVudGF0aW9uIG92ZXIgdGltZS4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgZm9jdXNlZCBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjcml0ZXJpYSB0aGF0IHRyaWdnZXIgdGhlIGRlZmVycmVkIGFjdGlvbnMgYW5kIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCB0byBtYWludGFpbiBjb25zaXN0ZW5jeSBkdXJpbmcgdGhlc2Ugb3BlcmF0aW9ucy4gTGV0J3Mgc2VlIGhvdyBzbWFydCB0aGUga2VybmVsIHJlYWxseSBpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6Njk3NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MTM6NTYuMzQ3NDExNDgxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4Nzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdlX21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1NjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ1NjA6XFx0XFx0XFx0XFx0ICovXFxuNDU2MTpcXHRcXHRcXHRcXHRpZiAoKytudW1fZmlsbGVkX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUiAtIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSlcXG40NTYyOlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG40NTYzOlxcdFxcdFxcdH1cXG40NTY0OlxcdFxcdH1cXG40NTY1OlxcdFxcdHJldHVybiBmYWxzZTtcXG40NTY2OlxcdH1cXG40NTY3OlxcdFxcbjQ1Njg6XFx0c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXFxuNDU2OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbGlzdF9scnVfb25lICpscnUsXFxuNDU3MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB2b2lkICpjYl9hcmcpXFxuNDU3MTpcXHR7XFxuNDU3MjpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCBmb2xpbywgX2RlZmVycmVkX2xpc3QpO1xcbjQ1NzM6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqZnJlZWFibGUgPSBjYl9hcmc7XFxuNDU3NDpcXHRcXG40NTc1OlxcdFxcdC8qIExvc3QgcmFjZSB0byBmb2xpb19wdXQoKSBvciB0aGUgZm9saW8gaXMgdW5kZXIgZm9saW9fcmVmX2ZyZWV6ZSgpICovXFxuNDU3NjpcXHRcXHRpZiAoIWZvbGlvX3RyeV9nZXQoZm9saW8pKVxcbjQ1Nzc6XFx0XFx0XFx0cmV0dXJuIExSVV9TS0lQO1xcbjQ1Nzg6XFx0XFxuNDU3OTpcXHRcXHRsaXN0X2xydV9pc29sYXRlX21vdmUobHJ1LCBpdGVtLCBmcmVlYWJsZSk7XFxuNDU4MDpcXHRcXHRyZXR1cm4gTFJVX1JFTU9WRUQ7XFxuNDU4MTpcXHR9XFxuNDU4MjpcXHRcXG40NTgzOlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuNDU4NDpcXHRcXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbjQ1ODU6XFx0e1xcbjQ1ODY6XFx0XFx0TElTVF9IRUFEKGRpc3Bvc2UpO1xcbjQ1ODc6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7XFxuNDU4ODpcXHRcXHRpbnQgc3BsaXQgPSAwO1xcbjQ1ODk6XFx0XFx0dW5zaWduZWQgbG9uZyBpc29sYXRlZDtcXG40NTkwOlxcdFxcbjQ1OTE6XFx0XFx0aXNvbGF0ZWQgPSBsaXN0X2xydV9zaHJpbmtfd2Fsa19pcnEoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgc2MsXFxuNDU5MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSwgXFx1MDAyNmRpc3Bvc2UpO1xcbjQ1OTM6XFx0XFxuNDU5NDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFxcdTAwMjZkaXNwb3NlLCBfZGVmZXJyZWRfbGlzdCkge1xcbjQ1OTU6XFx0XFx0XFx0Ym9vbCBkaWRfc3BsaXQgPSBmYWxzZTtcXG40NTk2OlxcdFxcdFxcdGJvb2wgdW5kZXJ1c2VkID0gZmFsc2U7XFxuNDU5NzpcXHRcXG40NTk4OlxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCk7XFxuNDU5OTpcXHRcXG40NjAwOlxcdFxcdFxcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xcbjQ2MDE6XFx0XFx0XFx0XFx0LypcXG40NjAyOlxcdFxcdFxcdFxcdCAqIFNlZSB0cnlfdG9fbWFwX3VudXNlZF90b196ZXJvcGFnZSgpOiB3ZSBjYW5ub3RcXG40NjAzOlxcdFxcdFxcdFxcdCAqIG9wdGltaXplIHplcm8tZmlsbGVkIHBhZ2VzIGFmdGVyIHNwbGl0dGluZyBhblxcbjQ2MDQ6XFx0XFx0XFx0XFx0ICogbWxvY2tlZCBmb2xpby5cXG40NjA1OlxcdFxcdFxcdFxcdCAqL1xcbjQ2MDY6XFx0XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfbWxvY2tlZChmb2xpbykpXFxuNDYwNzpcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuNDYwODpcXHRcXHRcXHRcXHR1bmRlcnVzZWQgPSB0aHBfdW5kZXJ1c2VkKGZvbGlvKTtcXG40NjA5OlxcdFxcdFxcdFxcdGlmICghdW5kZXJ1c2VkKVxcbjQ2MTA6XFx0XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbjQ2MTE6XFx0XFx0XFx0fVxcbjQ2MTI6XFx0XFx0XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcXG40NjEzOlxcdFxcdFxcdFxcdGdvdG8gcmVxdWV1ZTtcXG40NjE0OlxcdFxcdFxcdGlmICghc3BsaXRfZm9saW8oZm9saW8pKSB7XFxuNDYxNTpcXHRcXHRcXHRcXHRkaWRfc3BsaXQgPSB0cnVlO1xcbjQ2MTY6XFx0XFx0XFx0XFx0aWYgKHVuZGVydXNlZClcXG40NjE3OlxcdFxcdFxcdFxcdFxcdGNvdW50X3ZtX2V2ZW50KFRIUF9VTkRFUlVTRURfU1BMSVRfUEFHRSk7XFxuNDYxODpcXHRcXHRcXHRcXHRzcGxpdCsrO1xcbjQ2MTk6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoxMzo1Ni4zNDc4MDIyMDFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM2NzU5MDU3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCBpcyB0aGF0IGl0J3MgZm9jdXNpbmcgb24gc2ltcGxpZnlpbmcgdGhlIGxvY2tpbmcgYW5kIGRlZmVycmVkIHNwbGl0IHF1ZXVlIGhhbmRsaW5nIHdpdGhpbiB0aGUgaHVnZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBJdCBsb29rcyBsaWtlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBhbmQgYGRlZmVycmVkX3NwbGl0X2lzb2xhdGVgLlxuXG5Fc3NlbnRpYWxseSwgSSBzZWUgYSByZWZhY3RvcmluZyBvZiB0aGUgbG9ja2luZyBvcmRlciBhbmQgbG9naWMgYXJvdW5kIGZyZWV6aW5nIGZvbGlvcyBhbmQgZGVhbGluZyB3aXRoIHBhcnRpYWxseSBtYXBwZWQgcGFnZXMgaW4gdGhlIGRlZmVycmVkIHNwbGl0IExSVS4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBMUlUgbG9jayBjb3VsZCBiZSB0YWtlbiAqYmVmb3JlKiBmcmVlemluZyB0aGUgcmVmY291bnQsIHdoaWNoIGhhcyBub3cgYmVlbiByZWFycmFuZ2VkIHRvIGZyZWV6ZSBmaXJzdCBhbmQgKnRoZW4qIGRlYWwgd2l0aCB0aGUgTFJVLiBBbHNvLCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZWAgaGFzIGJlZW4gc2ltcGxpZmllZCBieSBqdXN0IHJldHVybmluZyBgTFJVX1NLSVBgIG9uIGBmb2xpb190cnlfZ2V0YCBmYWlsdXJlcy5cblxuTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIHNlZTpcblxuKiAgIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UgaW4gYSBtYW5uZXIgdGhhdCB3b3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuKiAgIFRoZSBsb2dpYyBpdHNlbGYgZG9lc24ndCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4qICAgVGhlcmUgYXJlbid0IGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgd2hpY2ggaXMgZ29vZC5cbiogICBJIGRvbid0IHNlZSBhbnkgY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWQgdG8gYm91bmRzIGNoZWNrIHZ1bG5lcmFiaWxpdGllcywgb3IgdGhlIGxlYWtpbmcgb2YgdW5pbml0aWFsaXplZCBieXRlcyB0aHJvdWdoIGV4aXN0aW5nIGJ1ZmZlcnMuXG4qICAgQ3J1Y2lhbGx5LCB0aGVyZSBhcmUgbm8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIG9yIGlvY3RsIGNhbGxzIHRoYXQgY291bGQgbGVhZCB0byB1c2VyLXNwYWNlIGxlYWtzLlxuKiAgIEknbSBhbHNvIG5vdCBzZWVpbmcgYW55IG9idmlvdXMgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSByaXNrcyBoZXJlLlxuXG5UaGlzIGxvb2tzIGxpa2UgcHVyZSBNTSBzeW5jaHJvbml6YXRpb246IGNoYW5nZXMgdG8gcGFnZSBzcGxpdHRpbmcsIExSVSBsaXN0IGhhbmRsaW5nLCBhbmQgbG9ja2luZy4gQWxsIHRoZSBjaGFuZ2VzIGludm9sdmUgbWFuaXB1bGF0aW5nIGxpc3QgcG9pbnRlcnMsIHBhZ2UgZmxhZ3MsIHJlZmNvdW50cywgYW5kIG1lbW9yeSBjZ3JvdXAgc3RhdHMuIFNvLCB3aXRoIHRoaXMga2luZCBvZiB3b3JrLCB3aGF0IEknbSBsb29raW5nIGZvciBhcmU6IHJhY2UgY29uZGl0aW9ucywgbG9jayBvcmRlciBwcm9ibGVtcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgZG91YmxlIGxpc3QgZGVsZXRpb25zLCByZWZjb3VudCB1bmRlcmZsb3cgb3IgbGVha3MuXG5cbkhvd2V2ZXIsIGFsbCBvZiB0aGVzZSBhcmUgcHJlY2lzZWx5IHRoZSBraW5kcyBvZiBpc3N1ZXMgdGhhdCBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIG1lY2hhbmlzbXMgKGUuZy4sIGFzc2VydGlvbnMgbGlrZSBgVk1fV0FSTl9PTmAsIGBXQVJOX09OX09OQ0VgKSBhcmUgZGVzaWduZWQgdG8gY2F0Y2guIEFuZCBJIGRvbid0IHNlZSBhbnkgdmVjdG9yIGZvciBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGxlYWsgKnRoYXQgd291bGQgb25seSBiZSBkZXRlY3RhYmxlIGJ5IEtNU0FOKi5cblxuVGhlcmVmb3JlLCBiYXNlZCBvbiBteSBhbmFseXNpcyBvZiB0aGUgcGF0Y2ggYW5kIG15IHVuZGVyc3RhbmRpbmcgb2YgbWVtb3J5IHNhZmV0eSB0b29scywgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC5cblxuU28sIHRoZSBzdW1tYXJ5IGlzIHRoYXQ6IHRoaXMgcGF0Y2ggc2ltcGxpZmllcyBsb2NraW5nIGFuZCBkZWZlcnJlZCBzcGxpdCBxdWV1ZSBoYW5kbGluZyBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKClgIGFuZCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSgpYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFRoZSBjaGFuZ2VzIG9ubHkgbWFuaXB1bGF0ZSBsaXN0IHBvaW50ZXJzIChgX2RlZmVycmVkX2xpc3RgKSwgcGFnZSBmbGFncyAoYFBHX3BhcnRpYWxseV9tYXBwZWRgKSwgZm9saW8gcmVmY291bnRzLCBhbmQgbWVtb3J5IGNncm91cCBzdGF0cy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBzdGFjay9oZWFwIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQsIG5vciBhcmUgdGhlcmUgYW55IHVzZXItc3BhY2UgY29weSBtZWNoYW5pc21zIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9wYWRkaW5nLiBBbnkgY29uY3VycmVuY3kgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2UgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGFzc2VydGlvbnMuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTI5LCJPdXRwdXRUb2tlbnMiOjIwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjE0OjEwLjAyMzcxMDU4OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSBoYW5kbGluZyBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKClgIGFuZCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSgpYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHJlcGxhY2luZyBtYW51YWwgTFJVIGxvY2tpbmcgcHJpb3IgdG8gZm9saW8gcmVmIGZyZWV6aW5nIHdpdGggY2FsbHMgdG8gYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKWAgYW5kIHNraXBwaW5nIHVucmVmZXJlbmNlZCBmb2xpb3MgZHVyaW5nIGlzb2xhdGlvbi5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBmb2xpbyByZWZlcmVuY2UgY291bnRpbmcsIGxpc3QgbWFuYWdlbWVudCAoYF9kZWZlcnJlZF9saXN0YCksIGFuZCBmb2xpbyBmbGFncyAoYFBHX3BhcnRpYWxseV9tYXBwZWRgKS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gc3RhY2sgb3IgaGVhcCBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgb3IgbWFuaXB1bGF0ZWQsIGFuZCBubyB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgY29uY3VycmVuY3ksIHJlZmNvdW50LCBvciBsaXN0IGNvcnJ1cHRpb24gYnVncyBpbnRyb2R1Y2VkIGhlcmUgd291bGQgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiwgTE9DS0RFUCwgb3Iga2VybmVsIGFzc2VydGlvbnMsIHJhdGhlciB0aGFuIEtNU0FOIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdGlvbi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIGhhbmRsaW5nIGluIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoKWAgYW5kIGBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKClgIGluIGBtbS9odWdlX21lbW9yeS5jYCwgcmVwbGFjaW5nIG1hbnVhbCBMUlUgbG9ja2luZyBwcmlvciB0byBmb2xpbyByZWYgZnJlZXppbmcgd2l0aCBjYWxscyB0byBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpYCBhbmQgc2tpcHBpbmcgdW5yZWZlcmVuY2VkIGZvbGlvcyBkdXJpbmcgaXNvbGF0aW9uLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIGZvbGlvIHJlZmVyZW5jZSBjb3VudGluZywgbGlzdCBtYW5hZ2VtZW50IChgX2RlZmVycmVkX2xpc3RgKSwgYW5kIGZvbGlvIGZsYWdzIChgUEdfcGFydGlhbGx5X21hcHBlZGApLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBvciBtYW5pcHVsYXRlZCwgYW5kIG5vIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBjb25jdXJyZW5jeSwgcmVmY291bnQsIG9yIGxpc3QgY29ycnVwdGlvbiBidWdzIGludHJvZHVjZWQgaGVyZSB3b3VsZCBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLCBMT0NLREVQLCBvciBrZXJuZWwgYXNzZXJ0aW9ucywgcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrwmg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 09:26:16 +0000 UTC FinishedAt: 2026-08-31 10:14:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4a6983a217b4358b6c648e5b280261ca533544d9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4a6983a217b4358b6c648e5b280261ca533544d9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "4aca2fa6-2165-4bf5-82d7-168a9218cbd3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__split_huge_page_to_list_to_order", "folio_split", "split_folio_to_list", "folio_split_unmapped", "__folio_unqueue_deferred_split", "deferred_split_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlciYjMzQ7LAogICAgJiMzNDtmb2xpb19zcGxpdCYjMzQ7LAogICAgJiMzNDtzcGxpdF9mb2xpb190b19saXN0JiMzNDssCiAgICAmIzM0O2ZvbGlvX3NwbGl0X3VubWFwcGVkJiMzNDssCiAgICAmIzM0O19fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCYjMzQ7LAogICAgJiMzNDtkZWZlcnJlZF9zcGxpdF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgaGFuZGxpbmcgaW4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZCgpYCBhbmQgYGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoKWAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCByZXBsYWNpbmcgbWFudWFsIExSVSBsb2NraW5nIHByaW9yIHRvIGZvbGlvIHJlZiBmcmVlemluZyB3aXRoIGNhbGxzIHRvIGBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KClgIGFuZCBza2lwcGluZyB1bnJlZmVyZW5jZWQgZm9saW9zIGR1cmluZyBpc29sYXRpb24uXG5cblRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIGZvbGlvIHJlZmVyZW5jZSBjb3VudGluZywgbGlzdCBtYW5hZ2VtZW50IChgX2RlZmVycmVkX2xpc3RgKSwgYW5kIGZvbGlvIGZsYWdzIChgUEdfcGFydGlhbGx5X21hcHBlZGApLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBvciBtYW5pcHVsYXRlZCwgYW5kIG5vIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBjb25jdXJyZW5jeSwgcmVmY291bnQsIG9yIGxpc3QgY29ycnVwdGlvbiBidWdzIGludHJvZHVjZWQgaGVyZSB3b3VsZCBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLCBMT0NLREVQLCBvciBrZXJuZWwgYXNzZXJ0aW9ucywgcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLCBzcGVjaWZpY2FsbHkgaG93IGRlZmVycmVkIHNwbGl0IGxpc3QgbG9ja2luZyBhbmQgcmVmY291bnQgZnJlZXppbmcgc3luY2hyb25pemUgZHVyaW5nIGZvbGlvIHNwbGl0dGluZyBhbmQgc2hyaW5rZXIgaXNvbGF0aW9uIChkZWZlcnJlZF9zcGxpdF9pc29sYXRlIGFuZCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBtZW1vcnkgcmVjbGFpbSBhbmQgVEhQIHNwbGl0dGluZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiMjNiYTYyZWRlMDJmNTgxNzhiYzhkNzdmMDU5YTdmOTFiMTA0YWVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTA6MDc6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IGNlZDQwMGY3MmQ0M2EuLmM4NGU4Y2JjOTg2ZDkgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMzkzMSw0MSAmIzQzOzM5MzEsMjcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cbiBcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XG4gXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG4gXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuLVx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1O1xuLVx0Ym9vbCBkZXF1ZXVlX2RlZmVycmVkO1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgXHUwMDI2XHUwMDI2IGVuZCk7XG4tXHQvKlxuLVx0ICogSWYgdGhpcyBmb2xpbyBjYW4gYmUgb24gdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlLCBsb2NrIG91dFxuLVx0ICogdGhlIHNocmlua2VyIGJlZm9yZSBmcmVlemluZyB0aGUgcmVmLiBJZiB0aGUgc2hyaW5rZXIgc2Vlc1xuLVx0ICogYSAwLXJlZiBmb2xpbywgaXQgYXNzdW1lcyBpdCBiZWF0IGZvbGlvX3B1dCgpIHRvIHRoZSBsaXN0XG4tXHQgKiBsb2NrIGFuZCBtdXN0IGNsZWFuIHVwIHRoZSBMUlUgc3RhdGUgLSB0aGUgc2FtZSBkZXF1ZXVlIHdlXG4tXHQgKiB3aWxsIGRvIGJlbG93IGFzIHBhcnQgb2YgdGhlIHNwbGl0LlxuLVx0ICovXG4tXHRkZXF1ZXVlX2RlZmVycmVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgb2xkX29yZGVyIFx1MDAzZSAxO1xuLVx0aWYgKGRlcXVldWVfZGVmZXJyZWQpIHtcbi1cdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuLVxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuLVx0XHRscnUgPSBsaXN0X2xydV9sb2NrKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSxcbi1cdFx0XHRcdCAgICBmb2xpb19uaWQoZm9saW8pLCBcdTAwMjZtZW1jZyk7XG4tXHR9XG4mIzQzO1xuIFx0aWYgKGZvbGlvX3JlZl9mcmVlemUoZm9saW8sIGZvbGlvX2NhY2hlX3JlZl9jb3VudChmb2xpbykgJiM0MzsgMSkpIHtcbiBcdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSA9IE5VTEw7XG4gXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiBcbi1cdFx0aWYgKGRlcXVldWVfZGVmZXJyZWQpIHtcbi1cdFx0XHRfX2xpc3RfbHJ1X2RlbChcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCwgZm9saW9fbmlkKGZvbGlvKSk7XG4tXHRcdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcbi1cdFx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRcdFx0bW9kX210aHBfc3RhdChvbGRfb3JkZXIsXG4tXHRcdFx0XHRcdE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbi1cdFx0XHR9XG4tXHRcdFx0bGlzdF9scnVfdW5sb2NrKGxydSk7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHQvKiBUYWtlIG9mZiB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cbiYjNDM7XHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0XG4mIzQzO1x0XHQgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kXG4mIzQzO1x0XHQgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuXG4mIzQzO1x0XHQgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcbiYjNDM7XHRcdFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4mIzQzO1x0XHRcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxuJiM0MztcdFx0XHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbiBcdFx0fVxuIFxuIFx0XHRpZiAobWFwcGluZykge1xuQEAgLTQwNjcsMTAgJiM0Mzs0MDUzLDYgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cbiBcdFx0aWYgKGNpKVxuIFx0XHRcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGRlcXVldWVfZGVmZXJyZWQpIHtcbi1cdFx0XHRsaXN0X2xydV91bmxvY2sobHJ1KTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0fVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdH1cbiBcbkBAIC00NTkwLDIyICYjNDM7NDU3MiwxMSBAQCBzdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IGZvbGlvLCBfZGVmZXJyZWRfbGlzdCk7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlYWJsZSA9IGNiX2FyZztcbiBcbi1cdGlmIChmb2xpb190cnlfZ2V0KGZvbGlvKSkge1xuLVx0XHRsaXN0X2xydV9pc29sYXRlX21vdmUobHJ1LCBpdGVtLCBmcmVlYWJsZSk7XG4tXHRcdHJldHVybiBMUlVfUkVNT1ZFRDtcbi1cdH1cbiYjNDM7XHQvKiBMb3N0IHJhY2UgdG8gZm9saW9fcHV0KCkgb3IgdGhlIGZvbGlvIGlzIHVuZGVyIGZvbGlvX3JlZl9mcmVlemUoKSAqL1xuJiM0MztcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gTFJVX1NLSVA7XG4gXG4tXHQvKlxuLVx0ICogV2UgbG9zdCByYWNlIHdpdGggZm9saW9fcHV0KCkuIFJlYWQgZm9saW8gc3RhdGUgYmVmb3JlIHRoZVxuLVx0ICogaXNvbGF0ZTogZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGNoZWNrcyBsaXN0X2VtcHR5KClcbi1cdCAqIGxvY2tsZXNzbHksIHNvIG9uY2UgcmVtb3ZlZCB0aGUgZm9saW8gY2FuIGJlIGZyZWVkIGFueSB0aW1lLlxuLVx0ICovXG4tXHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbi1cdFx0bW9kX210aHBfc3RhdChmb2xpb19vcmRlcihmb2xpbyksXG4tXHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0fVxuLVx0bGlzdF9scnVfaXNvbGF0ZShscnUsIGl0ZW0pO1xuJiM0MztcdGxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTtcbiBcdHJldHVybiBMUlVfUkVNT1ZFRDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyJiMzNDssCiAgICAmIzM0O2ZvbGlvX3NwbGl0JiMzNDssCiAgICAmIzM0O3NwbGl0X2ZvbGlvX3RvX2xpc3QmIzM0OywKICAgICYjMzQ7Zm9saW9fc3BsaXRfdW5tYXBwZWQmIzM0OywKICAgICYjMzQ7X19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0JiMzNDssCiAgICAmIzM0O2RlZmVycmVkX3NwbGl0X2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCksIHNwZWNpZmljYWxseSBob3cgZGVmZXJyZWQgc3BsaXQgbGlzdCBsb2NraW5nIGFuZCByZWZjb3VudCBmcmVlemluZyBzeW5jaHJvbml6ZSBkdXJpbmcgZm9saW8gc3BsaXR0aW5nIGFuZCBzaHJpbmtlciBpc29sYXRpb24gKGRlZmVycmVkX3NwbGl0X2lzb2xhdGUgYW5kIF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZCkuIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IG1lbW9yeSByZWNsYWltIGFuZCBUSFAgc3BsaXR0aW5nIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIyM2JhNjJlZGUwMmY1ODE3OGJjOGQ3N2YwNTlhN2Y5MWIxMDRhZWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDowNzozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGNlZDQwMGY3MmQ0M2EuLmM4NGU4Y2JjOTg2ZDkgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMzkzMSw0MSAmIzQzOzM5MzEsMjcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG4KIAlzdHJ1Y3QgZm9saW8gKmVuZF9mb2xpbyA9IGZvbGlvX25leHQoZm9saW8pOwogCXN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDsKIAlpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwotCXN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTsKLQlib29sIGRlcXVldWVfZGVmZXJyZWQ7CiAJaW50IHJldCA9IDA7CiAKIAlWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgJmFtcDsmYW1wOyBlbmQpOwotCS8qCi0JICogSWYgdGhpcyBmb2xpbyBjYW4gYmUgb24gdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlLCBsb2NrIG91dAotCSAqIHRoZSBzaHJpbmtlciBiZWZvcmUgZnJlZXppbmcgdGhlIHJlZi4gSWYgdGhlIHNocmlua2VyIHNlZXMKLQkgKiBhIDAtcmVmIGZvbGlvLCBpdCBhc3N1bWVzIGl0IGJlYXQgZm9saW9fcHV0KCkgdG8gdGhlIGxpc3QKLQkgKiBsb2NrIGFuZCBtdXN0IGNsZWFuIHVwIHRoZSBMUlUgc3RhdGUgLSB0aGUgc2FtZSBkZXF1ZXVlIHdlCi0JICogd2lsbCBkbyBiZWxvdyBhcyBwYXJ0IG9mIHRoZSBzcGxpdC4KLQkgKi8KLQlkZXF1ZXVlX2RlZmVycmVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmYW1wOyZhbXA7IG9sZF9vcmRlciAmZ3Q7IDE7Ci0JaWYgKGRlcXVldWVfZGVmZXJyZWQpIHsKLQkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJbWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7Ci0JCWxydSA9IGxpc3RfbHJ1X2xvY2soJmFtcDtkZWZlcnJlZF9zcGxpdF9scnUsCi0JCQkJICAgIGZvbGlvX25pZChmb2xpbyksICZhbXA7bWVtY2cpOwotCX0KJiM0MzsKIAlpZiAoZm9saW9fcmVmX2ZyZWV6ZShmb2xpbywgZm9saW9fY2FjaGVfcmVmX2NvdW50KGZvbGlvKSAmIzQzOyAxKSkgewogCQlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpID0gTlVMTDsKIAkJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwogCi0JCWlmIChkZXF1ZXVlX2RlZmVycmVkKSB7Ci0JCQlfX2xpc3RfbHJ1X2RlbCgmYW1wO2RlZmVycmVkX3NwbGl0X2xydSwgbHJ1LAotCQkJCSAgICAgICAmYW1wO2ZvbGlvLSZndDtfZGVmZXJyZWRfbGlzdCwgZm9saW9fbmlkKGZvbGlvKSk7Ci0JCQlpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkgewotCQkJCWZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pOwotCQkJCW1vZF9tdGhwX3N0YXQob2xkX29yZGVyLAotCQkJCQlNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7Ci0JCQl9Ci0JCQlsaXN0X2xydV91bmxvY2sobHJ1KTsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJLyogVGFrZSBvZmYgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoaWxlIGZyb3plbiBhbmQgbWVtY2cgc2V0ICovCiYjNDM7CQlmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0CiYjNDM7CQkgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kCiYjNDM7CQkgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuCiYjNDM7CQkgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKJiM0MzsJCQlmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKJiM0MzsJCQltb2RfbXRocF9zdGF0KG9sZF9vcmRlciwKJiM0MzsJCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwogCQl9CiAKIAkJaWYgKG1hcHBpbmcpIHsKQEAgLTQwNjcsMTAgJiM0Mzs0MDUzLDYgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG4KIAkJaWYgKGNpKQogCQkJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiAJfSBlbHNlIHsKLQkJaWYgKGRlcXVldWVfZGVmZXJyZWQpIHsKLQkJCWxpc3RfbHJ1X3VubG9jayhscnUpOwotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCX0KIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCkBAIC00NTkwLDIyICYjNDM7NDU3MiwxMSBAQCBzdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCBmb2xpbywgX2RlZmVycmVkX2xpc3QpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmZyZWVhYmxlID0gY2JfYXJnOwogCi0JaWYgKGZvbGlvX3RyeV9nZXQoZm9saW8pKSB7Ci0JCWxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTsKLQkJcmV0dXJuIExSVV9SRU1PVkVEOwotCX0KJiM0MzsJLyogTG9zdCByYWNlIHRvIGZvbGlvX3B1dCgpIG9yIHRoZSBmb2xpbyBpcyB1bmRlciBmb2xpb19yZWZfZnJlZXplKCkgKi8KJiM0MzsJaWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSkKJiM0MzsJCXJldHVybiBMUlVfU0tJUDsKIAotCS8qCi0JICogV2UgbG9zdCByYWNlIHdpdGggZm9saW9fcHV0KCkuIFJlYWQgZm9saW8gc3RhdGUgYmVmb3JlIHRoZQotCSAqIGlzb2xhdGU6IGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBjaGVja3MgbGlzdF9lbXB0eSgpCi0JICogbG9ja2xlc3NseSwgc28gb25jZSByZW1vdmVkIHRoZSBmb2xpbyBjYW4gYmUgZnJlZWQgYW55IHRpbWUuCi0JICovCi0JaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKLQkJZm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7Ci0JCW1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLAotCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwotCX0KLQlsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7CiYjNDM7CWxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTsKIAlyZXR1cm4gTFJVX1JFTU9WRUQ7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE1MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEh1Z2UgTWVtb3J5IFBhdGNoKioKCk9rYXksIHNvIGEgcGF0Y2ggZm9yIGBtbS9odWdlX21lbW9yeS5jYCBjYW1lIGluLiBMZXQmIzM5O3MgZ2V0IHRvIHdvcmsgZGlzc2VjdGluZyB0aGlzLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIG1hZGUuIEkmIzM5O2xsIHB1bGwgdXAgdGhlIHBhdGNoIGFuZCB0aGUgY29ycmVzcG9uZGluZyBjb2RlIGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGltZSB0byBzZWUgZXhhY3RseSB3aGF0IGhhcyBiZWVuIHR3ZWFrZWQuIEkmIzM5O2xsIHVzZSBteSB1c3VhbCB0b29scyBoZXJlLiBBIHF1aWNrIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB3aWxsIHBpbnBvaW50IHRoZSByZWxldmFudCBzZWN0aW9ucyBhcm91bmQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCwgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIHByb3Bvc2VkIGZpeC4gR290dGEgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgY2hhbmdlIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgaHVnZSBtZW1vcnkgbWFuYWdlbWVudC4gUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM5MTg9c3RhdGljIHVuc2lnbmVkIGludCBmb2xpb19jYWNoZV9yZWZfY291bnQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM5MjQtXG5tbS9odWdlX21lbW9yeS5jOjM5MjU6c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtMzkyNi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDA4Mz1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyMTItXG5tbS9odWdlX21lbW9yeS5jOjQyMTM6XHRyZXQgPSBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIFx1MDAyNnhhcywgbWFwcGluZyxcbm1tL2h1Z2VfbWVtb3J5LmMtNDIxNC1cdFx0XHRcdFx0XHR0cnVlLCBsaXN0LCBzcGxpdF90eXBlLCBlbmQsIFx1MDAyNm5yX3NobWVtX2Ryb3BwZWQpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDMwMT1pbnQgZm9saW9fc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQzMTMtXHRsb2NhbF9pcnFfZGlzYWJsZSgpO1xubW0vaHVnZV9tZW1vcnkuYzo0MzE0Olx0cmV0ID0gX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKGZvbGlvLCBuZXdfb3JkZXIsIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIE5VTEwsXG5tbS9odWdlX21lbW9yeS5jLTQzMTUtXHRcdFx0XHRcdFx0TlVMTCwgZmFsc2UsIE5VTEwsIFNQTElUX1RZUEVfVU5JRk9STSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzc2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgRGVlcCBpbnRvIGBtbS9odWdlX21lbW9yeS5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBtbS9odWdlX21lbW9yeS5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDM5MDAgYWxsIHRoZSB3YXkgdG8gYWJvdXQgbGluZSA0NjUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBjaHVuayBvZiB0aGUgY29kZSB0byBjaGV3IG9uIGFuZCByZWFsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSBleHBlY3QgdGhhdCBJJiMzOTtsbCBmaW5kIHRoZSBrZXkgbWVjaGFuaXNtcyBmb3IgaGFuZGxpbmcgc29tZSBjb21wbGV4IHBhcnQgb2YgdGhlIGh1Z2UgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0ZWNobmlxdWVzIHRoZSBkZXZlbG9wZXJzIGhhdmUgZW1wbG95ZWQgaGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZWl0aGVyIGZpbmQgYSBwYXJ0aWN1bGFybHkgY2xldmVyIGRhdGEgc3RydWN0dXJlLCBhbiBlZmZpY2llbnQgbG9ja2luZyBzdHJhdGVneSwgb3IgbWF5YmUgZXZlbiBhIG5vdmVsIGFwcHJvYWNoIHRvIGFkZHJlc3NpbmcgYSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvciBhbmQgc3RhcnQgdHJhY2luZyB0aGUgbG9naWMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszOTIwOlx0XHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSlcbjM5MjE6XHRcdFx0cmV0dXJuIDA7XG4zOTIyOlx0XHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuMzkyMzpcdH1cbjM5MjQ6XHRcbjM5MjU6XHRzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuMzkyNjpcdFx0XHRcdFx0XHQgICAgIHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHhhX3N0YXRlICp4YXMsXG4zOTI3Olx0XHRcdFx0XHRcdCAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGJvb2wgZG9fbHJ1LFxuMzkyODpcdFx0XHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGVudW0gc3BsaXRfdHlwZSBzcGxpdF90eXBlLFxuMzkyOTpcdFx0XHRcdFx0XHQgICAgIHBnb2ZmX3QgZW5kLCBpbnQgKm5yX3NobWVtX2Ryb3BwZWQpXG4zOTMwOlx0e1xuMzkzMTpcdFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcbjM5MzI6XHRcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDtcbjM5MzM6XHRcdGludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XG4zOTM0Olx0XHRpbnQgcmV0ID0gMDtcbjM5MzU6XHRcbjM5MzY6XHRcdFZNX1dBUk5fT05fT05DRSghbWFwcGluZyBcdTAwMjZcdTAwMjYgZW5kKTtcbjM5Mzc6XHRcbjM5Mzg6XHRcdGlmIChmb2xpb19yZWZfZnJlZXplKGZvbGlvLCBmb2xpb19jYWNoZV9yZWZfY291bnQoZm9saW8pICYjNDM7IDEpKSB7XG4zOTM5Olx0XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kgPSBOVUxMO1xuMzk0MDpcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4zOTQxOlx0XG4zOTQyOlx0XHRcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xuMzk0MzpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbjM5NDQ6XHRcbjM5NDU6XHRcdFx0LypcbjM5NDY6XHRcdFx0ICogZGVmZXJyZWRfc3BsaXRfc2NhbigpIHRha2VzIHRoZSBmb2xpbyBvZmYgdGhlIHF1ZXVlIGJlZm9yZSBpdFxuMzk0NzpcdFx0XHQgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kXG4zOTQ4Olx0XHRcdCAqIGxlYXZlcyBQR19wYXJ0aWFsbHlfbWFwcGVkIHNldC5cbjM5NDk6XHRcdFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXG4zOTUwOlx0XHRcdCAqL1xuMzk1MTpcdFx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuMzk1MjpcdFx0XHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuMzk1MzpcdFx0XHRcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxuMzk1NDpcdFx0XHRcdFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuMzk1NTpcdFx0XHR9XG4zOTU2Olx0XG4zOTU3Olx0XHRcdGlmIChtYXBwaW5nKSB7XG4zOTU4Olx0XHRcdFx0aW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuMzk1OTpcdFxuMzk2MDpcdFx0XHRcdGlmIChmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbykgXHUwMDI2XHUwMDI2XG4zOTYxOlx0XHRcdFx0ICAgIG5ld19vcmRlciBcdTAwM2MgSFBBR0VfUE1EX09SREVSKSB7XG4zOTYyOlx0XHRcdFx0XHRpZiAoZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSkge1xuMzk2MzpcdFx0XHRcdFx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sXG4zOTY0Olx0XHRcdFx0XHRcdFx0XHROUl9TSE1FTV9USFBTLCAtbnIpO1xuMzk2NTpcdFx0XHRcdFx0fSBlbHNlIHtcbjM5NjY6XHRcdFx0XHRcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLFxuMzk2NzpcdFx0XHRcdFx0XHRcdFx0TlJfRklMRV9USFBTLCAtbnIpO1xuMzk2ODpcdFx0XHRcdFx0fVxuMzk2OTpcdFx0XHRcdH1cbjM5NzA6XHRcdFx0fVxuMzk3MTpcdFxuMzk3MjpcdFx0XHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4zOTczOlx0XHRcdFx0aWYgKG1hcHBpbmcpIHtcbjM5NzQ6XHRcdFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhtYXBwaW5nLCBmb2xpbyk7XG4zOTc1Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjM5NzY6XHRcdFx0XHR9XG4zOTc3Olx0XG4zOTc4Olx0XHRcdFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcbjM5Nzk6XHRcdFx0fVxuMzk4MDpcdFxuMzk4MTpcdFx0XHQvKiBsb2NrIGxydSBsaXN0L1BhZ2VDb21wb3VuZCwgcmVmIGZyb3plbiBieSBwYWdlX3JlZl9mcmVlemUgKi9cbjM5ODI6XHRcdFx0aWYgKGRvX2xydSlcbjM5ODM6XHRcdFx0XHRscnV2ZWMgPSBmb2xpb19scnV2ZWNfbG9jayhmb2xpbyk7XG4zOTg0Olx0XG4zOTg1Olx0XHRcdHJldCA9IF9fc3BsaXRfdW5tYXBwZWRfZm9saW8oZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIHhhcyxcbjM5ODY6XHRcdFx0XHRcdFx0ICAgICBtYXBwaW5nLCBzcGxpdF90eXBlKTtcbjM5ODc6XHRcbjM5ODg6XHRcdFx0LypcbjM5ODk6XHRcdFx0ICogVW5mcmVlemUgYWZ0ZXItc3BsaXQgZm9saW9zIGFuZCBwdXQgdGhlbSBiYWNrIHRvIHRoZSByaWdodFxuMzk5MDpcdFx0XHQgKiBsaXN0LiBAZm9saW8gc2hvdWxkIGJlIGtlcHQgZnJvem9uIHVudGlsIHBhZ2UgY2FjaGVcbjM5OTE6XHRcdFx0ICogZW50cmllcyBhcmUgdXBkYXRlZCB3aXRoIGFsbCB0aGUgb3RoZXIgYWZ0ZXItc3BsaXQgZm9saW9zXG4zOTkyOlx0XHRcdCAqIHRvIHByZXZlbnQgb3RoZXJzIHNlZWluZyBzdGFsZSBwYWdlIGNhY2hlIGVudHJpZXMuXG4zOTkzOlx0XHRcdCAqIEFzIGEgcmVzdWx0LCBuZXdfZm9saW8gc3RhcnRzIGZyb20gdGhlIG5leHQgZm9saW8gb2ZcbjM5OTQ6XHRcdFx0ICogQGZvbGlvLlxuMzk5NTpcdFx0XHQgKi9cbjM5OTY6XHRcdFx0Zm9yIChuZXdfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTsgbmV3X2ZvbGlvICE9IGVuZF9mb2xpbztcbjM5OTc6XHRcdFx0ICAgICBuZXdfZm9saW8gPSBuZXh0KSB7XG4zOTk4Olx0XHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKG5ld19mb2xpbyk7XG4zOTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMwMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uY2VwdHMsIHByZXNlbnRlZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIGdlbmVyYWwgdG9waWM6CgoqKkV4YW1pbmluZyBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZWAgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgYW5kIGRpZyBpbnRvIHRob3NlIHR3byBmdW5jdGlvbiBuYW1lczogYGRlZmVycmVkX3NwbGl0X2lzb2xhdGVgIGFuZCBgZGVmZXJyZWRfc3BsaXRfc2NhbmAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGV5IHByb2JhYmx5IG9wZXJhdGUgb24gc29tZSBraW5kIG9mIGRhdGEgc3RydWN0dXJlLCBtYXliZSBhIHNlZ21lbnRlZCBvbmUsIGFuZCB0aGV5IGxpa2VseSByZXByZXNlbnQgb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gc2VnbWVudHMgdGhhdCBhcmUgbm90IGluc3RhbnRseSBwcm9jZXNzZWQuIFRoZSAmIzM0O2RlZmVycmVkJiMzNDsgcGFydCBpbW1lZGlhdGVseSBzY3JlYW1zIGxhenkgZXZhbHVhdGlvbiBvciBwZXJoYXBzIGFzeW5jaHJvbm91cyBleGVjdXRpb24sIGNvcnJlY3Q/IFRoZXkgYXJlIHByb2JhYmx5IHRyeWluZyB0byBvcHRpbWl6ZSBzb21lIHBpcGVsaW5lLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIHNwbGl0dGluZyBhIGRhdGFzZXQgZm9yIHBhcmFsbGVsIHByb2Nlc3NpbmcuIFRoZSBuYW1pbmcgc3VnZ2VzdHMgdGhhdCB0aGUgYWN0dWFsIHNwbGl0dGluZyBtaWdodCBub3Qgb2NjdXIgaW1tZWRpYXRlbHksIGJ1dCByYXRoZXIgYmUgc2NoZWR1bGVkIG9yIHRyaWdnZXJlZCBsYXRlciwgcHJvYmFibHkgd2hlbiB0aGUgZGF0YSBpcyBuZWVkZWQuCgpJJiMzOTttIGJldHRpbmcgYGlzb2xhdGVgIGltcGxpZXMgc2VwYXJhdGluZyBvbmUgc2VnbWVudCwgb3Igb25lIGVsZW1lbnQgZnJvbSBhIHNwbGl0IChvciBncm91cCBvZiBzcGxpdHMpLCBmb3IgaW5kZXBlbmRlbnQgY29tcHV0YXRpb24uIEl0IG1pZ2h0IGJlIHVzZWQgZm9yIG9wZXJhdGlvbnMgd2hlcmUgYSBzaW5nbGUgc3BsaXQgbmVlZHMgc3BlY2lhbCBwcm9jZXNzaW5nLiBUaGUgd29yZCAmIzM0O2lzb2xhdGUmIzM0OyBzZWVtcyB0byBzdWdnZXN0IHRoYXQgeW91IG5lZWQgdG8gYmUgYWJsZSB0byBwdWxsIGEgcG9ydGlvbiBhd2F5IGZyb20gdGhlIHJlc3Qgb2YgdGhlIHdvcmsuCgpgU2NhbmAgb24gdGhlIG90aGVyIGhhbmQsIG1ha2VzIG1lIHRoaW5rIHRoYXQgdGhlIGRhdGEgaXMgc3RyZWFtZWQgb3IgYWNjZXNzZWQgc2VyaWFsbHkuIE1heWJlIGl0IHJlcHJlc2VudHMgYW4gaXRlcmF0aXZlIG9wZXJhdGlvbiBhY3Jvc3MgbXVsdGlwbGUgc2VnbWVudHMgb3IgYSBzZXF1ZW50aWFsIGFwcGxpY2F0aW9uIG9mIHNvbWV0aGluZy4gVGhlICYjMzQ7c2NhbiYjMzQ7IGxpa2VseSBtZWFucyB3ZSYjMzk7cmUgcGVyZm9ybWluZyBzb21lIGtpbmQgb2YgY3VtdWxhdGl2ZSBjYWxjdWxhdGlvbiBvciB0cmFuc2Zvcm1hdGlvbiBhcyB3ZSBzdGVwIHRocm91Z2ggdGhvc2Ugc3BsaXRzLiBJdCBjb3VsZCBiZSBzb21ldGhpbmcgbGlrZSBhIHJ1bm5pbmcgc3VtLCBhIHJvbGxpbmcgYXZlcmFnZSwgb3IgbWF5YmUgZXZlbiBhIHNsaWRpbmcgd2luZG93IG9wZXJhdGlvbi4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIG9wZXJhdGlvbnMgdGhhdCBkZXBlbmQgb24gcHJldmlvdXMgcmVzdWx0cy4KCkkmIzM5O2Qgd2FudCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aGVpciBpbnB1dHMgYW5kIG91dHB1dHMuIFdoYXQga2luZCBvZiBkYXRhIGFyZSB0aGV5IHdvcmtpbmcgd2l0aD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBkaXN0cmlidXRlZCBzeXN0ZW0/IFdoYXQgaXMgdGhlIGdvYWwgb2Ygc3BsaXR0aW5nIHRoZSBkYXRhIGluIHRoZSBmaXJzdCBwbGFjZT8gQW5kLCBtb3N0IGltcG9ydGFudGx5LCB3aGVyZSBhcmUgdGhlIGNvbXB1dGF0aW9uYWwgYm90dGxlbmVja3MgdGhhdCBuZWNlc3NpdGF0ZSB0aGVzZSAmIzM0O2RlZmVycmVkJiMzNDsgb3BlcmF0aW9ucz8gQ29udGV4dCB3b3VsZCBzb2xpZGlmeSBteSBpbml0aWFsIGh5cG90aGVzaXMsIHdoaWNoLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgSSBob3BlIGlzIHJlYXNvbmFibHkgYWNjdXJhdGUhIEkgdGhpbmsgSSBhbSBsb29raW5nIGF0IHNvbWUgc29ydCBvZiBkYXRhIHByb2Nlc3Npbmcgc3RyYXRlZ3ksIHdpdGggYSBmb2N1cyBvbiBtYXhpbWl6aW5nIHBhcmFsbGVsaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ1NjA6XHRcdFx0XHQgKi9cbjQ1NjE6XHRcdFx0XHRpZiAoJiM0MzsmIzQzO251bV9maWxsZWRfcGFnZXMgXHUwMDNlPSBIUEFHRV9QTURfTlIgLSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUpXG40NTYyOlx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG40NTYzOlx0XHRcdH1cbjQ1NjQ6XHRcdH1cbjQ1NjU6XHRcdHJldHVybiBmYWxzZTtcbjQ1NjY6XHR9XG40NTY3Olx0XG40NTY4Olx0c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG40NTY5Olx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSxcbjQ1NzA6XHRcdFx0XHRcdFx0ICAgICAgdm9pZCAqY2JfYXJnKVxuNDU3MTpcdHtcbjQ1NzI6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IGZvbGlvLCBfZGVmZXJyZWRfbGlzdCk7XG40NTczOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlYWJsZSA9IGNiX2FyZztcbjQ1NzQ6XHRcbjQ1NzU6XHRcdC8qIExvc3QgcmFjZSB0byBmb2xpb19wdXQoKSBvciB0aGUgZm9saW8gaXMgdW5kZXIgZm9saW9fcmVmX2ZyZWV6ZSgpICovXG40NTc2Olx0XHRpZiAoIWZvbGlvX3RyeV9nZXQoZm9saW8pKVxuNDU3NzpcdFx0XHRyZXR1cm4gTFJVX1NLSVA7XG40NTc4Olx0XG40NTc5Olx0XHRsaXN0X2xydV9pc29sYXRlX21vdmUobHJ1LCBpdGVtLCBmcmVlYWJsZSk7XG40NTgwOlx0XHRyZXR1cm4gTFJVX1JFTU9WRUQ7XG40NTgxOlx0fVxuNDU4MjpcdFxuNDU4MzpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG40NTg0Olx0XHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG40NTg1Olx0e1xuNDU4NjpcdFx0TElTVF9IRUFEKGRpc3Bvc2UpO1xuNDU4NzpcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7XG40NTg4Olx0XHRpbnQgc3BsaXQgPSAwO1xuNDU4OTpcdFx0dW5zaWduZWQgbG9uZyBpc29sYXRlZDtcbjQ1OTA6XHRcbjQ1OTE6XHRcdGlzb2xhdGVkID0gbGlzdF9scnVfc2hyaW5rX3dhbGtfaXJxKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgc2MsXG40NTkyOlx0XHRcdFx0XHRcdCAgICBkZWZlcnJlZF9zcGxpdF9pc29sYXRlLCBcdTAwMjZkaXNwb3NlKTtcbjQ1OTM6XHRcbjQ1OTQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXHUwMDI2ZGlzcG9zZSwgX2RlZmVycmVkX2xpc3QpIHtcbjQ1OTU6XHRcdFx0Ym9vbCBkaWRfc3BsaXQgPSBmYWxzZTtcbjQ1OTY6XHRcdFx0Ym9vbCB1bmRlcnVzZWQgPSBmYWxzZTtcbjQ1OTc6XHRcbjQ1OTg6XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCk7XG40NTk5Olx0XG40NjAwOlx0XHRcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuNDYwMTpcdFx0XHRcdC8qXG40NjAyOlx0XHRcdFx0ICogU2VlIHRyeV90b19tYXBfdW51c2VkX3RvX3plcm9wYWdlKCk6IHdlIGNhbm5vdFxuNDYwMzpcdFx0XHRcdCAqIG9wdGltaXplIHplcm8tZmlsbGVkIHBhZ2VzIGFmdGVyIHNwbGl0dGluZyBhblxuNDYwNDpcdFx0XHRcdCAqIG1sb2NrZWQgZm9saW8uXG40NjA1Olx0XHRcdFx0ICovXG40NjA2Olx0XHRcdFx0aWYgKGZvbGlvX3Rlc3RfbWxvY2tlZChmb2xpbykpXG40NjA3Olx0XHRcdFx0XHRnb3RvIG5leHQ7XG40NjA4Olx0XHRcdFx0dW5kZXJ1c2VkID0gdGhwX3VuZGVydXNlZChmb2xpbyk7XG40NjA5Olx0XHRcdFx0aWYgKCF1bmRlcnVzZWQpXG40NjEwOlx0XHRcdFx0XHRnb3RvIG5leHQ7XG40NjExOlx0XHRcdH1cbjQ2MTI6XHRcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbjQ2MTM6XHRcdFx0XHRnb3RvIHJlcXVldWU7XG40NjE0Olx0XHRcdGlmICghc3BsaXRfZm9saW8oZm9saW8pKSB7XG40NjE1Olx0XHRcdFx0ZGlkX3NwbGl0ID0gdHJ1ZTtcbjQ2MTY6XHRcdFx0XHRpZiAodW5kZXJ1c2VkKVxuNDYxNzpcdFx0XHRcdFx0Y291bnRfdm1fZXZlbnQoVEhQX1VOREVSVVNFRF9TUExJVF9QQUdFKTtcbjQ2MTg6XHRcdFx0XHRzcGxpdCYjNDM7JiM0Mzs7XG40NjE5Olx0XHRcdH1cbjQ2MjA6XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbjQ2MjE6XHRuZXh0OlxuNDYyMjpcdFx0XHQvKlxuNDYyMzpcdFx0XHQgKiBJZiB0aHBfdW5kZXJ1c2VkKCkgcmV0dXJucyBmYWxzZSwgb3IgaWYgc3BsaXRfZm9saW8oKVxuNDYyNDpcdFx0XHQgKiBzdWNjZWVkcywgb3IgaWYgc3BsaXRfZm9saW8oKSBmYWlscyBpbiB0aGUgY2FzZSBpdCB3YXNcbjQ2MjU6XHRcdFx0ICogdW5kZXJ1c2VkLCB0aGVuIGNvbnNpZGVyIGl0IHVzZWQgYW5kIGRvbiYjMzk7dCBhZGQgaXQgYmFjayB0b1xuNDYyNjpcdFx0XHQgKiBzcGxpdF9xdWV1ZS5cbjQ2Mjc6XHRcdFx0ICovXG40NjI4Olx0XHRcdGlmICghZGlkX3NwbGl0IFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG40NjI5Olx0cmVxdWV1ZTpcbjQ2MzA6XHRcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG40NjMxOlx0XHRcdFx0bGlzdF9scnVfYWRkX2lycShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsXG40NjMyOlx0XHRcdFx0XHRcdCBcdTAwMjZmb2xpby1cdTAwM2VfZGVmZXJyZWRfbGlzdCxcbjQ2MzM6XHRcdFx0XHRcdFx0IGZvbGlvX25pZChmb2xpbyksXG40NjM0Olx0XHRcdFx0XHRcdCBmb2xpb19tZW1jZyhmb2xpbykpO1xuNDYzNTpcdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuNDYzNjpcdFx0XHR9XG40NjM3Olx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG40NjM4Olx0XHR9XG40NjM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgdGhlIERlZmVycmVkIFNwbGl0IFF1ZXVlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBpdCYjMzk7cyBkb2luZyB3aXRoaW4gdGhlIG1tL2h1Z2VfbWVtb3J5IGNvbnRleHQuIEl0JiMzOTtzIG9idmlvdXNseSByZWxhdGVkIHRvIGhhbmRsaW5nIGh1Z2UgcGFnZSBzcGxpdHMsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgZGVmZXJyYWwgbWVjaGFuaXNtLiBJcyBpdCBqdXN0IHJlbW92aW5nIGVudHJpZXMgZnJvbSBhIHF1ZXVlLCBvciBpcyB0aGVyZSBtb3JlIGludm9sdmVkPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBpbXBsaWNhdGlvbnMgZm9yIGF0b21pY2l0eSwgbG9ja2luZywgb3IgdGhlIG92ZXJhbGwgZWZmaWNpZW5jeSBvZiB0aGUgc3BsaXQgcHJvY2Vzcz8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGltcGxlbWVudGF0aW9uLCBub3QganVzdCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIGJ1dCBhbnl3aGVyZSBlbHNlIGl0IG1pZ2h0IGJlIGNhbGxlZC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIFRoaXMgbGlrZWx5IGhvbGRzIHRoZSBrZXkgdG8gdGhlIHNwZWNpZmljIGxvZ2ljIGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9mb2xpby5jPTkwPXZvaWQgX19mb2xpb19wdXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTEwMi1cdHBhZ2VfY2FjaGVfcmVsZWFzZShmb2xpbyk7XG5tbS9mb2xpby5jOjEwMzpcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vZm9saW8uYy0xMDQtXHRtZW1fY2dyb3VwX3VuY2hhcmdlKGZvbGlvKTtcbi0tXG5tbS9mb2xpby5jPTE1MT1zdGF0aWMgdm9pZCBmb2xpb19iYXRjaF9tb3ZlX2xydShzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCwgbW92ZV9mbl90IG1vdmVfZm4pXG4tLVxubW0vZm9saW8uYy0xODUtXHRcdFx0X19mb2xpb19jbGVhcl91bmV2aWN0YWJsZShmb2xpbyk7XG5tbS9mb2xpby5jOjE4NjpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL2ZvbGlvLmMtMTg3LVx0XHRcdGZiYXRjaC1cdTAwM2Vmb2xpb3NbaV0gPSBOVUxMO1xuLS1cbm1tL2ZvbGlvLmM9OTc5PXZvaWQgZm9saW9zX3B1dF9yZWZzKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zLCB1bnNpZ25lZCBpbnQgKnJlZnMpXG4tLVxubW0vZm9saW8uYy0xMDE3LVx0XHR9XG5tbS9mb2xpby5jOjEwMTg6XHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vZm9saW8uYy0xMDE5LVx0XHRfX3BhZ2VfY2FjaGVfcmVsZWFzZShmb2xpbywgXHUwMDI2bHJ1dmVjLCBcdTAwMjZmbGFncyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zOTI1PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTQyLVx0XHQvKiBUYWtlIG9mZiB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6Mzk0MzpcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jLTM5NDQtXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NDM1PWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDQwLS8qXG5tbS9odWdlX21lbW9yeS5jOjQ0NDE6ICogX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaXMgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseTpcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ0MjogKiB0aGUgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlubGluZSB3cmFwcGVyIGluIG1tL2ludGVybmFsLmhcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0My0gKiBsaW1pdHMgaXRzIGNhbGxzIHRvIHRob3NlIGZvbGlvcyB3aGljaCBtYXkgaGF2ZSBhIF9kZWZlcnJlZF9saXN0IGZvclxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0NS0gKlxubW0vaHVnZV9tZW1vcnkuYzo0NDQ2OiAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xubW0vaHVnZV9tZW1vcnkuYy00NDQ3LSAqIHplcm86IGJlY2F1c2UgZXZlbiB3aGVuIHRoZSBsaXN0X2xydSBsb2NrIGlzIGhlbGQsIGEgbm9uLWVtcHR5XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDUzLSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0NDU0OmJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9odWdlX21lbW9yeS5jLTQ0NTUte1xuLS1cbm1tL2ludGVybmFsLmg9NzM1PXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL2ludGVybmFsLmgtNzQ2LVxubW0vaW50ZXJuYWwuaDo3NDc6Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9pbnRlcm5hbC5oOjc0ODpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaW50ZXJuYWwuaC03NDkte1xuLS1cbm1tL2ludGVybmFsLmgtNzYwLVxubW0vaW50ZXJuYWwuaDo3NjE6XHRyZXR1cm4gX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL2ludGVybmFsLmgtNzYyLX1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9NjE4PXZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy02NTMtXG5tbS9tZW1jb250cm9sLXYxLmM6NjU0Olx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9tZW1jb250cm9sLXYxLmMtNjU1LVx0Zm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IDA7XG4tLVxubW0vbWVtY29udHJvbC5jPTUzMzU9c3RhdGljIHZvaWQgdW5jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXG4tLVxubW0vbWVtY29udHJvbC5jLTUzNzMtXG5tbS9tZW1jb250cm9sLmM6NTM3NDpcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01Mzc1LVx0fVxuLS1cbm1tL21lbWNvbnRyb2wuYz01NTEzPXZvaWQgbWVtX2Nncm91cF9taWdyYXRlKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTU1NC1cdC8qIFdhcm5pbmcgc2hvdWxkIG5ldmVyIGhhcHBlbiwgc28gZG9uJiMzOTt0IHdvcnJ5IGFib3V0IHJlZmNvdW50IG5vbi0wICovXG5tbS9tZW1jb250cm9sLmM6NTU1NTpcdFdBUk5fT05fT05DRShmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KG9sZCkpO1xubW0vbWVtY29udHJvbC5jLTU1NTYtXHRvbGQtXHUwMDNlbWVtY2dfZGF0YSA9IDA7XG4tLVxubW0vbWlncmF0ZS5jPTU4Mz1zdGF0aWMgaW50IF9fZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL21pZ3JhdGUuYy01OTctXHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbm1tL21pZ3JhdGUuYzo1OTg6XHRcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9taWdyYXRlLmMtNTk5LVx0XHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgZXhwZWN0ZWRfY291bnQpO1xuLS1cbm1tL21pZ3JhdGUuYy02MzAtXHQvKiBUYWtlIG9mZiBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xubW0vbWlncmF0ZS5jOjYzMTpcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vbWlncmF0ZS5jLTYzMi1cbi0tXG5tbS92bXNjYW4uYz0xMDU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xNTA2LVxubW0vdm1zY2FuLmM6MTUwNzpcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS92bXNjYW4uYy0xNTA4LVx0XHRpZiAoZm9saW9fYmF0Y2hfYWRkKFx1MDAyNmZyZWVfZm9saW9zLCBmb2xpbykgPT0gMCkge1xuLS1cbm1tL3Ztc2Nhbi5jPTE4NjY9c3RhdGljIHVuc2lnbmVkIGludCBtb3ZlX2ZvbGlvc190b19scnUoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS92bXNjYW4uYy0xOTAxLVxubW0vdm1zY2FuLmM6MTkwMjpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL3Ztc2Nhbi5jLTE5MDMtXHRcdFx0aWYgKGZvbGlvX2JhdGNoX2FkZChcdTAwMjZmcmVlX2ZvbGlvcywgZm9saW8pID09IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc3NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgbWFuYWdpbmcgc3BsaXQgb3BlcmF0aW9ucywgZGVmZXJyZWQgb3Igb3RoZXJ3aXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCBoYW5kbGVzIHRoZSB1bnF1ZXVpbmcgcHJvY2Vzcy4gQXJlIHRoZXJlIHN1YnRsZSBsb2NraW5nIGlzc3Vlcz8gSG93IGVmZmljaWVudGx5IGRvZXMgaXQgaXRlcmF0ZSB0aHJvdWdoIHRoZSBkZWZlcnJlZCBzcGxpdHM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBJ4oCZbGwgYmUgcGF5aW5nIHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZvbGlvIHN0cnVjdHVyZXMgYW5kIGRhdGEgbW9kZWxzLCBhbmQgaG93IGl0IGhhbmRsZXMgZXJyb3JzIG9yIGVkZ2UgY2FzZXMuIEEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgdGhlIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIHNwbGl0IGxvZ2ljLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NDQwOlx0LypcbjQ0NDE6XHQgKiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpcyBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5OlxuNDQ0MjpcdCAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxuNDQ0MzpcdCAqIGxpbWl0cyBpdHMgY2FsbHMgdG8gdGhvc2UgZm9saW9zIHdoaWNoIG1heSBoYXZlIGEgX2RlZmVycmVkX2xpc3QgZm9yXG40NDQ0Olx0ICogcXVldWVpbmcgVEhQIHNwbGl0cywgYW5kIHRoYXQgbGlzdCBpcyAocmFjaWx5IG9ic2VydmVkIHRvIGJlKSBub24tZW1wdHkuXG40NDQ1Olx0ICpcbjQ0NDY6XHQgKiBJdCBpcyB1bnNhZmUgdG8gY2FsbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgdW50aWwgZm9saW8gcmVmY291bnQgaXNcbjQ0NDc6XHQgKiB6ZXJvOiBiZWNhdXNlIGV2ZW4gd2hlbiB0aGUgbGlzdF9scnUgbG9jayBpcyBoZWxkLCBhIG5vbi1lbXB0eVxuNDQ0ODpcdCAqIF9kZWZlcnJlZF9saXN0IG1pZ2h0IGJlIGluIHVzZSBvbiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkmIzM5O3MgdW5sb2NrZWRcbjQ0NDk6XHQgKiBvbi1zdGFjayBsaXN0LlxuNDQ1MDpcdCAqXG40NDUxOlx0ICogVGhlIGxpc3RfbHJ1IHN1Ymxpc3QgaXMgZGV0ZXJtaW5lZCBieSBmb2xpbyYjMzk7cyBtZW1jZzogaXQgaXMgdGhlcmVmb3JlXG40NDUyOlx0ICogaW1wb3J0YW50IHRvIHVucXVldWUgZGVmZXJyZWQgc3BsaXQgYmVmb3JlIGNoYW5naW5nIGZvbGlvIG1lbWNnLlxuNDQ1MzpcdCAqL1xuNDQ1NDpcdGJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG40NDU1Olx0e1xuNDQ1NjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNDQ1NzpcdFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1O1xuNDQ1ODpcdFx0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XG40NDU5Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuNDQ2MDpcdFx0Ym9vbCB1bnF1ZXVlZCA9IGZhbHNlO1xuNDQ2MTpcdFxuNDQ2MjpcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xuNDQ2MzpcdFx0V0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2ICFmb2xpb19tZW1jZ19jaGFyZ2VkKGZvbGlvKSk7XG40NDY0Olx0XG40NDY1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG40NDY2Olx0XHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbjQ0Njc6XHRcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgXHUwMDI2bWVtY2csIFx1MDAyNmZsYWdzKTtcbjQ0Njg6XHRcdGlmIChfX2xpc3RfbHJ1X2RlbChcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCkpIHtcbjQ0Njk6XHRcdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcbjQ0NzA6XHRcdFx0XHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbjQ0NzE6XHRcdFx0XHRtb2RfbXRocF9zdGF0KGZvbGlvX29yZGVyKGZvbGlvKSxcbjQ0NzI6XHRcdFx0XHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbjQ0NzM6XHRcdFx0fVxuNDQ3NDpcdFx0XHR1bnF1ZXVlZCA9IHRydWU7XG40NDc1Olx0XHR9XG40NDc2Olx0XHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbjQ0Nzc6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuNDQ3ODpcdFxuNDQ3OTpcdFx0cmV0dXJuIHVucXVldWVkO1x0LyogdXNlZnVsIGZvciBkZWJ1ZyB3YXJuaW5ncyAqL1xuNDQ4MDpcdH1cbjQ0ODE6XHRcbjQ0ODI6XHQvKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbiYjMzk7dCBjbGVhciBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgKi9cbjQ0ODM6XHR2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcbjQ0ODQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NTMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA4OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29yZSBNTSBUSFAgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgZXhwZXJ0IGV5ZSBpbW1lZGlhdGVseSBob25lcyBpbiBvbiB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZTogaXQmIzM5O3MgYSBkZWVwIGRpdmUgaW50byB0aGUgbW0vaHVnZV9tZW1vcnkuYyBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLCBwYXJ0aWN1bGFybHkgYW5vbnltb3VzIGFuZCBtdWx0aS1zaXplIFRIUHMgKG1USFBzKSwgYXJlIGhhbmRsZWQgZHVyaW5nIGRlZmVycmVkIHNwbGl0dGluZy4KClByZXZpb3VzbHksIHRoZSBjb2RlIGluIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGhhZCBhIHNwZWNpZmljIGxvY2tpbmcgbWVjaGFuaXNtIGludm9sdmluZyBgZGVmZXJyZWRfc3BsaXRfbHJ1YCBiZWZvcmUgZnJlZXppbmcgdGhlIGZvbGlvJiMzOTtzIHJlZmVyZW5jZSBjb3VudC4gSWYgYGRlcXVldWVfZGVmZXJyZWRgIHdhcyB0cnVlIGFuZCB0aGUgZm9saW8gd2FzIGFub255bW91cyB3aXRoIGFuIG9yZGVyIGdyZWF0ZXIgdGhhbiAxLCBpdCB3b3VsZCBsb2NrIHRoZSBMUlUsIHRoZW4gZnJlZXplIHRoZSBmb2xpbyByZWZlcmVuY2UgY291bnQsIGFuZCBpZiBzdWNjZXNzZnVsLCByZW1vdmUgdGhlIGl0ZW0gZnJvbSB0aGUgTFJVLiBBIHJlZiBmcmVlemUgZmFpbHVyZSB3b3VsZCByZXN1bHQgaW4gdW5sb2NraW5nIHRoZSBMUlUgYW5kIHJldHVybmluZyAtRUFHQUlOLgoKVGhlIGNoYW5nZSBjZW50ZXJzIGFyb3VuZCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZWAsIGFuZCB0aGUgcmVtb3ZhbCBvZiB0aGUgZXhwbGljaXQgbG9ja2luZy4gVGhlIHByZXZpb3VzIHZlcnNpb24gdHJpZWQgdG8gZ2V0IHRoZSBmb2xpbywgYW5kIGlmIGl0IGNvdWxkLCBpc29sYXRlZCBpdCBmcm9tIHRoZSBMUlUsIG90aGVyd2lzZSwgY2xlYXJlZCB0aGUgcGFydGlhbGx5IG1hcHBlZCBmbGFnIChpZiBzZXQpIGFuZCBpc29sYXRlZCBpdCBmcm9tIHRoZSBMUlUuIFRoaXMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIG1vcmUgc3RyZWFtbGluZWQgYXBwcm9hY2guIE5vdyBgZm9saW9fdHJ5X2dldGAgaXMgdGhlIG9ubHkgY2hlY2sgZm9yIHdoZXRoZXIgdGhlIGZvbGlvIGNhbiBiZSBpc29sYXRlZC4gSWYgYGZvbGlvX3RyeV9nZXRgIGZhaWxzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBMUlVfU0tJUCwgbGVhdmluZyB0aGUgaXRlbSBvbiB0aGUgTFJVLCBidXQgdGhlIHBhcnRpYWxseSBtYXBwZWQgZmxhZyAqc3RpbGwqIG5lZWRzIHRvIGJlIGNsZWFyZWQgKGlmIHNldCkgdmlhIGBmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWRgLgoKSW4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAsIHRoZSBtYW51YWwgbG9ja2luZyBiZWZvcmUgdGhlIHJlZiBmcmVlemUgaXMgcmVtb3ZlZC4gSW5zdGVhZCwgaXQgdXRpbGl6ZXMgYGZvbGlvX3JlZl9mcmVlemVgLiBJZiBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZWAgcnVucyBjb25jdXJyZW50bHkgd2hpbGUgYGZvbGlvX3JlZl9mcmVlemVgIGlzIGFjdGl2ZSwgYGZvbGlvX3RyeV9nZXRgIHdpbGwgZmFpbC4gYGRlZmVycmVkX3NwbGl0X2lzb2xhdGVgIHJldHVybnMgTFJVX1NLSVAsIHByZXZlbnRpbmcgcmVtb3ZhbCBmcm9tIHRoZSBMUlUuIFRoZSBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgY2FuIHNhZmVseSB1bnF1ZXVlIHRoZSBmb2xpbyB3aGlsZSByZWYgaXMgZnJvemVuIGFuZCBtZW1jZyBpcyBzZXQsIG9yIGlmIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCBoYWQgYWxyZWFkeSBpc29sYXRlZCBpdCBiZWZvcmUgYGZvbGlvX3JlZl9mcmVlemVgLCBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgZmluZHMgaXQgbm90IG9uIHRoZSBscnUsIGFuZCB0aGVuIGBmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWRgIGNsZWFycyB0aGUgZmxhZy4KClNvLCB0aGlzIGlzIGFsbCBhYm91dCBzeW5jaHJvbml6aW5nIHJlZmNvdW50aW5nIGFuZCBsb2NraW5nIGFyb3VuZCBkZWZlcnJlZCBzcGxpdHMsIHdoaWNoIGlzIGEgY3JpdGljYWwgYXJlYSBmb3IgY29uY3VycmVuY3kgaW4gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IGZvciBUSFBzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBkaXJlY3QgaW1wYWN0cyBvbiBtZW1vcnkgbWFuYWdlbWVudCBpdHNlbGYsIFRIUCBzcGxpdHRpbmcsIGFub255bW91cyBUSFAvbVRIUCBwYXJ0aWFsIG1hcHBpbmcsIG1lbW9yeSByZWNsYWltIHRocm91Z2ggYGRlZmVycmVkX3NwbGl0X3NjYW5gLCBgc3BsaXRfaHVnZV9wYWdlYCwgYG1hZHZpc2UoTUFEVl9ET05UTkVFRClgLCB1bm1hcHBpbmcgcGFydGlhbCBUSFAsIGFuZCBzbyBvbi4KClRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGlzIGlzIGFic29sdXRlbHkgdGVzdGFibGUgYW5kIHJlYWNoYWJsZSwgZXZlbiBpbiBhIFFFTVUtYmFzZWQgZnV6emluZyBlbnZpcm9ubWVudC4gVEhQcyBhcmUgc3RhbmRhcmQgZmVhdHVyZXMuIFdlIGNhbiB0cmlnZ2VyIHRoZXNlIHBhdGhzIHRocm91Z2ggdXNlcmxhbmQgc3lzY2FsbHMsIHN1Y2ggYXMgYG1hZHZpc2VgLCBgbXByb3RlY3RgLCBgbXVubWFwYCwgYXMgd2VsbCBhcyBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcGFnZSBmYXVsdHMuCgpJcyBpdCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgVEhQIHNwbGl0dGluZyBsb2dpYywgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUsIHRoZSBwb3RlbnRpYWwgcmFjZXMgYmV0d2VlbiBwYWdlIHJlY2xhbWF0aW9uL3Nocmlua2VycyAoYGRlZmVycmVkX3NwbGl0X3NjYW5gKSwgc3BsaXR0aW5nL2ZyZWVpbmcgZm9saW9zIChgc3BsaXRfaHVnZV9wYWdlYCwgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgLCBgZm9saW9fc3BsaXRfdW5tYXBwZWRgKSwgYXMgd2VsbCBhcyB0aGUgZWZmZWN0cyBvZiBgbWFkdmlzZWAsIGFsbCBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhlc2UgYXJlYXMgYXJlIGZyYXVnaHQgd2l0aCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBzdWJ0bGUgcmVmY291bnRpbmcgZXJyb3JzLCB0cmlja3kgbG9ja2luZywgYW5kIGNvbXBsZXggc3RhdGUgdHJhbnNpdGlvbnMuCgpJJiMzOTtsbCBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIG5leHQgdG8gY29uZmlybSB0aGUgYnVpbGQgcmVxdWlyZW1lbnRzLCBidXQgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBwcmlvcml0aXplIGluIG15IHRlc3RpbmcgYW5kIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlX21lbW9yeVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjc1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgVEhQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgY29uZmlndXJlZC4gVGhhdCYjMzk7cyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZSwgc28gbmF0dXJhbGx5LCBJIHNob3VsZCBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgZmluZCBpdHMgZGVmaW5pdGlvbiBpbiBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHNldHRpbmdzIGFyZSB1c3VhbGx5IGhhbmRsZWQuIExldCYjMzk7cyBzZWUgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgYW5kIGhvdyB0aGlzIGlzIGNvbnRyb2xsZWQgYXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MzQtXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzNi1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODUzPWNob2ljZVxuLS1cbm1tL0tjb25maWctODU4LVxubW0vS2NvbmZpZzo4NTk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg2MC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2NS1cbm1tL0tjb25maWc6ODY2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODY3LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg3NC1cbm1tL0tjb25maWc6ODc1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3Ni1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODgyPWNob2ljZVxuLS1cbm1tL0tjb25maWctODkxLVxubW0vS2NvbmZpZzo4OTI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04OTMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwMS1cbm1tL0tjb25maWc6OTAyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTkwMy1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwOS1cbm1tL0tjb25maWc6OTEwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTExLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTctXG5tbS9LY29uZmlnOjkxODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTktXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05Mjc9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzYtXG5tbS9LY29uZmlnOjkzNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzOC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQ1LVxubW0vS2NvbmZpZzo5NDY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQ3LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTUzLVxubW0vS2NvbmZpZzo5NTQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTUtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk2MS1cbm1tL0tjb25maWc6OTYyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk2My1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NjMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIFJhdGhlciB0aGFuIGp1c3QgcmVseWluZyBvbiBtZW1vcnksIEkga25vdyB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoaXMgaXMgaW4gdGhlIGBLY29uZmlnYCBmaWxlcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG1tL0tjb25maWdgLCBhbmQgcGlucG9pbnQgdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmUgODM1LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2Ugc29ydHMgb2YgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcyBhcmUgZGVmaW5lZCBvciBhdCBsZWFzdCBoYXZlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uIEhvcGVmdWxseSwgdGhpcyBzZWN0aW9uIHdpbGwgY2xlYXJseSBzcGVsbCBvdXQgYW55IGRlcGVuZGVuY2llcyB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaGFzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBoYXJkd2FyZSBzdXBwb3J0LiBLbm93aW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBrZXkgdG8gZGVidWdnaW5nIGlzc3VlcywgY29uZmlndXJpbmcgc3lzdGVtcyBwcm9wZXJseSwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSByZXZlYWxzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODMwOlx0XHQgIG1lbW9yeSBjb25zdHJhaW5lZC5cbiA4MzE6XHRcbiA4MzI6XHRjb25maWcgTU1fSURcbiA4MzM6XHRcdGRlZl9ib29sIG5cbiA4MzQ6XHRcbiA4MzU6XHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODM2Olx0XHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbiA4Mzc6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuIDgzODpcdFx0c2VsZWN0IENPTVBBQ1RJT05cbiA4Mzk6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiA4NDA6XHRcdHNlbGVjdCBNTV9JRFxuIDg0MTpcdFx0aGVscFxuIDg0MjpcdFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXG4gODQzOlx0XHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cbiA4NDQ6XHRcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXG4gODQ1Olx0XHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XG4gODQ2Olx0XHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcbiA4NDc6XHRcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxuIDg0ODpcdFxuIDg0OTpcdFx0ICBJZiBtZW1vcnkgY29uc3RyYWluZWQgb24gZW1iZWRkZWQsIHlvdSBtYXkgd2FudCB0byBzYXkgTi5cbiA4NTA6XHRcbiA4NTE6XHRpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIDg1MjpcdFxuIDg1MzpcdGNob2ljZVxuIDg1NDpcdFx0cHJvbXB0IFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQgc3lzZnMgZGVmYXVsdHNcJiMzNDtcbiA4NTU6XHRcdGRlZmF1bHQgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG4gODU2Olx0XHRoZWxwXG4gODU3Olx0XHQgIFNlbGVjdHMgdGhlIHN5c2ZzIGRlZmF1bHRzIGZvciBUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0LlxuIDg1ODpcdFxuIDg1OTpcdFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xuIDg2MDpcdFx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuIDg2MTpcdFx0aGVscFxuIDg2MjpcdFx0ICBFbmFibGluZyBUcmFuc3BhcmVudCBIdWdlcGFnZSBhbHdheXMsIGNhbiBpbmNyZWFzZSB0aGVcbiA4NjM6XHRcdCAgbWVtb3J5IGZvb3RwcmludCBvZiBhcHBsaWNhdGlvbnMgd2l0aG91dCBhIGd1YXJhbnRlZWRcbiA4NjQ6XHRcdCAgYmVuZWZpdCBidXQgaXQgd2lsbCB3b3JrIGF1dG9tYXRpY2FsbHkgZm9yIGFsbCBhcHBsaWNhdGlvbnMuXG4gODY1Olx0XG4gODY2Olx0XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxuIDg2NzpcdFx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbiA4Njg6XHRcdGhlbHBcbiA4Njk6XHRcdCAgRW5hYmxpbmcgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgbWFkdmlzZSwgd2lsbCBvbmx5IHByb3ZpZGUgYVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM2MgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgSHVnZXBhZ2UgVHJhbnNwYXJlbmN5IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGdvZXMgdG8gdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBpc3N1ZSBhdCBoYW5kLiBCdXQgSSBjYW4mIzM5O3QganVzdCBzdG9wIHRoZXJlLiBJIGtub3cgdGhlcmUmIzM5O3MgYWxtb3N0IGFsd2F5cyBtb3JlIHRvIHRoZSBzdG9yeSwgZXNwZWNpYWxseSB3aGVuIGl0IGNvbWVzIHRvIG1lbW9yeSBtYW5hZ2VtZW50LiBJIGhhdmUgdG8gdGhpbmsgbW9yZSBicm9hZGx5LgoKTXkgbmV4dCBsaW5lIG9mIGludmVzdGlnYXRpb24gaW52b2x2ZXMgY29uc2lkZXJpbmcgYE1FTUNHYCDigJMgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIG1lbW9yeSBjZ3JvdXBzIGFyZSBzb21laG93IGVudGFuZ2xlZCB3aXRoIHRoZSBiZWhhdmlvciBvZiBgbGlzdF9scnVgIGFuZCBwb3RlbnRpYWxseSBkZWZlcnJlZCBzcGxpdHMuIFRoZSBpbnRyaWNhY2llcyB0aGVyZSBhcmUgZWFzaWx5IG1pc3NlZCwgYW5kIGFyZSB3ZWxsIGtub3duIHRvIGJlIGludGVydHdpbmVkLgoKRnVydGhlcm1vcmUsIEkgaGF2ZSB0byBleGFtaW5lIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQuIEl0IHNvdW5kcyBsaWtlIGBkZWZlcnJlZF9zcGxpdF9scnVgIGFuZCBgZGVmZXJyZWRfc3BsaXRfc2NhbmAgbWlnaHQgcHJvdmlkZSBhZGRpdGlvbmFsIGNsdWVzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZGVlcGx5IGF0IGhvdyB0aGV5JiMzOTtyZSB1c2VkLiBJIG5lZWQgdG8gbWFwIG91dCB0aGUgZW50aXJlIGxhbmRzY2FwZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSBjb25maWdzIGFuZCBmdW5jdGlvbnMsIHRvIHNlZSB3aGVyZSB0aGUgYm90dGxlbmVjayBjb3VsZCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmZXJyZWRfc3BsaXRfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NjE9dW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyBfX3JlYWRfbW9zdGx5ID1cbi0tXG5tbS9odWdlX21lbW9yeS5jLTcxLVxubW0vaHVnZV9tZW1vcnkuYzo3MjpzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGRlZmVycmVkX3NwbGl0X2tleTtcbm1tL2h1Z2VfbWVtb3J5LmM6NzM6c3RhdGljIHN0cnVjdCBsaXN0X2xydSBkZWZlcnJlZF9zcGxpdF9scnU7XG5tbS9odWdlX21lbW9yeS5jOjc0OnN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKmRlZmVycmVkX3NwbGl0X3Nocmlua2VyO1xubW0vaHVnZV9tZW1vcnkuYzo3NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbm1tL2h1Z2VfbWVtb3J5LmMtNzYtXHRcdFx0XHRcdCAgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7XG5tbS9odWdlX21lbW9yeS5jOjc3OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG5tbS9odWdlX21lbW9yeS5jLTc4LVx0XHRcdFx0XHQgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zNDA9c3RhdGljIGludCBfX2luaXQgaHVnZV96ZXJvX2luaXQodm9pZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM0My1cdGlmICghaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKSB7XG5tbS9odWdlX21lbW9yeS5jOjM0NDpcdFx0c2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XG5tbS9odWdlX21lbW9yeS5jOjM0NTpcdFx0bGlzdF9scnVfZGVzdHJveShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xubW0vaHVnZV9tZW1vcnkuYy0zNDYtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTAxNT1pbnQgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEwMTgtXHRcdHJldHVybiAwO1xubW0vaHVnZV9tZW1vcnkuYzoxMDE5Olx0cmV0dXJuIGZvbGlvX21lbWNnX2xpc3RfbHJ1X2FsbG9jKGZvbGlvLCBcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIEdGUF9LRVJORUwpO1xubW0vaHVnZV9tZW1vcnkuYy0xMDIwLX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTEwMjI9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcbm1tL2h1Z2VfbWVtb3J5LmMtMTAyMy17XG5tbS9odWdlX21lbW9yeS5jOjEwMjQ6XHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxubW0vaHVnZV9tZW1vcnkuYy0xMDI1LVx0XHRcdFx0XHRcdCBTSFJJTktFUl9NRU1DR19BV0FSRSxcbm1tL2h1Z2VfbWVtb3J5LmMtMTAyNi1cdFx0XHRcdFx0XHQgXCYjMzQ7dGhwLWRlZmVycmVkX3NwbGl0XCYjMzQ7KTtcbm1tL2h1Z2VfbWVtb3J5LmM6MTAyNzpcdGlmICghZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpXG5tbS9odWdlX21lbW9yeS5jLTEwMjgtXHRcdHJldHVybiAtRU5PTUVNO1xubW0vaHVnZV9tZW1vcnkuYy0xMDI5LVxubW0vaHVnZV9tZW1vcnkuYzoxMDMwOlx0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2dfa2V5KFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSxcbm1tL2h1Z2VfbWVtb3J5LmM6MTAzMTpcdFx0XHRcdCAgICBkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcixcbm1tL2h1Z2VfbWVtb3J5LmM6MTAzMjpcdFx0XHRcdCAgICBcdTAwMjZkZWZlcnJlZF9zcGxpdF9rZXkpKSB7XG5tbS9odWdlX21lbW9yeS5jOjEwMzM6XHRcdHNocmlua2VyX2ZyZWUoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xubW0vaHVnZV9tZW1vcnkuYy0xMDM0LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEwMzYtXG5tbS9odWdlX21lbW9yeS5jOjEwMzc6XHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0gZGVmZXJyZWRfc3BsaXRfY291bnQ7XG5tbS9odWdlX21lbW9yeS5jOjEwMzg6XHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlci1cdTAwM2VzY2FuX29iamVjdHMgPSBkZWZlcnJlZF9zcGxpdF9zY2FuO1xubW0vaHVnZV9tZW1vcnkuYzoxMDM5Olx0c2hyaW5rZXJfcmVnaXN0ZXIoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xubW0vaHVnZV9tZW1vcnkuYy0xMDQwLVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTA0ND1zdGF0aWMgdm9pZCBfX2luaXQgdGhwX3Nocmlua2VyX2V4aXQodm9pZClcbm1tL2h1Z2VfbWVtb3J5LmMtMTA0NS17XG5tbS9odWdlX21lbW9yeS5jOjEwNDY6XHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbm1tL2h1Z2VfbWVtb3J5LmM6MTA0NzpcdGxpc3RfbHJ1X2Rlc3Ryb3koXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1KTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTA0OC1cdGh1Z2VfemVyb19zaHJpbmtlcl9leGl0KCk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMzU4PXZvaWQgbWFwX2Fub25fZm9saW9fcG1kX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcG1kX3QgKnBtZCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEzNjgtXHR1cGRhdGVfbW11X2NhY2hlX3BtZCh2bWEsIGhhZGRyLCBwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoxMzY5Olx0ZGVmZXJyZWRfc3BsaXRfZm9saW8oZm9saW8sIGZhbHNlKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTM3MC19XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zOTI1PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTQ1LVx0XHQvKlxubW0vaHVnZV9tZW1vcnkuYzozOTQ2Olx0XHQgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0XG5tbS9odWdlX21lbW9yeS5jLTM5NDctXHRcdCAqIHNwbGl0cyBpdCwgc28gdGhlIHVucXVldWUgYWJvdmUgZmluZHMgYW4gZW1wdHkgbGlzdCBhbmRcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0MzU9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0NDctICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ0ODogKiBfZGVmZXJyZWRfbGlzdCBtaWdodCBiZSBpbiB1c2Ugb24gZGVmZXJyZWRfc3BsaXRfc2NhbigpJiMzOTtzIHVubG9ja2VkXG5tbS9odWdlX21lbW9yeS5jLTQ0NDktICogb24tc3RhY2sgbGlzdC5cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0NTQ9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0NjYtXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ2NzpcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgXHUwMDI2bWVtY2csIFx1MDAyNmZsYWdzKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ2ODpcdGlmIChfX2xpc3RfbHJ1X2RlbChcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ2OS1cdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0ODItLyogcGFydGlhbGx5X21hcHBlZD1mYWxzZSB3b24mIzM5O3QgY2xlYXIgUEdfcGFydGlhbGx5X21hcHBlZCBmb2xpbyBmbGFnICovXG5tbS9odWdlX21lbW9yeS5jOjQ0ODM6dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXG5tbS9odWdlX21lbW9yeS5jLTQ0ODQte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDUxMy1cdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYzo0NTE0Olx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcdTAwMjZtZW1jZywgXHUwMDI2ZmxhZ3MpO1xubW0vaHVnZV9tZW1vcnkuYy00NTE1LVx0aWYgKHBhcnRpYWxseV9tYXBwZWQpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1MjYtXHR9XG5tbS9odWdlX21lbW9yeS5jOjQ1Mjc6XHRfX2xpc3RfbHJ1X2FkZChcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCwgbWVtY2cpO1xubW0vaHVnZV9tZW1vcnkuYy00NTI4LVx0bGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUobHJ1LCBcdTAwMjZmbGFncyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NTMxLVxubW0vaHVnZV9tZW1vcnkuYzo0NTMyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxubW0vaHVnZV9tZW1vcnkuYy00NTMzLVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDUzNi1cbm1tL2h1Z2VfbWVtb3J5LmM6NDUzNzpcdGNvdW50ID0gbGlzdF9scnVfc2hyaW5rX2NvdW50KFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgc2MpO1xubW0vaHVnZV9tZW1vcnkuYy00NTM4LVx0cmV0dXJuIGNvdW50ID86IFNIUklOS19FTVBUWTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ1NDE9c3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU2Ny1cbm1tL2h1Z2VfbWVtb3J5LmM6NDU2ODpzdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU2OS1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU4Mi1cbm1tL2h1Z2VfbWVtb3J5LmM6NDU4MzpzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxubW0vaHVnZV9tZW1vcnkuYy00NTg0LVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU5MC1cbm1tL2h1Z2VfbWVtb3J5LmM6NDU5MTpcdGlzb2xhdGVkID0gbGlzdF9scnVfc2hyaW5rX3dhbGtfaXJxKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgc2MsXG5tbS9odWdlX21lbW9yeS5jOjQ1OTI6XHRcdFx0XHRcdCAgICBkZWZlcnJlZF9zcGxpdF9pc29sYXRlLCBcdTAwMjZkaXNwb3NlKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDU5My1cbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ2MzAtXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xubW0vaHVnZV9tZW1vcnkuYzo0NjMxOlx0XHRcdGxpc3RfbHJ1X2FkZF9pcnEoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LFxubW0vaHVnZV9tZW1vcnkuYy00NjMyLVx0XHRcdFx0XHQgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsXG4tLVxubW0vbWlncmF0ZS5jPTEzNjM9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi0tXG5tbS9taWdyYXRlLmMtMTQwMi1cdGlmIChzcmNfZGVmZXJyZWRfc3BsaXQpXG5tbS9taWdyYXRlLmM6MTQwMzpcdFx0ZGVmZXJyZWRfc3BsaXRfZm9saW8oZHN0LCBzcmNfcGFydGlhbGx5X21hcHBlZCk7XG5tbS9taWdyYXRlLmMtMTQwNC1cbi0tXG5tbS9taWdyYXRlLmM9MTgxMT1zdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcbi0tXG5tbS9taWdyYXRlLmMtMTg1Ny1cdFx0XHQgKiBPbmx5IGNoZWNrIGl0IHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgbGlzdC5cbm1tL21pZ3JhdGUuYzoxODU4Olx0XHRcdCAqIFNpbmNlIHRoZSBmb2xpbyBjYW4gYmUgb24gZGVmZXJyZWRfc3BsaXRfc2NhbigpXG5tbS9taWdyYXRlLmMtMTg1OS1cdFx0XHQgKiBsb2NhbCBsaXN0IGFuZCByZW1vdmluZyBpdCBjYW4gY2F1c2UgdGhlIGxvY2FsIGxpc3Rcbi0tXG5tbS9ybWFwLmM9MTc4Mj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19mb2xpb19yZW1vdmVfcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy0xODc2LVx0ICAgICFmb2xpb19pc19kZXZpY2VfcHJpdmF0ZShmb2xpbykpXG5tbS9ybWFwLmM6MTg3NzpcdFx0ZGVmZXJyZWRfc3BsaXRfZm9saW8oZm9saW8sIHRydWUpO1xubW0vcm1hcC5jLTE4NzgtXG4tLVxubW0vdm1zdGF0LmM9MTE5OT1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbi0tXG5tbS92bXN0YXQuYy0xNDI0LVx0W0koVEhQX1NQTElUX1BBR0VfRkFJTEVEKV1cdFx0PSBcJiMzNDt0aHBfc3BsaXRfcGFnZV9mYWlsZWRcJiMzNDssXG5tbS92bXN0YXQuYzoxNDI1Olx0W0koVEhQX0RFRkVSUkVEX1NQTElUX1BBR0UpXVx0XHQ9IFwmIzM0O3RocF9kZWZlcnJlZF9zcGxpdF9wYWdlXCYjMzQ7LFxubW0vdm1zdGF0LmMtMTQyNi1cdFtJKFRIUF9VTkRFUlVTRURfU1BMSVRfUEFHRSldXHRcdD0gXCYjMzQ7dGhwX3VuZGVydXNlZF9zcGxpdF9wYWdlXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ1MAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbnZlc3RpZ2F0aW9uIG9mIFRIUCBTcGxpdHRpbmcgYW5kIERlZmVycmVkIFNwbGl0IEFQSSBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUga2VybmVsJiMzOTtzIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgc3BsaXR0aW5nIGFuZCBkZWZlcnJlZCBzcGxpdCBmdW5jdGlvbmFsaXR5LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBub24tc3RhdGljIGZ1bmN0aW9ucyBhbmQgQVBJIGVudHJ5IHBvaW50cyBpbnZvbHZlZCBpbiB0aGVzZSBwcm9jZXNzZXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjYWxsIGNoYWlucyBhbmQgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcy4KCkZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgaXMgY2FsbGVkLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHByZXR0eSBjZW50cmFsLiBGcm9tIG15IGluaXRpYWwgcmVzZWFyY2gsIGl0IGFwcGVhcnMgdGhhdCBgX19mb2xpb19zcGxpdGAgaXMgYSBrZXkgZnVuY3Rpb24sIGFuZCB0aGF0JiMzOTtzIGNhbGxlZCBieSBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgIGFuZCBgc3BsaXRfZm9saW9fdG9fbGlzdGAuIEkgYWxzbyBzZWUgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCAobW0pIGNvZGUuCgpGdXJ0aGVybW9yZSwgSSYjMzk7bSBub3RpbmcgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgYGRlZmVycmVkX3NwbGl0X3NjYW5gIHNocmlua2VyIGNhbGxiYWNrLCBhbG9uZyB3aXRoIGBkZWZlcnJlZF9zcGxpdF9mb2xpb2AsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIHRoZSBybWFwIGNvZGUuIFRoZSBvdGhlciBjYWxscyBJIG5lZWQgdG8gd2F0Y2ggYXJlLCBhZ2FpbiwgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCwgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0YCwgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgLCBgZm9saW9fc3BsaXRfdW5tYXBwZWRgLCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFRoaXMgbGlzdCBnaXZlcyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdy4KCkZpbmFsbHksIEkmIzM5O2xsIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBtbS9odWdlX21lbW9yeS5jYC4gSSBuZWVkIHRvIHJldmlldyB0aGUgZXhwb3J0ZWQgc3ltYm9scyBhbmQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSByZWdpb25zIHN1cnJvdW5kaW5nIHRoZSBzcGxpdCBvcGVyYXRpb25zLiBUaGlzIHNob3VsZCBvZmZlciBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBwdWJsaWMgQVBJIHJlbGF0ZWQgdG8gc3BsaXR0aW5nIGFuZCBkZWZlcnJlZCBzcGxpdHMuIEkmIzM5O20gaG9waW5nIHRvIGRpc2NvdmVyIGFueSB1bmRvY3VtZW50ZWQgb3IgbGVzcyBvYnZpb3VzIGVudHJ5IHBvaW50cyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBsYXJnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KHNwbGl0X2ZvbGlvfHNwbGl0X2h1Z2VfcGFnZXxmb2xpb19zcGxpdCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MTM1OD12b2lkIG1hcF9hbm9uX2ZvbGlvX3BtZF9ub3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMzY4LVx0dXBkYXRlX21tdV9jYWNoZV9wbWQodm1hLCBoYWRkciwgcG1kKTtcbm1tL2h1Z2VfbWVtb3J5LmM6MTM2OTpcdGRlZmVycmVkX3NwbGl0X2ZvbGlvKGZvbGlvLCBmYWxzZSk7XG5tbS9odWdlX21lbW9yeS5jLTEzNzAtfVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjM1OD1ib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI0MDAtXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG5tbS9odWdlX21lbW9yeS5jOjI0MDE6XHRcdHNwbGl0X2ZvbGlvKGZvbGlvKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjQwMi1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM1ODg9c3RhdGljIHZvaWQgcmVtYXBfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIG5yLCBpbnQgZmxhZ3MpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNjAzLVxubW0vaHVnZV9tZW1vcnkuYzozNjA0OnN0YXRpYyB2b2lkIGxydV9hZGRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXG5tbS9odWdlX21lbW9yeS5jLTM2MDUtXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM2Mjk9c3RhdGljIGJvb2wgcGFnZV9yYW5nZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgbG9uZyBucl9wYWdlcylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTM2NDAtICovXG5tbS9odWdlX21lbW9yeS5jOjM2NDE6c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxubW0vaHVnZV9tZW1vcnkuYy0zNjQyLVx0XHRpbnQgbmV3X29yZGVyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzc4MS0gKiAxLiB1bmlmb3JtIHNwbGl0OiBAeGFzIGlzIHNwbGl0IHdpdGggbm8gZXhwZWN0YXRpb24gb2YgZmFpbHVyZSBhbmQgYSBzaW5nbGVcbm1tL2h1Z2VfbWVtb3J5LmM6Mzc4MjogKiAgICBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKCkgaXMgY2FsbGVkIHRvIHNwbGl0IHRoZSBAZm9saW8gaW50byBAbmV3X29yZGVyXG5tbS9odWdlX21lbW9yeS5jLTM3ODMtICogICAgYWxvbmcgd2l0aCBzdGF0cyB1cGRhdGUuXG5tbS9odWdlX21lbW9yeS5jLTM3ODQtICogMi4gbm9uLXVuaWZvcm0gc3BsaXQ6IGZvbGlvX29yZGVyIC0gQG5ld19vcmRlciBjYWxscyB0b1xubW0vaHVnZV9tZW1vcnkuYzozNzg1OiAqICAgIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoKSBhcmUgZXhwZWN0ZWQgdG8gYmUgbWFkZSBpbiBhIGZvciBsb29wIHRvIHNwbGl0XG5tbS9odWdlX21lbW9yeS5jLTM3ODYtICogICAgdGhlIEBmb2xpbyB0byBvbmUgbG93ZXIgb3JkZXIgYXQgYSB0aW1lLiBUaGUgZm9saW8gY29udGFpbmluZyBAc3BsaXRfYXRcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM3OTg9c3RhdGljIGludCBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zODQwLVxubW0vaHVnZV9tZW1vcnkuYzozODQxOlx0XHRmb2xpb19zcGxpdF9tZW1jZ19yZWZzKGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzg0Mi1cdFx0c3BsaXRfcGFnZV9vd25lcihcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzg0My1cdFx0cGdhbGxvY190YWdfc3BsaXQoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xubW0vaHVnZV9tZW1vcnkuYzozODQ0Olx0XHRfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzg0NS1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTM5MjU9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwMDctXHRcdFx0aWYgKGRvX2xydSlcbm1tL2h1Z2VfbWVtb3J5LmM6NDAwODpcdFx0XHRcdGxydV9hZGRfc3BsaXRfZm9saW8oZm9saW8sIG5ld19mb2xpbywgbHJ1dmVjLCBsaXN0KTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDAwOS1cbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwNjItLyoqXG5tbS9odWdlX21lbW9yeS5jOjQwNjM6ICogX19mb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXG5tbS9odWdlX21lbW9yeS5jLTQwNjQtICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDA4Mi0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDA4MzpzdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtNDA4NC1cdFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgcGFnZSAqbG9ja19hdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQyNzktLyoqXG5tbS9odWdlX21lbW9yeS5jOjQyODA6ICogZm9saW9fc3BsaXRfdW5tYXBwZWQoKSAtIHNwbGl0IGEgbGFyZ2UgYW5vbiBmb2xpbyB0aGF0IGlzIGFscmVhZHkgdW5tYXBwZWRcbm1tL2h1Z2VfbWVtb3J5LmMtNDI4MS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MzAwLSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0MzAxOmludCBmb2xpb19zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxubW0vaHVnZV9tZW1vcnkuYy00MzAyLXtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQzNjctICovXG5tbS9odWdlX21lbW9yeS5jOjQzNjg6aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG5tbS9odWdlX21lbW9yeS5jLTQzNjktXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00MzcyLVxubW0vaHVnZV9tZW1vcnkuYzo0MzczOlx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgcGFnZSwgbGlzdCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDM3NC1cdFx0XHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Mzc3LS8qKlxubW0vaHVnZV9tZW1vcnkuYzo0Mzc4OiAqIGZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cbm1tL2h1Z2VfbWVtb3J5LmMtNDM3OS0gKiBAZm9saW86IGZvbGlvIHRvIHNwbGl0XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Mzg1LSAqIEl0IGhhcyB0aGUgc2FtZSBwcmVyZXF1aXNpdGVzIGFuZCByZXR1cm5zIGFzXG5tbS9odWdlX21lbW9yeS5jOjQzODY6ICogc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKS5cbm1tL2h1Z2VfbWVtb3J5LmMtNDM4Ny0gKlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQwMC0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6NDQwMTppbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbm1tL2h1Z2VfbWVtb3J5LmMtNDQwMi1cdFx0c3RydWN0IHBhZ2UgKnNwbGl0X2F0LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxubW0vaHVnZV9tZW1vcnkuYy00NDAzLXtcbm1tL2h1Z2VfbWVtb3J5LmM6NDQwNDpcdHJldHVybiBfX2ZvbGlvX3NwbGl0KGZvbGlvLCBuZXdfb3JkZXIsIHNwbGl0X2F0LCBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBsaXN0LFxubW0vaHVnZV9tZW1vcnkuYy00NDA1LVx0XHRcdCAgICAgU1BMSVRfVFlQRV9OT05fVU5JRk9STSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NDE4PXVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDM0LVxubW0vaHVnZV9tZW1vcnkuYzo0NDM1OmludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG5tbS9odWdlX21lbW9yeS5jLTQ0MzYte1xubW0vaHVnZV9tZW1vcnkuYzo0NDM3Olx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGxpc3QsIDApO1xubW0vaHVnZV9tZW1vcnkuYy00NDM4LX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0NTQ9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0ODItLyogcGFydGlhbGx5X21hcHBlZD1mYWxzZSB3b24mIzM5O3QgY2xlYXIgUEdfcGFydGlhbGx5X21hcHBlZCBmb2xpbyBmbGFnICovXG5tbS9odWdlX21lbW9yeS5jOjQ0ODM6dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXG5tbS9odWdlX21lbW9yeS5jLTQ0ODQte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDU4Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDYxMy1cdFx0XHRnb3RvIHJlcXVldWU7XG5tbS9odWdlX21lbW9yeS5jOjQ2MTQ6XHRcdGlmICghc3BsaXRfZm9saW8oZm9saW8pKSB7XG5tbS9odWdlX21lbW9yeS5jLTQ2MTUtXHRcdFx0ZGlkX3NwbGl0ID0gdHJ1ZTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ2MjItXHRcdC8qXG5tbS9odWdlX21lbW9yeS5jOjQ2MjM6XHRcdCAqIElmIHRocF91bmRlcnVzZWQoKSByZXR1cm5zIGZhbHNlLCBvciBpZiBzcGxpdF9mb2xpbygpXG5tbS9odWdlX21lbW9yeS5jOjQ2MjQ6XHRcdCAqIHN1Y2NlZWRzLCBvciBpZiBzcGxpdF9mb2xpbygpIGZhaWxzIGluIHRoZSBjYXNlIGl0IHdhc1xubW0vaHVnZV9tZW1vcnkuYy00NjI1LVx0XHQgKiB1bmRlcnVzZWQsIHRoZW4gY29uc2lkZXIgaXQgdXNlZCBhbmQgZG9uJiMzOTt0IGFkZCBpdCBiYWNrIHRvXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NjQ1LSNpZmRlZiBDT05GSUdfREVCVUdfRlNcbm1tL2h1Z2VfbWVtb3J5LmM6NDY0NjpzdGF0aWMgdm9pZCBzcGxpdF9odWdlX3BhZ2VzX2FsbCh2b2lkKVxubW0vaHVnZV9tZW1vcnkuYy00NjQ3LXtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ2ODItXHRcdFx0bnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jOjQ2ODM6XHRcdFx0aWYgKCFzcGxpdF9mb2xpbyhmb2xpbykpXG5tbS9odWdlX21lbW9yeS5jLTQ2ODQtXHRcdFx0XHRzcGxpdCYjNDM7JiM0Mzs7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00Njk2PXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfbm90X3N1aXRhYmxlX2Zvcl90aHBfc3BsaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NzA5LVxubW0vaHVnZV9tZW1vcnkuYzo0NzEwOnN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcbm1tL2h1Z2VfbWVtb3J5LmMtNDcxMS1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgdmFkZHJfZW5kLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDc3OS1cdFx0Lypcbm1tL2h1Z2VfbWVtb3J5LmM6NDc4MDpcdFx0ICogRm9yIGZvbGlvcyB3aXRoIHByaXZhdGUsIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKClcbm1tL2h1Z2VfbWVtb3J5LmMtNDc4MS1cdFx0ICogd2lsbCB0cnkgdG8gZHJvcCBpdCBiZWZvcmUgc3BsaXQgYW5kIHRoZW4gY2hlY2sgaWYgdGhlIGZvbGlvXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00Nzk3LVx0XHQgICAgaW5fZm9saW9fb2Zmc2V0IFx1MDAzZT0gZm9saW9fbnJfcGFnZXMoZm9saW8pKSB7XG5tbS9odWdlX21lbW9yeS5jOjQ3OTg6XHRcdFx0aWYgKCFzcGxpdF9mb2xpb190b19vcmRlcihmb2xpbywgdGFyZ2V0X29yZGVyKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDc5OS1cdFx0XHRcdHNwbGl0JiM0MzsmIzQzOztcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4MDItXHRcdFx0XHRcdFx0XHQgICBpbl9mb2xpb19vZmZzZXQpO1xubW0vaHVnZV9tZW1vcnkuYzo0ODAzOlx0XHRcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxubW0vaHVnZV9tZW1vcnkuYy00ODA0LVx0XHRcdFx0c3BsaXQmIzQzOyYjNDM7O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDgyNi1cbm1tL2h1Z2VfbWVtb3J5LmM6NDgyNzpzdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShjb25zdCBjaGFyICpmaWxlX3BhdGgsIHBnb2ZmX3Qgb2ZmX3N0YXJ0LFxubW0vaHVnZV9tZW1vcnkuYy00ODI4LVx0XHRcdFx0cGdvZmZfdCBvZmZfZW5kLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDg3My1cdFx0aWYgKGluX2ZvbGlvX29mZnNldCBcdTAwM2MgMCB8fCBpbl9mb2xpb19vZmZzZXQgXHUwMDNlPSBucl9wYWdlcykge1xubW0vaHVnZV9tZW1vcnkuYzo0ODc0Olx0XHRcdGlmICghc3BsaXRfZm9saW9fdG9fb3JkZXIoZm9saW8sIHRhcmdldF9vcmRlcikpXG5tbS9odWdlX21lbW9yeS5jLTQ4NzUtXHRcdFx0XHRzcGxpdCYjNDM7JiM0Mzs7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODc4LVx0XHRcdFx0XHRcdFx0ICAgaW5fZm9saW9fb2Zmc2V0KTtcbm1tL2h1Z2VfbWVtb3J5LmM6NDg3OTpcdFx0XHRpZiAoIWZvbGlvX3NwbGl0KGZvbGlvLCB0YXJnZXRfb3JkZXIsIHNwbGl0X2F0LCBOVUxMKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDg4MC1cdFx0XHRcdHNwbGl0JiM0MzsmIzQzOztcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4OTYtXG5tbS9odWdlX21lbW9yeS5jOjQ4OTc6c3RhdGljIHNzaXplX3Qgc3BsaXRfaHVnZV9wYWdlc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbm1tL2h1Z2VfbWVtb3J5LmMtNDg5OC1cdFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9wcylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ5NDQtXHRcdH1cbm1tL2h1Z2VfbWVtb3J5LmM6NDk0NTpcdFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlc19pbl9maWxlKGZpbGVfcGF0aCwgb2ZmX3N0YXJ0LCBvZmZfZW5kLFxubW0vaHVnZV9tZW1vcnkuYy00OTQ2LVx0XHRcdFx0bmV3X29yZGVyLCBpbl9mb2xpb19vZmZzZXQpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDk1NS1cdGlmIChyZXQgPT0gMSBcdTAwMjZcdTAwMjYgcGlkID09IDEpIHtcbm1tL2h1Z2VfbWVtb3J5LmM6NDk1NjpcdFx0c3BsaXRfaHVnZV9wYWdlc19hbGwoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDk1Ny1cdFx0cmV0ID0gc3RybGVuKGlucHV0X2J1Zik7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00OTYzLVxubW0vaHVnZV9tZW1vcnkuYzo0OTY0Olx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlc19waWQocGlkLCB2YWRkcl9zdGFydCwgdmFkZHJfZW5kLCBuZXdfb3JkZXIsXG5tbS9odWdlX21lbW9yeS5jLTQ5NjUtXHRcdFx0aW5fZm9saW9fb2Zmc2V0KTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ5NzMtXG5tbS9odWdlX21lbW9yeS5jOjQ5NzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3BsaXRfaHVnZV9wYWdlc19mb3BzID0ge1xubW0vaHVnZV9tZW1vcnkuYy00OTc1LVx0Lm93bmVyXHQgPSBUSElTX01PRFVMRSxcbm1tL2h1Z2VfbWVtb3J5LmM6NDk3NjpcdC53cml0ZVx0ID0gc3BsaXRfaHVnZV9wYWdlc193cml0ZSxcbm1tL2h1Z2VfbWVtb3J5LmMtNDk3Ny19O1xubW0vaHVnZV9tZW1vcnkuYy00OTc4LVxubW0vaHVnZV9tZW1vcnkuYzo0OTc5OnN0YXRpYyBpbnQgX19pbml0IHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyh2b2lkKVxubW0vaHVnZV9tZW1vcnkuYy00OTgwLXtcbm1tL2h1Z2VfbWVtb3J5LmM6NDk4MTpcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c3BsaXRfaHVnZV9wYWdlc1wmIzM0OywgMDIwMCwgTlVMTCwgTlVMTCxcbm1tL2h1Z2VfbWVtb3J5LmM6NDk4MjpcdFx0XHQgICAgXHUwMDI2c3BsaXRfaHVnZV9wYWdlc19mb3BzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDk4My1cdHJldHVybiAwO1xubW0vaHVnZV9tZW1vcnkuYy00OTg0LX1cbm1tL2h1Z2VfbWVtb3J5LmM6NDk4NTpsYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XG5tbS9odWdlX21lbW9yeS5jLTQ5ODYtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjQ5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGb2xpbyBTcGxpdHRpbmcgU3ltYm9scyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGZvbGlvIHNwbGl0dGluZyBzeW1ib2xzIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNvbGlkIGdyYXNwIG9uIHRoZW0uIEkgc2VlIGEgZmV3IGtleSBwbGF5ZXJzIGhlcmU6IGBzcGxpdF9mb2xpb190b19saXN0YCwgYGZvbGlvX3NwbGl0YCwgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCwgYGRlZmVycmVkX3NwbGl0X2ZvbGlvYCwgYW5kIGBzcGxpdF9odWdlX3BhZ2VzX3dyaXRlYCAodGhhdCBsYXN0IG9uZSwgYmVpbmcgdGhlIGRlYnVnZnMgaW50ZXJmYWNlLCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbikuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGNvdmVyIGEgc3BlY3RydW0gb2Ygc3BsaXR0aW5nIG9wZXJhdGlvbnMuIEkgc3VzcGVjdCB0aGVyZSB3aWxsIGJlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBzeW1ib2xzLiBNeSBodW5jaCBpcyB0aGF0IHRoZXkgcHJvYmFibHkgaGF2ZSBzb21lIHNoYXJlZCBmdW5jdGlvbmFsaXR5IGFuZCBwZXJoYXBzIGFyZSBjYWxsZWQgaW4gYSBzZXF1ZW5jZS4KClRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB3aGV0aGVyIGBzcGxpdF9mb2xpb2AgaXMgZGVmaW5lZCBpbmxpbmUsIG9yIHN0YXRpYy4gVGhhdCBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGZvciBvcHRpbWl6YXRpb24uIElzIGl0IHR1Y2tlZCBhd2F5IGluIGEgaGVhZGVyLCBvciBpcyBpdCBhIGxvY2FsLCBzdGF0aWMgZnVuY3Rpb24/IEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhhdCBiZWZvcmUgSSBjYW4gZHJhdyB0b28gbWFueSBjb25jbHVzaW9ucy4gS25vd2luZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGltcG9ydGFudCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzcGxpdF9mb2xpb1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTk3PWVudW0gdHZhX3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwNi1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjEwNzojZGVmaW5lIHNwbGl0X2ZvbGlvKGYpIHNwbGl0X2ZvbGlvX3RvX2xpc3QoZiwgTlVMTClcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwOC1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00Mjg9aW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDI5LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDMwOnZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQzMS1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD02ODI9c3RhdGljIGlubGluZSBpbnQgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02ODYtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo2ODc6c3RhdGljIGlubGluZSB2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzIyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBIdWdlIFBhZ2UgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIGh1Z2UgcGFnZXMgYXQgdGhlIGtlcm5lbCBsZXZlbCwgc3BlY2lmaWNhbGx5IHRoZSBzcGxpdHRpbmcgYW5kIG9yZGVyaW5nLiBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9uIGBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcmAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgbXVzdCByZXNpZGUgZm9yIGJyZWFraW5nIGRvd24gdGhvc2UgbWFzc2l2ZSBwYWdlcyBhbmQgaW50ZWdyYXRpbmcgdGhlbSBpbnRvIHRoZSBidWRkeSBhbGxvY2F0b3ImIzM5O3Mgb3JkZXJlZCBsaXN0cy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBncmFudWxhciBkZXRhaWxzIG9mIGZyYWdtZW50YXRpb24sIHBvdGVudGlhbCB3YXN0ZSwgYW5kIHVsdGltYXRlbHksIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGltaXphdGlvbiB3aGVuIGRlYWxpbmcgd2l0aCBodWdlIHBhZ2VzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGluc2lnaHRzIGludG8gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGh1Z2UgcGFnZSBzdHJ1Y3R1cmVzLCB0aGUgYnVkZHkgc3lzdGVtJiMzOTtzIG1ldGFkYXRhLCBhbmQgaG93IHRoZSBrZXJuZWwgbWFpbnRhaW5zIGNvbnNpc3RlbmN5IHRocm91Z2hvdXQgdGhlc2Ugb3BlcmF0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NwbGl0X2h1Z2VfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTM5OD1lbnVtIHNwbGl0X3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwMi1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQwMzppbnQgX19zcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwNC1cdFx0dW5zaWduZWQgaW50IG5ld19vcmRlcik7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDEwPWludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTItXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MTM6c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTQtXHRcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTUte1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDE2Olx0cmV0dXJuIF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIocGFnZSwgbGlzdCwgbmV3X29yZGVyKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxNy19XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MTg6c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDE5LXtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQyMDpcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBOVUxMLCBuZXdfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDIxLX1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQyMi1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQyMzpzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MjQte1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDI1Olx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIE5VTEwsIDApO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDI2LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD02NDU9c3RhdGljIGlubGluZSBpbnRcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjY0NjpzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY0Ny1cdFx0dW5zaWduZWQgaW50IG5ld19vcmRlcilcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NTEtfVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjUyOnN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5ld19vcmRlcilcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY1My17XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjU2LX1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjY1NzpzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NTgte1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTgyNj1zdGF0aWMgaW5saW5lIGludCBzcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X29yZGVyKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODI3LXtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjgyODpcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBOVUxMLCBuZXdfb3JkZXIpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODI5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg9MTA9ZW51bSBwYWdlX3dhbGtfbG9jayB7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTI4LSAqXHRcdFx0cG1kX3RyYW5zX2h1Z2UoKSBwbWRzLiAgVGhleSBtYXkgc2ltcGx5IGNob29zZSB0b1xuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oOjI5OiAqXHRcdFx0c3BsaXRfaHVnZV9wYWdlKCkgaW5zdGVhZCBvZiBoYW5kbGluZyBpdCBleHBsaWNpdGx5LlxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTMwLSAqIEBwdGVfZW50cnk6XHRcdGlmIHNldCwgY2FsbGVkIGZvciBlYWNoIFBURSAobG93ZXN0LWxldmVsKSBlbnRyeVxuLS1cbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaD0yMDA9c3RhdGljIGlubGluZSB2b2lkIHNobWVtX2ZyZWV6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGZyZWV6ZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMjEwLSAqIGJleW9uZCBpX3NpemUmIzM5O3Mgbm90aW9uIG9mIEVPRiwgd2hpY2ggZmFsbG9jYXRlIGhhcyBjb21taXR0ZWQgdG8gcmVzZXJ2aW5nOlxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjIxMTogKiB3aGljaCBzcGxpdF9odWdlX3BhZ2UoKSBtdXN0IHRoZXJlZm9yZSBub3QgZGVsZXRlLiAgVGhpcyB1c2Ugb2YgYSBzaW5nbGVcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0yMTItICogXCYjMzQ7ZmFsbG9jZW5kXCYjMzQ7IHBlciBpbm9kZSBlcnJzIG9uIHRoZSBzaWRlIG9mIG5vdCBkZWxldGluZyBhIHJlc2VydmF0aW9uIHdoZW5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2NzgKCQkJCQkJCW91dHB1dDogMTc1CgkJCQkJCQl0aG91Z2h0czogNDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRIUCBEZWZlcnJlZCBTcGxpdCBRdWV1ZSBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2suIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9uczogYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBgZm9saW9fc3BsaXRgLCBgc3BsaXRfZm9saW9fdG9fbGlzdGAsIGBmb2xpb19zcGxpdF91bm1hcHBlZGAsIGBkZWZlcnJlZF9zcGxpdF9mb2xpb2AsIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gVGhleSYjMzk7cmUgYWxsIGluIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgdGhleSBhcmVuJiMzOTt0IHN0YXRpYyBmdW5jdGlvbnMsIGdvb2QgdG8ga25vdy4KCk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBvYnZpb3VzIG9uZSBpcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBidXQgSSBzaG91bGQgdmVyaWZ5IGlmIGl0IGhhcyBkZXBlbmRlbmNpZXMgb3Igc3ViLW9wdGlvbnMuIFRpbWUgdG8gbG9vayBpbnRvIGBtbS9LY29uZmlnYC4gWXVwLCBgbWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgcHJlc2VudC4gSXQgYGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFICZhbXA7JmFtcDsgIVBSRUVNUFRfUlRgLCBhbmQgaXQgYHNlbGVjdHMgQ09NUEFDVElPTmAsIGBYQVJSQVlfTVVMVElgLCBhbmQgYE1NX0lEYC4gQWxyaWdodCwgYW5kIGxldCYjMzk7cyBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gaXQgYnVpbGRzIHRoZSBuZWNlc3Nhcnkgb2JqZWN0cy4gWWVzLCBgb2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9gIGNvbmZpcm1zIHRoZSBpbmNsdXNpb24uIFNvLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZywgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLgoKRmluYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gZXZlcnl0aGluZyBhbGlnbnMgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIGZvciBmdXp6aW5nLiBUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2UgKFRIUCkgZGVmZXJyZWQgc3BsaXQgcXVldWUgc3luY2hyb25pemF0aW9uIGFuZCByZWZjb3VudCBmcmVlemUgbG9naWMgd2hlbiBzcGxpdHRpbmcgdW5tYXBwZWQgZm9saW9zIGFuZCBpc29sYXRpbmcgZGVmZXJyZWQgc3BsaXQgTFJVIGl0ZW1zLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjb3JyZWN0IOKAkyB0aGF0JiMzOTtzIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyBJIGlkZW50aWZpZWQgZWFybGllci4gVGhlIGBFbmFibGVDb25maWdzYCBpcyBqdXN0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkmIzM5O20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLiBPa2F5LCBmaW5hbCBjaGVjayBhbmQgdGhlbiBpdCYjMzk7cyB0aW1lIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAgICYjMzQ7Zm9saW9fc3BsaXQmIzM0OywKICAgICYjMzQ7c3BsaXRfZm9saW9fdG9fbGlzdCYjMzQ7LAogICAgJiMzNDtmb2xpb19zcGxpdF91bm1hcHBlZCYjMzQ7LAogICAgJiMzNDtfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQmIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSwgc3BlY2lmaWNhbGx5IGhvdyBkZWZlcnJlZCBzcGxpdCBsaXN0IGxvY2tpbmcgYW5kIHJlZmNvdW50IGZyZWV6aW5nIHN5bmNocm9uaXplIGR1cmluZyBmb2xpbyBzcGxpdHRpbmcgYW5kIHNocmlua2VyIGlzb2xhdGlvbiAoZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSBhbmQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKS4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgbWVtb3J5IHJlY2xhaW0gYW5kIFRIUCBzcGxpdHRpbmcgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXImIzM0OywKICAgICYjMzQ7Zm9saW9fc3BsaXQmIzM0OywKICAgICYjMzQ7c3BsaXRfZm9saW9fdG9fbGlzdCYjMzQ7LAogICAgJiMzNDtmb2xpb19zcGxpdF91bm1hcHBlZCYjMzQ7LAogICAgJiMzNDtfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQmIzM0OywKICAgICYjMzQ7ZGVmZXJyZWRfc3BsaXRfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSwgc3BlY2lmaWNhbGx5IGhvdyBkZWZlcnJlZCBzcGxpdCBsaXN0IGxvY2tpbmcgYW5kIHJlZmNvdW50IGZyZWV6aW5nIHN5bmNocm9uaXplIGR1cmluZyBmb2xpbyBzcGxpdHRpbmcgYW5kIHNocmlua2VyIGlzb2xhdGlvbiAoZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSBhbmQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKS4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgbWVtb3J5IHJlY2xhaW0gYW5kIFRIUCBzcGxpdHRpbmcgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSBoYW5kbGluZyBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKClgIGFuZCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSgpYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHJlcGxhY2luZyBtYW51YWwgTFJVIGxvY2tpbmcgcHJpb3IgdG8gZm9saW8gcmVmIGZyZWV6aW5nIHdpdGggY2FsbHMgdG8gYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKWAgYW5kIHNraXBwaW5nIHVucmVmZXJlbmNlZCBmb2xpb3MgZHVyaW5nIGlzb2xhdGlvbi5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggZm9saW8gcmVmZXJlbmNlIGNvdW50aW5nLCBsaXN0IG1hbmFnZW1lbnQgKGBfZGVmZXJyZWRfbGlzdGApLCBhbmQgZm9saW8gZmxhZ3MgKGBQR19wYXJ0aWFsbHlfbWFwcGVkYCkuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHN0YWNrIG9yIGhlYXAgYnVmZmVycyBhcmUgYWxsb2NhdGVkIG9yIG1hbmlwdWxhdGVkLCBhbmQgbm8gdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGNvbmN1cnJlbmN5LCByZWZjb3VudCwgb3IgbGlzdCBjb3JydXB0aW9uIGJ1Z3MgaW50cm9kdWNlZCBoZXJlIHdvdWxkIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4sIExPQ0tERVAsIG9yIGtlcm5lbCBhc3NlcnRpb25zLCByYXRoZXIgdGhhbiBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3Rpb24uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIyM2JhNjJlZGUwMmY1ODE3OGJjOGQ3N2YwNTlhN2Y5MWIxMDRhZWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDowNzozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGNlZDQwMGY3MmQ0M2EuLmM4NGU4Y2JjOTg2ZDkgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMzkzMSw0MSAmIzQzOzM5MzEsMjcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG4KIAlzdHJ1Y3QgZm9saW8gKmVuZF9mb2xpbyA9IGZvbGlvX25leHQoZm9saW8pOwogCXN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDsKIAlpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwotCXN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTsKLQlib29sIGRlcXVldWVfZGVmZXJyZWQ7CiAJaW50IHJldCA9IDA7CiAKIAlWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgJmFtcDsmYW1wOyBlbmQpOwotCS8qCi0JICogSWYgdGhpcyBmb2xpbyBjYW4gYmUgb24gdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlLCBsb2NrIG91dAotCSAqIHRoZSBzaHJpbmtlciBiZWZvcmUgZnJlZXppbmcgdGhlIHJlZi4gSWYgdGhlIHNocmlua2VyIHNlZXMKLQkgKiBhIDAtcmVmIGZvbGlvLCBpdCBhc3N1bWVzIGl0IGJlYXQgZm9saW9fcHV0KCkgdG8gdGhlIGxpc3QKLQkgKiBsb2NrIGFuZCBtdXN0IGNsZWFuIHVwIHRoZSBMUlUgc3RhdGUgLSB0aGUgc2FtZSBkZXF1ZXVlIHdlCi0JICogd2lsbCBkbyBiZWxvdyBhcyBwYXJ0IG9mIHRoZSBzcGxpdC4KLQkgKi8KLQlkZXF1ZXVlX2RlZmVycmVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmYW1wOyZhbXA7IG9sZF9vcmRlciAmZ3Q7IDE7Ci0JaWYgKGRlcXVldWVfZGVmZXJyZWQpIHsKLQkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJbWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7Ci0JCWxydSA9IGxpc3RfbHJ1X2xvY2soJmFtcDtkZWZlcnJlZF9zcGxpdF9scnUsCi0JCQkJICAgIGZvbGlvX25pZChmb2xpbyksICZhbXA7bWVtY2cpOwotCX0KJiM0MzsKIAlpZiAoZm9saW9fcmVmX2ZyZWV6ZShmb2xpbywgZm9saW9fY2FjaGVfcmVmX2NvdW50KGZvbGlvKSAmIzQzOyAxKSkgewogCQlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpID0gTlVMTDsKIAkJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwogCi0JCWlmIChkZXF1ZXVlX2RlZmVycmVkKSB7Ci0JCQlfX2xpc3RfbHJ1X2RlbCgmYW1wO2RlZmVycmVkX3NwbGl0X2xydSwgbHJ1LAotCQkJCSAgICAgICAmYW1wO2ZvbGlvLSZndDtfZGVmZXJyZWRfbGlzdCwgZm9saW9fbmlkKGZvbGlvKSk7Ci0JCQlpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkgewotCQkJCWZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pOwotCQkJCW1vZF9tdGhwX3N0YXQob2xkX29yZGVyLAotCQkJCQlNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7Ci0JCQl9Ci0JCQlsaXN0X2xydV91bmxvY2sobHJ1KTsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJLyogVGFrZSBvZmYgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoaWxlIGZyb3plbiBhbmQgbWVtY2cgc2V0ICovCiYjNDM7CQlmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0CiYjNDM7CQkgKiBzcGxpdHMgaXQsIHNvIHRoZSB1bnF1ZXVlIGFib3ZlIGZpbmRzIGFuIGVtcHR5IGxpc3QgYW5kCiYjNDM7CQkgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuCiYjNDM7CQkgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKJiM0MzsJCQlmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTsKJiM0MzsJCQltb2RfbXRocF9zdGF0KG9sZF9vcmRlciwKJiM0MzsJCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwogCQl9CiAKIAkJaWYgKG1hcHBpbmcpIHsKQEAgLTQwNjcsMTAgJiM0Mzs0MDUzLDYgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG4KIAkJaWYgKGNpKQogCQkJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiAJfSBlbHNlIHsKLQkJaWYgKGRlcXVldWVfZGVmZXJyZWQpIHsKLQkJCWxpc3RfbHJ1X3VubG9jayhscnUpOwotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCX0KIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCkBAIC00NTkwLDIyICYjNDM7NDU3MiwxMSBAQCBzdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCBmb2xpbywgX2RlZmVycmVkX2xpc3QpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmZyZWVhYmxlID0gY2JfYXJnOwogCi0JaWYgKGZvbGlvX3RyeV9nZXQoZm9saW8pKSB7Ci0JCWxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTsKLQkJcmV0dXJuIExSVV9SRU1PVkVEOwotCX0KJiM0MzsJLyogTG9zdCByYWNlIHRvIGZvbGlvX3B1dCgpIG9yIHRoZSBmb2xpbyBpcyB1bmRlciBmb2xpb19yZWZfZnJlZXplKCkgKi8KJiM0MzsJaWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSkKJiM0MzsJCXJldHVybiBMUlVfU0tJUDsKIAotCS8qCi0JICogV2UgbG9zdCByYWNlIHdpdGggZm9saW9fcHV0KCkuIFJlYWQgZm9saW8gc3RhdGUgYmVmb3JlIHRoZQotCSAqIGlzb2xhdGU6IGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBjaGVja3MgbGlzdF9lbXB0eSgpCi0JICogbG9ja2xlc3NseSwgc28gb25jZSByZW1vdmVkIHRoZSBmb2xpbyBjYW4gYmUgZnJlZWQgYW55IHRpbWUuCi0JICovCi0JaWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHsKLQkJZm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7Ci0JCW1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLAotCQkJICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpOwotCX0KLQlsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7CiYjNDM7CWxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTsKIAlyZXR1cm4gTFJVX1JFTU9WRUQ7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdlIFBhZ2VzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBwYXRjaCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgc28gbGV0JiMzOTtzIGJyZWFrIGl0IGRvd24gbWV0aG9kaWNhbGx5LgoKRmlyc3QsIEkgc2VlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBjZW50ZXJlZCBhcm91bmQgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHN0cmVhbWxpbmluZyB0aGUgbG9ja2luZyBtZWNoYW5pc20uIEluc3RlYWQgb2YgdGhlIGN1c3RvbSBsb2NraW5nIG9mIGBkZWZlcnJlZF9zcGxpdF9scnVgIGFuZCBtYW51YWwgbWFuaXB1bGF0aW9uIG9mIGBfX2xpc3RfbHJ1X2RlbGAsIHRoZSBwYXRjaCBpcyBzd2l0Y2hpbmcgdG8gYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZzsgaXQmIzM5O3MgbGlrZWx5IGludHJvZHVjaW5nIGEgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBhbmQgaXRzIGJlbmVmaXRzIGNvbXBhcmVkIHRvIHRoZSBwcmV2aW91cyBhcHByb2FjaC4gVGhlIHBhdGNoIGFsc28gcmVtb3ZlcyBgUEdfcGFydGlhbGx5X21hcHBlZGAgYW5kIHVwZGF0ZXMgc3RhdHMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgc2lkZSBlZmZlY3RzIGFyZS4KCk5leHQsIEkgc2VlIGEgY2hhbmdlIGluIGBkZWZlcnJlZF9zcGxpdF9pc29sYXRlYC4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgbmV3IHJldHVybiBjb25kaXRpb24gaWYgYGZvbGlvX3RyeV9nZXQoZm9saW8pYCBmYWlsczsgaXQgbm93IHJldHVybnMgYExSVV9TS0lQYCBpbnN0ZWFkIG9mIGlzb2xhdGluZyB0aGUgcGFnZSBhbmQgY2xlYXJpbmcgc3RhdHMuIFRoaXMgaXMgbGlrZWx5IGFuIG9wdGltaXphdGlvbiB0byBhZGRyZXNzIGEgcmFjZSBjb25kaXRpb24sIG1heWJlPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29udGV4dHMgd2hlcmUgYGZvbGlvX3RyeV9nZXRgIGNhbiBmYWlsIOKAkyBhIGxvc3QgcmFjZSB0byBgZm9saW9fcHV0KClgIG9yIGEgZmFpbHVyZSBkdXJpbmcgYGZvbGlvX3JlZl9mcmVlemUoKWAgcGVyaGFwcy4gVGhpcyBjaGFuZ2UgaXMgdHJ5aW5nIHRvIHByZXZlbnQgdW5uZWNlc3Nhcnkgd29yay4KClRvIGZ1bGx5IGdyYXNwIHRoZSBpbnRlbnQsIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIEkmIzM5O2xsIHJlYWNoIGZvciBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZXhwbG9yZSB0aGF0IGZ1bmN0aW9uJiMzOTtzIGltcGxlbWVudGF0aW9uIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkgbmVlZCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMgb24gdGhlIGh1Z2UgcGFnZSBzcGxpdHRpbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9mb2xpby5jPTkwPXZvaWQgX19mb2xpb19wdXQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTEwMi1cdHBhZ2VfY2FjaGVfcmVsZWFzZShmb2xpbyk7XG5tbS9mb2xpby5jOjEwMzpcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vZm9saW8uYy0xMDQtXHRtZW1fY2dyb3VwX3VuY2hhcmdlKGZvbGlvKTtcbi0tXG5tbS9mb2xpby5jPTE1MT1zdGF0aWMgdm9pZCBmb2xpb19iYXRjaF9tb3ZlX2xydShzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCwgbW92ZV9mbl90IG1vdmVfZm4pXG4tLVxubW0vZm9saW8uYy0xODUtXHRcdFx0X19mb2xpb19jbGVhcl91bmV2aWN0YWJsZShmb2xpbyk7XG5tbS9mb2xpby5jOjE4NjpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL2ZvbGlvLmMtMTg3LVx0XHRcdGZiYXRjaC1cdTAwM2Vmb2xpb3NbaV0gPSBOVUxMO1xuLS1cbm1tL2ZvbGlvLmM9OTc5PXZvaWQgZm9saW9zX3B1dF9yZWZzKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zLCB1bnNpZ25lZCBpbnQgKnJlZnMpXG4tLVxubW0vZm9saW8uYy0xMDE3LVx0XHR9XG5tbS9mb2xpby5jOjEwMTg6XHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vZm9saW8uYy0xMDE5LVx0XHRfX3BhZ2VfY2FjaGVfcmVsZWFzZShmb2xpbywgXHUwMDI2bHJ1dmVjLCBcdTAwMjZmbGFncyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zOTI1PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zOTQyLVx0XHQvKiBUYWtlIG9mZiB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6Mzk0MzpcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jLTM5NDQtXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NDM1PWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDQwLS8qXG5tbS9odWdlX21lbW9yeS5jOjQ0NDE6ICogX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaXMgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseTpcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ0MjogKiB0aGUgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlubGluZSB3cmFwcGVyIGluIG1tL2ludGVybmFsLmhcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0My0gKiBsaW1pdHMgaXRzIGNhbGxzIHRvIHRob3NlIGZvbGlvcyB3aGljaCBtYXkgaGF2ZSBhIF9kZWZlcnJlZF9saXN0IGZvclxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0NS0gKlxubW0vaHVnZV9tZW1vcnkuYzo0NDQ2OiAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xubW0vaHVnZV9tZW1vcnkuYy00NDQ3LSAqIHplcm86IGJlY2F1c2UgZXZlbiB3aGVuIHRoZSBsaXN0X2xydSBsb2NrIGlzIGhlbGQsIGEgbm9uLWVtcHR5XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDUzLSAqL1xubW0vaHVnZV9tZW1vcnkuYzo0NDU0OmJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9odWdlX21lbW9yeS5jLTQ0NTUte1xuLS1cbm1tL2ludGVybmFsLmg9NzM1PXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL2ludGVybmFsLmgtNzQ2LVxubW0vaW50ZXJuYWwuaDo3NDc6Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9pbnRlcm5hbC5oOjc0ODpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaW50ZXJuYWwuaC03NDkte1xuLS1cbm1tL2ludGVybmFsLmgtNzYwLVxubW0vaW50ZXJuYWwuaDo3NjE6XHRyZXR1cm4gX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL2ludGVybmFsLmgtNzYyLX1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9NjE4PXZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy02NTMtXG5tbS9tZW1jb250cm9sLXYxLmM6NjU0Olx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9tZW1jb250cm9sLXYxLmMtNjU1LVx0Zm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IDA7XG4tLVxubW0vbWVtY29udHJvbC5jPTUzMzU9c3RhdGljIHZvaWQgdW5jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXG4tLVxubW0vbWVtY29udHJvbC5jLTUzNzMtXG5tbS9tZW1jb250cm9sLmM6NTM3NDpcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01Mzc1LVx0fVxuLS1cbm1tL21lbWNvbnRyb2wuYz01NTEzPXZvaWQgbWVtX2Nncm91cF9taWdyYXRlKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTU1NC1cdC8qIFdhcm5pbmcgc2hvdWxkIG5ldmVyIGhhcHBlbiwgc28gZG9uJiMzOTt0IHdvcnJ5IGFib3V0IHJlZmNvdW50IG5vbi0wICovXG5tbS9tZW1jb250cm9sLmM6NTU1NTpcdFdBUk5fT05fT05DRShmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KG9sZCkpO1xubW0vbWVtY29udHJvbC5jLTU1NTYtXHRvbGQtXHUwMDNlbWVtY2dfZGF0YSA9IDA7XG4tLVxubW0vbWlncmF0ZS5jPTU4Mz1zdGF0aWMgaW50IF9fZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL21pZ3JhdGUuYy01OTctXHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbm1tL21pZ3JhdGUuYzo1OTg6XHRcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS9taWdyYXRlLmMtNTk5LVx0XHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgZXhwZWN0ZWRfY291bnQpO1xuLS1cbm1tL21pZ3JhdGUuYy02MzAtXHQvKiBUYWtlIG9mZiBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xubW0vbWlncmF0ZS5jOjYzMTpcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xubW0vbWlncmF0ZS5jLTYzMi1cbi0tXG5tbS92bXNjYW4uYz0xMDU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xNTA2LVxubW0vdm1zY2FuLmM6MTUwNzpcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG5tbS92bXNjYW4uYy0xNTA4LVx0XHRpZiAoZm9saW9fYmF0Y2hfYWRkKFx1MDAyNmZyZWVfZm9saW9zLCBmb2xpbykgPT0gMCkge1xuLS1cbm1tL3Ztc2Nhbi5jPTE4NjY9c3RhdGljIHVuc2lnbmVkIGludCBtb3ZlX2ZvbGlvc190b19scnUoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS92bXNjYW4uYy0xOTAxLVxubW0vdm1zY2FuLmM6MTkwMjpcdFx0XHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcbm1tL3Ztc2Nhbi5jLTE5MDMtXHRcdFx0aWYgKGZvbGlvX2JhdGNoX2FkZChcdTAwMjZmcmVlX2ZvbGlvcywgZm9saW8pID09IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIGZpbGUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDQ0NDAgdG8gNDYwMC4gVGhhdCByYW5nZSB1c3VhbGx5IGNvdmVycyBhIGZhaXJseSBzdWJzdGFudGlhbCBzZWN0aW9uLCBsaWtlbHkgaW52b2x2aW5nIGVpdGhlciBzb21lIGNvcmUgYWxsb2NhdGlvbiBsb2dpYyBvciBtYW5pcHVsYXRpb24gcmVsYXRlZCB0byBodWdlIHBhZ2VzLCBnaXZlbiB0aGUgZmlsZSYjMzk7cyBuYW1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiBkZXRhaWwsIHNvIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgY2FyZWZ1bGx5IHJlYWRpbmcgdGhyb3VnaCB0aGF0IHNlY3Rpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBhbnkgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMuIE15IGludGVudCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgZm9yIGltcHJvdmVtZW50LCBhbmQgcHJvYmFibHkgYWxzbyB0byByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCBhbnkgY2hhbmdlcyBzaW5jZSB0aGUgbGFzdCB0aW1lIEkgbG9va2VkIGF0IHRoaXMgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NDQwOlx0LypcbjQ0NDE6XHQgKiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpcyBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5OlxuNDQ0MjpcdCAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxuNDQ0MzpcdCAqIGxpbWl0cyBpdHMgY2FsbHMgdG8gdGhvc2UgZm9saW9zIHdoaWNoIG1heSBoYXZlIGEgX2RlZmVycmVkX2xpc3QgZm9yXG40NDQ0Olx0ICogcXVldWVpbmcgVEhQIHNwbGl0cywgYW5kIHRoYXQgbGlzdCBpcyAocmFjaWx5IG9ic2VydmVkIHRvIGJlKSBub24tZW1wdHkuXG40NDQ1Olx0ICpcbjQ0NDY6XHQgKiBJdCBpcyB1bnNhZmUgdG8gY2FsbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgdW50aWwgZm9saW8gcmVmY291bnQgaXNcbjQ0NDc6XHQgKiB6ZXJvOiBiZWNhdXNlIGV2ZW4gd2hlbiB0aGUgbGlzdF9scnUgbG9jayBpcyBoZWxkLCBhIG5vbi1lbXB0eVxuNDQ0ODpcdCAqIF9kZWZlcnJlZF9saXN0IG1pZ2h0IGJlIGluIHVzZSBvbiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkmIzM5O3MgdW5sb2NrZWRcbjQ0NDk6XHQgKiBvbi1zdGFjayBsaXN0LlxuNDQ1MDpcdCAqXG40NDUxOlx0ICogVGhlIGxpc3RfbHJ1IHN1Ymxpc3QgaXMgZGV0ZXJtaW5lZCBieSBmb2xpbyYjMzk7cyBtZW1jZzogaXQgaXMgdGhlcmVmb3JlXG40NDUyOlx0ICogaW1wb3J0YW50IHRvIHVucXVldWUgZGVmZXJyZWQgc3BsaXQgYmVmb3JlIGNoYW5naW5nIGZvbGlvIG1lbWNnLlxuNDQ1MzpcdCAqL1xuNDQ1NDpcdGJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG40NDU1Olx0e1xuNDQ1NjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNDQ1NzpcdFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1O1xuNDQ1ODpcdFx0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XG40NDU5Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuNDQ2MDpcdFx0Ym9vbCB1bnF1ZXVlZCA9IGZhbHNlO1xuNDQ2MTpcdFxuNDQ2MjpcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3JlZl9jb3VudChmb2xpbykpO1xuNDQ2MzpcdFx0V0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2ICFmb2xpb19tZW1jZ19jaGFyZ2VkKGZvbGlvKSk7XG40NDY0Olx0XG40NDY1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG40NDY2Olx0XHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbjQ0Njc6XHRcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgXHUwMDI2bWVtY2csIFx1MDAyNmZsYWdzKTtcbjQ0Njg6XHRcdGlmIChfX2xpc3RfbHJ1X2RlbChcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIGxydSwgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCkpIHtcbjQ0Njk6XHRcdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcbjQ0NzA6XHRcdFx0XHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbjQ0NzE6XHRcdFx0XHRtb2RfbXRocF9zdGF0KGZvbGlvX29yZGVyKGZvbGlvKSxcbjQ0NzI6XHRcdFx0XHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbjQ0NzM6XHRcdFx0fVxuNDQ3NDpcdFx0XHR1bnF1ZXVlZCA9IHRydWU7XG40NDc1Olx0XHR9XG40NDc2Olx0XHRsaXN0X2xydV91bmxvY2tfaXJxcmVzdG9yZShscnUsIFx1MDAyNmZsYWdzKTtcbjQ0Nzc6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuNDQ3ODpcdFxuNDQ3OTpcdFx0cmV0dXJuIHVucXVldWVkO1x0LyogdXNlZnVsIGZvciBkZWJ1ZyB3YXJuaW5ncyAqL1xuNDQ4MDpcdH1cbjQ0ODE6XHRcbjQ0ODI6XHQvKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbiYjMzk7dCBjbGVhciBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgKi9cbjQ0ODM6XHR2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcbjQ0ODQ6XHR7XG40NDg1Olx0XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XG40NDg2Olx0XHRpbnQgbmlkO1xuNDQ4NzpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNDQ4ODpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjQ0ODk6XHRcbjQ0OTA6XHRcdC8qXG40NDkxOlx0XHQgKiBPcmRlciAxIGZvbGlvcyBoYXZlIG5vIHNwYWNlIGZvciBhIGRlZmVycmVkIGxpc3QsIGJ1dCB3ZSBhbHNvXG40NDkyOlx0XHQgKiB3b24mIzM5O3Qgd2FzdGUgbXVjaCBtZW1vcnkgYnkgbm90IGFkZGluZyB0aGVtIHRvIHRoZSBkZWZlcnJlZCBsaXN0LlxuNDQ5MzpcdFx0ICovXG40NDk0Olx0XHRpZiAoZm9saW9fb3JkZXIoZm9saW8pIFx1MDAzYz0gMSlcbjQ0OTU6XHRcdFx0cmV0dXJuO1xuNDQ5NjpcdFxuNDQ5NzpcdFx0aWYgKCFwYXJ0aWFsbHlfbWFwcGVkIFx1MDAyNlx1MDAyNiAhc3BsaXRfdW5kZXJ1c2VkX3RocClcbjQ0OTg6XHRcdFx0cmV0dXJuO1xuNDQ5OTpcdFxuNDUwMDpcdFx0LypcbjQ1MDE6XHRcdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxuNDUwMjpcdFx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcbjQ1MDM6XHRcdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcbjQ1MDQ6XHRcdCAqIHVubmVjZXNzYXJ5IHRvIGhhbmRsZSBpdCBhZ2FpbiBpbiB0aGUgc2hyaW5rZXIsIHNvIGV4Y2x1ZGluZ1xuNDUwNTpcdFx0ICogc3dhcGNhY2hlIGhlcmUgbWF5IHN0aWxsIGJlIGEgdXNlZnVsIG9wdGltaXphdGlvbi5cbjQ1MDY6XHRcdCAqL1xuNDUwNzpcdFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSlcbjQ1MDg6XHRcdFx0cmV0dXJuO1xuNDUwOTpcdFxuNDUxMDpcdFx0bmlkID0gZm9saW9fbmlkKGZvbGlvKTtcbjQ1MTE6XHRcbjQ1MTI6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjQ1MTM6XHRcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuNDUxNDpcdFx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcdTAwMjZtZW1jZywgXHUwMDI2ZmxhZ3MpO1xuNDUxNTpcdFx0aWYgKHBhcnRpYWxseV9tYXBwZWQpIHtcbjQ1MTY6XHRcdFx0aWYgKCFmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG40NTE3Olx0XHRcdFx0Zm9saW9fc2V0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuNDUxODpcdFx0XHRcdGlmIChmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbykpXG40NTE5Olx0XHRcdFx0XHRjb3VudF92bV9ldmVudChUSFBfREVGRVJSRURfU1BMSVRfUEFHRSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NzQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGBtbS9odWdlX21lbW9yeS5jYCBmdW5jdGlvbnM6CgoqKkRpdmluZyBpbnRvIERlZmVycmVkIFNwbGl0IFNjYW5zIGFuZCBJc29sYXRlcyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCBhbmQgYGRlZmVycmVkX3NwbGl0X2lzb2xhdGVgIHdpdGhpbiB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIGZpbGUuIEkmIzM5O20gZ3Vlc3NpbmcgdGhlc2UgYXJlIGNydWNpYWwgZm9yIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgaHVnZSBwYWdlcyBhbmQgaGFuZGxlcyB0aGVpciBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24sIHBhcnRpY3VsYXJseSB3aGVuIGl0IGNvbWVzIHRvIGRlYWxpbmcgd2l0aCBmcmFnbWVudGF0aW9uIG9yIGNvbnRlbnRpb24uIFRoZSAmIzM0O2RlZmVycmVkJiMzNDsgcGFydCBpbW1lZGlhdGVseSBzdWdnZXN0cyBzb21lIHNvcnQgb2YgbGF6eSBldmFsdWF0aW9uIG9yIGJhY2tncm91bmQgcHJvY2Vzc2luZywgbGlrZWx5IHRvIGF2b2lkIGJsb2NraW5nIGNyaXRpY2FsIHBhdGhzLiBJJiMzOTttIGtlZW4gdG8gc2VlIGhvdyB0aGUgY29kZSBjb29yZGluYXRlcyB0aGUgY29tcGxleCBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24sIHBoeXNpY2FsIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsbHkgZXZlbiBOVU1BIGNvbnNpZGVyYXRpb25zIHRoYXQgYXJpc2Ugd2l0aCBodWdlIHBhZ2VzLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgY2xldmVyIGFsZ29yaXRobXMgaGVyZSwgZXNwZWNpYWxseSBpZiB0aGVzZSBmdW5jdGlvbnMgcGxheSBhIHBhcnQgaW4gbWluaW1pemluZyBUTEIgbWlzc2VzIG9yIHJlZHVjaW5nIGZyYWdtZW50YXRpb24gb3ZlciB0aW1lLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgZm9jdXNlZCBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjcml0ZXJpYSB0aGF0IHRyaWdnZXIgdGhlIGRlZmVycmVkIGFjdGlvbnMgYW5kIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCB0byBtYWludGFpbiBjb25zaXN0ZW5jeSBkdXJpbmcgdGhlc2Ugb3BlcmF0aW9ucy4gTGV0JiMzOTtzIHNlZSBob3cgc21hcnQgdGhlIGtlcm5lbCByZWFsbHkgaXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDU2MDpcdFx0XHRcdCAqL1xuNDU2MTpcdFx0XHRcdGlmICgmIzQzOyYjNDM7bnVtX2ZpbGxlZF9wYWdlcyBcdTAwM2U9IEhQQUdFX1BNRF9OUiAtIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSlcbjQ1NjI6XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbjQ1NjM6XHRcdFx0fVxuNDU2NDpcdFx0fVxuNDU2NTpcdFx0cmV0dXJuIGZhbHNlO1xuNDU2NjpcdH1cbjQ1Njc6XHRcbjQ1Njg6XHRzdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbjQ1Njk6XHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1LFxuNDU3MDpcdFx0XHRcdFx0XHQgICAgICB2b2lkICpjYl9hcmcpXG40NTcxOlx0e1xuNDU3MjpcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGNvbnRhaW5lcl9vZihpdGVtLCBzdHJ1Y3QgZm9saW8sIF9kZWZlcnJlZF9saXN0KTtcbjQ1NzM6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmZyZWVhYmxlID0gY2JfYXJnO1xuNDU3NDpcdFxuNDU3NTpcdFx0LyogTG9zdCByYWNlIHRvIGZvbGlvX3B1dCgpIG9yIHRoZSBmb2xpbyBpcyB1bmRlciBmb2xpb19yZWZfZnJlZXplKCkgKi9cbjQ1NzY6XHRcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXG40NTc3Olx0XHRcdHJldHVybiBMUlVfU0tJUDtcbjQ1Nzg6XHRcbjQ1Nzk6XHRcdGxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTtcbjQ1ODA6XHRcdHJldHVybiBMUlVfUkVNT1ZFRDtcbjQ1ODE6XHR9XG40NTgyOlx0XG40NTgzOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbjQ1ODQ6XHRcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcbjQ1ODU6XHR7XG40NTg2Olx0XHRMSVNUX0hFQUQoZGlzcG9zZSk7XG40NTg3Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqbmV4dDtcbjQ1ODg6XHRcdGludCBzcGxpdCA9IDA7XG40NTg5Olx0XHR1bnNpZ25lZCBsb25nIGlzb2xhdGVkO1xuNDU5MDpcdFxuNDU5MTpcdFx0aXNvbGF0ZWQgPSBsaXN0X2xydV9zaHJpbmtfd2Fsa19pcnEoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBzYyxcbjQ1OTI6XHRcdFx0XHRcdFx0ICAgIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUsIFx1MDAyNmRpc3Bvc2UpO1xuNDU5MzpcdFxuNDU5NDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCBuZXh0LCBcdTAwMjZkaXNwb3NlLCBfZGVmZXJyZWRfbGlzdCkge1xuNDU5NTpcdFx0XHRib29sIGRpZF9zcGxpdCA9IGZhbHNlO1xuNDU5NjpcdFx0XHRib29sIHVuZGVydXNlZCA9IGZhbHNlO1xuNDU5NzpcdFxuNDU5ODpcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0KTtcbjQ1OTk6XHRcbjQ2MDA6XHRcdFx0aWYgKCFmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG40NjAxOlx0XHRcdFx0LypcbjQ2MDI6XHRcdFx0XHQgKiBTZWUgdHJ5X3RvX21hcF91bnVzZWRfdG9femVyb3BhZ2UoKTogd2UgY2Fubm90XG40NjAzOlx0XHRcdFx0ICogb3B0aW1pemUgemVyby1maWxsZWQgcGFnZXMgYWZ0ZXIgc3BsaXR0aW5nIGFuXG40NjA0Olx0XHRcdFx0ICogbWxvY2tlZCBmb2xpby5cbjQ2MDU6XHRcdFx0XHQgKi9cbjQ2MDY6XHRcdFx0XHRpZiAoZm9saW9fdGVzdF9tbG9ja2VkKGZvbGlvKSlcbjQ2MDc6XHRcdFx0XHRcdGdvdG8gbmV4dDtcbjQ2MDg6XHRcdFx0XHR1bmRlcnVzZWQgPSB0aHBfdW5kZXJ1c2VkKGZvbGlvKTtcbjQ2MDk6XHRcdFx0XHRpZiAoIXVuZGVydXNlZClcbjQ2MTA6XHRcdFx0XHRcdGdvdG8gbmV4dDtcbjQ2MTE6XHRcdFx0fVxuNDYxMjpcdFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxuNDYxMzpcdFx0XHRcdGdvdG8gcmVxdWV1ZTtcbjQ2MTQ6XHRcdFx0aWYgKCFzcGxpdF9mb2xpbyhmb2xpbykpIHtcbjQ2MTU6XHRcdFx0XHRkaWRfc3BsaXQgPSB0cnVlO1xuNDYxNjpcdFx0XHRcdGlmICh1bmRlcnVzZWQpXG40NjE3Olx0XHRcdFx0XHRjb3VudF92bV9ldmVudChUSFBfVU5ERVJVU0VEX1NQTElUX1BBR0UpO1xuNDYxODpcdFx0XHRcdHNwbGl0JiM0MzsmIzQzOztcbjQ2MTk6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTI5CgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDczMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2ggaXMgdGhhdCBpdCYjMzk7cyBmb2N1c2luZyBvbiBzaW1wbGlmeWluZyB0aGUgbG9ja2luZyBhbmQgZGVmZXJyZWQgc3BsaXQgcXVldWUgaGFuZGxpbmcgd2l0aGluIHRoZSBodWdlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEl0IGxvb2tzIGxpa2UgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGFuZCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZWAuCgpFc3NlbnRpYWxseSwgSSBzZWUgYSByZWZhY3RvcmluZyBvZiB0aGUgbG9ja2luZyBvcmRlciBhbmQgbG9naWMgYXJvdW5kIGZyZWV6aW5nIGZvbGlvcyBhbmQgZGVhbGluZyB3aXRoIHBhcnRpYWxseSBtYXBwZWQgcGFnZXMgaW4gdGhlIGRlZmVycmVkIHNwbGl0IExSVS4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBMUlUgbG9jayBjb3VsZCBiZSB0YWtlbiAqYmVmb3JlKiBmcmVlemluZyB0aGUgcmVmY291bnQsIHdoaWNoIGhhcyBub3cgYmVlbiByZWFycmFuZ2VkIHRvIGZyZWV6ZSBmaXJzdCBhbmQgKnRoZW4qIGRlYWwgd2l0aCB0aGUgTFJVLiBBbHNvLCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZWAgaGFzIGJlZW4gc2ltcGxpZmllZCBieSBqdXN0IHJldHVybmluZyBgTFJVX1NLSVBgIG9uIGBmb2xpb190cnlfZ2V0YCBmYWlsdXJlcy4KCk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIGFueSBuZXcgcmlza3MsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3Mgc2VlOgoKKiAgIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UgaW4gYSBtYW5uZXIgdGhhdCB3b3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgVGhlIGxvZ2ljIGl0c2VsZiBkb2VzbiYjMzk7dCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCiogICBUaGVyZSBhcmVuJiMzOTt0IGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgd2hpY2ggaXMgZ29vZC4KKiAgIEkgZG9uJiMzOTt0IHNlZSBhbnkgY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWQgdG8gYm91bmRzIGNoZWNrIHZ1bG5lcmFiaWxpdGllcywgb3IgdGhlIGxlYWtpbmcgb2YgdW5pbml0aWFsaXplZCBieXRlcyB0aHJvdWdoIGV4aXN0aW5nIGJ1ZmZlcnMuCiogICBDcnVjaWFsbHksIHRoZXJlIGFyZSBubyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgb3IgaW9jdGwgY2FsbHMgdGhhdCBjb3VsZCBsZWFkIHRvIHVzZXItc3BhY2UgbGVha3MuCiogICBJJiMzOTttIGFsc28gbm90IHNlZWluZyBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IHJpc2tzIGhlcmUuCgpUaGlzIGxvb2tzIGxpa2UgcHVyZSBNTSBzeW5jaHJvbml6YXRpb246IGNoYW5nZXMgdG8gcGFnZSBzcGxpdHRpbmcsIExSVSBsaXN0IGhhbmRsaW5nLCBhbmQgbG9ja2luZy4gQWxsIHRoZSBjaGFuZ2VzIGludm9sdmUgbWFuaXB1bGF0aW5nIGxpc3QgcG9pbnRlcnMsIHBhZ2UgZmxhZ3MsIHJlZmNvdW50cywgYW5kIG1lbW9yeSBjZ3JvdXAgc3RhdHMuIFNvLCB3aXRoIHRoaXMga2luZCBvZiB3b3JrLCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgYXJlOiByYWNlIGNvbmRpdGlvbnMsIGxvY2sgb3JkZXIgcHJvYmxlbXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGRvdWJsZSBsaXN0IGRlbGV0aW9ucywgcmVmY291bnQgdW5kZXJmbG93IG9yIGxlYWtzLgoKSG93ZXZlciwgYWxsIG9mIHRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIGtpbmRzIG9mIGlzc3VlcyB0aGF0IEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtcyAoZS5nLiwgYXNzZXJ0aW9ucyBsaWtlIGBWTV9XQVJOX09OYCwgYFdBUk5fT05fT05DRWApIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gQW5kIEkgZG9uJiMzOTt0IHNlZSBhbnkgdmVjdG9yIGZvciBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGxlYWsgKnRoYXQgd291bGQgb25seSBiZSBkZXRlY3RhYmxlIGJ5IEtNU0FOKi4KClRoZXJlZm9yZSwgYmFzZWQgb24gbXkgYW5hbHlzaXMgb2YgdGhlIHBhdGNoIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIG1lbW9yeSBzYWZldHkgdG9vbHMsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuCgpTbywgdGhlIHN1bW1hcnkgaXMgdGhhdDogdGhpcyBwYXRjaCBzaW1wbGlmaWVzIGxvY2tpbmcgYW5kIGRlZmVycmVkIHNwbGl0IHF1ZXVlIGhhbmRsaW5nIGluIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoKWAgYW5kIGBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKClgIGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGhlIGNoYW5nZXMgb25seSBtYW5pcHVsYXRlIGxpc3QgcG9pbnRlcnMgKGBfZGVmZXJyZWRfbGlzdGApLCBwYWdlIGZsYWdzIChgUEdfcGFydGlhbGx5X21hcHBlZGApLCBmb2xpbyByZWZjb3VudHMsIGFuZCBtZW1vcnkgY2dyb3VwIHN0YXRzLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHN0YWNrL2hlYXAgYnVmZmVycyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCwgbm9yIGFyZSB0aGVyZSBhbnkgdXNlci1zcGFjZSBjb3B5IG1lY2hhbmlzbXMgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL3BhZGRpbmcuIEFueSBjb25jdXJyZW5jeSBvciByZWZlcmVuY2UgY291bnRpbmcgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYXNzZXJ0aW9ucy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgaGFuZGxpbmcgaW4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZCgpYCBhbmQgYGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoKWAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCByZXBsYWNpbmcgbWFudWFsIExSVSBsb2NraW5nIHByaW9yIHRvIGZvbGlvIHJlZiBmcmVlemluZyB3aXRoIGNhbGxzIHRvIGBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KClgIGFuZCBza2lwcGluZyB1bnJlZmVyZW5jZWQgZm9saW9zIGR1cmluZyBpc29sYXRpb24uXG5cblRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIGZvbGlvIHJlZmVyZW5jZSBjb3VudGluZywgbGlzdCBtYW5hZ2VtZW50IChgX2RlZmVycmVkX2xpc3RgKSwgYW5kIGZvbGlvIGZsYWdzIChgUEdfcGFydGlhbGx5X21hcHBlZGApLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBvciBtYW5pcHVsYXRlZCwgYW5kIG5vIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBjb25jdXJyZW5jeSwgcmVmY291bnQsIG9yIGxpc3QgY29ycnVwdGlvbiBidWdzIGludHJvZHVjZWQgaGVyZSB3b3VsZCBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLCBMT0NLREVQLCBvciBrZXJuZWwgYXNzZXJ0aW9ucywgcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSBoYW5kbGluZyBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKClgIGFuZCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSgpYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHJlcGxhY2luZyBtYW51YWwgTFJVIGxvY2tpbmcgcHJpb3IgdG8gZm9saW8gcmVmIGZyZWV6aW5nIHdpdGggY2FsbHMgdG8gYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKWAgYW5kIHNraXBwaW5nIHVucmVmZXJlbmNlZCBmb2xpb3MgZHVyaW5nIGlzb2xhdGlvbi5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggZm9saW8gcmVmZXJlbmNlIGNvdW50aW5nLCBsaXN0IG1hbmFnZW1lbnQgKGBfZGVmZXJyZWRfbGlzdGApLCBhbmQgZm9saW8gZmxhZ3MgKGBQR19wYXJ0aWFsbHlfbWFwcGVkYCkuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHN0YWNrIG9yIGhlYXAgYnVmZmVycyBhcmUgYWxsb2NhdGVkIG9yIG1hbmlwdWxhdGVkLCBhbmQgbm8gdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgYXJlIGxlZnQgdW5pbml0aWFsaXplZC4gQW55IGNvbmN1cnJlbmN5LCByZWZjb3VudCwgb3IgbGlzdCBjb3JydXB0aW9uIGJ1Z3MgaW50cm9kdWNlZCBoZXJlIHdvdWxkIGZhbGwgdW5kZXIgdGhlIHB1cnZpZXcgb2YgS0FTQU4sIExPQ0tERVAsIG9yIGtlcm5lbCBhc3NlcnRpb25zLCByYXRoZXIgdGhhbiBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3Rpb24uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA3OjM4LjkwMzgxMzUyMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTExOTk0MzY0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJcIixcbiAgICBcImZvbGlvX3NwbGl0XCIsXG4gICAgXCJzcGxpdF9mb2xpb190b19saXN0XCIsXG4gICAgXCJmb2xpb19zcGxpdF91bm1hcHBlZFwiLFxuICAgIFwiX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0XCIsXG4gICAgXCJkZWZlcnJlZF9zcGxpdF9mb2xpb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSBoYW5kbGluZyBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKClgIGFuZCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSgpYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHJlcGxhY2luZyBtYW51YWwgTFJVIGxvY2tpbmcgcHJpb3IgdG8gZm9saW8gcmVmIGZyZWV6aW5nIHdpdGggY2FsbHMgdG8gYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKWAgYW5kIHNraXBwaW5nIHVucmVmZXJlbmNlZCBmb2xpb3MgZHVyaW5nIGlzb2xhdGlvbi5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBmb2xpbyByZWZlcmVuY2UgY291bnRpbmcsIGxpc3QgbWFuYWdlbWVudCAoYF9kZWZlcnJlZF9saXN0YCksIGFuZCBmb2xpbyBmbGFncyAoYFBHX3BhcnRpYWxseV9tYXBwZWRgKS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gc3RhY2sgb3IgaGVhcCBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgb3IgbWFuaXB1bGF0ZWQsIGFuZCBubyB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgY29uY3VycmVuY3ksIHJlZmNvdW50LCBvciBsaXN0IGNvcnJ1cHRpb24gYnVncyBpbnRyb2R1Y2VkIGhlcmUgd291bGQgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiwgTE9DS0RFUCwgb3Iga2VybmVsIGFzc2VydGlvbnMsIHJhdGhlciB0aGFuIEtNU0FOIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdGlvbi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLCBzcGVjaWZpY2FsbHkgaG93IGRlZmVycmVkIHNwbGl0IGxpc3QgbG9ja2luZyBhbmQgcmVmY291bnQgZnJlZXppbmcgc3luY2hyb25pemUgZHVyaW5nIGZvbGlvIHNwbGl0dGluZyBhbmQgc2hyaW5rZXIgaXNvbGF0aW9uIChkZWZlcnJlZF9zcGxpdF9pc29sYXRlIGFuZCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBtZW1vcnkgcmVjbGFpbSBhbmQgVEhQIHNwbGl0dGluZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA3OjM4LjkwMzgyMDc4MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMjI0MjAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIyM2JhNjJlZGUwMmY1ODE3OGJjOGQ3N2YwNTlhN2Y5MWIxMDRhZWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTA6MDc6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCBjZWQ0MDBmNzJkNDNhLi5jODRlOGNiYzk4NmQ5IDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTM5MzEsNDEgKzM5MzEsMjcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cXG4gXFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcXG4gXFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0O1xcbiBcXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xcbi1cXHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnU7XFxuLVxcdGJvb2wgZGVxdWV1ZV9kZWZlcnJlZDtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgXFx1MDAyNlxcdTAwMjYgZW5kKTtcXG4tXFx0LypcXG4tXFx0ICogSWYgdGhpcyBmb2xpbyBjYW4gYmUgb24gdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlLCBsb2NrIG91dFxcbi1cXHQgKiB0aGUgc2hyaW5rZXIgYmVmb3JlIGZyZWV6aW5nIHRoZSByZWYuIElmIHRoZSBzaHJpbmtlciBzZWVzXFxuLVxcdCAqIGEgMC1yZWYgZm9saW8sIGl0IGFzc3VtZXMgaXQgYmVhdCBmb2xpb19wdXQoKSB0byB0aGUgbGlzdFxcbi1cXHQgKiBsb2NrIGFuZCBtdXN0IGNsZWFuIHVwIHRoZSBMUlUgc3RhdGUgLSB0aGUgc2FtZSBkZXF1ZXVlIHdlXFxuLVxcdCAqIHdpbGwgZG8gYmVsb3cgYXMgcGFydCBvZiB0aGUgc3BsaXQuXFxuLVxcdCAqL1xcbi1cXHRkZXF1ZXVlX2RlZmVycmVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBvbGRfb3JkZXIgXFx1MDAzZSAxO1xcbi1cXHRpZiAoZGVxdWV1ZV9kZWZlcnJlZCkge1xcbi1cXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuLVxcbi1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdFxcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xcbi1cXHRcXHRscnUgPSBsaXN0X2xydV9sb2NrKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsXFxuLVxcdFxcdFxcdFxcdCAgICBmb2xpb19uaWQoZm9saW8pLCBcXHUwMDI2bWVtY2cpO1xcbi1cXHR9XFxuK1xcbiBcXHRpZiAoZm9saW9fcmVmX2ZyZWV6ZShmb2xpbywgZm9saW9fY2FjaGVfcmVmX2NvdW50KGZvbGlvKSArIDEpKSB7XFxuIFxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kgPSBOVUxMO1xcbiBcXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XFxuIFxcbi1cXHRcXHRpZiAoZGVxdWV1ZV9kZWZlcnJlZCkge1xcbi1cXHRcXHRcXHRfX2xpc3RfbHJ1X2RlbChcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0LCBmb2xpb19uaWQoZm9saW8pKTtcXG4tXFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcXG4tXFx0XFx0XFx0XFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxuLVxcdFxcdFxcdFxcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxcbi1cXHRcXHRcXHRcXHRcXHRNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0bGlzdF9scnVfdW5sb2NrKGxydSk7XFxuLVxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHQvKiBUYWtlIG9mZiB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cXG4rXFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0XFxuK1xcdFxcdCAqIHNwbGl0cyBpdCwgc28gdGhlIHVucXVldWUgYWJvdmUgZmluZHMgYW4gZW1wdHkgbGlzdCBhbmRcXG4rXFx0XFx0ICogbGVhdmVzIFBHX3BhcnRpYWxseV9tYXBwZWQgc2V0LlxcbitcXHRcXHQgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuK1xcdFxcdFxcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xcbitcXHRcXHRcXHRtb2RfbXRocF9zdGF0KG9sZF9vcmRlcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAobWFwcGluZykge1xcbkBAIC00MDY3LDEwICs0MDUzLDYgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cXG4gXFx0XFx0aWYgKGNpKVxcbiBcXHRcXHRcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0aWYgKGRlcXVldWVfZGVmZXJyZWQpIHtcXG4tXFx0XFx0XFx0bGlzdF9scnVfdW5sb2NrKGxydSk7XFxuLVxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRcXHR9XFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXHR9XFxuIFxcbkBAIC00NTkwLDIyICs0NTcyLDExIEBAIHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCBmb2xpbywgX2RlZmVycmVkX2xpc3QpO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlYWJsZSA9IGNiX2FyZztcXG4gXFxuLVxcdGlmIChmb2xpb190cnlfZ2V0KGZvbGlvKSkge1xcbi1cXHRcXHRsaXN0X2xydV9pc29sYXRlX21vdmUobHJ1LCBpdGVtLCBmcmVlYWJsZSk7XFxuLVxcdFxcdHJldHVybiBMUlVfUkVNT1ZFRDtcXG4tXFx0fVxcbitcXHQvKiBMb3N0IHJhY2UgdG8gZm9saW9fcHV0KCkgb3IgdGhlIGZvbGlvIGlzIHVuZGVyIGZvbGlvX3JlZl9mcmVlemUoKSAqL1xcbitcXHRpZiAoIWZvbGlvX3RyeV9nZXQoZm9saW8pKVxcbitcXHRcXHRyZXR1cm4gTFJVX1NLSVA7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBXZSBsb3N0IHJhY2Ugd2l0aCBmb2xpb19wdXQoKS4gUmVhZCBmb2xpbyBzdGF0ZSBiZWZvcmUgdGhlXFxuLVxcdCAqIGlzb2xhdGU6IGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBjaGVja3MgbGlzdF9lbXB0eSgpXFxuLVxcdCAqIGxvY2tsZXNzbHksIHNvIG9uY2UgcmVtb3ZlZCB0aGUgZm9saW8gY2FuIGJlIGZyZWVkIGFueSB0aW1lLlxcbi1cXHQgKi9cXG4tXFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcXG4tXFx0XFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxuLVxcdFxcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxcbi1cXHRcXHRcXHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XFxuLVxcdH1cXG4tXFx0bGlzdF9scnVfaXNvbGF0ZShscnUsIGl0ZW0pO1xcbitcXHRsaXN0X2xydV9pc29sYXRlX21vdmUobHJ1LCBpdGVtLCBmcmVlYWJsZSk7XFxuIFxcdHJldHVybiBMUlVfUkVNT1ZFRDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDc6NDAuNDM3MDc5Njg4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNDQ0NDEwNzMwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gICAgXCJmb2xpb19zcGxpdFwiLFxuICAgIFwic3BsaXRfZm9saW9fdG9fbGlzdFwiLFxuICAgIFwiZm9saW9fc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcIl9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdFwiLFxuICAgIFwiZGVmZXJyZWRfc3BsaXRfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLCBzcGVjaWZpY2FsbHkgaG93IGRlZmVycmVkIHNwbGl0IGxpc3QgbG9ja2luZyBhbmQgcmVmY291bnQgZnJlZXppbmcgc3luY2hyb25pemUgZHVyaW5nIGZvbGlvIHNwbGl0dGluZyBhbmQgc2hyaW5rZXIgaXNvbGF0aW9uIChkZWZlcnJlZF9zcGxpdF9pc29sYXRlIGFuZCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBtZW1vcnkgcmVjbGFpbSBhbmQgVEhQIHNwbGl0dGluZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIyM2JhNjJlZGUwMmY1ODE3OGJjOGQ3N2YwNTlhN2Y5MWIxMDRhZWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxMDowNzozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCBjZWQ0MDBmNzJkNDNhLi5jODRlOGNiYzk4NmQ5IDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTM5MzEsNDEgKzM5MzEsMjcgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cbiBcdHN0cnVjdCBmb2xpbyAqZW5kX2ZvbGlvID0gZm9saW9fbmV4dChmb2xpbyk7XG4gXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgKm5leHQ7XG4gXHRpbnQgb2xkX29yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuLVx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1O1xuLVx0Ym9vbCBkZXF1ZXVlX2RlZmVycmVkO1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoIW1hcHBpbmcgXHUwMDI2XHUwMDI2IGVuZCk7XG4tXHQvKlxuLVx0ICogSWYgdGhpcyBmb2xpbyBjYW4gYmUgb24gdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlLCBsb2NrIG91dFxuLVx0ICogdGhlIHNocmlua2VyIGJlZm9yZSBmcmVlemluZyB0aGUgcmVmLiBJZiB0aGUgc2hyaW5rZXIgc2Vlc1xuLVx0ICogYSAwLXJlZiBmb2xpbywgaXQgYXNzdW1lcyBpdCBiZWF0IGZvbGlvX3B1dCgpIHRvIHRoZSBsaXN0XG4tXHQgKiBsb2NrIGFuZCBtdXN0IGNsZWFuIHVwIHRoZSBMUlUgc3RhdGUgLSB0aGUgc2FtZSBkZXF1ZXVlIHdlXG4tXHQgKiB3aWxsIGRvIGJlbG93IGFzIHBhcnQgb2YgdGhlIHNwbGl0LlxuLVx0ICovXG4tXHRkZXF1ZXVlX2RlZmVycmVkID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgb2xkX29yZGVyIFx1MDAzZSAxO1xuLVx0aWYgKGRlcXVldWVfZGVmZXJyZWQpIHtcbi1cdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuLVxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdG1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuLVx0XHRscnUgPSBsaXN0X2xydV9sb2NrKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSxcbi1cdFx0XHRcdCAgICBmb2xpb19uaWQoZm9saW8pLCBcdTAwMjZtZW1jZyk7XG4tXHR9XG4rXG4gXHRpZiAoZm9saW9fcmVmX2ZyZWV6ZShmb2xpbywgZm9saW9fY2FjaGVfcmVmX2NvdW50KGZvbGlvKSArIDEpKSB7XG4gXHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kgPSBOVUxMO1xuIFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4gXG4tXHRcdGlmIChkZXF1ZXVlX2RlZmVycmVkKSB7XG4tXHRcdFx0X19saXN0X2xydV9kZWwoXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2Zm9saW8tXHUwMDNlX2RlZmVycmVkX2xpc3QsIGZvbGlvX25pZChmb2xpbykpO1xuLVx0XHRcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG4tXHRcdFx0XHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbi1cdFx0XHRcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxuLVx0XHRcdFx0XHRNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XG4tXHRcdFx0fVxuLVx0XHRcdGxpc3RfbHJ1X3VubG9jayhscnUpO1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0XHQvKiBUYWtlIG9mZiB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cbitcdFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIGRlZmVycmVkX3NwbGl0X3NjYW4oKSB0YWtlcyB0aGUgZm9saW8gb2ZmIHRoZSBxdWV1ZSBiZWZvcmUgaXRcbitcdFx0ICogc3BsaXRzIGl0LCBzbyB0aGUgdW5xdWV1ZSBhYm92ZSBmaW5kcyBhbiBlbXB0eSBsaXN0IGFuZFxuK1x0XHQgKiBsZWF2ZXMgUEdfcGFydGlhbGx5X21hcHBlZCBzZXQuXG4rXHRcdCAqIENsZWFyIGl0IGhlcmU6IHRoZSBmbGFnIGRvZXMgbm90IHN1cnZpdmUgdGhlIHNwbGl0LlxuK1x0XHQgKi9cbitcdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcbitcdFx0XHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcbitcdFx0XHRtb2RfbXRocF9zdGF0KG9sZF9vcmRlcixcbitcdFx0XHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbiBcdFx0fVxuIFxuIFx0XHRpZiAobWFwcGluZykge1xuQEAgLTQwNjcsMTAgKzQwNTMsNiBAQCBzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgblxuIFx0XHRpZiAoY2kpXG4gXHRcdFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXHR9IGVsc2Uge1xuLVx0XHRpZiAoZGVxdWV1ZV9kZWZlcnJlZCkge1xuLVx0XHRcdGxpc3RfbHJ1X3VubG9jayhscnUpO1xuLVx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHR9XG4gXHRcdHJldHVybiAtRUFHQUlOO1xuIFx0fVxuIFxuQEAgLTQ1OTAsMjIgKzQ1NzIsMTEgQEAgc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCBmb2xpbywgX2RlZmVycmVkX2xpc3QpO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqZnJlZWFibGUgPSBjYl9hcmc7XG4gXG4tXHRpZiAoZm9saW9fdHJ5X2dldChmb2xpbykpIHtcbi1cdFx0bGlzdF9scnVfaXNvbGF0ZV9tb3ZlKGxydSwgaXRlbSwgZnJlZWFibGUpO1xuLVx0XHRyZXR1cm4gTFJVX1JFTU9WRUQ7XG4tXHR9XG4rXHQvKiBMb3N0IHJhY2UgdG8gZm9saW9fcHV0KCkgb3IgdGhlIGZvbGlvIGlzIHVuZGVyIGZvbGlvX3JlZl9mcmVlemUoKSAqL1xuK1x0aWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSlcbitcdFx0cmV0dXJuIExSVV9TS0lQO1xuIFxuLVx0Lypcbi1cdCAqIFdlIGxvc3QgcmFjZSB3aXRoIGZvbGlvX3B1dCgpLiBSZWFkIGZvbGlvIHN0YXRlIGJlZm9yZSB0aGVcbi1cdCAqIGlzb2xhdGU6IGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBjaGVja3MgbGlzdF9lbXB0eSgpXG4tXHQgKiBsb2NrbGVzc2x5LCBzbyBvbmNlIHJlbW92ZWQgdGhlIGZvbGlvIGNhbiBiZSBmcmVlZCBhbnkgdGltZS5cbi1cdCAqL1xuLVx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbGx5X21hcHBlZChmb2xpbykpIHtcbi1cdFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4tXHRcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxuLVx0XHRcdCAgICAgIE1USFBfU1RBVF9OUl9BTk9OX1BBUlRJQUxMWV9NQVBQRUQsIC0xKTtcbi1cdH1cbi1cdGxpc3RfbHJ1X2lzb2xhdGUobHJ1LCBpdGVtKTtcbitcdGxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTtcbiBcdHJldHVybiBMUlVfUkVNT1ZFRDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowNzo0MC40MzcxMTcxMThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjI3OTI2NzMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBIdWdlIE1lbW9yeSBQYXRjaCoqXG5cbk9rYXksIHNvIGEgcGF0Y2ggZm9yIGBtbS9odWdlX21lbW9yeS5jYCBjYW1lIGluLiBMZXQncyBnZXQgdG8gd29yayBkaXNzZWN0aW5nIHRoaXMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgbWFkZS4gSSdsbCBwdWxsIHVwIHRoZSBwYXRjaCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY29kZSBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFRpbWUgdG8gc2VlIGV4YWN0bHkgd2hhdCBoYXMgYmVlbiB0d2Vha2VkLiBJJ2xsIHVzZSBteSB1c3VhbCB0b29scyBoZXJlLiBBIHF1aWNrIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB3aWxsIHBpbnBvaW50IHRoZSByZWxldmFudCBzZWN0aW9ucyBhcm91bmQgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZCwgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIHByb3Bvc2VkIGZpeC4gR290dGEgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgY2hhbmdlIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgaHVnZSBtZW1vcnkgbWFuYWdlbWVudC4gUmlnaHQsIGxldCdzIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA4OjIyLjcxNjM4NzU4M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTY3NzcyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9MzkxOD1zdGF0aWMgdW5zaWduZWQgaW50IGZvbGlvX2NhY2hlX3JlZl9jb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTI0LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzkyNTpzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzkyNi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHhhX3N0YXRlICp4YXMsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQwODM9c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyMTItXFxubW0vaHVnZV9tZW1vcnkuYzo0MjEzOlxcdHJldCA9IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgXFx1MDAyNnhhcywgbWFwcGluZyxcXG5tbS9odWdlX21lbW9yeS5jLTQyMTQtXFx0XFx0XFx0XFx0XFx0XFx0dHJ1ZSwgbGlzdCwgc3BsaXRfdHlwZSwgZW5kLCBcXHUwMDI2bnJfc2htZW1fZHJvcHBlZCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQzMDE9aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQzMTMtXFx0bG9jYWxfaXJxX2Rpc2FibGUoKTtcXG5tbS9odWdlX21lbW9yeS5jOjQzMTQ6XFx0cmV0ID0gX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKGZvbGlvLCBuZXdfb3JkZXIsIFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgTlVMTCxcXG5tbS9odWdlX21lbW9yeS5jLTQzMTUtXFx0XFx0XFx0XFx0XFx0XFx0TlVMTCwgZmFsc2UsIE5VTEwsIFNQTElUX1RZUEVfVU5JRk9STSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDg6MjIuNzgyMDY5MTgyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQzMTcyNTE1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIERlZXAgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIGZpbGUgYW5kIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMzkwMCBhbGwgdGhlIHdheSB0byBhYm91dCBsaW5lIDQ2NTAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGNodW5rIG9mIHRoZSBjb2RlIHRvIGNoZXcgb24gYW5kIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcuIEkgZXhwZWN0IHRoYXQgSSdsbCBmaW5kIHRoZSBrZXkgbWVjaGFuaXNtcyBmb3IgaGFuZGxpbmcgc29tZSBjb21wbGV4IHBhcnQgb2YgdGhlIGh1Z2UgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRlY2huaXF1ZXMgdGhlIGRldmVsb3BlcnMgaGF2ZSBlbXBsb3llZCBoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGVpdGhlciBmaW5kIGEgcGFydGljdWxhcmx5IGNsZXZlciBkYXRhIHN0cnVjdHVyZSwgYW4gZWZmaWNpZW50IGxvY2tpbmcgc3RyYXRlZ3ksIG9yIG1heWJlIGV2ZW4gYSBub3ZlbCBhcHByb2FjaCB0byBhZGRyZXNzaW5nIGEgc3BlY2lmaWMgcGVyZm9ybWFuY2UgYm90dGxlbmVjay4gVGltZSB0byBmaXJlIHVwIHRoZSBlZGl0b3IgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGxvZ2ljIVxuXG5cbiIsIklucHV0VG9rZW5zIjozNzc2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDg6NDcuMDk5MzIyNTQ2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzkyMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzkyMDpcXHRcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKVxcbjM5MjE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzkyMjpcXHRcXHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjM5MjM6XFx0fVxcbjM5MjQ6XFx0XFxuMzkyNTpcXHRzdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbjM5MjY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxcbjM5Mjc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgYm9vbCBkb19scnUsXFxuMzkyODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGVudW0gc3BsaXRfdHlwZSBzcGxpdF90eXBlLFxcbjM5Mjk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBwZ29mZl90IGVuZCwgaW50ICpucl9zaG1lbV9kcm9wcGVkKVxcbjM5MzA6XFx0e1xcbjM5MzE6XFx0XFx0c3RydWN0IGZvbGlvICplbmRfZm9saW8gPSBmb2xpb19uZXh0KGZvbGlvKTtcXG4zOTMyOlxcdFxcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCAqbmV4dDtcXG4zOTMzOlxcdFxcdGludCBvbGRfb3JkZXIgPSBmb2xpb19vcmRlcihmb2xpbyk7XFxuMzkzNDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4zOTM1OlxcdFxcbjM5MzY6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFtYXBwaW5nIFxcdTAwMjZcXHUwMDI2IGVuZCk7XFxuMzkzNzpcXHRcXG4zOTM4OlxcdFxcdGlmIChmb2xpb19yZWZfZnJlZXplKGZvbGlvLCBmb2xpb19jYWNoZV9yZWZfY291bnQoZm9saW8pICsgMSkpIHtcXG4zOTM5OlxcdFxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kgPSBOVUxMO1xcbjM5NDA6XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbjM5NDE6XFx0XFxuMzk0MjpcXHRcXHRcXHQvKiBUYWtlIG9mZiB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cXG4zOTQzOlxcdFxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbjM5NDQ6XFx0XFxuMzk0NTpcXHRcXHRcXHQvKlxcbjM5NDY6XFx0XFx0XFx0ICogZGVmZXJyZWRfc3BsaXRfc2NhbigpIHRha2VzIHRoZSBmb2xpbyBvZmYgdGhlIHF1ZXVlIGJlZm9yZSBpdFxcbjM5NDc6XFx0XFx0XFx0ICogc3BsaXRzIGl0LCBzbyB0aGUgdW5xdWV1ZSBhYm92ZSBmaW5kcyBhbiBlbXB0eSBsaXN0IGFuZFxcbjM5NDg6XFx0XFx0XFx0ICogbGVhdmVzIFBHX3BhcnRpYWxseV9tYXBwZWQgc2V0LlxcbjM5NDk6XFx0XFx0XFx0ICogQ2xlYXIgaXQgaGVyZTogdGhlIGZsYWcgZG9lcyBub3Qgc3Vydml2ZSB0aGUgc3BsaXQuXFxuMzk1MDpcXHRcXHRcXHQgKi9cXG4zOTUxOlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuMzk1MjpcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG4zOTUzOlxcdFxcdFxcdFxcdG1vZF9tdGhwX3N0YXQob2xkX29yZGVyLFxcbjM5NTQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xcbjM5NTU6XFx0XFx0XFx0fVxcbjM5NTY6XFx0XFxuMzk1NzpcXHRcXHRcXHRpZiAobWFwcGluZykge1xcbjM5NTg6XFx0XFx0XFx0XFx0aW50IG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjM5NTk6XFx0XFxuMzk2MDpcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9wbWRfbWFwcGFibGUoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuMzk2MTpcXHRcXHRcXHRcXHQgICAgbmV3X29yZGVyIFxcdTAwM2MgSFBBR0VfUE1EX09SREVSKSB7XFxuMzk2MjpcXHRcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSkge1xcbjM5NjM6XFx0XFx0XFx0XFx0XFx0XFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLFxcbjM5NjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0TlJfU0hNRU1fVEhQUywgLW5yKTtcXG4zOTY1OlxcdFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMzk2NjpcXHRcXHRcXHRcXHRcXHRcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sXFxuMzk2NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHROUl9GSUxFX1RIUFMsIC1ucik7XFxuMzk2ODpcXHRcXHRcXHRcXHRcXHR9XFxuMzk2OTpcXHRcXHRcXHRcXHR9XFxuMzk3MDpcXHRcXHRcXHR9XFxuMzk3MTpcXHRcXG4zOTcyOlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG4zOTczOlxcdFxcdFxcdFxcdGlmIChtYXBwaW5nKSB7XFxuMzk3NDpcXHRcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8obWFwcGluZywgZm9saW8pO1xcbjM5NzU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzk3NjpcXHRcXHRcXHRcXHR9XFxuMzk3NzpcXHRcXG4zOTc4OlxcdFxcdFxcdFxcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XFxuMzk3OTpcXHRcXHRcXHR9XFxuMzk4MDpcXHRcXG4zOTgxOlxcdFxcdFxcdC8qIGxvY2sgbHJ1IGxpc3QvUGFnZUNvbXBvdW5kLCByZWYgZnJvemVuIGJ5IHBhZ2VfcmVmX2ZyZWV6ZSAqL1xcbjM5ODI6XFx0XFx0XFx0aWYgKGRvX2xydSlcXG4zOTgzOlxcdFxcdFxcdFxcdGxydXZlYyA9IGZvbGlvX2xydXZlY19sb2NrKGZvbGlvKTtcXG4zOTg0OlxcdFxcbjM5ODU6XFx0XFx0XFx0cmV0ID0gX19zcGxpdF91bm1hcHBlZF9mb2xpbyhmb2xpbywgbmV3X29yZGVyLCBzcGxpdF9hdCwgeGFzLFxcbjM5ODY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBtYXBwaW5nLCBzcGxpdF90eXBlKTtcXG4zOTg3OlxcdFxcbjM5ODg6XFx0XFx0XFx0LypcXG4zOTg5OlxcdFxcdFxcdCAqIFVuZnJlZXplIGFmdGVyLXNwbGl0IGZvbGlvcyBhbmQgcHV0IHRoZW0gYmFjayB0byB0aGUgcmlnaHRcXG4zOTkwOlxcdFxcdFxcdCAqIGxpc3QuIEBmb2xpbyBzaG91bGQgYmUga2VwdCBmcm96b24gdW50aWwgcGFnZSBjYWNoZVxcbjM5OTE6XFx0XFx0XFx0ICogZW50cmllcyBhcmUgdXBkYXRlZCB3aXRoIGFsbCB0aGUgb3RoZXIgYWZ0ZXItc3BsaXQgZm9saW9zXFxuMzk5MjpcXHRcXHRcXHQgKiB0byBwcmV2ZW50IG90aGVycyBzZWVpbmcgc3RhbGUgcGFnZSBjYWNoZSBlbnRyaWVzLlxcbjM5OTM6XFx0XFx0XFx0ICogQXMgYSByZXN1bHQsIG5ld19mb2xpbyBzdGFydHMgZnJvbSB0aGUgbmV4dCBmb2xpbyBvZlxcbjM5OTQ6XFx0XFx0XFx0ICogQGZvbGlvLlxcbjM5OTU6XFx0XFx0XFx0ICovXFxuMzk5NjpcXHRcXHRcXHRmb3IgKG5ld19mb2xpbyA9IGZvbGlvX25leHQoZm9saW8pOyBuZXdfZm9saW8gIT0gZW5kX2ZvbGlvO1xcbjM5OTc6XFx0XFx0XFx0ICAgICBuZXdfZm9saW8gPSBuZXh0KSB7XFxuMzk5ODpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMobmV3X2ZvbGlvKTtcXG4zOTk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowODo0Ny4wOTk1NDYzNTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDg2NTYwMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25jZXB0cywgcHJlc2VudGVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIHRvcGljOlxuXG4qKkV4YW1pbmluZyBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZWAgYW5kIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCoqXG5cbkFscmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIGFuZCBkaWcgaW50byB0aG9zZSB0d28gZnVuY3Rpb24gbmFtZXM6IGBkZWZlcnJlZF9zcGxpdF9pc29sYXRlYCBhbmQgYGRlZmVycmVkX3NwbGl0X3NjYW5gLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhleSBwcm9iYWJseSBvcGVyYXRlIG9uIHNvbWUga2luZCBvZiBkYXRhIHN0cnVjdHVyZSwgbWF5YmUgYSBzZWdtZW50ZWQgb25lLCBhbmQgdGhleSBsaWtlbHkgcmVwcmVzZW50IG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIHNlZ21lbnRzIHRoYXQgYXJlIG5vdCBpbnN0YW50bHkgcHJvY2Vzc2VkLiBUaGUgXCJkZWZlcnJlZFwiIHBhcnQgaW1tZWRpYXRlbHkgc2NyZWFtcyBsYXp5IGV2YWx1YXRpb24gb3IgcGVyaGFwcyBhc3luY2hyb25vdXMgZXhlY3V0aW9uLCBjb3JyZWN0PyBUaGV5IGFyZSBwcm9iYWJseSB0cnlpbmcgdG8gb3B0aW1pemUgc29tZSBwaXBlbGluZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byBzcGxpdHRpbmcgYSBkYXRhc2V0IGZvciBwYXJhbGxlbCBwcm9jZXNzaW5nLiBUaGUgbmFtaW5nIHN1Z2dlc3RzIHRoYXQgdGhlIGFjdHVhbCBzcGxpdHRpbmcgbWlnaHQgbm90IG9jY3VyIGltbWVkaWF0ZWx5LCBidXQgcmF0aGVyIGJlIHNjaGVkdWxlZCBvciB0cmlnZ2VyZWQgbGF0ZXIsIHByb2JhYmx5IHdoZW4gdGhlIGRhdGEgaXMgbmVlZGVkLlxuXG5JJ20gYmV0dGluZyBgaXNvbGF0ZWAgaW1wbGllcyBzZXBhcmF0aW5nIG9uZSBzZWdtZW50LCBvciBvbmUgZWxlbWVudCBmcm9tIGEgc3BsaXQgKG9yIGdyb3VwIG9mIHNwbGl0cyksIGZvciBpbmRlcGVuZGVudCBjb21wdXRhdGlvbi4gSXQgbWlnaHQgYmUgdXNlZCBmb3Igb3BlcmF0aW9ucyB3aGVyZSBhIHNpbmdsZSBzcGxpdCBuZWVkcyBzcGVjaWFsIHByb2Nlc3NpbmcuIFRoZSB3b3JkIFwiaXNvbGF0ZVwiIHNlZW1zIHRvIHN1Z2dlc3QgdGhhdCB5b3UgbmVlZCB0byBiZSBhYmxlIHRvIHB1bGwgYSBwb3J0aW9uIGF3YXkgZnJvbSB0aGUgcmVzdCBvZiB0aGUgd29yay5cblxuYFNjYW5gIG9uIHRoZSBvdGhlciBoYW5kLCBtYWtlcyBtZSB0aGluayB0aGF0IHRoZSBkYXRhIGlzIHN0cmVhbWVkIG9yIGFjY2Vzc2VkIHNlcmlhbGx5LiBNYXliZSBpdCByZXByZXNlbnRzIGFuIGl0ZXJhdGl2ZSBvcGVyYXRpb24gYWNyb3NzIG11bHRpcGxlIHNlZ21lbnRzIG9yIGEgc2VxdWVudGlhbCBhcHBsaWNhdGlvbiBvZiBzb21ldGhpbmcuIFRoZSBcInNjYW5cIiBsaWtlbHkgbWVhbnMgd2UncmUgcGVyZm9ybWluZyBzb21lIGtpbmQgb2YgY3VtdWxhdGl2ZSBjYWxjdWxhdGlvbiBvciB0cmFuc2Zvcm1hdGlvbiBhcyB3ZSBzdGVwIHRocm91Z2ggdGhvc2Ugc3BsaXRzLiBJdCBjb3VsZCBiZSBzb21ldGhpbmcgbGlrZSBhIHJ1bm5pbmcgc3VtLCBhIHJvbGxpbmcgYXZlcmFnZSwgb3IgbWF5YmUgZXZlbiBhIHNsaWRpbmcgd2luZG93IG9wZXJhdGlvbi4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gb3BlcmF0aW9ucyB0aGF0IGRlcGVuZCBvbiBwcmV2aW91cyByZXN1bHRzLlxuXG5JJ2Qgd2FudCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aGVpciBpbnB1dHMgYW5kIG91dHB1dHMuIFdoYXQga2luZCBvZiBkYXRhIGFyZSB0aGV5IHdvcmtpbmcgd2l0aD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBkaXN0cmlidXRlZCBzeXN0ZW0/IFdoYXQgaXMgdGhlIGdvYWwgb2Ygc3BsaXR0aW5nIHRoZSBkYXRhIGluIHRoZSBmaXJzdCBwbGFjZT8gQW5kLCBtb3N0IGltcG9ydGFudGx5LCB3aGVyZSBhcmUgdGhlIGNvbXB1dGF0aW9uYWwgYm90dGxlbmVja3MgdGhhdCBuZWNlc3NpdGF0ZSB0aGVzZSBcImRlZmVycmVkXCIgb3BlcmF0aW9ucz8gQ29udGV4dCB3b3VsZCBzb2xpZGlmeSBteSBpbml0aWFsIGh5cG90aGVzaXMsIHdoaWNoLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgSSBob3BlIGlzIHJlYXNvbmFibHkgYWNjdXJhdGUhIEkgdGhpbmsgSSBhbSBsb29raW5nIGF0IHNvbWUgc29ydCBvZiBkYXRhIHByb2Nlc3Npbmcgc3RyYXRlZ3ksIHdpdGggYSBmb2N1cyBvbiBtYXhpbWl6aW5nIHBhcmFsbGVsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwMywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDg6NTEuNTg2MTA4MjI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDU2MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDU2MDpcXHRcXHRcXHRcXHQgKi9cXG40NTYxOlxcdFxcdFxcdFxcdGlmICgrK251bV9maWxsZWRfcGFnZXMgXFx1MDAzZT0gSFBBR0VfUE1EX05SIC0ga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lKVxcbjQ1NjI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjQ1NjM6XFx0XFx0XFx0fVxcbjQ1NjQ6XFx0XFx0fVxcbjQ1NjU6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjQ1NjY6XFx0fVxcbjQ1Njc6XFx0XFxuNDU2ODpcXHRzdGF0aWMgZW51bSBscnVfc3RhdHVzIGRlZmVycmVkX3NwbGl0X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG40NTY5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSxcXG40NTcwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHZvaWQgKmNiX2FyZylcXG40NTcxOlxcdHtcXG40NTcyOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IGZvbGlvLCBfZGVmZXJyZWRfbGlzdCk7XFxuNDU3MzpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlYWJsZSA9IGNiX2FyZztcXG40NTc0OlxcdFxcbjQ1NzU6XFx0XFx0LyogTG9zdCByYWNlIHRvIGZvbGlvX3B1dCgpIG9yIHRoZSBmb2xpbyBpcyB1bmRlciBmb2xpb19yZWZfZnJlZXplKCkgKi9cXG40NTc2OlxcdFxcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXFxuNDU3NzpcXHRcXHRcXHRyZXR1cm4gTFJVX1NLSVA7XFxuNDU3ODpcXHRcXG40NTc5OlxcdFxcdGxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTtcXG40NTgwOlxcdFxcdHJldHVybiBMUlVfUkVNT1ZFRDtcXG40NTgxOlxcdH1cXG40NTgyOlxcdFxcbjQ1ODM6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG40NTg0OlxcdFxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuNDU4NTpcXHR7XFxuNDU4NjpcXHRcXHRMSVNUX0hFQUQoZGlzcG9zZSk7XFxuNDU4NzpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqbmV4dDtcXG40NTg4OlxcdFxcdGludCBzcGxpdCA9IDA7XFxuNDU4OTpcXHRcXHR1bnNpZ25lZCBsb25nIGlzb2xhdGVkO1xcbjQ1OTA6XFx0XFxuNDU5MTpcXHRcXHRpc29sYXRlZCA9IGxpc3RfbHJ1X3Nocmlua193YWxrX2lycShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBzYyxcXG40NTkyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBkZWZlcnJlZF9zcGxpdF9pc29sYXRlLCBcXHUwMDI2ZGlzcG9zZSk7XFxuNDU5MzpcXHRcXG40NTk0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgbmV4dCwgXFx1MDAyNmRpc3Bvc2UsIF9kZWZlcnJlZF9saXN0KSB7XFxuNDU5NTpcXHRcXHRcXHRib29sIGRpZF9zcGxpdCA9IGZhbHNlO1xcbjQ1OTY6XFx0XFx0XFx0Ym9vbCB1bmRlcnVzZWQgPSBmYWxzZTtcXG40NTk3OlxcdFxcbjQ1OTg6XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0KTtcXG40NTk5OlxcdFxcbjQ2MDA6XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuNDYwMTpcXHRcXHRcXHRcXHQvKlxcbjQ2MDI6XFx0XFx0XFx0XFx0ICogU2VlIHRyeV90b19tYXBfdW51c2VkX3RvX3plcm9wYWdlKCk6IHdlIGNhbm5vdFxcbjQ2MDM6XFx0XFx0XFx0XFx0ICogb3B0aW1pemUgemVyby1maWxsZWQgcGFnZXMgYWZ0ZXIgc3BsaXR0aW5nIGFuXFxuNDYwNDpcXHRcXHRcXHRcXHQgKiBtbG9ja2VkIGZvbGlvLlxcbjQ2MDU6XFx0XFx0XFx0XFx0ICovXFxuNDYwNjpcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9tbG9ja2VkKGZvbGlvKSlcXG40NjA3OlxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dDtcXG40NjA4OlxcdFxcdFxcdFxcdHVuZGVydXNlZCA9IHRocF91bmRlcnVzZWQoZm9saW8pO1xcbjQ2MDk6XFx0XFx0XFx0XFx0aWYgKCF1bmRlcnVzZWQpXFxuNDYxMDpcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuNDYxMTpcXHRcXHRcXHR9XFxuNDYxMjpcXHRcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxcbjQ2MTM6XFx0XFx0XFx0XFx0Z290byByZXF1ZXVlO1xcbjQ2MTQ6XFx0XFx0XFx0aWYgKCFzcGxpdF9mb2xpbyhmb2xpbykpIHtcXG40NjE1OlxcdFxcdFxcdFxcdGRpZF9zcGxpdCA9IHRydWU7XFxuNDYxNjpcXHRcXHRcXHRcXHRpZiAodW5kZXJ1c2VkKVxcbjQ2MTc6XFx0XFx0XFx0XFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX1VOREVSVVNFRF9TUExJVF9QQUdFKTtcXG40NjE4OlxcdFxcdFxcdFxcdHNwbGl0Kys7XFxuNDYxOTpcXHRcXHRcXHR9XFxuNDYyMDpcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbjQ2MjE6XFx0bmV4dDpcXG40NjIyOlxcdFxcdFxcdC8qXFxuNDYyMzpcXHRcXHRcXHQgKiBJZiB0aHBfdW5kZXJ1c2VkKCkgcmV0dXJucyBmYWxzZSwgb3IgaWYgc3BsaXRfZm9saW8oKVxcbjQ2MjQ6XFx0XFx0XFx0ICogc3VjY2VlZHMsIG9yIGlmIHNwbGl0X2ZvbGlvKCkgZmFpbHMgaW4gdGhlIGNhc2UgaXQgd2FzXFxuNDYyNTpcXHRcXHRcXHQgKiB1bmRlcnVzZWQsIHRoZW4gY29uc2lkZXIgaXQgdXNlZCBhbmQgZG9uJ3QgYWRkIGl0IGJhY2sgdG9cXG40NjI2OlxcdFxcdFxcdCAqIHNwbGl0X3F1ZXVlLlxcbjQ2Mjc6XFx0XFx0XFx0ICovXFxuNDYyODpcXHRcXHRcXHRpZiAoIWRpZF9zcGxpdCBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuNDYyOTpcXHRyZXF1ZXVlOlxcbjQ2MzA6XFx0XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjQ2MzE6XFx0XFx0XFx0XFx0bGlzdF9scnVfYWRkX2lycShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LFxcbjQ2MzI6XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3QsXFxuNDYzMzpcXHRcXHRcXHRcXHRcXHRcXHQgZm9saW9fbmlkKGZvbGlvKSxcXG40NjM0OlxcdFxcdFxcdFxcdFxcdFxcdCBmb2xpb19tZW1jZyhmb2xpbykpO1xcbjQ2MzU6XFx0XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuNDYzNjpcXHRcXHRcXHR9XFxuNDYzNzpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjQ2Mzg6XFx0XFx0fVxcbjQ2Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA4OjUxLjU4NjMwMzQ2N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NzQyOTIxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIERlZmVycmVkIFNwbGl0IFF1ZXVlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaXQncyBkb2luZyB3aXRoaW4gdGhlIG1tL2h1Z2VfbWVtb3J5IGNvbnRleHQuIEl0J3Mgb2J2aW91c2x5IHJlbGF0ZWQgdG8gaGFuZGxpbmcgaHVnZSBwYWdlIHNwbGl0cywgYW5kIEkgbmVlZCB0byBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBkZWZlcnJhbCBtZWNoYW5pc20uIElzIGl0IGp1c3QgcmVtb3ZpbmcgZW50cmllcyBmcm9tIGEgcXVldWUsIG9yIGlzIHRoZXJlIG1vcmUgaW52b2x2ZWQ/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGltcGxpY2F0aW9ucyBmb3IgYXRvbWljaXR5LCBsb2NraW5nLCBvciB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIHRoZSBzcGxpdCBwcm9jZXNzPyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgaW1wbGVtZW50YXRpb24sIG5vdCBqdXN0IGluIGBtbS9odWdlX21lbW9yeS5jYCwgYnV0IGFueXdoZXJlIGVsc2UgaXQgbWlnaHQgYmUgY2FsbGVkLiBJJ20gbG9va2luZyBmb3IgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLiBUaGlzIGxpa2VseSBob2xkcyB0aGUga2V5IHRvIHRoZSBzcGVjaWZpYyBsb2dpYyBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA4OjU2LjA2MDU5ODA4OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE2MDk1NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZvbGlvLmM9OTA9dm9pZCBfX2ZvbGlvX3B1dChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy0xMDItXFx0cGFnZV9jYWNoZV9yZWxlYXNlKGZvbGlvKTtcXG5tbS9mb2xpby5jOjEwMzpcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9mb2xpby5jLTEwNC1cXHRtZW1fY2dyb3VwX3VuY2hhcmdlKGZvbGlvKTtcXG4tLVxcbm1tL2ZvbGlvLmM9MTUxPXN0YXRpYyB2b2lkIGZvbGlvX2JhdGNoX21vdmVfbHJ1KHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoLCBtb3ZlX2ZuX3QgbW92ZV9mbilcXG4tLVxcbm1tL2ZvbGlvLmMtMTg1LVxcdFxcdFxcdF9fZm9saW9fY2xlYXJfdW5ldmljdGFibGUoZm9saW8pO1xcbm1tL2ZvbGlvLmM6MTg2OlxcdFxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL2ZvbGlvLmMtMTg3LVxcdFxcdFxcdGZiYXRjaC1cXHUwMDNlZm9saW9zW2ldID0gTlVMTDtcXG4tLVxcbm1tL2ZvbGlvLmM9OTc5PXZvaWQgZm9saW9zX3B1dF9yZWZzKHN0cnVjdCBmb2xpb19iYXRjaCAqZm9saW9zLCB1bnNpZ25lZCBpbnQgKnJlZnMpXFxuLS1cXG5tbS9mb2xpby5jLTEwMTctXFx0XFx0fVxcbm1tL2ZvbGlvLmM6MTAxODpcXHRcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9mb2xpby5jLTEwMTktXFx0XFx0X19wYWdlX2NhY2hlX3JlbGVhc2UoZm9saW8sIFxcdTAwMjZscnV2ZWMsIFxcdTAwMjZmbGFncyk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM5MjU9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk0Mi1cXHRcXHQvKiBUYWtlIG9mZiB0aGUgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjM5NDM6XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vaHVnZV9tZW1vcnkuYy0zOTQ0LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NDM1PWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0NDAtLypcXG5tbS9odWdlX21lbW9yeS5jOjQ0NDE6ICogX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaXMgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseTpcXG5tbS9odWdlX21lbW9yeS5jOjQ0NDI6ICogdGhlIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpbmxpbmUgd3JhcHBlciBpbiBtbS9pbnRlcm5hbC5oXFxubW0vaHVnZV9tZW1vcnkuYy00NDQzLSAqIGxpbWl0cyBpdHMgY2FsbHMgdG8gdGhvc2UgZm9saW9zIHdoaWNoIG1heSBoYXZlIGEgX2RlZmVycmVkX2xpc3QgZm9yXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0NDUtICpcXG5tbS9odWdlX21lbW9yeS5jOjQ0NDY6ICogSXQgaXMgdW5zYWZlIHRvIGNhbGwgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIHVudGlsIGZvbGlvIHJlZmNvdW50IGlzXFxubW0vaHVnZV9tZW1vcnkuYy00NDQ3LSAqIHplcm86IGJlY2F1c2UgZXZlbiB3aGVuIHRoZSBsaXN0X2xydSBsb2NrIGlzIGhlbGQsIGEgbm9uLWVtcHR5XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0NTMtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0NDU0OmJvb2wgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZV9tZW1vcnkuYy00NDU1LXtcXG4tLVxcbm1tL2ludGVybmFsLmg9NzM1PXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vaW50ZXJuYWwuaC03NDYtXFxubW0vaW50ZXJuYWwuaDo3NDc6Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vaW50ZXJuYWwuaDo3NDg6c3RhdGljIGlubGluZSBib29sIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9pbnRlcm5hbC5oLTc0OS17XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTc2MC1cXG5tbS9pbnRlcm5hbC5oOjc2MTpcXHRyZXR1cm4gX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9pbnRlcm5hbC5oLTc2Mi19XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9NjE4PXZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTY1My1cXG5tbS9tZW1jb250cm9sLXYxLmM6NjU0OlxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL21lbWNvbnRyb2wtdjEuYy02NTUtXFx0Zm9saW8tXFx1MDAzZW1lbWNnX2RhdGEgPSAwO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUzMzU9c3RhdGljIHZvaWQgdW5jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTM3My1cXG5tbS9tZW1jb250cm9sLmM6NTM3NDpcXHRcXHRXQVJOX09OX09OQ0UoZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbykpO1xcbm1tL21lbWNvbnRyb2wuYy01Mzc1LVxcdH1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NTEzPXZvaWQgbWVtX2Nncm91cF9taWdyYXRlKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NTU0LVxcdC8qIFdhcm5pbmcgc2hvdWxkIG5ldmVyIGhhcHBlbiwgc28gZG9uJ3Qgd29ycnkgYWJvdXQgcmVmY291bnQgbm9uLTAgKi9cXG5tbS9tZW1jb250cm9sLmM6NTU1NTpcXHRXQVJOX09OX09OQ0UoZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChvbGQpKTtcXG5tbS9tZW1jb250cm9sLmMtNTU1Ni1cXHRvbGQtXFx1MDAzZW1lbWNnX2RhdGEgPSAwO1xcbi0tXFxubW0vbWlncmF0ZS5jPTU4Mz1zdGF0aWMgaW50IF9fZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vbWlncmF0ZS5jLTU5Ny1cXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG5tbS9taWdyYXRlLmM6NTk4OlxcdFxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL21pZ3JhdGUuYy01OTktXFx0XFx0XFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCBleHBlY3RlZF9jb3VudCk7XFxuLS1cXG5tbS9taWdyYXRlLmMtNjMwLVxcdC8qIFRha2Ugb2ZmIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoaWxlIGZyb3plbiBhbmQgbWVtY2cgc2V0ICovXFxubW0vbWlncmF0ZS5jOjYzMTpcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9taWdyYXRlLmMtNjMyLVxcbi0tXFxubW0vdm1zY2FuLmM9MTA1OD1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xNTA2LVxcbm1tL3Ztc2Nhbi5jOjE1MDc6XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vdm1zY2FuLmMtMTUwOC1cXHRcXHRpZiAoZm9saW9fYmF0Y2hfYWRkKFxcdTAwMjZmcmVlX2ZvbGlvcywgZm9saW8pID09IDApIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTE4NjY9c3RhdGljIHVuc2lnbmVkIGludCBtb3ZlX2ZvbGlvc190b19scnUoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE5MDEtXFxubW0vdm1zY2FuLmM6MTkwMjpcXHRcXHRcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS92bXNjYW4uYy0xOTAzLVxcdFxcdFxcdGlmIChmb2xpb19iYXRjaF9hZGQoXFx1MDAyNmZyZWVfZm9saW9zLCBmb2xpbykgPT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowODo1Ni44NzY2OTg4MDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTIxMDQ1MzE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXRgIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBmb2N1c2luZyBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24sIGFuZCBpdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgbWFuYWdpbmcgc3BsaXQgb3BlcmF0aW9ucywgZGVmZXJyZWQgb3Igb3RoZXJ3aXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCBoYW5kbGVzIHRoZSB1bnF1ZXVpbmcgcHJvY2Vzcy4gQXJlIHRoZXJlIHN1YnRsZSBsb2NraW5nIGlzc3Vlcz8gSG93IGVmZmljaWVudGx5IGRvZXMgaXQgaXRlcmF0ZSB0aHJvdWdoIHRoZSBkZWZlcnJlZCBzcGxpdHM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBJ4oCZbGwgYmUgcGF5aW5nIHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZvbGlvIHN0cnVjdHVyZXMgYW5kIGRhdGEgbW9kZWxzLCBhbmQgaG93IGl0IGhhbmRsZXMgZXJyb3JzIG9yIGVkZ2UgY2FzZXMuIEEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgdGhlIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIHNwbGl0IGxvZ2ljLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NzcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowOTowMi4wODcxNTQ4NjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ0MDpcXHQvKlxcbjQ0NDE6XFx0ICogX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaXMgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseTpcXG40NDQyOlxcdCAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxcbjQ0NDM6XFx0ICogbGltaXRzIGl0cyBjYWxscyB0byB0aG9zZSBmb2xpb3Mgd2hpY2ggbWF5IGhhdmUgYSBfZGVmZXJyZWRfbGlzdCBmb3JcXG40NDQ0OlxcdCAqIHF1ZXVlaW5nIFRIUCBzcGxpdHMsIGFuZCB0aGF0IGxpc3QgaXMgKHJhY2lseSBvYnNlcnZlZCB0byBiZSkgbm9uLWVtcHR5LlxcbjQ0NDU6XFx0ICpcXG40NDQ2OlxcdCAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xcbjQ0NDc6XFx0ICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcXG40NDQ4OlxcdCAqIF9kZWZlcnJlZF9saXN0IG1pZ2h0IGJlIGluIHVzZSBvbiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkncyB1bmxvY2tlZFxcbjQ0NDk6XFx0ICogb24tc3RhY2sgbGlzdC5cXG40NDUwOlxcdCAqXFxuNDQ1MTpcXHQgKiBUaGUgbGlzdF9scnUgc3VibGlzdCBpcyBkZXRlcm1pbmVkIGJ5IGZvbGlvJ3MgbWVtY2c6IGl0IGlzIHRoZXJlZm9yZVxcbjQ0NTI6XFx0ICogaW1wb3J0YW50IHRvIHVucXVldWUgZGVmZXJyZWQgc3BsaXQgYmVmb3JlIGNoYW5naW5nIGZvbGlvIG1lbWNnLlxcbjQ0NTM6XFx0ICovXFxuNDQ1NDpcXHRib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjQ0NTU6XFx0e1xcbjQ0NTY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjQ0NTc6XFx0XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1O1xcbjQ0NTg6XFx0XFx0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XFxuNDQ1OTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjQ0NjA6XFx0XFx0Ym9vbCB1bnF1ZXVlZCA9IGZhbHNlO1xcbjQ0NjE6XFx0XFxuNDQ2MjpcXHRcXHRXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7XFxuNDQ2MzpcXHRcXHRXQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpO1xcbjQ0NjQ6XFx0XFxuNDQ2NTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuNDQ2NjpcXHRcXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG40NDY3OlxcdFxcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFxcdTAwMjZtZW1jZywgXFx1MDAyNmZsYWdzKTtcXG40NDY4OlxcdFxcdGlmIChfX2xpc3RfbHJ1X2RlbChcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFxcdTAwMjZmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCkpIHtcXG40NDY5OlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuNDQ3MDpcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG40NDcxOlxcdFxcdFxcdFxcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxcbjQ0NzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xcbjQ0NzM6XFx0XFx0XFx0fVxcbjQ0NzQ6XFx0XFx0XFx0dW5xdWV1ZWQgPSB0cnVlO1xcbjQ0NzU6XFx0XFx0fVxcbjQ0NzY6XFx0XFx0bGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUobHJ1LCBcXHUwMDI2ZmxhZ3MpO1xcbjQ0Nzc6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuNDQ3ODpcXHRcXG40NDc5OlxcdFxcdHJldHVybiB1bnF1ZXVlZDtcXHQvKiB1c2VmdWwgZm9yIGRlYnVnIHdhcm5pbmdzICovXFxuNDQ4MDpcXHR9XFxuNDQ4MTpcXHRcXG40NDgyOlxcdC8qIHBhcnRpYWxseV9tYXBwZWQ9ZmFsc2Ugd29uJ3QgY2xlYXIgUEdfcGFydGlhbGx5X21hcHBlZCBmb2xpbyBmbGFnICovXFxuNDQ4MzpcXHR2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcXG40NDg0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDk6MDIuMDg3MzQ2OTM0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MDg3MTgzNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgTU0gVEhQIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGhvbmVzIGluIG9uIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlOiBpdCdzIGEgZGVlcCBkaXZlIGludG8gdGhlIG1tL2h1Z2VfbWVtb3J5LmMgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSwgcGFydGljdWxhcmx5IGFub255bW91cyBhbmQgbXVsdGktc2l6ZSBUSFBzIChtVEhQcyksIGFyZSBoYW5kbGVkIGR1cmluZyBkZWZlcnJlZCBzcGxpdHRpbmcuXG5cblByZXZpb3VzbHksIHRoZSBjb2RlIGluIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgIGhhZCBhIHNwZWNpZmljIGxvY2tpbmcgbWVjaGFuaXNtIGludm9sdmluZyBgZGVmZXJyZWRfc3BsaXRfbHJ1YCBiZWZvcmUgZnJlZXppbmcgdGhlIGZvbGlvJ3MgcmVmZXJlbmNlIGNvdW50LiBJZiBgZGVxdWV1ZV9kZWZlcnJlZGAgd2FzIHRydWUgYW5kIHRoZSBmb2xpbyB3YXMgYW5vbnltb3VzIHdpdGggYW4gb3JkZXIgZ3JlYXRlciB0aGFuIDEsIGl0IHdvdWxkIGxvY2sgdGhlIExSVSwgdGhlbiBmcmVlemUgdGhlIGZvbGlvIHJlZmVyZW5jZSBjb3VudCwgYW5kIGlmIHN1Y2Nlc3NmdWwsIHJlbW92ZSB0aGUgaXRlbSBmcm9tIHRoZSBMUlUuIEEgcmVmIGZyZWV6ZSBmYWlsdXJlIHdvdWxkIHJlc3VsdCBpbiB1bmxvY2tpbmcgdGhlIExSVSBhbmQgcmV0dXJuaW5nIC1FQUdBSU4uXG5cblRoZSBjaGFuZ2UgY2VudGVycyBhcm91bmQgYGRlZmVycmVkX3NwbGl0X2lzb2xhdGVgLCBhbmQgdGhlIHJlbW92YWwgb2YgdGhlIGV4cGxpY2l0IGxvY2tpbmcuIFRoZSBwcmV2aW91cyB2ZXJzaW9uIHRyaWVkIHRvIGdldCB0aGUgZm9saW8sIGFuZCBpZiBpdCBjb3VsZCwgaXNvbGF0ZWQgaXQgZnJvbSB0aGUgTFJVLCBvdGhlcndpc2UsIGNsZWFyZWQgdGhlIHBhcnRpYWxseSBtYXBwZWQgZmxhZyAoaWYgc2V0KSBhbmQgaXNvbGF0ZWQgaXQgZnJvbSB0aGUgTFJVLiBUaGlzIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBtb3JlIHN0cmVhbWxpbmVkIGFwcHJvYWNoLiBOb3cgYGZvbGlvX3RyeV9nZXRgIGlzIHRoZSBvbmx5IGNoZWNrIGZvciB3aGV0aGVyIHRoZSBmb2xpbyBjYW4gYmUgaXNvbGF0ZWQuIElmIGBmb2xpb190cnlfZ2V0YCBmYWlscywgdGhlIGZ1bmN0aW9uIHJldHVybnMgTFJVX1NLSVAsIGxlYXZpbmcgdGhlIGl0ZW0gb24gdGhlIExSVSwgYnV0IHRoZSBwYXJ0aWFsbHkgbWFwcGVkIGZsYWcgKnN0aWxsKiBuZWVkcyB0byBiZSBjbGVhcmVkIChpZiBzZXQpIHZpYSBgZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkYC5cblxuSW4gYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAsIHRoZSBtYW51YWwgbG9ja2luZyBiZWZvcmUgdGhlIHJlZiBmcmVlemUgaXMgcmVtb3ZlZC4gSW5zdGVhZCwgaXQgdXRpbGl6ZXMgYGZvbGlvX3JlZl9mcmVlemVgLiBJZiBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZWAgcnVucyBjb25jdXJyZW50bHkgd2hpbGUgYGZvbGlvX3JlZl9mcmVlemVgIGlzIGFjdGl2ZSwgYGZvbGlvX3RyeV9nZXRgIHdpbGwgZmFpbC4gYGRlZmVycmVkX3NwbGl0X2lzb2xhdGVgIHJldHVybnMgTFJVX1NLSVAsIHByZXZlbnRpbmcgcmVtb3ZhbCBmcm9tIHRoZSBMUlUuIFRoZSBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgY2FuIHNhZmVseSB1bnF1ZXVlIHRoZSBmb2xpbyB3aGlsZSByZWYgaXMgZnJvemVuIGFuZCBtZW1jZyBpcyBzZXQsIG9yIGlmIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCBoYWQgYWxyZWFkeSBpc29sYXRlZCBpdCBiZWZvcmUgYGZvbGlvX3JlZl9mcmVlemVgLCBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAgZmluZHMgaXQgbm90IG9uIHRoZSBscnUsIGFuZCB0aGVuIGBmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWRgIGNsZWFycyB0aGUgZmxhZy5cblxuU28sIHRoaXMgaXMgYWxsIGFib3V0IHN5bmNocm9uaXppbmcgcmVmY291bnRpbmcgYW5kIGxvY2tpbmcgYXJvdW5kIGRlZmVycmVkIHNwbGl0cywgd2hpY2ggaXMgYSBjcml0aWNhbCBhcmVhIGZvciBjb25jdXJyZW5jeSBpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQsIHBhcnRpY3VsYXJseSBmb3IgVEhQcy4gV2UncmUgdGFsa2luZyBhYm91dCBkaXJlY3QgaW1wYWN0cyBvbiBtZW1vcnkgbWFuYWdlbWVudCBpdHNlbGYsIFRIUCBzcGxpdHRpbmcsIGFub255bW91cyBUSFAvbVRIUCBwYXJ0aWFsIG1hcHBpbmcsIG1lbW9yeSByZWNsYWltIHRocm91Z2ggYGRlZmVycmVkX3NwbGl0X3NjYW5gLCBgc3BsaXRfaHVnZV9wYWdlYCwgYG1hZHZpc2UoTUFEVl9ET05UTkVFRClgLCB1bm1hcHBpbmcgcGFydGlhbCBUSFAsIGFuZCBzbyBvbi5cblxuVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoaXMgaXMgYWJzb2x1dGVseSB0ZXN0YWJsZSBhbmQgcmVhY2hhYmxlLCBldmVuIGluIGEgUUVNVS1iYXNlZCBmdXp6aW5nIGVudmlyb25tZW50LiBUSFBzIGFyZSBzdGFuZGFyZCBmZWF0dXJlcy4gV2UgY2FuIHRyaWdnZXIgdGhlc2UgcGF0aHMgdGhyb3VnaCB1c2VybGFuZCBzeXNjYWxscywgc3VjaCBhcyBgbWFkdmlzZWAsIGBtcHJvdGVjdGAsIGBtdW5tYXBgLCBhcyB3ZWxsIGFzIHN0YW5kYXJkIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBwYWdlIGZhdWx0cy5cblxuSXMgaXQgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIFRIUCBzcGxpdHRpbmcgbG9naWMsIGludGVyYWN0aW9uIHdpdGggdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlLCB0aGUgcG90ZW50aWFsIHJhY2VzIGJldHdlZW4gcGFnZSByZWNsYW1hdGlvbi9zaHJpbmtlcnMgKGBkZWZlcnJlZF9zcGxpdF9zY2FuYCksIHNwbGl0dGluZy9mcmVlaW5nIGZvbGlvcyAoYHNwbGl0X2h1Z2VfcGFnZWAsIGBzcGxpdF9mb2xpb190b19saXN0YCwgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCksIGFzIHdlbGwgYXMgdGhlIGVmZmVjdHMgb2YgYG1hZHZpc2VgLCBhbGwgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIFRoZXNlIGFyZWFzIGFyZSBmcmF1Z2h0IHdpdGggcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgc3VidGxlIHJlZmNvdW50aW5nIGVycm9ycywgdHJpY2t5IGxvY2tpbmcsIGFuZCBjb21wbGV4IHN0YXRlIHRyYW5zaXRpb25zLlxuXG5JJ2xsIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgbmV4dCB0byBjb25maXJtIHRoZSBidWlsZCByZXF1aXJlbWVudHMsIGJ1dCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHByaW9yaXRpemUgaW4gbXkgdGVzdGluZyBhbmQgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowOToyMC4xNzQ1MzMyNTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjQyMTE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX21lbW9yeVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MDk6MjAuMjg2OTU4NzkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzIzMjcxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIFRIUCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgY29uZmlndXJlZC4gVGhhdCdzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlLCBzbyBuYXR1cmFsbHksIEkgc2hvdWxkIGhlYWQgc3RyYWlnaHQgdG8gdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEknbGwgZmluZCBpdHMgZGVmaW5pdGlvbiBpbiBgbW0vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgc2V0dGluZ3MgYXJlIHVzdWFsbHkgaGFuZGxlZC4gTGV0J3Mgc2VlIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhpcyBpcyBjb250cm9sbGVkIGF0IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowOToyMi43NTkyODg1ODRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjkxMzQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9ODMyPWNvbmZpZyBNTV9JRFxcbi0tXFxubW0vS2NvbmZpZy04MzQtXFxubW0vS2NvbmZpZzo4MzU6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODM2LVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg1Mz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODU4LVxcbm1tL0tjb25maWc6ODU5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg2MC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg2NS1cXG5tbS9LY29uZmlnOjg2NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxcbm1tL0tjb25maWctODY3LVxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg3NC1cXG5tbS9LY29uZmlnOjg3NTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg3Ni1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODgyPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04OTEtXFxubW0vS2NvbmZpZzo4OTI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg5My1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTAxLVxcbm1tL0tjb25maWc6OTAyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTAzLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTA5LVxcbm1tL0tjb25maWc6OTEwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05MTEtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxNy1cXG5tbS9LY29uZmlnOjkxODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTkxOS1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTkyNz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTM2LVxcbm1tL0tjb25maWc6OTM3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05MzgtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0NS1cXG5tbS9LY29uZmlnOjk0NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTk0Ny1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1My1cXG5tbS9LY29uZmlnOjk1NDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTU1LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NjEtXFxubW0vS2NvbmZpZzo5NjI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05NjMtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowOToyMi44NzYyMDYzNzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ4OTQ3NDE3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gZm9yIFRyYW5zcGFyZW50IEh1Z2VwYWdlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBSYXRoZXIgdGhhbiBqdXN0IHJlbHlpbmcgb24gbWVtb3J5LCBJIGtub3cgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGlzIGlzIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEknbSBnb2luZyB0byBqdW1wIGludG8gYG1tL0tjb25maWdgLCBhbmQgcGlucG9pbnQgdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmUgODM1LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGVzZSBzb3J0cyBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzIGFyZSBkZWZpbmVkIG9yIGF0IGxlYXN0IGhhdmUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gd2lsbCBjbGVhcmx5IHNwZWxsIG91dCBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBoYXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlIHN1cHBvcnQuIEtub3dpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIGlzIGtleSB0byBkZWJ1Z2dpbmcgaXNzdWVzLCBjb25maWd1cmluZyBzeXN0ZW1zIHByb3Blcmx5LCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgcmV2ZWFscy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU2MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA5OjM3Ljc3MDk1MDE1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDExMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzA6XFx0XFx0ICBtZW1vcnkgY29uc3RyYWluZWQuXFxuIDgzMTpcXHRcXG4gODMyOlxcdGNvbmZpZyBNTV9JRFxcbiA4MzM6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4MzQ6XFx0XFxuIDgzNTpcXHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDgzNjpcXHRcXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbiA4Mzc6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4gODM4OlxcdFxcdHNlbGVjdCBDT01QQUNUSU9OXFxuIDgzOTpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuIDg0MDpcXHRcXHRzZWxlY3QgTU1fSURcXG4gODQxOlxcdFxcdGhlbHBcXG4gODQyOlxcdFxcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxcbiA4NDM6XFx0XFx0ICBodWdlIHRsYiB0cmFuc3BhcmVudGx5IHRvIHRoZSBhcHBsaWNhdGlvbnMgd2hlbmV2ZXIgcG9zc2libGUuXFxuIDg0NDpcXHRcXHQgIFRoaXMgZmVhdHVyZSBjYW4gaW1wcm92ZSBjb21wdXRpbmcgcGVyZm9ybWFuY2UgdG8gY2VydGFpblxcbiA4NDU6XFx0XFx0ICBhcHBsaWNhdGlvbnMgYnkgc3BlZWRpbmcgdXAgcGFnZSBmYXVsdHMgZHVyaW5nIG1lbW9yeVxcbiA4NDY6XFx0XFx0ICBhbGxvY2F0aW9uLCBieSByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIHRsYiBtaXNzZXMgYW5kIGJ5IHNwZWVkaW5nXFxuIDg0NzpcXHRcXHQgIHVwIHRoZSBwYWdldGFibGUgd2Fsa2luZy5cXG4gODQ4OlxcdFxcbiA4NDk6XFx0XFx0ICBJZiBtZW1vcnkgY29uc3RyYWluZWQgb24gZW1iZWRkZWQsIHlvdSBtYXkgd2FudCB0byBzYXkgTi5cXG4gODUwOlxcdFxcbiA4NTE6XFx0aWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gODUyOlxcdFxcbiA4NTM6XFx0Y2hvaWNlXFxuIDg1NDpcXHRcXHRwcm9tcHQgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQgc3lzZnMgZGVmYXVsdHNcXFwiXFxuIDg1NTpcXHRcXHRkZWZhdWx0IFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbiA4NTY6XFx0XFx0aGVscFxcbiA4NTc6XFx0XFx0ICBTZWxlY3RzIHRoZSBzeXNmcyBkZWZhdWx0cyBmb3IgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydC5cXG4gODU4OlxcdFxcbiA4NTk6XFx0XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbiA4NjA6XFx0XFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbiA4NjE6XFx0XFx0aGVscFxcbiA4NjI6XFx0XFx0ICBFbmFibGluZyBUcmFuc3BhcmVudCBIdWdlcGFnZSBhbHdheXMsIGNhbiBpbmNyZWFzZSB0aGVcXG4gODYzOlxcdFxcdCAgbWVtb3J5IGZvb3RwcmludCBvZiBhcHBsaWNhdGlvbnMgd2l0aG91dCBhIGd1YXJhbnRlZWRcXG4gODY0OlxcdFxcdCAgYmVuZWZpdCBidXQgaXQgd2lsbCB3b3JrIGF1dG9tYXRpY2FsbHkgZm9yIGFsbCBhcHBsaWNhdGlvbnMuXFxuIDg2NTpcXHRcXG4gODY2OlxcdFxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxuIDg2NzpcXHRcXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbiA4Njg6XFx0XFx0aGVscFxcbiA4Njk6XFx0XFx0ICBFbmFibGluZyBUcmFuc3BhcmVudCBIdWdlcGFnZSBtYWR2aXNlLCB3aWxsIG9ubHkgcHJvdmlkZSBhXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA5OjM3Ljc3MTA1MzMwMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDUyOTYzOTY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEh1Z2VwYWdlIFRyYW5zcGFyZW5jeSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQgZ29lcyB0byB0aGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBjb25maWd1cmF0aW9uLiBUaGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgaXNzdWUgYXQgaGFuZC4gQnV0IEkgY2FuJ3QganVzdCBzdG9wIHRoZXJlLiBJIGtub3cgdGhlcmUncyBhbG1vc3QgYWx3YXlzIG1vcmUgdG8gdGhlIHN0b3J5LCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQuIEkgaGF2ZSB0byB0aGluayBtb3JlIGJyb2FkbHkuXG5cbk15IG5leHQgbGluZSBvZiBpbnZlc3RpZ2F0aW9uIGludm9sdmVzIGNvbnNpZGVyaW5nIGBNRU1DR2Ag4oCTIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBtZW1vcnkgY2dyb3VwcyBhcmUgc29tZWhvdyBlbnRhbmdsZWQgd2l0aCB0aGUgYmVoYXZpb3Igb2YgYGxpc3RfbHJ1YCBhbmQgcG90ZW50aWFsbHkgZGVmZXJyZWQgc3BsaXRzLiBUaGUgaW50cmljYWNpZXMgdGhlcmUgYXJlIGVhc2lseSBtaXNzZWQsIGFuZCBhcmUgd2VsbCBrbm93biB0byBiZSBpbnRlcnR3aW5lZC5cblxuRnVydGhlcm1vcmUsIEkgaGF2ZSB0byBleGFtaW5lIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQuIEl0IHNvdW5kcyBsaWtlIGBkZWZlcnJlZF9zcGxpdF9scnVgIGFuZCBgZGVmZXJyZWRfc3BsaXRfc2NhbmAgbWlnaHQgcHJvdmlkZSBhZGRpdGlvbmFsIGNsdWVzLiBJJ2xsIG5lZWQgdG8gbG9vayBkZWVwbHkgYXQgaG93IHRoZXkncmUgdXNlZC4gSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGVudGlyZSBsYW5kc2NhcGUgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlc2UgY29uZmlncyBhbmQgZnVuY3Rpb25zLCB0byBzZWUgd2hlcmUgdGhlIGJvdHRsZW5lY2sgY291bGQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzYyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDowOTo1Mi4zMDA2OTU3MzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMDAwNjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmVycmVkX3NwbGl0X1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz02MT11bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzIF9fcmVhZF9tb3N0bHkgPVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy03MS1cXG5tbS9odWdlX21lbW9yeS5jOjcyOnN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgZGVmZXJyZWRfc3BsaXRfa2V5O1xcbm1tL2h1Z2VfbWVtb3J5LmM6NzM6c3RhdGljIHN0cnVjdCBsaXN0X2xydSBkZWZlcnJlZF9zcGxpdF9scnU7XFxubW0vaHVnZV9tZW1vcnkuYzo3NDpzdGF0aWMgc3RydWN0IHNocmlua2VyICpkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcjtcXG5tbS9odWdlX21lbW9yeS5jOjc1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNzYtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKTtcXG5tbS9odWdlX21lbW9yeS5jOjc3OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxubW0vaHVnZV9tZW1vcnkuYy03OC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM0MD1zdGF0aWMgaW50IF9faW5pdCBodWdlX3plcm9faW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNDMtXFx0aWYgKCFodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpIHtcXG5tbS9odWdlX21lbW9yeS5jOjM0NDpcXHRcXHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG5tbS9odWdlX21lbW9yeS5jOjM0NTpcXHRcXHRsaXN0X2xydV9kZXN0cm95KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzQ2LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMDE1PWludCBmb2xpb19tZW1jZ19hbGxvY19kZWZlcnJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMDE4LVxcdFxcdHJldHVybiAwO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTAxOTpcXHRyZXR1cm4gZm9saW9fbWVtY2dfbGlzdF9scnVfYWxsb2MoZm9saW8sIFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIEdGUF9LRVJORUwpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTAyMC19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEwMjI9c3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcXG5tbS9odWdlX21lbW9yeS5jLTEwMjMte1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTAyNDpcXHRkZWZlcnJlZF9zcGxpdF9zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKFNIUklOS0VSX05VTUFfQVdBUkUgfFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTAyNS1cXHRcXHRcXHRcXHRcXHRcXHQgU0hSSU5LRVJfTUVNQ0dfQVdBUkUsXFxubW0vaHVnZV9tZW1vcnkuYy0xMDI2LVxcdFxcdFxcdFxcdFxcdFxcdCBcXFwidGhwLWRlZmVycmVkX3NwbGl0XFxcIik7XFxubW0vaHVnZV9tZW1vcnkuYzoxMDI3OlxcdGlmICghZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpXFxubW0vaHVnZV9tZW1vcnkuYy0xMDI4LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTAyOS1cXG5tbS9odWdlX21lbW9yeS5jOjEwMzA6XFx0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2dfa2V5KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsXFxubW0vaHVnZV9tZW1vcnkuYzoxMDMxOlxcdFxcdFxcdFxcdCAgICBkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcixcXG5tbS9odWdlX21lbW9yeS5jOjEwMzI6XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9rZXkpKSB7XFxubW0vaHVnZV9tZW1vcnkuYzoxMDMzOlxcdFxcdHNocmlua2VyX2ZyZWUoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTAzNC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTAzNi1cXG5tbS9odWdlX21lbW9yeS5jOjEwMzc6XFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXFx1MDAzZWNvdW50X29iamVjdHMgPSBkZWZlcnJlZF9zcGxpdF9jb3VudDtcXG5tbS9odWdlX21lbW9yeS5jOjEwMzg6XFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXFx1MDAzZXNjYW5fb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X3NjYW47XFxubW0vaHVnZV9tZW1vcnkuYzoxMDM5OlxcdHNocmlua2VyX3JlZ2lzdGVyKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG5tbS9odWdlX21lbW9yeS5jLTEwNDAtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEwNDQ9c3RhdGljIHZvaWQgX19pbml0IHRocF9zaHJpbmtlcl9leGl0KHZvaWQpXFxubW0vaHVnZV9tZW1vcnkuYy0xMDQ1LXtcXG5tbS9odWdlX21lbW9yeS5jOjEwNDY6XFx0c2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XFxubW0vaHVnZV9tZW1vcnkuYzoxMDQ3OlxcdGxpc3RfbHJ1X2Rlc3Ryb3koXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMDQ4LVxcdGh1Z2VfemVyb19zaHJpbmtlcl9leGl0KCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEzNTg9dm9pZCBtYXBfYW5vbl9mb2xpb19wbWRfbm9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMzY4LVxcdHVwZGF0ZV9tbXVfY2FjaGVfcG1kKHZtYSwgaGFkZHIsIHBtZCk7XFxubW0vaHVnZV9tZW1vcnkuYzoxMzY5OlxcdGRlZmVycmVkX3NwbGl0X2ZvbGlvKGZvbGlvLCBmYWxzZSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMzcwLX1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzkyNT1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTQ1LVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzozOTQ2OlxcdFxcdCAqIGRlZmVycmVkX3NwbGl0X3NjYW4oKSB0YWtlcyB0aGUgZm9saW8gb2ZmIHRoZSBxdWV1ZSBiZWZvcmUgaXRcXG5tbS9odWdlX21lbW9yeS5jLTM5NDctXFx0XFx0ICogc3BsaXRzIGl0LCBzbyB0aGUgdW5xdWV1ZSBhYm92ZSBmaW5kcyBhbiBlbXB0eSBsaXN0IGFuZFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NDM1PWludCBzcGxpdF9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0NDctICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcXG5tbS9odWdlX21lbW9yeS5jOjQ0NDg6ICogX2RlZmVycmVkX2xpc3QgbWlnaHQgYmUgaW4gdXNlIG9uIGRlZmVycmVkX3NwbGl0X3NjYW4oKSdzIHVubG9ja2VkXFxubW0vaHVnZV9tZW1vcnkuYy00NDQ5LSAqIG9uLXN0YWNrIGxpc3QuXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ0NTQ9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ2Ni1cXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jOjQ0Njc6XFx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgXFx1MDAyNm1lbWNnLCBcXHUwMDI2ZmxhZ3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ2ODpcXHRpZiAoX19saXN0X2xydV9kZWwoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy00NDY5LVxcdFxcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0ODItLyogcGFydGlhbGx5X21hcHBlZD1mYWxzZSB3b24ndCBjbGVhciBQR19wYXJ0aWFsbHlfbWFwcGVkIGZvbGlvIGZsYWcgKi9cXG5tbS9odWdlX21lbW9yeS5jOjQ0ODM6dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXFxubW0vaHVnZV9tZW1vcnkuYy00NDg0LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxMy1cXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jOjQ1MTQ6XFx0bHJ1ID0gbGlzdF9scnVfbG9ja19pcnFzYXZlKFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsIG5pZCwgXFx1MDAyNm1lbWNnLCBcXHUwMDI2ZmxhZ3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDUxNS1cXHRpZiAocGFydGlhbGx5X21hcHBlZCkge1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTI2LVxcdH1cXG5tbS9odWdlX21lbW9yeS5jOjQ1Mjc6XFx0X19saXN0X2xydV9hZGQoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LCBcXHUwMDI2Zm9saW8tXFx1MDAzZV9kZWZlcnJlZF9saXN0LCBuaWQsIG1lbWNnKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1MjgtXFx0bGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUobHJ1LCBcXHUwMDI2ZmxhZ3MpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTMxLVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDUzMjpzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG5tbS9odWdlX21lbW9yeS5jLTQ1MzMtXFx0XFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDUzNi1cXG5tbS9odWdlX21lbW9yeS5jOjQ1Mzc6XFx0Y291bnQgPSBsaXN0X2xydV9zaHJpbmtfY291bnQoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgc2MpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDUzOC1cXHRyZXR1cm4gY291bnQgPzogU0hSSU5LX0VNUFRZO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTQxPXN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU2Ny1cXG5tbS9odWdlX21lbW9yeS5jOjQ1Njg6c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXFxubW0vaHVnZV9tZW1vcnkuYy00NTY5LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU4Mi1cXG5tbS9odWdlX21lbW9yeS5jOjQ1ODM6c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG5tbS9odWdlX21lbW9yeS5jLTQ1ODQtXFx0XFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU5MC1cXG5tbS9odWdlX21lbW9yeS5jOjQ1OTE6XFx0aXNvbGF0ZWQgPSBsaXN0X2xydV9zaHJpbmtfd2Fsa19pcnEoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgc2MsXFxubW0vaHVnZV9tZW1vcnkuYzo0NTkyOlxcdFxcdFxcdFxcdFxcdCAgICBkZWZlcnJlZF9zcGxpdF9pc29sYXRlLCBcXHUwMDI2ZGlzcG9zZSk7XFxubW0vaHVnZV9tZW1vcnkuYy00NTkzLVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NjMwLVxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5tbS9odWdlX21lbW9yeS5jOjQ2MzE6XFx0XFx0XFx0bGlzdF9scnVfYWRkX2lycShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDYzMi1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCxcXG4tLVxcbm1tL21pZ3JhdGUuYz0xMzYzPXN0YXRpYyBpbnQgbWlncmF0ZV9mb2xpb19tb3ZlKGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXFxuLS1cXG5tbS9taWdyYXRlLmMtMTQwMi1cXHRpZiAoc3JjX2RlZmVycmVkX3NwbGl0KVxcbm1tL21pZ3JhdGUuYzoxNDAzOlxcdFxcdGRlZmVycmVkX3NwbGl0X2ZvbGlvKGRzdCwgc3JjX3BhcnRpYWxseV9tYXBwZWQpO1xcbm1tL21pZ3JhdGUuYy0xNDA0LVxcbi0tXFxubW0vbWlncmF0ZS5jPTE4MTE9c3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTg1Ny1cXHRcXHRcXHQgKiBPbmx5IGNoZWNrIGl0IHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgbGlzdC5cXG5tbS9taWdyYXRlLmM6MTg1ODpcXHRcXHRcXHQgKiBTaW5jZSB0aGUgZm9saW8gY2FuIGJlIG9uIGRlZmVycmVkX3NwbGl0X3NjYW4oKVxcbm1tL21pZ3JhdGUuYy0xODU5LVxcdFxcdFxcdCAqIGxvY2FsIGxpc3QgYW5kIHJlbW92aW5nIGl0IGNhbiBjYXVzZSB0aGUgbG9jYWwgbGlzdFxcbi0tXFxubW0vcm1hcC5jPTE3ODI9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fcmVtb3ZlX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy0xODc2LVxcdCAgICAhZm9saW9faXNfZGV2aWNlX3ByaXZhdGUoZm9saW8pKVxcbm1tL3JtYXAuYzoxODc3OlxcdFxcdGRlZmVycmVkX3NwbGl0X2ZvbGlvKGZvbGlvLCB0cnVlKTtcXG5tbS9ybWFwLmMtMTg3OC1cXG4tLVxcbm1tL3Ztc3RhdC5jPTExOTk9Y29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XFxuLS1cXG5tbS92bXN0YXQuYy0xNDI0LVxcdFtJKFRIUF9TUExJVF9QQUdFX0ZBSUxFRCldXFx0XFx0PSBcXFwidGhwX3NwbGl0X3BhZ2VfZmFpbGVkXFxcIixcXG5tbS92bXN0YXQuYzoxNDI1OlxcdFtJKFRIUF9ERUZFUlJFRF9TUExJVF9QQUdFKV1cXHRcXHQ9IFxcXCJ0aHBfZGVmZXJyZWRfc3BsaXRfcGFnZVxcXCIsXFxubW0vdm1zdGF0LmMtMTQyNi1cXHRbSShUSFBfVU5ERVJVU0VEX1NQTElUX1BBR0UpXVxcdFxcdD0gXFxcInRocF91bmRlcnVzZWRfc3BsaXRfcGFnZVxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjA5OjUyLjM5MDcwMDQyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTI2MjI4MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gb2YgVEhQIFNwbGl0dGluZyBhbmQgRGVmZXJyZWQgU3BsaXQgQVBJIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUga2VybmVsJ3MgVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSBzcGxpdHRpbmcgYW5kIGRlZmVycmVkIHNwbGl0IGZ1bmN0aW9uYWxpdHkuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBBUEkgZW50cnkgcG9pbnRzIGludm9sdmVkIGluIHRoZXNlIHByb2Nlc3Nlcy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNhbGwgY2hhaW5zIGFuZCB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLlxuXG5GaXJzdCwgSSdtIGdvaW5nIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAgaXMgY2FsbGVkLiBJdCBsb29rcyBsaWtlIGl0J3MgcHJldHR5IGNlbnRyYWwuIEZyb20gbXkgaW5pdGlhbCByZXNlYXJjaCwgaXQgYXBwZWFycyB0aGF0IGBfX2ZvbGlvX3NwbGl0YCBpcyBhIGtleSBmdW5jdGlvbiwgYW5kIHRoYXQncyBjYWxsZWQgYnkgYHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCBhbmQgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgLiBJIGFsc28gc2VlIGBmb2xpb19zcGxpdF91bm1hcHBlZGAgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tKSBjb2RlLlxuXG5GdXJ0aGVybW9yZSwgSSdtIG5vdGluZyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBgZGVmZXJyZWRfc3BsaXRfc2NhbmAgc2hyaW5rZXIgY2FsbGJhY2ssIGFsb25nIHdpdGggYGRlZmVycmVkX3NwbGl0X2ZvbGlvYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gdGhlIHJtYXAgY29kZS4gVGhlIG90aGVyIGNhbGxzIEkgbmVlZCB0byB3YXRjaCBhcmUsIGFnYWluLCBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RgLCBgc3BsaXRfZm9saW9fdG9fbGlzdGAsIGBmb2xpb19zcGxpdF91bm1hcHBlZGAsIGFuZCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gVGhpcyBsaXN0IGdpdmVzIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93LlxuXG5GaW5hbGx5LCBJJ2xsIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBtbS9odWdlX21lbW9yeS5jYC4gSSBuZWVkIHRvIHJldmlldyB0aGUgZXhwb3J0ZWQgc3ltYm9scyBhbmQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSByZWdpb25zIHN1cnJvdW5kaW5nIHRoZSBzcGxpdCBvcGVyYXRpb25zLiBUaGlzIHNob3VsZCBvZmZlciBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBwdWJsaWMgQVBJIHJlbGF0ZWQgdG8gc3BsaXR0aW5nIGFuZCBkZWZlcnJlZCBzcGxpdHMuIEknbSBob3BpbmcgdG8gZGlzY292ZXIgYW55IHVuZG9jdW1lbnRlZCBvciBsZXNzIG9idmlvdXMgZW50cnkgcG9pbnRzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGxhcmdlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ1MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoxMDowMS41MTY5MzE0MjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxOTIxMDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihzcGxpdF9mb2xpb3xzcGxpdF9odWdlX3BhZ2V8Zm9saW9fc3BsaXQpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0xMzU4PXZvaWQgbWFwX2Fub25fZm9saW9fcG1kX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcG1kX3QgKnBtZCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTM2OC1cXHR1cGRhdGVfbW11X2NhY2hlX3BtZCh2bWEsIGhhZGRyLCBwbWQpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTM2OTpcXHRkZWZlcnJlZF9zcGxpdF9mb2xpbyhmb2xpbywgZmFsc2UpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTM3MC19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIzNTg9Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI0MDAtXFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG5tbS9odWdlX21lbW9yeS5jOjI0MDE6XFx0XFx0c3BsaXRfZm9saW8oZm9saW8pO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjQwMi1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNTg4PXN0YXRpYyB2b2lkIHJlbWFwX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBuciwgaW50IGZsYWdzKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNjAzLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzYwNDpzdGF0aWMgdm9pZCBscnVfYWRkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzYwNS1cXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM2Mjk9c3RhdGljIGJvb2wgcGFnZV9yYW5nZV9oYXNfaHdwb2lzb25lZChzdHJ1Y3QgcGFnZSAqcGFnZSwgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY0MC0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjM2NDE6c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzY0Mi1cXHRcXHRpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNzgxLSAqIDEuIHVuaWZvcm0gc3BsaXQ6IEB4YXMgaXMgc3BsaXQgd2l0aCBubyBleHBlY3RhdGlvbiBvZiBmYWlsdXJlIGFuZCBhIHNpbmdsZVxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzc4MjogKiAgICBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKCkgaXMgY2FsbGVkIHRvIHNwbGl0IHRoZSBAZm9saW8gaW50byBAbmV3X29yZGVyXFxubW0vaHVnZV9tZW1vcnkuYy0zNzgzLSAqICAgIGFsb25nIHdpdGggc3RhdHMgdXBkYXRlLlxcbm1tL2h1Z2VfbWVtb3J5LmMtMzc4NC0gKiAyLiBub24tdW5pZm9ybSBzcGxpdDogZm9saW9fb3JkZXIgLSBAbmV3X29yZGVyIGNhbGxzIHRvXFxubW0vaHVnZV9tZW1vcnkuYzozNzg1OiAqICAgIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoKSBhcmUgZXhwZWN0ZWQgdG8gYmUgbWFkZSBpbiBhIGZvciBsb29wIHRvIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYy0zNzg2LSAqICAgIHRoZSBAZm9saW8gdG8gb25lIGxvd2VyIG9yZGVyIGF0IGEgdGltZS4gVGhlIGZvbGlvIGNvbnRhaW5pbmcgQHNwbGl0X2F0XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM3OTg9c3RhdGljIGludCBfX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTM4NDAtXFxubW0vaHVnZV9tZW1vcnkuYzozODQxOlxcdFxcdGZvbGlvX3NwbGl0X21lbWNnX3JlZnMoZm9saW8sIG9sZF9vcmRlciwgc3BsaXRfb3JkZXIpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzg0Mi1cXHRcXHRzcGxpdF9wYWdlX293bmVyKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XFxubW0vaHVnZV9tZW1vcnkuYy0zODQzLVxcdFxcdHBnYWxsb2NfdGFnX3NwbGl0KGZvbGlvLCBvbGRfb3JkZXIsIHNwbGl0X29yZGVyKTtcXG5tbS9odWdlX21lbW9yeS5jOjM4NDQ6XFx0XFx0X19zcGxpdF9mb2xpb190b19vcmRlcihmb2xpbywgb2xkX29yZGVyLCBzcGxpdF9vcmRlcik7XFxubW0vaHVnZV9tZW1vcnkuYy0zODQ1LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zOTI1PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQwMDctXFx0XFx0XFx0aWYgKGRvX2xydSlcXG5tbS9odWdlX21lbW9yeS5jOjQwMDg6XFx0XFx0XFx0XFx0bHJ1X2FkZF9zcGxpdF9mb2xpbyhmb2xpbywgbmV3X2ZvbGlvLCBscnV2ZWMsIGxpc3QpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDAwOS1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDA2Mi0vKipcXG5tbS9odWdlX21lbW9yeS5jOjQwNjM6ICogX19mb2xpb19zcGxpdCgpIC0gc3BsaXQgYSBmb2xpbyBhdCBAc3BsaXRfYXQgdG8gYSBAbmV3X29yZGVyIGZvbGlvXFxubW0vaHVnZV9tZW1vcnkuYy00MDY0LSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDA4Mi0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQwODM6c3RhdGljIGludCBfX2ZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxubW0vaHVnZV9tZW1vcnkuYy00MDg0LVxcdFxcdHN0cnVjdCBwYWdlICpzcGxpdF9hdCwgc3RydWN0IHBhZ2UgKmxvY2tfYXQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQyNzktLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0MjgwOiAqIGZvbGlvX3NwbGl0X3VubWFwcGVkKCkgLSBzcGxpdCBhIGxhcmdlIGFub24gZm9saW8gdGhhdCBpcyBhbHJlYWR5IHVubWFwcGVkXFxubW0vaHVnZV9tZW1vcnkuYy00MjgxLSAqIEBmb2xpbzogZm9saW8gdG8gc3BsaXRcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDMwMC0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQzMDE6aW50IGZvbGlvX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxubW0vaHVnZV9tZW1vcnkuYy00MzAyLXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDM2Ny0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQzNjg6aW50IF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxubW0vaHVnZV9tZW1vcnkuYy00MzY5LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5ld19vcmRlcilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDM3Mi1cXG5tbS9odWdlX21lbW9yeS5jOjQzNzM6XFx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCBwYWdlLCBsaXN0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDM3NC1cXHRcXHRcXHQgICAgIFNQTElUX1RZUEVfVU5JRk9STSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQzNzctLyoqXFxubW0vaHVnZV9tZW1vcnkuYzo0Mzc4OiAqIGZvbGlvX3NwbGl0KCkgLSBzcGxpdCBhIGZvbGlvIGF0IEBzcGxpdF9hdCB0byBhIEBuZXdfb3JkZXIgZm9saW9cXG5tbS9odWdlX21lbW9yeS5jLTQzNzktICogQGZvbGlvOiBmb2xpbyB0byBzcGxpdFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00Mzg1LSAqIEl0IGhhcyB0aGUgc2FtZSBwcmVyZXF1aXNpdGVzIGFuZCByZXR1cm5zIGFzXFxubW0vaHVnZV9tZW1vcnkuYzo0Mzg2OiAqIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKCkuXFxubW0vaHVnZV9tZW1vcnkuYy00Mzg3LSAqXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0MDAtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0NDAxOmludCBmb2xpb19zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQwMi1cXHRcXHRzdHJ1Y3QgcGFnZSAqc3BsaXRfYXQsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxubW0vaHVnZV9tZW1vcnkuYy00NDAzLXtcXG5tbS9odWdlX21lbW9yeS5jOjQ0MDQ6XFx0cmV0dXJuIF9fZm9saW9fc3BsaXQoZm9saW8sIG5ld19vcmRlciwgc3BsaXRfYXQsIFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgbGlzdCxcXG5tbS9odWdlX21lbW9yeS5jLTQ0MDUtXFx0XFx0XFx0ICAgICBTUExJVF9UWVBFX05PTl9VTklGT1JNKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDQxOD11bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDM0LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQzNTppbnQgc3BsaXRfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzNi17XFxubW0vaHVnZV9tZW1vcnkuYzo0NDM3OlxcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGxpc3QsIDApO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDQzOC19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ0NTQ9Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ4Mi0vKiBwYXJ0aWFsbHlfbWFwcGVkPWZhbHNlIHdvbid0IGNsZWFyIFBHX3BhcnRpYWxseV9tYXBwZWQgZm9saW8gZmxhZyAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ4Mzp2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcXG5tbS9odWdlX21lbW9yeS5jLTQ0ODQte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NTgzPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ2MTMtXFx0XFx0XFx0Z290byByZXF1ZXVlO1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDYxNDpcXHRcXHRpZiAoIXNwbGl0X2ZvbGlvKGZvbGlvKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDYxNS1cXHRcXHRcXHRkaWRfc3BsaXQgPSB0cnVlO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NjIyLVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzo0NjIzOlxcdFxcdCAqIElmIHRocF91bmRlcnVzZWQoKSByZXR1cm5zIGZhbHNlLCBvciBpZiBzcGxpdF9mb2xpbygpXFxubW0vaHVnZV9tZW1vcnkuYzo0NjI0OlxcdFxcdCAqIHN1Y2NlZWRzLCBvciBpZiBzcGxpdF9mb2xpbygpIGZhaWxzIGluIHRoZSBjYXNlIGl0IHdhc1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDYyNS1cXHRcXHQgKiB1bmRlcnVzZWQsIHRoZW4gY29uc2lkZXIgaXQgdXNlZCBhbmQgZG9uJ3QgYWRkIGl0IGJhY2sgdG9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY0NS0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxubW0vaHVnZV9tZW1vcnkuYzo0NjQ2OnN0YXRpYyB2b2lkIHNwbGl0X2h1Z2VfcGFnZXNfYWxsKHZvaWQpXFxubW0vaHVnZV9tZW1vcnkuYy00NjQ3LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY4Mi1cXHRcXHRcXHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jOjQ2ODM6XFx0XFx0XFx0aWYgKCFzcGxpdF9mb2xpbyhmb2xpbykpXFxubW0vaHVnZV9tZW1vcnkuYy00Njg0LVxcdFxcdFxcdFxcdHNwbGl0Kys7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ2OTY9c3RhdGljIGlubGluZSBib29sIHZtYV9ub3Rfc3VpdGFibGVfZm9yX3RocF9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDcwOS1cXG5tbS9odWdlX21lbW9yeS5jOjQ3MTA6c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDcxMS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHZhZGRyX2VuZCwgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDc3OS1cXHRcXHQvKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDc4MDpcXHRcXHQgKiBGb3IgZm9saW9zIHdpdGggcHJpdmF0ZSwgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDc4MS1cXHRcXHQgKiB3aWxsIHRyeSB0byBkcm9wIGl0IGJlZm9yZSBzcGxpdCBhbmQgdGhlbiBjaGVjayBpZiB0aGUgZm9saW9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDc5Ny1cXHRcXHQgICAgaW5fZm9saW9fb2Zmc2V0IFxcdTAwM2U9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDc5ODpcXHRcXHRcXHRpZiAoIXNwbGl0X2ZvbGlvX3RvX29yZGVyKGZvbGlvLCB0YXJnZXRfb3JkZXIpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDc5OS1cXHRcXHRcXHRcXHRzcGxpdCsrO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODAyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGluX2ZvbGlvX29mZnNldCk7XFxubW0vaHVnZV9tZW1vcnkuYzo0ODAzOlxcdFxcdFxcdGlmICghZm9saW9fc3BsaXQoZm9saW8sIHRhcmdldF9vcmRlciwgc3BsaXRfYXQsIE5VTEwpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDgwNC1cXHRcXHRcXHRcXHRzcGxpdCsrO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODI2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDgyNzpzdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShjb25zdCBjaGFyICpmaWxlX3BhdGgsIHBnb2ZmX3Qgb2ZmX3N0YXJ0LFxcbm1tL2h1Z2VfbWVtb3J5LmMtNDgyOC1cXHRcXHRcXHRcXHRwZ29mZl90IG9mZl9lbmQsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ4NzMtXFx0XFx0aWYgKGluX2ZvbGlvX29mZnNldCBcXHUwMDNjIDAgfHwgaW5fZm9saW9fb2Zmc2V0IFxcdTAwM2U9IG5yX3BhZ2VzKSB7XFxubW0vaHVnZV9tZW1vcnkuYzo0ODc0OlxcdFxcdFxcdGlmICghc3BsaXRfZm9saW9fdG9fb3JkZXIoZm9saW8sIHRhcmdldF9vcmRlcikpXFxubW0vaHVnZV9tZW1vcnkuYy00ODc1LVxcdFxcdFxcdFxcdHNwbGl0Kys7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ4NzgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5fZm9saW9fb2Zmc2V0KTtcXG5tbS9odWdlX21lbW9yeS5jOjQ4Nzk6XFx0XFx0XFx0aWYgKCFmb2xpb19zcGxpdChmb2xpbywgdGFyZ2V0X29yZGVyLCBzcGxpdF9hdCwgTlVMTCkpXFxubW0vaHVnZV9tZW1vcnkuYy00ODgwLVxcdFxcdFxcdFxcdHNwbGl0Kys7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ4OTYtXFxubW0vaHVnZV9tZW1vcnkuYzo0ODk3OnN0YXRpYyBzc2l6ZV90IHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxubW0vaHVnZV9tZW1vcnkuYy00ODk4LVxcdFxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9wcylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDk0NC1cXHRcXHR9XFxubW0vaHVnZV9tZW1vcnkuYzo0OTQ1OlxcdFxcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZXNfaW5fZmlsZShmaWxlX3BhdGgsIG9mZl9zdGFydCwgb2ZmX2VuZCxcXG5tbS9odWdlX21lbW9yeS5jLTQ5NDYtXFx0XFx0XFx0XFx0bmV3X29yZGVyLCBpbl9mb2xpb19vZmZzZXQpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00OTU1LVxcdGlmIChyZXQgPT0gMSBcXHUwMDI2XFx1MDAyNiBwaWQgPT0gMSkge1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDk1NjpcXHRcXHRzcGxpdF9odWdlX3BhZ2VzX2FsbCgpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDk1Ny1cXHRcXHRyZXQgPSBzdHJsZW4oaW5wdXRfYnVmKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDk2My1cXG5tbS9odWdlX21lbW9yeS5jOjQ5NjQ6XFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlc19waWQocGlkLCB2YWRkcl9zdGFydCwgdmFkZHJfZW5kLCBuZXdfb3JkZXIsXFxubW0vaHVnZV9tZW1vcnkuYy00OTY1LVxcdFxcdFxcdGluX2ZvbGlvX29mZnNldCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ5NzMtXFxubW0vaHVnZV9tZW1vcnkuYzo0OTc0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwbGl0X2h1Z2VfcGFnZXNfZm9wcyA9IHtcXG5tbS9odWdlX21lbW9yeS5jLTQ5NzUtXFx0Lm93bmVyXFx0ID0gVEhJU19NT0RVTEUsXFxubW0vaHVnZV9tZW1vcnkuYzo0OTc2OlxcdC53cml0ZVxcdCA9IHNwbGl0X2h1Z2VfcGFnZXNfd3JpdGUsXFxubW0vaHVnZV9tZW1vcnkuYy00OTc3LX07XFxubW0vaHVnZV9tZW1vcnkuYy00OTc4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDk3OTpzdGF0aWMgaW50IF9faW5pdCBzcGxpdF9odWdlX3BhZ2VzX2RlYnVnZnModm9pZClcXG5tbS9odWdlX21lbW9yeS5jLTQ5ODAte1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDk4MTpcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzcGxpdF9odWdlX3BhZ2VzXFxcIiwgMDIwMCwgTlVMTCwgTlVMTCxcXG5tbS9odWdlX21lbW9yeS5jOjQ5ODI6XFx0XFx0XFx0ICAgIFxcdTAwMjZzcGxpdF9odWdlX3BhZ2VzX2ZvcHMpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDk4My1cXHRyZXR1cm4gMDtcXG5tbS9odWdlX21lbW9yeS5jLTQ5ODQtfVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDk4NTpsYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XFxubW0vaHVnZV9tZW1vcnkuYy00OTg2LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoxMDowMS41ODg4NTU5NTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ1Mzg3MDMxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZvbGlvIFNwbGl0dGluZyBTeW1ib2xzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIGZvbGlvIHNwbGl0dGluZyBzeW1ib2xzIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSBhIHNvbGlkIGdyYXNwIG9uIHRoZW0uIEkgc2VlIGEgZmV3IGtleSBwbGF5ZXJzIGhlcmU6IGBzcGxpdF9mb2xpb190b19saXN0YCwgYGZvbGlvX3NwbGl0YCwgYGZvbGlvX3NwbGl0X3VubWFwcGVkYCwgYF9fc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLCBgX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YCwgYGRlZmVycmVkX3NwbGl0X2ZvbGlvYCwgYW5kIGBzcGxpdF9odWdlX3BhZ2VzX3dyaXRlYCAodGhhdCBsYXN0IG9uZSwgYmVpbmcgdGhlIGRlYnVnZnMgaW50ZXJmYWNlLCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbikuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGNvdmVyIGEgc3BlY3RydW0gb2Ygc3BsaXR0aW5nIG9wZXJhdGlvbnMuIEkgc3VzcGVjdCB0aGVyZSB3aWxsIGJlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBzeW1ib2xzLiBNeSBodW5jaCBpcyB0aGF0IHRoZXkgcHJvYmFibHkgaGF2ZSBzb21lIHNoYXJlZCBmdW5jdGlvbmFsaXR5IGFuZCBwZXJoYXBzIGFyZSBjYWxsZWQgaW4gYSBzZXF1ZW5jZS5cblxuVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHdoZXRoZXIgYHNwbGl0X2ZvbGlvYCBpcyBkZWZpbmVkIGlubGluZSwgb3Igc3RhdGljLiBUaGF0IGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgZm9yIG9wdGltaXphdGlvbi4gSXMgaXQgdHVja2VkIGF3YXkgaW4gYSBoZWFkZXIsIG9yIGlzIGl0IGEgbG9jYWwsIHN0YXRpYyBmdW5jdGlvbj8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGF0IGJlZm9yZSBJIGNhbiBkcmF3IHRvbyBtYW55IGNvbmNsdXNpb25zLiBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgaW1wb3J0YW50IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjQ5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjEwOjM2LjEyNzU2MjA1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0MzQ5NDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNwbGl0X2ZvbGlvXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9OTc9ZW51bSB0dmFfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMDYtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTA3OiNkZWZpbmUgc3BsaXRfZm9saW8oZikgc3BsaXRfZm9saW9fdG9fbGlzdChmLCBOVUxMKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwOC1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQyOD1pbnQgZm9saW9fbWVtY2dfYWxsb2NfZGVmZXJyZWQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDI5LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQzMDp2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZCk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDMxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NjgyPXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX21lbWNnX2FsbG9jX2RlZmVycmVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02ODYtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Njg3OnN0YXRpYyBpbmxpbmUgdm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjg4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MTA6MzYuMzcxOTIwNTU0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2OTAwNTc3MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEh1Z2UgUGFnZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJ3JlIGhhbmRsaW5nIGh1Z2UgcGFnZXMgYXQgdGhlIGtlcm5lbCBsZXZlbCwgc3BlY2lmaWNhbGx5IHRoZSBzcGxpdHRpbmcgYW5kIG9yZGVyaW5nLiBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gSSdtIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbiBgc3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXJgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG11c3QgcmVzaWRlIGZvciBicmVha2luZyBkb3duIHRob3NlIG1hc3NpdmUgcGFnZXMgYW5kIGludGVncmF0aW5nIHRoZW0gaW50byB0aGUgYnVkZHkgYWxsb2NhdG9yJ3Mgb3JkZXJlZCBsaXN0cy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBncmFudWxhciBkZXRhaWxzIG9mIGZyYWdtZW50YXRpb24sIHBvdGVudGlhbCB3YXN0ZSwgYW5kIHVsdGltYXRlbHksIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGltaXphdGlvbiB3aGVuIGRlYWxpbmcgd2l0aCBodWdlIHBhZ2VzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgaW5zaWdodHMgaW50byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgaHVnZSBwYWdlIHN0cnVjdHVyZXMsIHRoZSBidWRkeSBzeXN0ZW0ncyBtZXRhZGF0YSwgYW5kIGhvdyB0aGUga2VybmVsIG1haW50YWlucyBjb25zaXN0ZW5jeSB0aHJvdWdob3V0IHRoZXNlIG9wZXJhdGlvbnMuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMjIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoxMTo0My4yNzI1MDEzNTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NjYyODg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzcGxpdF9odWdlX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9Mzk4PWVudW0gc3BsaXRfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MDItXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDAzOmludCBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQwNC1cXHRcXHR1bnNpZ25lZCBpbnQgbmV3X29yZGVyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQxMD1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlciwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00MTItXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDEzOnN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxNC1cXHRcXHR1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxNS17XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDE2OlxcdHJldHVybiBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIGxpc3QsIG5ld19vcmRlcik7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDE3LX1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MTg6c3RhdGljIGlubGluZSBpbnQgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQxOS17XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDIwOlxcdHJldHVybiBzcGxpdF9odWdlX3BhZ2VfdG9fbGlzdF90b19vcmRlcihwYWdlLCBOVUxMLCBuZXdfb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQyMS19XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDIyLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQyMzpzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDI0LXtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo0MjU6XFx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKHBhZ2UsIE5VTEwsIDApO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQyNi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD02NDU9c3RhdGljIGlubGluZSBpbnRcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo2NDY6c3BsaXRfaHVnZV9wYWdlX3RvX2xpc3RfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjQ3LVxcdFxcdHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NTEtfVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjY1MjpzdGF0aWMgaW5saW5lIGludCBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIpXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjUzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTY1Ni19XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjU3OnN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02NTgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9ODI2PXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIpXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODI3LXtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo4Mjg6XFx0cmV0dXJuIHNwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgTlVMTCwgbmV3X29yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC04MjktfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oPTEwPWVudW0gcGFnZV93YWxrX2xvY2sge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTI4LSAqXFx0XFx0XFx0cG1kX3RyYW5zX2h1Z2UoKSBwbWRzLiAgVGhleSBtYXkgc2ltcGx5IGNob29zZSB0b1xcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaDoyOTogKlxcdFxcdFxcdHNwbGl0X2h1Z2VfcGFnZSgpIGluc3RlYWQgb2YgaGFuZGxpbmcgaXQgZXhwbGljaXRseS5cXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMzAtICogQHB0ZV9lbnRyeTpcXHRcXHRpZiBzZXQsIGNhbGxlZCBmb3IgZWFjaCBQVEUgKGxvd2VzdC1sZXZlbCkgZW50cnlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaD0yMDA9c3RhdGljIGlubGluZSB2b2lkIHNobWVtX2ZyZWV6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGZyZWV6ZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0yMTAtICogYmV5b25kIGlfc2l6ZSdzIG5vdGlvbiBvZiBFT0YsIHdoaWNoIGZhbGxvY2F0ZSBoYXMgY29tbWl0dGVkIHRvIHJlc2VydmluZzpcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MjExOiAqIHdoaWNoIHNwbGl0X2h1Z2VfcGFnZSgpIG11c3QgdGhlcmVmb3JlIG5vdCBkZWxldGUuICBUaGlzIHVzZSBvZiBhIHNpbmdsZVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0yMTItICogXFxcImZhbGxvY2VuZFxcXCIgcGVyIGlub2RlIGVycnMgb24gdGhlIHNpZGUgb2Ygbm90IGRlbGV0aW5nIGEgcmVzZXJ2YXRpb24gd2hlblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoxMTo0My41NjkxMzU4NzRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAxMTU3ODMxMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRIUCBEZWZlcnJlZCBTcGxpdCBRdWV1ZSBMb2dpYyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyYCwgYGZvbGlvX3NwbGl0YCwgYHNwbGl0X2ZvbGlvX3RvX2xpc3RgLCBgZm9saW9fc3BsaXRfdW5tYXBwZWRgLCBgZGVmZXJyZWRfc3BsaXRfZm9saW9gLCBhbmQgYF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdGAuIFRoZXkncmUgYWxsIGluIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgdGhleSBhcmVuJ3Qgc3RhdGljIGZ1bmN0aW9ucywgZ29vZCB0byBrbm93LlxuXG5Ob3csIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBvYnZpb3VzIG9uZSBpcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBidXQgSSBzaG91bGQgdmVyaWZ5IGlmIGl0IGhhcyBkZXBlbmRlbmNpZXMgb3Igc3ViLW9wdGlvbnMuIFRpbWUgdG8gbG9vayBpbnRvIGBtbS9LY29uZmlnYC4gWXVwLCBgbWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgcHJlc2VudC4gSXQgYGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVGAsIGFuZCBpdCBgc2VsZWN0cyBDT01QQUNUSU9OYCwgYFhBUlJBWV9NVUxUSWAsIGFuZCBgTU1fSURgLiBBbHJpZ2h0LCBhbmQgbGV0J3MgY2hlY2sgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIGl0IGJ1aWxkcyB0aGUgbmVjZXNzYXJ5IG9iamVjdHMuIFllcywgYG9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9gIGNvbmZpcm1zIHRoZSBpbmNsdXNpb24uIFNvLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZywgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY29uZmlybSBldmVyeXRoaW5nIGFsaWducyB3aXRoIHRoZSByZXF1aXJlbWVudHMgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSBzeW5jaHJvbml6YXRpb24gYW5kIHJlZmNvdW50IGZyZWV6ZSBsb2dpYyB3aGVuIHNwbGl0dGluZyB1bm1hcHBlZCBmb2xpb3MgYW5kIGlzb2xhdGluZyBkZWZlcnJlZCBzcGxpdCBMUlUgaXRlbXMuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNvcnJlY3Qg4oCTIHRoYXQncyB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgSSBpZGVudGlmaWVkIGVhcmxpZXIuIFRoZSBgRW5hYmxlQ29uZmlnc2AgaXMganVzdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJJ20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLiBPa2F5LCBmaW5hbCBjaGVjayBhbmQgdGhlbiBpdCdzIHRpbWUgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NzgsIk91dHB1dFRva2VucyI6MTc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjEzOjI0LjcyNjk3MDk3MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTE3ODk1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gICAgXCJmb2xpb19zcGxpdFwiLFxuICAgIFwic3BsaXRfZm9saW9fdG9fbGlzdFwiLFxuICAgIFwiZm9saW9fc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcIl9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdFwiLFxuICAgIFwiZGVmZXJyZWRfc3BsaXRfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLCBzcGVjaWZpY2FsbHkgaG93IGRlZmVycmVkIHNwbGl0IGxpc3QgbG9ja2luZyBhbmQgcmVmY291bnQgZnJlZXppbmcgc3luY2hyb25pemUgZHVyaW5nIGZvbGlvIHNwbGl0dGluZyBhbmQgc2hyaW5rZXIgaXNvbGF0aW9uIChkZWZlcnJlZF9zcGxpdF9pc29sYXRlIGFuZCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBtZW1vcnkgcmVjbGFpbSBhbmQgVEhQIHNwbGl0dGluZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3NwbGl0X2h1Z2VfcGFnZV90b19saXN0X3RvX29yZGVyXCIsXG4gICAgXCJmb2xpb19zcGxpdFwiLFxuICAgIFwic3BsaXRfZm9saW9fdG9fbGlzdFwiLFxuICAgIFwiZm9saW9fc3BsaXRfdW5tYXBwZWRcIixcbiAgICBcIl9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdFwiLFxuICAgIFwiZGVmZXJyZWRfc3BsaXRfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLCBzcGVjaWZpY2FsbHkgaG93IGRlZmVycmVkIHNwbGl0IGxpc3QgbG9ja2luZyBhbmQgcmVmY291bnQgZnJlZXppbmcgc3luY2hyb25pemUgZHVyaW5nIGZvbGlvIHNwbGl0dGluZyBhbmQgc2hyaW5rZXIgaXNvbGF0aW9uIChkZWZlcnJlZF9zcGxpdF9pc29sYXRlIGFuZCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQpLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBtZW1vcnkgcmVjbGFpbSBhbmQgVEhQIHNwbGl0dGluZyByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjEzOjI0Ljg3ODE1NjQ0OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNDU1ODc5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoxMzoyNC44Nzg1OTAxMTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTE0NTE0OTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSBoYW5kbGluZyBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKClgIGFuZCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSgpYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHJlcGxhY2luZyBtYW51YWwgTFJVIGxvY2tpbmcgcHJpb3IgdG8gZm9saW8gcmVmIGZyZWV6aW5nIHdpdGggY2FsbHMgdG8gYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKWAgYW5kIHNraXBwaW5nIHVucmVmZXJlbmNlZCBmb2xpb3MgZHVyaW5nIGlzb2xhdGlvbi5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBmb2xpbyByZWZlcmVuY2UgY291bnRpbmcsIGxpc3QgbWFuYWdlbWVudCAoYF9kZWZlcnJlZF9saXN0YCksIGFuZCBmb2xpbyBmbGFncyAoYFBHX3BhcnRpYWxseV9tYXBwZWRgKS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gc3RhY2sgb3IgaGVhcCBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgb3IgbWFuaXB1bGF0ZWQsIGFuZCBubyB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgY29uY3VycmVuY3ksIHJlZmNvdW50LCBvciBsaXN0IGNvcnJ1cHRpb24gYnVncyBpbnRyb2R1Y2VkIGhlcmUgd291bGQgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiwgTE9DS0RFUCwgb3Iga2VybmVsIGFzc2VydGlvbnMsIHJhdGhlciB0aGFuIEtNU0FOIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdGlvbi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMjNiYTYyZWRlMDJmNTgxNzhiYzhkNzdmMDU5YTdmOTFiMTA0YWVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMTA6MDc6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggY2VkNDAwZjcyZDQzYS4uYzg0ZThjYmM5ODZkOSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0zOTMxLDQxICszOTMxLDI3IEBAIHN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuXG4gXHRzdHJ1Y3QgZm9saW8gKmVuZF9mb2xpbyA9IGZvbGlvX25leHQoZm9saW8pO1xuIFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sICpuZXh0O1xuIFx0aW50IG9sZF9vcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbi1cdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTtcbi1cdGJvb2wgZGVxdWV1ZV9kZWZlcnJlZDtcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKCFtYXBwaW5nIFx1MDAyNlx1MDAyNiBlbmQpO1xuLVx0Lypcbi1cdCAqIElmIHRoaXMgZm9saW8gY2FuIGJlIG9uIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSwgbG9jayBvdXRcbi1cdCAqIHRoZSBzaHJpbmtlciBiZWZvcmUgZnJlZXppbmcgdGhlIHJlZi4gSWYgdGhlIHNocmlua2VyIHNlZXNcbi1cdCAqIGEgMC1yZWYgZm9saW8sIGl0IGFzc3VtZXMgaXQgYmVhdCBmb2xpb19wdXQoKSB0byB0aGUgbGlzdFxuLVx0ICogbG9jayBhbmQgbXVzdCBjbGVhbiB1cCB0aGUgTFJVIHN0YXRlIC0gdGhlIHNhbWUgZGVxdWV1ZSB3ZVxuLVx0ICogd2lsbCBkbyBiZWxvdyBhcyBwYXJ0IG9mIHRoZSBzcGxpdC5cbi1cdCAqL1xuLVx0ZGVxdWV1ZV9kZWZlcnJlZCA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IG9sZF9vcmRlciBcdTAwM2UgMTtcbi1cdGlmIChkZXF1ZXVlX2RlZmVycmVkKSB7XG4tXHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbi1cbi1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbi1cdFx0bHJ1ID0gbGlzdF9scnVfbG9jayhcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUsXG4tXHRcdFx0XHQgICAgZm9saW9fbmlkKGZvbGlvKSwgXHUwMDI2bWVtY2cpO1xuLVx0fVxuK1xuIFx0aWYgKGZvbGlvX3JlZl9mcmVlemUoZm9saW8sIGZvbGlvX2NhY2hlX3JlZl9jb3VudChmb2xpbykgKyAxKSkge1xuIFx0XHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpID0gTlVMTDtcbiBcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFxuLVx0XHRpZiAoZGVxdWV1ZV9kZWZlcnJlZCkge1xuLVx0XHRcdF9fbGlzdF9scnVfZGVsKFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbHJ1LFxuLVx0XHRcdFx0ICAgICAgIFx1MDAyNmZvbGlvLVx1MDAzZV9kZWZlcnJlZF9saXN0LCBmb2xpb19uaWQoZm9saW8pKTtcbi1cdFx0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xuLVx0XHRcdFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4tXHRcdFx0XHRtb2RfbXRocF9zdGF0KG9sZF9vcmRlcixcbi1cdFx0XHRcdFx0TVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xuLVx0XHRcdH1cbi1cdFx0XHRsaXN0X2xydV91bmxvY2sobHJ1KTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0LyogVGFrZSBvZmYgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIHdoaWxlIGZyb3plbiBhbmQgbWVtY2cgc2V0ICovXG4rXHRcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkgdGFrZXMgdGhlIGZvbGlvIG9mZiB0aGUgcXVldWUgYmVmb3JlIGl0XG4rXHRcdCAqIHNwbGl0cyBpdCwgc28gdGhlIHVucXVldWUgYWJvdmUgZmluZHMgYW4gZW1wdHkgbGlzdCBhbmRcbitcdFx0ICogbGVhdmVzIFBHX3BhcnRpYWxseV9tYXBwZWQgc2V0LlxuK1x0XHQgKiBDbGVhciBpdCBoZXJlOiB0aGUgZmxhZyBkb2VzIG5vdCBzdXJ2aXZlIHRoZSBzcGxpdC5cbitcdFx0ICovXG4rXHRcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG4rXHRcdFx0Zm9saW9fY2xlYXJfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XG4rXHRcdFx0bW9kX210aHBfc3RhdChvbGRfb3JkZXIsXG4rXHRcdFx0XHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XG4gXHRcdH1cbiBcbiBcdFx0aWYgKG1hcHBpbmcpIHtcbkBAIC00MDY3LDEwICs0MDUzLDYgQEAgc3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5cbiBcdFx0aWYgKGNpKVxuIFx0XHRcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGRlcXVldWVfZGVmZXJyZWQpIHtcbi1cdFx0XHRsaXN0X2xydV91bmxvY2sobHJ1KTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0fVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdH1cbiBcbkBAIC00NTkwLDIyICs0NTcyLDExIEBAIHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGNvbnRhaW5lcl9vZihpdGVtLCBzdHJ1Y3QgZm9saW8sIF9kZWZlcnJlZF9saXN0KTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKmZyZWVhYmxlID0gY2JfYXJnO1xuIFxuLVx0aWYgKGZvbGlvX3RyeV9nZXQoZm9saW8pKSB7XG4tXHRcdGxpc3RfbHJ1X2lzb2xhdGVfbW92ZShscnUsIGl0ZW0sIGZyZWVhYmxlKTtcbi1cdFx0cmV0dXJuIExSVV9SRU1PVkVEO1xuLVx0fVxuK1x0LyogTG9zdCByYWNlIHRvIGZvbGlvX3B1dCgpIG9yIHRoZSBmb2xpbyBpcyB1bmRlciBmb2xpb19yZWZfZnJlZXplKCkgKi9cbitcdGlmICghZm9saW9fdHJ5X2dldChmb2xpbykpXG4rXHRcdHJldHVybiBMUlVfU0tJUDtcbiBcbi1cdC8qXG4tXHQgKiBXZSBsb3N0IHJhY2Ugd2l0aCBmb2xpb19wdXQoKS4gUmVhZCBmb2xpbyBzdGF0ZSBiZWZvcmUgdGhlXG4tXHQgKiBpc29sYXRlOiBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgY2hlY2tzIGxpc3RfZW1wdHkoKVxuLVx0ICogbG9ja2xlc3NseSwgc28gb25jZSByZW1vdmVkIHRoZSBmb2xpbyBjYW4gYmUgZnJlZWQgYW55IHRpbWUuXG4tXHQgKi9cbi1cdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XG4tXHRcdGZvbGlvX2NsZWFyX3BhcnRpYWxseV9tYXBwZWQoZm9saW8pO1xuLVx0XHRtb2RfbXRocF9zdGF0KGZvbGlvX29yZGVyKGZvbGlvKSxcbi1cdFx0XHQgICAgICBNVEhQX1NUQVRfTlJfQU5PTl9QQVJUSUFMTFlfTUFQUEVELCAtMSk7XG4tXHR9XG4tXHRsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7XG4rXHRsaXN0X2xydV9pc29sYXRlX21vdmUobHJ1LCBpdGVtLCBmcmVlYWJsZSk7XG4gXHRyZXR1cm4gTFJVX1JFTU9WRUQ7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MTM6MjQuODc4NTkwODM5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4OTg3NDU5MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZSBQYWdlcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHBhdGNoIGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLCBzbyBsZXQncyBicmVhayBpdCBkb3duIG1ldGhvZGljYWxseS5cblxuRmlyc3QsIEkgc2VlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBjZW50ZXJlZCBhcm91bmQgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAuIEl0IGxvb2tzIGxpa2Ugd2UncmUgc3RyZWFtbGluaW5nIHRoZSBsb2NraW5nIG1lY2hhbmlzbS4gSW5zdGVhZCBvZiB0aGUgY3VzdG9tIGxvY2tpbmcgb2YgYGRlZmVycmVkX3NwbGl0X2xydWAgYW5kIG1hbnVhbCBtYW5pcHVsYXRpb24gb2YgYF9fbGlzdF9scnVfZGVsYCwgdGhlIHBhdGNoIGlzIHN3aXRjaGluZyB0byBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbylgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0J3MgbGlrZWx5IGludHJvZHVjaW5nIGEgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBhbmQgaXRzIGJlbmVmaXRzIGNvbXBhcmVkIHRvIHRoZSBwcmV2aW91cyBhcHByb2FjaC4gVGhlIHBhdGNoIGFsc28gcmVtb3ZlcyBgUEdfcGFydGlhbGx5X21hcHBlZGAgYW5kIHVwZGF0ZXMgc3RhdHMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgc2lkZSBlZmZlY3RzIGFyZS5cblxuTmV4dCwgSSBzZWUgYSBjaGFuZ2UgaW4gYGRlZmVycmVkX3NwbGl0X2lzb2xhdGVgLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBuZXcgcmV0dXJuIGNvbmRpdGlvbiBpZiBgZm9saW9fdHJ5X2dldChmb2xpbylgIGZhaWxzOyBpdCBub3cgcmV0dXJucyBgTFJVX1NLSVBgIGluc3RlYWQgb2YgaXNvbGF0aW5nIHRoZSBwYWdlIGFuZCBjbGVhcmluZyBzdGF0cy4gVGhpcyBpcyBsaWtlbHkgYW4gb3B0aW1pemF0aW9uIHRvIGFkZHJlc3MgYSByYWNlIGNvbmRpdGlvbiwgbWF5YmU/IEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbnRleHRzIHdoZXJlIGBmb2xpb190cnlfZ2V0YCBjYW4gZmFpbCDigJMgYSBsb3N0IHJhY2UgdG8gYGZvbGlvX3B1dCgpYCBvciBhIGZhaWx1cmUgZHVyaW5nIGBmb2xpb19yZWZfZnJlZXplKClgIHBlcmhhcHMuIFRoaXMgY2hhbmdlIGlzIHRyeWluZyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHdvcmsuXG5cblRvIGZ1bGx5IGdyYXNwIHRoZSBpbnRlbnQsIEknbGwgbmVlZCB0byBleGFtaW5lIGBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0YC4gSSdsbCByZWFjaCBmb3IgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGV4cGxvcmUgdGhhdCBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uIGFuZCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcyBvbiB0aGUgaHVnZSBwYWdlIHNwbGl0dGluZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQ4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MTM6NDMuODY2MDUzMTQ1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQxOTE1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZm9saW8uYz05MD12b2lkIF9fZm9saW9fcHV0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTEwMi1cXHRwYWdlX2NhY2hlX3JlbGVhc2UoZm9saW8pO1xcbm1tL2ZvbGlvLmM6MTAzOlxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL2ZvbGlvLmMtMTA0LVxcdG1lbV9jZ3JvdXBfdW5jaGFyZ2UoZm9saW8pO1xcbi0tXFxubW0vZm9saW8uYz0xNTE9c3RhdGljIHZvaWQgZm9saW9fYmF0Y2hfbW92ZV9scnUoc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gsIG1vdmVfZm5fdCBtb3ZlX2ZuKVxcbi0tXFxubW0vZm9saW8uYy0xODUtXFx0XFx0XFx0X19mb2xpb19jbGVhcl91bmV2aWN0YWJsZShmb2xpbyk7XFxubW0vZm9saW8uYzoxODY6XFx0XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vZm9saW8uYy0xODctXFx0XFx0XFx0ZmJhdGNoLVxcdTAwM2Vmb2xpb3NbaV0gPSBOVUxMO1xcbi0tXFxubW0vZm9saW8uYz05Nzk9dm9pZCBmb2xpb3NfcHV0X3JlZnMoc3RydWN0IGZvbGlvX2JhdGNoICpmb2xpb3MsIHVuc2lnbmVkIGludCAqcmVmcylcXG4tLVxcbm1tL2ZvbGlvLmMtMTAxNy1cXHRcXHR9XFxubW0vZm9saW8uYzoxMDE4OlxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL2ZvbGlvLmMtMTAxOS1cXHRcXHRfX3BhZ2VfY2FjaGVfcmVsZWFzZShmb2xpbywgXFx1MDAyNmxydXZlYywgXFx1MDAyNmZsYWdzKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzkyNT1zdGF0aWMgaW50IF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTQyLVxcdFxcdC8qIFRha2Ugb2ZmIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSB3aGlsZSBmcm96ZW4gYW5kIG1lbWNnIHNldCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk0MzpcXHRcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jLTM5NDQtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ0MzU9aW50IHNwbGl0X2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0MC0vKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ0MTogKiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSBpcyBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5Olxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ0MjogKiB0aGUgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpIGlubGluZSB3cmFwcGVyIGluIG1tL2ludGVybmFsLmhcXG5tbS9odWdlX21lbW9yeS5jLTQ0NDMtICogbGltaXRzIGl0cyBjYWxscyB0byB0aG9zZSBmb2xpb3Mgd2hpY2ggbWF5IGhhdmUgYSBfZGVmZXJyZWRfbGlzdCBmb3JcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0NS0gKlxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQ0NjogKiBJdCBpcyB1bnNhZmUgdG8gY2FsbCBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgdW50aWwgZm9saW8gcmVmY291bnQgaXNcXG5tbS9odWdlX21lbW9yeS5jLTQ0NDctICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ1My0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjQ0NTQ6Ym9vbCBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9odWdlX21lbW9yeS5jLTQ0NTUte1xcbi0tXFxubW0vaW50ZXJuYWwuaD03MzU9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTc0Ni1cXG5tbS9pbnRlcm5hbC5oOjc0Nzpib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9pbnRlcm5hbC5oOjc0ODpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ludGVybmFsLmgtNzQ5LXtcXG4tLVxcbm1tL2ludGVybmFsLmgtNzYwLVxcbm1tL2ludGVybmFsLmg6NzYxOlxcdHJldHVybiBfX2ZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL2ludGVybmFsLmgtNzYyLX1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz02MTg9dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtNjUzLVxcbm1tL21lbWNvbnRyb2wtdjEuYzo2NTQ6XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vbWVtY29udHJvbC12MS5jLTY1NS1cXHRmb2xpby1cXHUwMDNlbWVtY2dfZGF0YSA9IDA7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTMzNT1zdGF0aWMgdm9pZCB1bmNoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MzczLVxcbm1tL21lbWNvbnRyb2wuYzo1Mzc0OlxcdFxcdFdBUk5fT05fT05DRShmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTUzNzUtXFx0fVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU1MTM9dm9pZCBtZW1fY2dyb3VwX21pZ3JhdGUoc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU1NTQtXFx0LyogV2FybmluZyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBzbyBkb24ndCB3b3JyeSBhYm91dCByZWZjb3VudCBub24tMCAqL1xcbm1tL21lbWNvbnRyb2wuYzo1NTU1OlxcdFdBUk5fT05fT05DRShmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KG9sZCkpO1xcbm1tL21lbWNvbnRyb2wuYy01NTU2LVxcdG9sZC1cXHUwMDNlbWVtY2dfZGF0YSA9IDA7XFxuLS1cXG5tbS9taWdyYXRlLmM9NTgzPXN0YXRpYyBpbnQgX19mb2xpb19taWdyYXRlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9taWdyYXRlLmMtNTk3LVxcdFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbm1tL21pZ3JhdGUuYzo1OTg6XFx0XFx0XFx0Zm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChmb2xpbyk7XFxubW0vbWlncmF0ZS5jLTU5OS1cXHRcXHRcXHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIGV4cGVjdGVkX2NvdW50KTtcXG4tLVxcbm1tL21pZ3JhdGUuYy02MzAtXFx0LyogVGFrZSBvZmYgZGVmZXJyZWQgc3BsaXQgcXVldWUgd2hpbGUgZnJvemVuIGFuZCBtZW1jZyBzZXQgKi9cXG5tbS9taWdyYXRlLmM6NjMxOlxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL21pZ3JhdGUuYy02MzItXFxuLS1cXG5tbS92bXNjYW4uYz0xMDU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE1MDYtXFxubW0vdm1zY2FuLmM6MTUwNzpcXHRcXHRmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KGZvbGlvKTtcXG5tbS92bXNjYW4uYy0xNTA4LVxcdFxcdGlmIChmb2xpb19iYXRjaF9hZGQoXFx1MDAyNmZyZWVfZm9saW9zLCBmb2xpbykgPT0gMCkge1xcbi0tXFxubW0vdm1zY2FuLmM9MTg2Nj1zdGF0aWMgdW5zaWduZWQgaW50IG1vdmVfZm9saW9zX3RvX2xydShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vdm1zY2FuLmMtMTkwMS1cXG5tbS92bXNjYW4uYzoxOTAyOlxcdFxcdFxcdGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoZm9saW8pO1xcbm1tL3Ztc2Nhbi5jLTE5MDMtXFx0XFx0XFx0aWYgKGZvbGlvX2JhdGNoX2FkZChcXHUwMDI2ZnJlZV9mb2xpb3MsIGZvbGlvKSA9PSAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjEzOjQzLjk5MDI0OTY3MloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTgwNjE3MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYG1tL2h1Z2VfbWVtb3J5LmNgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIGZpbGUuIEknbSBmb2N1c2luZyBvbiB0aGUgY29kZSBhcm91bmQgbGluZXMgNDQ0MCB0byA0NjAwLiBUaGF0IHJhbmdlIHVzdWFsbHkgY292ZXJzIGEgZmFpcmx5IHN1YnN0YW50aWFsIHNlY3Rpb24sIGxpa2VseSBpbnZvbHZpbmcgZWl0aGVyIHNvbWUgY29yZSBhbGxvY2F0aW9uIGxvZ2ljIG9yIG1hbmlwdWxhdGlvbiByZWxhdGVkIHRvIGh1Z2UgcGFnZXMsIGdpdmVuIHRoZSBmaWxlJ3MgbmFtZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBpbiBkZXRhaWwsIHNvIEknbSBnb2luZyB0byBzdGFydCBieSBjYXJlZnVsbHkgcmVhZGluZyB0aHJvdWdoIHRoYXQgc2VjdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYW55IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLiBNeSBpbnRlbnQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBpbXByb3ZlbWVudCwgYW5kIHByb2JhYmx5IGFsc28gdG8gcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggYW55IGNoYW5nZXMgc2luY2UgdGhlIGxhc3QgdGltZSBJIGxvb2tlZCBhdCB0aGlzIHNlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoxMzo0OC41NzA4Njg4OTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEwMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ0MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ0MDpcXHQvKlxcbjQ0NDE6XFx0ICogX19mb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaXMgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseTpcXG40NDQyOlxcdCAqIHRoZSBmb2xpb191bnF1ZXVlX2RlZmVycmVkX3NwbGl0KCkgaW5saW5lIHdyYXBwZXIgaW4gbW0vaW50ZXJuYWwuaFxcbjQ0NDM6XFx0ICogbGltaXRzIGl0cyBjYWxscyB0byB0aG9zZSBmb2xpb3Mgd2hpY2ggbWF5IGhhdmUgYSBfZGVmZXJyZWRfbGlzdCBmb3JcXG40NDQ0OlxcdCAqIHF1ZXVlaW5nIFRIUCBzcGxpdHMsIGFuZCB0aGF0IGxpc3QgaXMgKHJhY2lseSBvYnNlcnZlZCB0byBiZSkgbm9uLWVtcHR5LlxcbjQ0NDU6XFx0ICpcXG40NDQ2OlxcdCAqIEl0IGlzIHVuc2FmZSB0byBjYWxsIGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKSB1bnRpbCBmb2xpbyByZWZjb3VudCBpc1xcbjQ0NDc6XFx0ICogemVybzogYmVjYXVzZSBldmVuIHdoZW4gdGhlIGxpc3RfbHJ1IGxvY2sgaXMgaGVsZCwgYSBub24tZW1wdHlcXG40NDQ4OlxcdCAqIF9kZWZlcnJlZF9saXN0IG1pZ2h0IGJlIGluIHVzZSBvbiBkZWZlcnJlZF9zcGxpdF9zY2FuKCkncyB1bmxvY2tlZFxcbjQ0NDk6XFx0ICogb24tc3RhY2sgbGlzdC5cXG40NDUwOlxcdCAqXFxuNDQ1MTpcXHQgKiBUaGUgbGlzdF9scnUgc3VibGlzdCBpcyBkZXRlcm1pbmVkIGJ5IGZvbGlvJ3MgbWVtY2c6IGl0IGlzIHRoZXJlZm9yZVxcbjQ0NTI6XFx0ICogaW1wb3J0YW50IHRvIHVucXVldWUgZGVmZXJyZWQgc3BsaXQgYmVmb3JlIGNoYW5naW5nIGZvbGlvIG1lbWNnLlxcbjQ0NTM6XFx0ICovXFxuNDQ1NDpcXHRib29sIF9fZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjQ0NTU6XFx0e1xcbjQ0NTY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjQ0NTc6XFx0XFx0c3RydWN0IGxpc3RfbHJ1X29uZSAqbHJ1O1xcbjQ0NTg6XFx0XFx0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XFxuNDQ1OTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjQ0NjA6XFx0XFx0Ym9vbCB1bnF1ZXVlZCA9IGZhbHNlO1xcbjQ0NjE6XFx0XFxuNDQ2MjpcXHRcXHRXQVJOX09OX09OQ0UoZm9saW9fcmVmX2NvdW50KGZvbGlvKSk7XFxuNDQ2MzpcXHRcXHRXQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWVtY2dfY2hhcmdlZChmb2xpbykpO1xcbjQ0NjQ6XFx0XFxuNDQ2NTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuNDQ2NjpcXHRcXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG40NDY3OlxcdFxcdGxydSA9IGxpc3RfbHJ1X2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBuaWQsIFxcdTAwMjZtZW1jZywgXFx1MDAyNmZsYWdzKTtcXG40NDY4OlxcdFxcdGlmIChfX2xpc3RfbHJ1X2RlbChcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1LCBscnUsIFxcdTAwMjZmb2xpby1cXHUwMDNlX2RlZmVycmVkX2xpc3QsIG5pZCkpIHtcXG40NDY5OlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuNDQ3MDpcXHRcXHRcXHRcXHRmb2xpb19jbGVhcl9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKTtcXG40NDcxOlxcdFxcdFxcdFxcdG1vZF9tdGhwX3N0YXQoZm9saW9fb3JkZXIoZm9saW8pLFxcbjQ0NzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgTVRIUF9TVEFUX05SX0FOT05fUEFSVElBTExZX01BUFBFRCwgLTEpO1xcbjQ0NzM6XFx0XFx0XFx0fVxcbjQ0NzQ6XFx0XFx0XFx0dW5xdWV1ZWQgPSB0cnVlO1xcbjQ0NzU6XFx0XFx0fVxcbjQ0NzY6XFx0XFx0bGlzdF9scnVfdW5sb2NrX2lycXJlc3RvcmUobHJ1LCBcXHUwMDI2ZmxhZ3MpO1xcbjQ0Nzc6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuNDQ3ODpcXHRcXG40NDc5OlxcdFxcdHJldHVybiB1bnF1ZXVlZDtcXHQvKiB1c2VmdWwgZm9yIGRlYnVnIHdhcm5pbmdzICovXFxuNDQ4MDpcXHR9XFxuNDQ4MTpcXHRcXG40NDgyOlxcdC8qIHBhcnRpYWxseV9tYXBwZWQ9ZmFsc2Ugd29uJ3QgY2xlYXIgUEdfcGFydGlhbGx5X21hcHBlZCBmb2xpbyBmbGFnICovXFxuNDQ4MzpcXHR2b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcXG40NDg0OlxcdHtcXG40NDg1OlxcdFxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydTtcXG40NDg2OlxcdFxcdGludCBuaWQ7XFxuNDQ4NzpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNDQ4ODpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjQ0ODk6XFx0XFxuNDQ5MDpcXHRcXHQvKlxcbjQ0OTE6XFx0XFx0ICogT3JkZXIgMSBmb2xpb3MgaGF2ZSBubyBzcGFjZSBmb3IgYSBkZWZlcnJlZCBsaXN0LCBidXQgd2UgYWxzb1xcbjQ0OTI6XFx0XFx0ICogd29uJ3Qgd2FzdGUgbXVjaCBtZW1vcnkgYnkgbm90IGFkZGluZyB0aGVtIHRvIHRoZSBkZWZlcnJlZCBsaXN0LlxcbjQ0OTM6XFx0XFx0ICovXFxuNDQ5NDpcXHRcXHRpZiAoZm9saW9fb3JkZXIoZm9saW8pIFxcdTAwM2M9IDEpXFxuNDQ5NTpcXHRcXHRcXHRyZXR1cm47XFxuNDQ5NjpcXHRcXG40NDk3OlxcdFxcdGlmICghcGFydGlhbGx5X21hcHBlZCBcXHUwMDI2XFx1MDAyNiAhc3BsaXRfdW5kZXJ1c2VkX3RocClcXG40NDk4OlxcdFxcdFxcdHJldHVybjtcXG40NDk5OlxcdFxcbjQ1MDA6XFx0XFx0LypcXG40NTAxOlxcdFxcdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxcbjQ1MDI6XFx0XFx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcXG40NTAzOlxcdFxcdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcXG40NTA0OlxcdFxcdCAqIHVubmVjZXNzYXJ5IHRvIGhhbmRsZSBpdCBhZ2FpbiBpbiB0aGUgc2hyaW5rZXIsIHNvIGV4Y2x1ZGluZ1xcbjQ1MDU6XFx0XFx0ICogc3dhcGNhY2hlIGhlcmUgbWF5IHN0aWxsIGJlIGEgdXNlZnVsIG9wdGltaXphdGlvbi5cXG40NTA2OlxcdFxcdCAqL1xcbjQ1MDc6XFx0XFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSlcXG40NTA4OlxcdFxcdFxcdHJldHVybjtcXG40NTA5OlxcdFxcbjQ1MTA6XFx0XFx0bmlkID0gZm9saW9fbmlkKGZvbGlvKTtcXG40NTExOlxcdFxcbjQ1MTI6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjQ1MTM6XFx0XFx0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XFxuNDUxNDpcXHRcXHRscnUgPSBsaXN0X2xydV9sb2NrX2lycXNhdmUoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgbmlkLCBcXHUwMDI2bWVtY2csIFxcdTAwMjZmbGFncyk7XFxuNDUxNTpcXHRcXHRpZiAocGFydGlhbGx5X21hcHBlZCkge1xcbjQ1MTY6XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X3BhcnRpYWxseV9tYXBwZWQoZm9saW8pKSB7XFxuNDUxNzpcXHRcXHRcXHRcXHRmb2xpb19zZXRfcGFydGlhbGx5X21hcHBlZChmb2xpbyk7XFxuNDUxODpcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9wbWRfbWFwcGFibGUoZm9saW8pKVxcbjQ1MTk6XFx0XFx0XFx0XFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX0RFRkVSUkVEX1NQTElUX1BBR0UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoxMzo0OC41NzExODE0NDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzc3NjIyNzExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgYG1tL2h1Z2VfbWVtb3J5LmNgIGZ1bmN0aW9uczpcblxuKipEaXZpbmcgaW50byBEZWZlcnJlZCBTcGxpdCBTY2FucyBhbmQgSXNvbGF0ZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBkZWZlcnJlZF9zcGxpdF9zY2FuYCBhbmQgYGRlZmVycmVkX3NwbGl0X2lzb2xhdGVgIHdpdGhpbiB0aGUgYG1tL2h1Z2VfbWVtb3J5LmNgIGZpbGUuIEknbSBndWVzc2luZyB0aGVzZSBhcmUgY3J1Y2lhbCBmb3IgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBodWdlIHBhZ2VzIGFuZCBoYW5kbGVzIHRoZWlyIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gaXQgY29tZXMgdG8gZGVhbGluZyB3aXRoIGZyYWdtZW50YXRpb24gb3IgY29udGVudGlvbi4gVGhlIFwiZGVmZXJyZWRcIiBwYXJ0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHNvbWUgc29ydCBvZiBsYXp5IGV2YWx1YXRpb24gb3IgYmFja2dyb3VuZCBwcm9jZXNzaW5nLCBsaWtlbHkgdG8gYXZvaWQgYmxvY2tpbmcgY3JpdGljYWwgcGF0aHMuIEknbSBrZWVuIHRvIHNlZSBob3cgdGhlIGNvZGUgY29vcmRpbmF0ZXMgdGhlIGNvbXBsZXggaW50ZXJwbGF5IGJldHdlZW4gdGhlIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCBwaHlzaWNhbCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gTlVNQSBjb25zaWRlcmF0aW9ucyB0aGF0IGFyaXNlIHdpdGggaHVnZSBwYWdlcy4gSSBleHBlY3QgdG8gZmluZCBzb21lIGNsZXZlciBhbGdvcml0aG1zIGhlcmUsIGVzcGVjaWFsbHkgaWYgdGhlc2UgZnVuY3Rpb25zIHBsYXkgYSBwYXJ0IGluIG1pbmltaXppbmcgVExCIG1pc3NlcyBvciByZWR1Y2luZyBmcmFnbWVudGF0aW9uIG92ZXIgdGltZS4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgZm9jdXNlZCBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjcml0ZXJpYSB0aGF0IHRyaWdnZXIgdGhlIGRlZmVycmVkIGFjdGlvbnMgYW5kIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCB0byBtYWludGFpbiBjb25zaXN0ZW5jeSBkdXJpbmcgdGhlc2Ugb3BlcmF0aW9ucy4gTGV0J3Mgc2VlIGhvdyBzbWFydCB0aGUga2VybmVsIHJlYWxseSBpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6Njk3NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTA6MTM6NTYuMzQ3NDExNDgxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4Nzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdlX21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1NjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ1NjA6XFx0XFx0XFx0XFx0ICovXFxuNDU2MTpcXHRcXHRcXHRcXHRpZiAoKytudW1fZmlsbGVkX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUiAtIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSlcXG40NTYyOlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG40NTYzOlxcdFxcdFxcdH1cXG40NTY0OlxcdFxcdH1cXG40NTY1OlxcdFxcdHJldHVybiBmYWxzZTtcXG40NTY2OlxcdH1cXG40NTY3OlxcdFxcbjQ1Njg6XFx0c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXFxuNDU2OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbGlzdF9scnVfb25lICpscnUsXFxuNDU3MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB2b2lkICpjYl9hcmcpXFxuNDU3MTpcXHR7XFxuNDU3MjpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCBmb2xpbywgX2RlZmVycmVkX2xpc3QpO1xcbjQ1NzM6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqZnJlZWFibGUgPSBjYl9hcmc7XFxuNDU3NDpcXHRcXG40NTc1OlxcdFxcdC8qIExvc3QgcmFjZSB0byBmb2xpb19wdXQoKSBvciB0aGUgZm9saW8gaXMgdW5kZXIgZm9saW9fcmVmX2ZyZWV6ZSgpICovXFxuNDU3NjpcXHRcXHRpZiAoIWZvbGlvX3RyeV9nZXQoZm9saW8pKVxcbjQ1Nzc6XFx0XFx0XFx0cmV0dXJuIExSVV9TS0lQO1xcbjQ1Nzg6XFx0XFxuNDU3OTpcXHRcXHRsaXN0X2xydV9pc29sYXRlX21vdmUobHJ1LCBpdGVtLCBmcmVlYWJsZSk7XFxuNDU4MDpcXHRcXHRyZXR1cm4gTFJVX1JFTU9WRUQ7XFxuNDU4MTpcXHR9XFxuNDU4MjpcXHRcXG40NTgzOlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuNDU4NDpcXHRcXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbjQ1ODU6XFx0e1xcbjQ1ODY6XFx0XFx0TElTVF9IRUFEKGRpc3Bvc2UpO1xcbjQ1ODc6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgKm5leHQ7XFxuNDU4ODpcXHRcXHRpbnQgc3BsaXQgPSAwO1xcbjQ1ODk6XFx0XFx0dW5zaWduZWQgbG9uZyBpc29sYXRlZDtcXG40NTkwOlxcdFxcbjQ1OTE6XFx0XFx0aXNvbGF0ZWQgPSBsaXN0X2xydV9zaHJpbmtfd2Fsa19pcnEoXFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSwgc2MsXFxuNDU5MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSwgXFx1MDAyNmRpc3Bvc2UpO1xcbjQ1OTM6XFx0XFxuNDU5NDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9saW8sIG5leHQsIFxcdTAwMjZkaXNwb3NlLCBfZGVmZXJyZWRfbGlzdCkge1xcbjQ1OTU6XFx0XFx0XFx0Ym9vbCBkaWRfc3BsaXQgPSBmYWxzZTtcXG40NTk2OlxcdFxcdFxcdGJvb2wgdW5kZXJ1c2VkID0gZmFsc2U7XFxuNDU5NzpcXHRcXG40NTk4OlxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmZvbGlvLVxcdTAwM2VfZGVmZXJyZWRfbGlzdCk7XFxuNDU5OTpcXHRcXG40NjAwOlxcdFxcdFxcdGlmICghZm9saW9fdGVzdF9wYXJ0aWFsbHlfbWFwcGVkKGZvbGlvKSkge1xcbjQ2MDE6XFx0XFx0XFx0XFx0LypcXG40NjAyOlxcdFxcdFxcdFxcdCAqIFNlZSB0cnlfdG9fbWFwX3VudXNlZF90b196ZXJvcGFnZSgpOiB3ZSBjYW5ub3RcXG40NjAzOlxcdFxcdFxcdFxcdCAqIG9wdGltaXplIHplcm8tZmlsbGVkIHBhZ2VzIGFmdGVyIHNwbGl0dGluZyBhblxcbjQ2MDQ6XFx0XFx0XFx0XFx0ICogbWxvY2tlZCBmb2xpby5cXG40NjA1OlxcdFxcdFxcdFxcdCAqL1xcbjQ2MDY6XFx0XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfbWxvY2tlZChmb2xpbykpXFxuNDYwNzpcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuNDYwODpcXHRcXHRcXHRcXHR1bmRlcnVzZWQgPSB0aHBfdW5kZXJ1c2VkKGZvbGlvKTtcXG40NjA5OlxcdFxcdFxcdFxcdGlmICghdW5kZXJ1c2VkKVxcbjQ2MTA6XFx0XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbjQ2MTE6XFx0XFx0XFx0fVxcbjQ2MTI6XFx0XFx0XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcXG40NjEzOlxcdFxcdFxcdFxcdGdvdG8gcmVxdWV1ZTtcXG40NjE0OlxcdFxcdFxcdGlmICghc3BsaXRfZm9saW8oZm9saW8pKSB7XFxuNDYxNTpcXHRcXHRcXHRcXHRkaWRfc3BsaXQgPSB0cnVlO1xcbjQ2MTY6XFx0XFx0XFx0XFx0aWYgKHVuZGVydXNlZClcXG40NjE3OlxcdFxcdFxcdFxcdFxcdGNvdW50X3ZtX2V2ZW50KFRIUF9VTkRFUlVTRURfU1BMSVRfUEFHRSk7XFxuNDYxODpcXHRcXHRcXHRcXHRzcGxpdCsrO1xcbjQ2MTk6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxMDoxMzo1Ni4zNDc4MDIyMDFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM2NzU5MDU3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCBpcyB0aGF0IGl0J3MgZm9jdXNpbmcgb24gc2ltcGxpZnlpbmcgdGhlIGxvY2tpbmcgYW5kIGRlZmVycmVkIHNwbGl0IHF1ZXVlIGhhbmRsaW5nIHdpdGhpbiB0aGUgaHVnZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBJdCBsb29rcyBsaWtlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkYCBhbmQgYGRlZmVycmVkX3NwbGl0X2lzb2xhdGVgLlxuXG5Fc3NlbnRpYWxseSwgSSBzZWUgYSByZWZhY3RvcmluZyBvZiB0aGUgbG9ja2luZyBvcmRlciBhbmQgbG9naWMgYXJvdW5kIGZyZWV6aW5nIGZvbGlvcyBhbmQgZGVhbGluZyB3aXRoIHBhcnRpYWxseSBtYXBwZWQgcGFnZXMgaW4gdGhlIGRlZmVycmVkIHNwbGl0IExSVS4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBMUlUgbG9jayBjb3VsZCBiZSB0YWtlbiAqYmVmb3JlKiBmcmVlemluZyB0aGUgcmVmY291bnQsIHdoaWNoIGhhcyBub3cgYmVlbiByZWFycmFuZ2VkIHRvIGZyZWV6ZSBmaXJzdCBhbmQgKnRoZW4qIGRlYWwgd2l0aCB0aGUgTFJVLiBBbHNvLCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZWAgaGFzIGJlZW4gc2ltcGxpZmllZCBieSBqdXN0IHJldHVybmluZyBgTFJVX1NLSVBgIG9uIGBmb2xpb190cnlfZ2V0YCBmYWlsdXJlcy5cblxuTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIHNlZTpcblxuKiAgIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UgaW4gYSBtYW5uZXIgdGhhdCB3b3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuKiAgIFRoZSBsb2dpYyBpdHNlbGYgZG9lc24ndCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG4qICAgVGhlcmUgYXJlbid0IGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgd2hpY2ggaXMgZ29vZC5cbiogICBJIGRvbid0IHNlZSBhbnkgY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWQgdG8gYm91bmRzIGNoZWNrIHZ1bG5lcmFiaWxpdGllcywgb3IgdGhlIGxlYWtpbmcgb2YgdW5pbml0aWFsaXplZCBieXRlcyB0aHJvdWdoIGV4aXN0aW5nIGJ1ZmZlcnMuXG4qICAgQ3J1Y2lhbGx5LCB0aGVyZSBhcmUgbm8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIG9yIGlvY3RsIGNhbGxzIHRoYXQgY291bGQgbGVhZCB0byB1c2VyLXNwYWNlIGxlYWtzLlxuKiAgIEknbSBhbHNvIG5vdCBzZWVpbmcgYW55IG9idmlvdXMgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSByaXNrcyBoZXJlLlxuXG5UaGlzIGxvb2tzIGxpa2UgcHVyZSBNTSBzeW5jaHJvbml6YXRpb246IGNoYW5nZXMgdG8gcGFnZSBzcGxpdHRpbmcsIExSVSBsaXN0IGhhbmRsaW5nLCBhbmQgbG9ja2luZy4gQWxsIHRoZSBjaGFuZ2VzIGludm9sdmUgbWFuaXB1bGF0aW5nIGxpc3QgcG9pbnRlcnMsIHBhZ2UgZmxhZ3MsIHJlZmNvdW50cywgYW5kIG1lbW9yeSBjZ3JvdXAgc3RhdHMuIFNvLCB3aXRoIHRoaXMga2luZCBvZiB3b3JrLCB3aGF0IEknbSBsb29raW5nIGZvciBhcmU6IHJhY2UgY29uZGl0aW9ucywgbG9jayBvcmRlciBwcm9ibGVtcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgZG91YmxlIGxpc3QgZGVsZXRpb25zLCByZWZjb3VudCB1bmRlcmZsb3cgb3IgbGVha3MuXG5cbkhvd2V2ZXIsIGFsbCBvZiB0aGVzZSBhcmUgcHJlY2lzZWx5IHRoZSBraW5kcyBvZiBpc3N1ZXMgdGhhdCBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIG1lY2hhbmlzbXMgKGUuZy4sIGFzc2VydGlvbnMgbGlrZSBgVk1fV0FSTl9PTmAsIGBXQVJOX09OX09OQ0VgKSBhcmUgZGVzaWduZWQgdG8gY2F0Y2guIEFuZCBJIGRvbid0IHNlZSBhbnkgdmVjdG9yIGZvciBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGxlYWsgKnRoYXQgd291bGQgb25seSBiZSBkZXRlY3RhYmxlIGJ5IEtNU0FOKi5cblxuVGhlcmVmb3JlLCBiYXNlZCBvbiBteSBhbmFseXNpcyBvZiB0aGUgcGF0Y2ggYW5kIG15IHVuZGVyc3RhbmRpbmcgb2YgbWVtb3J5IHNhZmV0eSB0b29scywgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC5cblxuU28sIHRoZSBzdW1tYXJ5IGlzIHRoYXQ6IHRoaXMgcGF0Y2ggc2ltcGxpZmllcyBsb2NraW5nIGFuZCBkZWZlcnJlZCBzcGxpdCBxdWV1ZSBoYW5kbGluZyBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKClgIGFuZCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSgpYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFRoZSBjaGFuZ2VzIG9ubHkgbWFuaXB1bGF0ZSBsaXN0IHBvaW50ZXJzIChgX2RlZmVycmVkX2xpc3RgKSwgcGFnZSBmbGFncyAoYFBHX3BhcnRpYWxseV9tYXBwZWRgKSwgZm9saW8gcmVmY291bnRzLCBhbmQgbWVtb3J5IGNncm91cCBzdGF0cy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBzdGFjay9oZWFwIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQsIG5vciBhcmUgdGhlcmUgYW55IHVzZXItc3BhY2UgY29weSBtZWNoYW5pc21zIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9wYWRkaW5nLiBBbnkgY29uY3VycmVuY3kgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2UgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGFzc2VydGlvbnMuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTI5LCJPdXRwdXRUb2tlbnMiOjIwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDEwOjE0OjEwLjAyMzcxMDU4OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBkZWZlcnJlZCBzcGxpdCBxdWV1ZSBoYW5kbGluZyBpbiBgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKClgIGFuZCBgZGVmZXJyZWRfc3BsaXRfaXNvbGF0ZSgpYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHJlcGxhY2luZyBtYW51YWwgTFJVIGxvY2tpbmcgcHJpb3IgdG8gZm9saW8gcmVmIGZyZWV6aW5nIHdpdGggY2FsbHMgdG8gYGZvbGlvX3VucXVldWVfZGVmZXJyZWRfc3BsaXQoKWAgYW5kIHNraXBwaW5nIHVucmVmZXJlbmNlZCBmb2xpb3MgZHVyaW5nIGlzb2xhdGlvbi5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBmb2xpbyByZWZlcmVuY2UgY291bnRpbmcsIGxpc3QgbWFuYWdlbWVudCAoYF9kZWZlcnJlZF9saXN0YCksIGFuZCBmb2xpbyBmbGFncyAoYFBHX3BhcnRpYWxseV9tYXBwZWRgKS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gc3RhY2sgb3IgaGVhcCBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgb3IgbWFuaXB1bGF0ZWQsIGFuZCBubyB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBhcmUgbGVmdCB1bmluaXRpYWxpemVkLiBBbnkgY29uY3VycmVuY3ksIHJlZmNvdW50LCBvciBsaXN0IGNvcnJ1cHRpb24gYnVncyBpbnRyb2R1Y2VkIGhlcmUgd291bGQgZmFsbCB1bmRlciB0aGUgcHVydmlldyBvZiBLQVNBTiwgTE9DS0RFUCwgb3Iga2VybmVsIGFzc2VydGlvbnMsIHJhdGhlciB0aGFuIEtNU0FOIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdGlvbi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGRlZmVycmVkIHNwbGl0IHF1ZXVlIGhhbmRsaW5nIGluIGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoKWAgYW5kIGBkZWZlcnJlZF9zcGxpdF9pc29sYXRlKClgIGluIGBtbS9odWdlX21lbW9yeS5jYCwgcmVwbGFjaW5nIG1hbnVhbCBMUlUgbG9ja2luZyBwcmlvciB0byBmb2xpbyByZWYgZnJlZXppbmcgd2l0aCBjYWxscyB0byBgZm9saW9fdW5xdWV1ZV9kZWZlcnJlZF9zcGxpdCgpYCBhbmQgc2tpcHBpbmcgdW5yZWZlcmVuY2VkIGZvbGlvcyBkdXJpbmcgaXNvbGF0aW9uLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIGZvbGlvIHJlZmVyZW5jZSBjb3VudGluZywgbGlzdCBtYW5hZ2VtZW50IChgX2RlZmVycmVkX2xpc3RgKSwgYW5kIGZvbGlvIGZsYWdzIChgUEdfcGFydGlhbGx5X21hcHBlZGApLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBvciBtYW5pcHVsYXRlZCwgYW5kIG5vIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzIGFyZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIEFueSBjb25jdXJyZW5jeSwgcmVmY291bnQsIG9yIGxpc3QgY29ycnVwdGlvbiBidWdzIGludHJvZHVjZWQgaGVyZSB3b3VsZCBmYWxsIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIEtBU0FOLCBMT0NLREVQLCBvciBrZXJuZWwgYXNzZXJ0aW9ucywgcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrwmg[1] Phase: Succeeded StartedAt: 2026-08-31 10:14:21 +0000 UTC FinishedAt: 2026-08-31 10:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 10:14:21 +0000 UTC FinishedAt: 2026-08-31 10:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2] Phase: Succeeded StartedAt: 2026-08-31 10:14:21 +0000 UTC FinishedAt: 2026-08-31 13:57:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 10:14:21 +0000 UTC FinishedAt: 2026-08-31 13:57:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 10:14:21 +0000 UTC FinishedAt: 2026-08-31 10:14:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 10:14:21 +0000 UTC FinishedAt: 2026-08-31 10:14:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowgrwmg/series-workflowgrwmg-convert-artifact-2307341242/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 10:14:31 +0000 UTC FinishedAt: 2026-08-31 10:30:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 10:14:31 +0000 UTC FinishedAt: 2026-08-31 10:30:21 +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:*2b8dd28e-fe9f-4d75-bbd0-d94a58bbf1cc,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-workflowgrwmg/series-workflowgrwmg-convert-artifact-2307341242/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": "846098c0-64ab-4a5c-9487-7a0b885d9995", "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-workflowgrwmg/series-workflowgrwmg-build-action-3284431208/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 10:14:31 +0000 UTC FinishedAt: 2026-08-31 10:30:11 +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:*2b8dd28e-fe9f-4d75-bbd0-d94a58bbf1cc,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-workflowgrwmg/series-workflowgrwmg-convert-artifact-2307341242/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": "846098c0-64ab-4a5c-9487-7a0b885d9995", "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-workflowgrwmg/series-workflowgrwmg-build-action-3284431208/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 10:30:21 +0000 UTC FinishedAt: 2026-08-31 10:30:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 10:30:21 +0000 UTC FinishedAt: 2026-08-31 10:30:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 10:30:21 +0000 UTC FinishedAt: 2026-08-31 10:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 10:30:21 +0000 UTC FinishedAt: 2026-08-31 10:30:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowgrwmg/series-workflowgrwmg-convert-artifact-1132634389/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 10:30:31 +0000 UTC FinishedAt: 2026-08-31 10:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 10:30:31 +0000 UTC FinishedAt: 2026-08-31 10:32:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*846098c0-64ab-4a5c-9487-7a0b885d9995,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-workflowgrwmg/series-workflowgrwmg-build-action-3284431208/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-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 10:32:28 +0000 UTC FinishedAt: 2026-08-31 10:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 10:32:28 +0000 UTC FinishedAt: 2026-08-31 10:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 10:32:28 +0000 UTC FinishedAt: 2026-08-31 10:52:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 10:32:28 +0000 UTC FinishedAt: 2026-08-31 10:52:12 +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:*2b8dd28e-fe9f-4d75-bbd0-d94a58bbf1cc,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-workflowgrwmg/series-workflowgrwmg-convert-artifact-1132634389/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": "d1d6b78b-5b0e-49e2-831c-fd12ebff7247", "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-workflowgrwmg/series-workflowgrwmg-build-action-1246840737/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 10:32:28 +0000 UTC FinishedAt: 2026-08-31 10:51:52 +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:*2b8dd28e-fe9f-4d75-bbd0-d94a58bbf1cc,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-workflowgrwmg/series-workflowgrwmg-convert-artifact-1132634389/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": "d1d6b78b-5b0e-49e2-831c-fd12ebff7247", "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-workflowgrwmg/series-workflowgrwmg-build-action-1246840737/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 10:52:12 +0000 UTC FinishedAt: 2026-08-31 10:52:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 10:52:12 +0000 UTC FinishedAt: 2026-08-31 10:52:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 10:52:12 +0000 UTC FinishedAt: 2026-08-31 10:54:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 10:52:12 +0000 UTC FinishedAt: 2026-08-31 10:53:56 +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:*d1d6b78b-5b0e-49e2-831c-fd12ebff7247,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-workflowgrwmg/series-workflowgrwmg-build-action-1246840737/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-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 10:54:06 +0000 UTC FinishedAt: 2026-08-31 13:57:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 10:54:06 +0000 UTC FinishedAt: 2026-08-31 13:57:02 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},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:*846098c0-64ab-4a5c-9487-7a0b885d9995,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d1d6b78b-5b0e-49e2-831c-fd12ebff7247,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-workflowgrwmg/series-workflowgrwmg-build-action-3284431208/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-workflowgrwmg/series-workflowgrwmg-build-action-1246840737/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 10:54:06 +0000 UTC FinishedAt: 2026-08-31 10:54:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 10:54:06 +0000 UTC FinishedAt: 2026-08-31 10:54:11 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},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-workflowgrwmg/series-workflowgrwmg-convert-artifact-2747090170/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 10:54:06 +0000 UTC FinishedAt: 2026-08-31 10:54:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 10:54:06 +0000 UTC FinishedAt: 2026-08-31 10:54:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 10:54:06 +0000 UTC FinishedAt: 2026-08-31 10:54:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 10:54:16 +0000 UTC FinishedAt: 2026-08-31 13:57:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgrwmg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__split_huge_page_to_list_to_order","folio_split","split_folio_to_list","folio_split_unmapped","__folio_unqueue_deferred_split","deferred_split_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4a6983a217b4358b6c648e5b280261ca533544d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"4aca2fa6-2165-4bf5-82d7-168a9218cbd3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 10:54:16 +0000 UTC FinishedAt: 2026-08-31 13:56:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*846098c0-64ab-4a5c-9487-7a0b885d9995,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d1d6b78b-5b0e-49e2-831c-fd12ebff7247,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-workflowgrwmg/series-workflowgrwmg-build-action-3284431208/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-workflowgrwmg/series-workflowgrwmg-build-action-1246840737/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-workflowgrwmg/series-workflowgrwmg-convert-artifact-2747090170/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,}