Name: series-workflowc2qm9 Phase: Succeeded StartedAt: 2026-09-01 02:11:56 +0000 UTC FinishedAt: 2026-09-01 06:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[0] Phase: Succeeded StartedAt: 2026-09-01 02:11:56 +0000 UTC FinishedAt: 2026-09-01 02:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 02:11:56 +0000 UTC FinishedAt: 2026-09-01 02:55:10 +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": "ba8d93a7c61eb1a846220fd8184b94292f51afb1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG" ], "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": "ba8d93a7c61eb1a846220fd8184b94292f51afb1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG" ], "series_id": "c6c703b7-cd2d-4329-97fa-2817f9b5a56f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__mem_cgroup_charge", "mem_cgroup_charge_hugetlb", "mem_cgroup_swapin_charge_folio", "mem_cgroup_sk_charge", "__memcg_memory_event" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX21lbV9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2tfY2hhcmdlJiMzNDssCiAgICAmIzM0O19fbWVtY2dfbWVtb3J5X2V2ZW50JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRyeV9jaGFyZ2VfbWVtY2coKWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gZW5zdXJlIHRoYXQgYSBgTUVNQ0dfTUFYYCBtZW1vcnkgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gYW4gYWxsb2NhdGlvbiBjaGFyZ2UgcmVxdWVzdCBpcyByZWplY3RlZCB3aXRoIGAtRU5PTUVNYC4gSXQgaW50cm9kdWNlcyBhIGxvY2FsIHZhcmlhYmxlIGByZXQgPSAwYCwgc2V0cyBgcmV0ID0gLUVOT01FTWAgb24gZmFpbHVyZSwgYW5kIHJvdXRlcyB0aHJvdWdoIGEgY29tbW9uIGBvdXQ6YCBsYWJlbCB0byByYWlzZSB0aGUgZXZlbnQgYmVmb3JlIHJldHVybmluZyBgcmV0YC5cblxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyAoc3RhY2svaGVhcC9wYWdlcykgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGhlcmUgZG8gbm90IGludm9sdmUgY29weWluZyBkYXRhIHN0cnVjdHVyZXMgb3IgYnVmZmVycyB0byB1c2VyIHNwYWNlLCBhbGxvY2F0aW5nIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgbG9jYWwgdmFyaWFibGVzIChgcmV0YCwgYHJhaXNlZF9tYXhfZXZlbnRgLCBgbWVtX292ZXJfbGltaXRgKSBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbi0gQW55IHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChlLmcuLCBjb250cm9sIGZsb3cgYnVncywgbWVtY2cgZXZlbnQgY291bnRlciBtYW5pcHVsYXRpb24sIGxvY2tpbmcgb3Igc3RhdGUgdHJhY2tpbmcgZHVyaW5nIG1lbWNnIHJlY2xhaW0vZXZlbnRzKSBhcmUgd2l0aGluIHRoZSBkb21haW4gb2Ygc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scywgS0FTQU4sIGFuZCBMT0NLREVQLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRyeV9jaGFyZ2VfbWVtY2coKSB0byBlbnN1cmUgdGhhdCBNRU1DR19NQVggZXZlbnRzIGFyZSBwcm9wZXJseSByYWlzZWQgdmlhIF9fbWVtY2dfbWVtb3J5X2V2ZW50KCkgd2hlbiBtZW1vcnkgY2dyb3VwIGFsbG9jYXRpb24gcmVxdWVzdHMgYXJlIHJlamVjdGVkIHdpdGggLUVOT01FTS4gVGhpcyBhbHRlcnMgY29yZSBtZW1jZyBsaW1pdCBldmVudCBoYW5kbGluZyBhbmQgbWVtb3J5IGNoYXJnaW5nIGNvbnRyb2wgZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ2MzY5ODNmNjVjZjEwMmMyOWU0NzQwNmE1ZTgxYThhNTY2YjlmMjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDAyOjUyOjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTI3MWQzOTBiNjE3ZS4uMTU4YjA1NjJlOGRmMyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMjY1NiwxMCAmIzQzOzI2NTYsMTEgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRib29sIHJhaXNlZF9tYXhfZXZlbnQgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuIFx0Ym9vbCBhbGxvd19zcGlubmluZyA9IGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKGdmcF9tYXNrKTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiByZXRyeTpcbiBcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGlmICghYWxsb3dfc3Bpbm5pbmcpXG4gXHRcdC8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqL1xuQEAgLTI3NzAsMTYgJiM0MzsyNzcxLDExIEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0ICogcHV0IHRoZSBidXJkZW4gb2YgcmVjbGFpbSBvbiByZWd1bGFyIGFsbG9jYXRpb24gcmVxdWVzdHNcbiBcdCAqIGFuZCBsZXQgdGhlc2UgZ28gdGhyb3VnaCBhcyBwcml2aWxlZ2VkIGFsbG9jYXRpb25zLlxuIFx0ICovXG4tXHRpZiAoIShnZnBfbWFzayBcdTAwMjYgKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpKSlcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0aWYgKCEoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKSkpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gZm9yY2U6XG4tXHQvKlxuLVx0ICogSWYgdGhlIGFsbG9jYXRpb24gaGFzIHRvIGJlIGVuZm9yY2VkLCBkb24mIzM5O3QgZm9yZ2V0IHRvIHJhaXNlXG4tXHQgKiBhIE1FTUNHX01BWCBldmVudC5cbi1cdCAqL1xuLVx0aWYgKCFyYWlzZWRfbWF4X2V2ZW50KVxuLVx0XHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XG4tXG4gXHQvKlxuIFx0ICogVGhlIGFsbG9jYXRpb24gZWl0aGVyIGNhbiYjMzk7dCBmYWlsIG9yIHdpbGwgbGVhZCB0byBtb3JlIG1lbW9yeVxuIFx0ICogYmVpbmcgZnJlZWQgdmVyeSBzb29uLiAgQWxsb3cgbWVtb3J5IHVzYWdlIGdvIG92ZXIgdGhlIGxpbWl0XG5AQCAtMjc4OSw3ICYjNDM7Mjc4NSwxNSBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXG4gXHRcdHBhZ2VfY291bnRlcl9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIG5yX3BhZ2VzKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztvdXQ6XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEb24mIzM5O3QgZm9yZ2V0IHRvIHJhaXNlIGEgTUVNQ0dfTUFYIGV2ZW50IGZvciBmb3JjZWQgb3IgcmVqZWN0ZWRcbiYjNDM7XHQgKiByZXF1ZXN0cy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXG4mIzQzO1x0XHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gXG4gZG9uZV9yZXN0b2NrOlxuIFx0aWYgKGJhdGNoIFx1MDAzZSBucl9wYWdlcylcbkBAIC0yODQ4LDcgJiM0MzsyODUyLDcgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHQgICAgIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQykgXHUwMDI2XHUwMDI2XG4gXHQgICAgZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxuIFx0XHRfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbWVtX2Nncm91cF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1jZ19tZW1vcnlfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdHJ5X2NoYXJnZV9tZW1jZygpIHRvIGVuc3VyZSB0aGF0IE1FTUNHX01BWCBldmVudHMgYXJlIHByb3Blcmx5IHJhaXNlZCB2aWEgX19tZW1jZ19tZW1vcnlfZXZlbnQoKSB3aGVuIG1lbW9yeSBjZ3JvdXAgYWxsb2NhdGlvbiByZXF1ZXN0cyBhcmUgcmVqZWN0ZWQgd2l0aCAtRU5PTUVNLiBUaGlzIGFsdGVycyBjb3JlIG1lbWNnIGxpbWl0IGV2ZW50IGhhbmRsaW5nIGFuZCBtZW1vcnkgY2hhcmdpbmcgY29udHJvbCBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDYzNjk4M2Y2NWNmMTAyYzI5ZTQ3NDA2YTVlODFhOGE1NjZiOWYyNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMDI6NTI6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMTI3MWQzOTBiNjE3ZS4uMTU4YjA1NjJlOGRmMyAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMjY1NiwxMCAmIzQzOzI2NTYsMTEgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssCiAJYm9vbCByYWlzZWRfbWF4X2V2ZW50ID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBwZmxhZ3M7CiAJYm9vbCBhbGxvd19zcGlubmluZyA9IGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKGdmcF9tYXNrKTsKJiM0MzsJaW50IHJldCA9IDA7CiAKIHJldHJ5OgogCWlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpCi0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHJldDsKIAogCWlmICghYWxsb3dfc3Bpbm5pbmcpCiAJCS8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqLwpAQCAtMjc3MCwxNiAmIzQzOzI3NzEsMTEgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssCiAJICogcHV0IHRoZSBidXJkZW4gb2YgcmVjbGFpbSBvbiByZWd1bGFyIGFsbG9jYXRpb24gcmVxdWVzdHMKIAkgKiBhbmQgbGV0IHRoZXNlIGdvIHRocm91Z2ggYXMgcHJpdmlsZWdlZCBhbGxvY2F0aW9ucy4KIAkgKi8KLQlpZiAoIShnZnBfbWFzayAmYW1wOyAoX19HRlBfTk9GQUlMIHwgX19HRlBfSElHSCkpKQotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKCEoZ2ZwX21hc2sgJmFtcDsgKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpKSkgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiBmb3JjZToKLQkvKgotCSAqIElmIHRoZSBhbGxvY2F0aW9uIGhhcyB0byBiZSBlbmZvcmNlZCwgZG9uJiMzOTt0IGZvcmdldCB0byByYWlzZQotCSAqIGEgTUVNQ0dfTUFYIGV2ZW50LgotCSAqLwotCWlmICghcmFpc2VkX21heF9ldmVudCkKLQkJX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpOwotCiAJLyoKIAkgKiBUaGUgYWxsb2NhdGlvbiBlaXRoZXIgY2FuJiMzOTt0IGZhaWwgb3Igd2lsbCBsZWFkIHRvIG1vcmUgbWVtb3J5CiAJICogYmVpbmcgZnJlZWQgdmVyeSBzb29uLiAgQWxsb3cgbWVtb3J5IHVzYWdlIGdvIG92ZXIgdGhlIGxpbWl0CkBAIC0yNzg5LDcgJiM0MzsyNzg1LDE1IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLAogCWlmIChkb19tZW1zd19hY2NvdW50KCkpCiAJCXBhZ2VfY291bnRlcl9jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIG5yX3BhZ2VzKTsKIAotCXJldHVybiAwOwomIzQzO291dDoKJiM0MzsJLyoKJiM0MzsJICogRG9uJiMzOTt0IGZvcmdldCB0byByYWlzZSBhIE1FTUNHX01BWCBldmVudCBmb3IgZm9yY2VkIG9yIHJlamVjdGVkCiYjNDM7CSAqIHJlcXVlc3RzLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyYWlzZWRfbWF4X2V2ZW50KQomIzQzOwkJX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogCiBkb25lX3Jlc3RvY2s6CiAJaWYgKGJhdGNoICZndDsgbnJfcGFnZXMpCkBAIC0yODQ4LDcgJiM0MzsyODUyLDcgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssCiAJICAgICEoY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfTUVNQUxMT0MpICZhbXA7JmFtcDsKIAkgICAgZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKQogCQlfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7Ci0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzaywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTWVtb3J5IENvbnRyb2wgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBtb2RpZmllZCBmaWxlLCBgbW0vbWVtY29udHJvbC5jYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyB0b3VjaGluZyBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXMgYSBrZXkgaW5kaWNhdG9yIG9mIG1lbW9yeSByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBhY2NvdW50aW5nIGNoYW5nZXMuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBidWcgZml4ZXMgdG8gcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzLCBvciBldmVuIG5ldyBmZWF0dXJlcyByZWxhdGVkIHRvIG1lbWNnJiMzOTtzIGFiaWxpdHkgdG8gbGltaXQgYW5kIGNvbnRyb2wgbWVtb3J5IHVzYWdlLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI2NTYuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1tZWRpYXRlIGNvbnRleHQgb2YgdGhlIGNoYW5nZS4gVGltZSB0byBwdWxsIHVwIGBtbS9tZW1jb250cm9sLmNgIHVzaW5nIHRoZSBgcmVhZC1maWxlYCBjb21tYW5kIHNvIEkgY2FuIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoYXQgYXJlYS4gVGhpcyBzaG91bGQgY2xhcmlmeSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgaWYgYW55LCBhcmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igb2YgdGhpcyBwYXRjaC4gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkLCBhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIG92ZXJhbGwgcHVycG9zZSB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2NTA6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1fb3Zlcl9saW1pdDtcbjI2NTE6XHRcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7XG4yNjUyOlx0XHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcbjI2NTM6XHRcdGJvb2wgcGFzc2VkX29vbSA9IGZhbHNlO1xuMjY1NDpcdFx0dW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucztcbjI2NTU6XHRcdGJvb2wgZHJhaW5lZCA9IGZhbHNlO1xuMjY1NjpcdFx0Ym9vbCByYWlzZWRfbWF4X2V2ZW50ID0gZmFsc2U7XG4yNjU3Olx0XHR1bnNpZ25lZCBsb25nIHBmbGFncztcbjI2NTg6XHRcdGJvb2wgYWxsb3dfc3Bpbm5pbmcgPSBnZnBmbGFnc19hbGxvd19zcGlubmluZyhnZnBfbWFzayk7XG4yNjU5Olx0XHRpbnQgcmV0ID0gMDtcbjI2NjA6XHRcbjI2NjE6XHRyZXRyeTpcbjI2NjI6XHRcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4yNjYzOlx0XHRcdHJldHVybiByZXQ7XG4yNjY0Olx0XG4yNjY1Olx0XHRpZiAoIWFsbG93X3NwaW5uaW5nKVxuMjY2NjpcdFx0XHQvKiBBdm9pZCB0aGUgcmVmaWxsIGFuZCBmbHVzaCBvZiB0aGUgb2xkZXIgc3RvY2sgKi9cbjI2Njc6XHRcdFx0YmF0Y2ggPSBucl9wYWdlcztcbjI2Njg6XHRcbjI2Njk6XHRcdHJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XG4yNjcwOlx0XHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSB8fFxuMjY3MTpcdFx0ICAgIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBiYXRjaCwgXHUwMDI2Y291bnRlcikpIHtcbjI2NzI6XHRcdFx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKVxuMjY3MzpcdFx0XHRcdGdvdG8gZG9uZV9yZXN0b2NrO1xuMjY3NDpcdFx0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuMjY3NTpcdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gpO1xuMjY3NjpcdFx0XHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbW9yeSk7XG4yNjc3Olx0XHR9IGVsc2Uge1xuMjY3ODpcdFx0XHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbXN3KTtcbjI2Nzk6XHRcdFx0cmVjbGFpbV9vcHRpb25zIFx1MDAyNj0gfk1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XG4yNjgwOlx0XHR9XG4yNjgxOlx0XG4yNjgyOlx0XHRpZiAoYmF0Y2ggXHUwMDNlIG5yX3BhZ2VzKSB7XG4yNjgzOlx0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4yNjg0Olx0XHRcdGdvdG8gcmV0cnk7XG4yNjg1Olx0XHR9XG4yNjg2Olx0XG4yNjg3Olx0XHQvKlxuMjY4ODpcdFx0ICogUHJldmVudCB1bmJvdW5kZWQgcmVjdXJzaW9uIHdoZW4gcmVjbGFpbSBvcGVyYXRpb25zIG5lZWQgdG9cbjI2ODk6XHRcdCAqIGFsbG9jYXRlIG1lbW9yeS4gVGhpcyBtaWdodCBleGNlZWQgdGhlIGxpbWl0cyB0ZW1wb3JhcmlseSxcbjI2OTA6XHRcdCAqIGJ1dCB3ZSBwcmVmZXIgZmFjaWxpdGF0aW5nIG1lbW9yeSByZWNsYWltIGFuZCBnZXR0aW5nIGJhY2tcbjI2OTE6XHRcdCAqIHVuZGVyIHRoZSBsaW1pdCBvdmVyIHRyaWdnZXJpbmcgT09NIGtpbGxzIGluIHRoZXNlIGNhc2VzLlxuMjY5MjpcdFx0ICovXG4yNjkzOlx0XHRpZiAodW5saWtlbHkoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpKVxuMjY5NDpcdFx0XHRnb3RvIGZvcmNlO1xuMjY5NTpcdFxuMjY5NjpcdFx0aWYgKHVubGlrZWx5KHRhc2tfaW5fbWVtY2dfb29tKGN1cnJlbnQpKSlcbjI2OTc6XHRcdFx0Z290byBub21lbTtcbjI2OTg6XHRcbjI2OTk6XHRcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxuMjcwMDpcdFx0XHRnb3RvIG5vbWVtO1xuMjcwMTpcdFxuMjcwMjpcdFx0LypcbjI3MDM6XHRcdCAqIE9PTSB2aWN0aW0gc3RpbGwgbmVlZHMgdG8gY2hhcmdlIG1lbW9yeSB0byBleGl0LiBPT00gcmVhcGVyIHNob3VsZFxuMjcwNDpcdFx0ICogaGVscCBidXQgaXQgbWlnaHQgZmFpbCBvbiBtbWFwX2xvY2sgY29udGVudGlvbi4gSWYgdGhlIHZpY3RpbSBpcyBhXG4yNzA1Olx0XHQgKiBsYXJnZSB0aHJlYWQgZ3JvdXAgdGhlbiBhbGwgZXhpdGluZyB0aHJlYWRzIG1pZ2h0IGNvbXBldGUgb24gb29tX2xvY2tcbjI3MDY6XHRcdCAqIGp1c3QgdG8gbGVhcm4gdGhhdCB0aGVyZSBpcyBub3RoaW5nIHJlYWxseSBraWxsYWJsZSBhbnltb3JlLiBCYWlsXG4yNzA3Olx0XHQgKiBvdXQgZWFybHkgYW5kIGZhaWwgdGhlIGNoYXJnZSB0byBleHBlZGl0ZSB0aGVpciBleGl0LiBUaGV5IGFyZVxuMjcwODpcdFx0ICogY29uc2lkZXJlZCBmdWxseSByZWNsYWltZWQgYnkgdGhlIG9vbSByZWFwZXIgYW5kIHRoZXkgc2hvdWxkbiYjMzk7dFxuMjcwOTpcdFx0ICogY29udHJpYnV0ZSBmdXJ0aGVyIGNoYXJnZXMuXG4yNzEwOlx0XHQgKi9cbjI3MTE6XHRcdGlmICh0c2tfaXNfb29tX3ZpY3RpbShjdXJyZW50KSBcdTAwMjZcdTAwMjZcbjI3MTI6XHRcdCAgICBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlb29tX21tKSlcbjI3MTM6XHRcdFx0Z290byBub21lbTtcbjI3MTQ6XHRcbjI3MTU6XHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbjI3MTY6XHRcdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xuMjcxNzpcdFxuMjcxODpcdFx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG4yNzE5Olx0XHRucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcyxcbjI3MjA6XHRcdFx0XHRcdFx0XHQgICAgZ2ZwX21hc2ssIHJlY2xhaW1fb3B0aW9ucywgTlVMTCk7XG4yNzIxOlx0XHRwc2lfbWVtc3RhbGxfbGVhdmUoXHUwMDI2cGZsYWdzKTtcbjI3MjI6XHRcbjI3MjM6XHRcdGlmIChtZW1fY2dyb3VwX21hcmdpbihtZW1fb3Zlcl9saW1pdCkgXHUwMDNlPSBucl9wYWdlcylcbjI3MjQ6XHRcdFx0Z290byByZXRyeTtcbjI3MjU6XHRcbjI3MjY6XHRcdGlmICghZHJhaW5lZCkge1xuMjcyNzpcdFx0XHRkcmFpbl9hbGxfc3RvY2sobWVtX292ZXJfbGltaXQpO1xuMjcyODpcdFx0XHRkcmFpbmVkID0gdHJ1ZTtcbjI3Mjk6XHRcdFx0Z290byByZXRyeTtcbjI3MzA6XHRcdH1cbjI3MzE6XHRcbjI3MzI6XHRcdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfTk9SRVRSWSlcbjI3MzM6XHRcdFx0Z290byBub21lbTtcbjI3MzQ6XHRcdC8qXG4yNzM1Olx0XHQgKiBFdmVuIHRob3VnaCB0aGUgbGltaXQgaXMgZXhjZWVkZWQgYXQgdGhpcyBwb2ludCwgcmVjbGFpbVxuMjczNjpcdFx0ICogbWF5IGhhdmUgYmVlbiBhYmxlIHRvIGZyZWUgc29tZSBwYWdlcy4gIFJldHJ5IHRoZSBjaGFyZ2VcbjI3Mzc6XHRcdCAqIGJlZm9yZSBraWxsaW5nIHRoZSB0YXNrLlxuMjczODpcdFx0ICpcbjI3Mzk6XHRcdCAqIE9ubHkgZm9yIHJlZ3VsYXIgcGFnZXMsIHRob3VnaDogaHVnZSBwYWdlcyBhcmUgcmF0aGVyXG4yNzQwOlx0XHQgKiB1bmxpa2VseSB0byBzdWNjZWVkIHNvIGNsb3NlIHRvIHRoZSBsaW1pdCwgYW5kIHdlIGZhbGwgYmFja1xuMjc0MTpcdFx0ICogdG8gcmVndWxhciBwYWdlcyBhbnl3YXkgaW4gY2FzZSBvZiBmYWlsdXJlLlxuMjc0MjpcdFx0ICovXG4yNzQzOlx0XHRpZiAobnJfcmVjbGFpbWVkIFx1MDAyNlx1MDAyNiBucl9wYWdlcyBcdTAwM2M9ICgxIFx1MDAzY1x1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikpXG4yNzQ0Olx0XHRcdGdvdG8gcmV0cnk7XG4yNzQ1Olx0XG4yNzQ2Olx0XHRpZiAobnJfcmV0cmllcy0tKVxuMjc0NzpcdFx0XHRnb3RvIHJldHJ5O1xuMjc0ODpcdFxuMjc0OTpcdFx0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9SRVRSWV9NQVlGQUlMKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBiYXNlZCBvbiB5b3VyIGluc3RydWN0aW9uczoKCioqRGl2aW5nIGludG8gbW0vbWVtY29udHJvbC5jKioKCk9rYXksIGxldCYjMzk7cyB6b29tIGluIG9uIG1tL21lbWNvbnRyb2wuYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAyNzUwIHRvIDI4NjAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBzZWN0aW9uIGhhbmRsZXMuLi4gbGlrZWx5IHNvbWUgY3JpdGljYWwgYXNwZWN0IG9mIG1lbW9yeSBjb250cm9sIG9yIGFjY291bnRpbmcuIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgbWlnaHQgaW52b2x2ZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBjZ3JvdXAgbWVtb3J5IGxpbWl0cyBhbmQgcG90ZW50aWFsbHkgdGhlIHBhZ2UgcmVjbGFpbSBwcm9jZXNzLCBvciBwZXJoYXBzIGhvdyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgcmVhY3RzIHRvIGhpZ2gtbWVtb3J5IHByZXNzdXJlIHdpdGhpbiBhIHNwZWNpZmljIGNncm91cC4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBsaWtlbHkgZnVuY3Rpb24gY2FsbHMgYW5kIGRhdGEgc3RydWN0dXJlcyBJJiMzOTtsbCBlbmNvdW50ZXI6IGBtZW1fY2dyb3VwX2AsIGBwYWdlX2NvdW50ZXJfYCwgdGhlIHVzdWFsIHN1c3BlY3RzLiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmUgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2sgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiBhIHNwZWNpZmljIHNjZW5hcmlvIEkmIzM5O20gdHJvdWJsZXNob290aW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb2YgcmFjZSBjb25kaXRpb25zLCBzdWJ0bGUgb3ZlcmZsb3cgaXNzdWVzLCBvciBwZXJoYXBzIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbnMgY291bGQgYmUgYXBwbGllZC4gVGhpcyBzZWN0aW9uIGlzIHByb2JhYmx5IGludm9sdmVkIHdpdGggYWxsb2NhdGluZyBtZW1vcnksIGNoZWNraW5nIGxpbWl0cywgcmVsZWFzaW5nIG1lbW9yeSwgd2hpY2ggYXJlIHByZXR0eSBjcml0aWNhbCBwaWVjZXMgb2YgY29kZSBmb3IgYW55IG1lbW9yeSBjb250cm9sbGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3NTA6XHRcdFx0Z290byBub21lbTtcbjI3NTE6XHRcbjI3NTI6XHRcdC8qIEF2b2lkIGVuZGxlc3MgbG9vcCBmb3IgdGFza3MgYnlwYXNzZWQgYnkgdGhlIG9vbSBraWxsZXIgKi9cbjI3NTM6XHRcdGlmIChwYXNzZWRfb29tIFx1MDAyNlx1MDAyNiB0YXNrX2lzX2R5aW5nKCkpXG4yNzU0Olx0XHRcdGdvdG8gbm9tZW07XG4yNzU1Olx0XG4yNzU2Olx0XHQvKlxuMjc1NzpcdFx0ICoga2VlcCByZXRyeWluZyBhcyBsb25nIGFzIHRoZSBtZW1jZyBvb20ga2lsbGVyIGlzIGFibGUgdG8gbWFrZVxuMjc1ODpcdFx0ICogYSBmb3J3YXJkIHByb2dyZXNzIG9yIGJ5cGFzcyB0aGUgY2hhcmdlIGlmIHRoZSBvb20ga2lsbGVyXG4yNzU5Olx0XHQgKiBjb3VsZG4mIzM5O3QgbWFrZSBhbnkgcHJvZ3Jlc3MuXG4yNzYwOlx0XHQgKi9cbjI3NjE6XHRcdGlmIChtZW1fY2dyb3VwX29vbShtZW1fb3Zlcl9saW1pdCwgZ2ZwX21hc2ssXG4yNzYyOlx0XHRcdFx0ICAgZ2V0X29yZGVyKG5yX3BhZ2VzICogUEFHRV9TSVpFKSkpIHtcbjI3NjM6XHRcdFx0cGFzc2VkX29vbSA9IHRydWU7XG4yNzY0Olx0XHRcdG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuMjc2NTpcdFx0XHRnb3RvIHJldHJ5O1xuMjc2NjpcdFx0fVxuMjc2NzpcdG5vbWVtOlxuMjc2ODpcdFx0LypcbjI3Njk6XHRcdCAqIE1lbWNnIGRvZXNuJiMzOTt0IGhhdmUgYSBkZWRpY2F0ZWQgcmVzZXJ2ZSBmb3IgYXRvbWljXG4yNzcwOlx0XHQgKiBhbGxvY2F0aW9ucy4gQnV0IGxpa2UgdGhlIGdsb2JhbCBhdG9taWMgcG9vbCwgd2UgbmVlZCB0b1xuMjc3MTpcdFx0ICogcHV0IHRoZSBidXJkZW4gb2YgcmVjbGFpbSBvbiByZWd1bGFyIGFsbG9jYXRpb24gcmVxdWVzdHNcbjI3NzI6XHRcdCAqIGFuZCBsZXQgdGhlc2UgZ28gdGhyb3VnaCBhcyBwcml2aWxlZ2VkIGFsbG9jYXRpb25zLlxuMjc3MzpcdFx0ICovXG4yNzc0Olx0XHRpZiAoIShnZnBfbWFzayBcdTAwMjYgKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpKSkge1xuMjc3NTpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMjc3NjpcdFx0XHRnb3RvIG91dDtcbjI3Nzc6XHRcdH1cbjI3Nzg6XHRmb3JjZTpcbjI3Nzk6XHRcdC8qXG4yNzgwOlx0XHQgKiBUaGUgYWxsb2NhdGlvbiBlaXRoZXIgY2FuJiMzOTt0IGZhaWwgb3Igd2lsbCBsZWFkIHRvIG1vcmUgbWVtb3J5XG4yNzgxOlx0XHQgKiBiZWluZyBmcmVlZCB2ZXJ5IHNvb24uICBBbGxvdyBtZW1vcnkgdXNhZ2UgZ28gb3ZlciB0aGUgbGltaXRcbjI3ODI6XHRcdCAqIHRlbXBvcmFyaWx5IGJ5IGZvcmNlIGNoYXJnaW5nIGl0LlxuMjc4MzpcdFx0ICovXG4yNzg0Olx0XHRwYWdlX2NvdW50ZXJfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgbnJfcGFnZXMpO1xuMjc4NTpcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbjI3ODY6XHRcdFx0cGFnZV9jb3VudGVyX2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgbnJfcGFnZXMpO1xuMjc4NzpcdFxuMjc4ODpcdG91dDpcbjI3ODk6XHRcdC8qXG4yNzkwOlx0XHQgKiBEb24mIzM5O3QgZm9yZ2V0IHRvIHJhaXNlIGEgTUVNQ0dfTUFYIGV2ZW50IGZvciBmb3JjZWQgb3IgcmVqZWN0ZWRcbjI3OTE6XHRcdCAqIHJlcXVlc3RzLlxuMjc5MjpcdFx0ICovXG4yNzkzOlx0XHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXG4yNzk0Olx0XHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbjI3OTU6XHRcbjI3OTY6XHRcdHJldHVybiByZXQ7XG4yNzk3Olx0XG4yNzk4Olx0ZG9uZV9yZXN0b2NrOlxuMjc5OTpcdFx0aWYgKGJhdGNoIFx1MDAzZSBucl9wYWdlcylcbjI4MDA6XHRcdFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBiYXRjaCAtIG5yX3BhZ2VzKTtcbjI4MDE6XHRcbjI4MDI6XHRcdC8qXG4yODAzOlx0XHQgKiBJZiB0aGUgaGllcmFyY2h5IGlzIGFib3ZlIHRoZSBub3JtYWwgY29uc3VtcHRpb24gcmFuZ2UsIHNjaGVkdWxlXG4yODA0Olx0XHQgKiByZWNsYWltIG9uIHJldHVybmluZyB0byB1c2VybGFuZC4gIFdlIGNhbiBwZXJmb3JtIHJlY2xhaW0gaGVyZVxuMjgwNTpcdFx0ICogaWYgX19HRlBfUkVDTEFJTSBidXQgbGV0JiMzOTtzIGFsd2F5cyBwdW50IGZvciBzaW1wbGljaXR5IGFuZCBzbyB0aGF0XG4yODA2Olx0XHQgKiBHRlBfS0VSTkVMIGNhbiBjb25zaXN0ZW50bHkgYmUgdXNlZCBkdXJpbmcgcmVjbGFpbS4gIEBtZW1jZyBpc1xuMjgwNzpcdFx0ICogbm90IHJlY29yZGVkIGFzIGl0IG1vc3QgbGlrZWx5IG1hdGNoZXMgY3VycmVudCYjMzk7cyBhbmQgd29uJiMzOTt0XG4yODA4Olx0XHQgKiBjaGFuZ2UgaW4gdGhlIG1lYW50aW1lLiAgQXMgaGlnaCBsaW1pdCBpcyBjaGVja2VkIGFnYWluIGJlZm9yZVxuMjgwOTpcdFx0ICogcmVjbGFpbSwgdGhlIGNvc3Qgb2YgbWlzbWF0Y2ggaXMgbmVnbGlnaWJsZS5cbjI4MTA6XHRcdCAqL1xuMjgxMTpcdFx0ZG8ge1xuMjgxMjpcdFx0XHRib29sIG1lbV9oaWdoLCBzd2FwX2hpZ2g7XG4yODEzOlx0XG4yODE0Olx0XHRcdG1lbV9oaWdoID0gcGFnZV9jb3VudGVyX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5KSBcdTAwM2VcbjI4MTU6XHRcdFx0XHRSRUFEX09OQ0UobWVtY2ctXHUwMDNlbWVtb3J5LmhpZ2gpO1xuMjgxNjpcdFx0XHRzd2FwX2hpZ2ggPSBwYWdlX2NvdW50ZXJfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKSBcdTAwM2VcbjI4MTc6XHRcdFx0XHRSRUFEX09OQ0UobWVtY2ctXHUwMDNlc3dhcC5oaWdoKTtcbjI4MTg6XHRcbjI4MTk6XHRcdFx0LyogRG9uJiMzOTt0IGJvdGhlciBhIHJhbmRvbSBpbnRlcnJ1cHRlZCB0YXNrICovXG4yODIwOlx0XHRcdGlmICghaW5fdGFzaygpKSB7XG4yODIxOlx0XHRcdFx0aWYgKG1lbV9oaWdoKSB7XG4yODIyOlx0XHRcdFx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNm1lbWNnLVx1MDAzZWhpZ2hfd29yayk7XG4yODIzOlx0XHRcdFx0XHRicmVhaztcbjI4MjQ6XHRcdFx0XHR9XG4yODI1Olx0XHRcdFx0Y29udGludWU7XG4yODI2Olx0XHRcdH1cbjI4Mjc6XHRcbjI4Mjg6XHRcdFx0aWYgKG1lbV9oaWdoIHx8IHN3YXBfaGlnaCkge1xuMjgyOTpcdFx0XHRcdC8qXG4yODMwOlx0XHRcdFx0ICogVGhlIGFsbG9jYXRpbmcgdGFza3MgaW4gdGhpcyBjZ3JvdXAgd2lsbCBuZWVkIHRvIGRvXG4yODMxOlx0XHRcdFx0ICogcmVjbGFpbSBvciBiZSB0aHJvdHRsZWQgdG8gcHJldmVudCBmdXJ0aGVyIGdyb3d0aFxuMjgzMjpcdFx0XHRcdCAqIG9mIHRoZSBtZW1vcnkgb3Igc3dhcCBmb290cHJpbnRzLlxuMjgzMzpcdFx0XHRcdCAqXG4yODM0Olx0XHRcdFx0ICogVGFyZ2V0IHNvbWUgYmVzdC1lZmZvcnQgZmFpcm5lc3MgYmV0d2VlbiB0aGUgdGFza3MsXG4yODM1Olx0XHRcdFx0ICogYW5kIGRpc3RyaWJ1dGUgcmVjbGFpbSB3b3JrIGFuZCBkZWxheSBwZW5hbHRpZXNcbjI4MzY6XHRcdFx0XHQgKiBiYXNlZCBvbiBob3cgbXVjaCBlYWNoIHRhc2sgaXMgYWN0dWFsbHkgYWxsb2NhdGluZy5cbjI4Mzc6XHRcdFx0XHQgKi9cbjI4Mzg6XHRcdFx0XHRjdXJyZW50LVx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaCAmIzQzOz0gYmF0Y2g7XG4yODM5Olx0XHRcdFx0c2V0X25vdGlmeV9yZXN1bWUoY3VycmVudCk7XG4yODQwOlx0XHRcdFx0YnJlYWs7XG4yODQxOlx0XHRcdH1cbjI4NDI6XHRcdH0gd2hpbGUgKChtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSkpO1xuMjg0MzpcdFxuMjg0NDpcdFx0LypcbjI4NDU6XHRcdCAqIFJlY2xhaW0gaXMgc2V0IHVwIGFib3ZlIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSB1c2VybGFuZFxuMjg0NjpcdFx0ICogcmV0dXJuIHBhdGguIEJ1dCBhbHNvIGF0dGVtcHQgc3luY2hyb25vdXMgcmVjbGFpbSB0byBhdm9pZFxuMjg0NzpcdFx0ICogZXhjZXNzaXZlIG92ZXJydW4gd2hpbGUgdGhlIHRhc2sgaXMgc3RpbGwgaW5zaWRlIHRoZVxuMjg0ODpcdFx0ICoga2VybmVsLiBJZiB0aGlzIGlzIHN1Y2Nlc3NmdWwsIHRoZSByZXR1cm4gcGF0aCB3aWxsIHNlZSBpdFxuMjg0OTpcdFx0ICogd2hlbiBpdCByZWNoZWNrcyB0aGUgb3ZlcmFnZSBhbmQgc2ltcGx5IGJhaWwgb3V0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA5NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCYjMzk7cyBmdXp6LXdvcnRoeS4gSXQmIzM5O3MgYSBjaGFuZ2UgaW4gdGhlIGB0cnlfY2hhcmdlX21lbWNnYCBmdW5jdGlvbi4gQmVmb3JlLCBpZiBhbiBhbGxvY2F0aW9uIGZhaWxlZCAocmV0dXJuZWQgLUVOT01FTSkgKmFuZCogYCFyYWlzZWRfbWF4X2V2ZW50YCAod2hpY2ggd291bGQgaGF2ZSBwcmV2ZW50ZWQgdGhlIE1FTUNHX01BWCBldmVudCBmcm9tIGJlaW5nIHJhaXNlZCksIHRoZSBmdW5jdGlvbiB3b3VsZCByZXR1cm4gLUVOT01FTSBkaXJlY3RseSB3aXRob3V0IHJhaXNpbmcgdGhlIGBNRU1DR19NQVhgIGV2ZW50LiBOb3csIGl0IHNlZW1zIHRoYXQgZXZlbiBvbiBhIC1FTk9NRU0gcmV0dXJuLCBpdCAqYWx3YXlzKiBqdW1wcyB0byBhbiBgb3V0OmAgbGFiZWwsIGFuZCB0aGVuIGNvbmRpdGlvbmFsbHkgcmFpc2VzIHRoYXQgZXZlbnQuCgpUaGUgY3JpdGljYWwgY2hhbmdlIGlzIHRoYXQgbm93IHdlIGFyZSByYWlzaW5nIHRoZSBgTUVNQ0dfTUFYYCBldmVudCBldmVuIHdoZW4gYSByZWd1bGFyIGFsbG9jYXRpb24gZmFpbHMgKHdoZW4gYCFnZnBfbWFzayAmYW1wOyAoX19HRlBfTk9GQUlMIHwgX19HRlBfSElHSClgKSwgd2hlcmVhcyBiZWZvcmUgaXQgd291bGQgb25seSBiZSByYWlzZWQgZm9yIGZvcmNlZCBhbGxvY2F0aW9ucy4gIFRoaXMgY291bGQgaGF2ZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMuIElzIHRoaXMgYSBjaGFuZ2UgdG8gZXJyb3IgaGFuZGxpbmc/IFRvIHVzZXItdmlzaWJsZSBub3RpZmljYXRpb25zPwoKR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHF1aWNrbHkgY29uc2lkZXIgdGhlIGNyaXRlcmlhIGZvciAmIzM0O1dvcnRoRnV6emluZy4mIzM0OyBUaGlzIHBhdGNoIGNsZWFybHkgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyBhIGNyaXRpY2FsIGNvZGUgcGF0aCwgc28gSSBjYW4gYWxyZWFkeSBydWxlIG91dCB0aGUgY3JpdGVyaWEgdGhhdCB3b3VsZCBwcmV2ZW50IGZ1enppbmcsIGxpa2UgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIHVucmVhY2hhYmxlIGNvZGUsIGV0Yy4KCk5vdywgYSBrZXkgcXVlc3Rpb24gYXJpc2VzOiB3aGF0JiMzOTtzIHRoZSBiZWhhdmlvciBvZiBgX19tZW1jZ19tZW1vcnlfZXZlbnRgPyBEb2VzIGBtZW1fb3Zlcl9saW1pdGAgaGF2ZSBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHN0YXRlLCBhbmQgaXMgdGhpcyBuZXcgcGF0aCBhIHZ1bG5lcmFiaWxpdHk/IE15IHNlYXJjaCBpbW1lZGlhdGVseSBmb2N1c2VzIG9uIGBfX21lbWNnX21lbW9yeV9ldmVudGAgdG8gZ2V0IGEgcHJlY2lzZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGEgbW9kaWZpY2F0aW9uIHRvIG1lbW9yeSBldmVudCBjb3VudGVyIGJlaGF2aW9yLCBvciBpcyB0aGlzIGEgbmV3IG1lbW9yeSBldmVudCB0cmlnZ2VyZWQ/IFRoaXMgaW5mb3JtYXRpb24gd2lsbCBkZXRlcm1pbmUgdGhlIHJpc2sgYW5kIHRoZSBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1jZ19tZW1vcnlfZXZlbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9OTk3PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tZW1jZ19ldmVudF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMDAyLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTAwMzp2b2lkIF9fbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDQtXHRcdFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTAwNj1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMDA4LXtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEwMDk6XHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1jZywgZXZlbnQsIHRydWUpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTAxMC19XG4tLVxubW0vbWVtY29udHJvbC5jPTE4ODA9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xODk4LVxubW0vbWVtY29udHJvbC5jOjE4OTk6dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9tZW1jb250cm9sLmMtMTkwMC1cdFx0XHQgIGVudW0gbWVtY2dfbWVtb3J5X2V2ZW50IGV2ZW50LCBib29sIGFsbG93X3NwaW5uaW5nKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xOTI3LX1cbm1tL21lbWNvbnRyb2wuYzoxOTI4OkVYUE9SVF9TWU1CT0xfR1BMKF9fbWVtY2dfbWVtb3J5X2V2ZW50KTtcbm1tL21lbWNvbnRyb2wuYy0xOTI5LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNjQ1PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNzE0LVxubW0vbWVtY29udHJvbC5jOjI3MTU6XHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XG5tbS9tZW1jb250cm9sLmMtMjcxNi1cdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xuLS1cbm1tL21lbWNvbnRyb2wuYy0yNzkzLVx0aWYgKCFyYWlzZWRfbWF4X2V2ZW50KVxubW0vbWVtY29udHJvbC5jOjI3OTQ6XHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbm1tL21lbWNvbnRyb2wuYy0yNzk1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBNZW1vcnkgQ29udHJvbCBFdmVudHMqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGBfX21lbWNnX21lbW9yeV9ldmVudGAgZnVuY3Rpb24gd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBtZW1vcnkgY29udHJvbCBldmVudHMgYXJlIGhhbmRsZWQgYXQgdGhlIGxvd2VzdCBsZXZlbC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBvdmVyYWxsIHN5c3RlbSBtZW1vcnkgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IHdoZW4gaXQgY29tZXMgdG8gY2dyb3VwIG1lbW9yeSBsaW1pdHMgYW5kIGhvdyB0aGV5JiMzOTtyZSBlbmZvcmNlZC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgZXZlbnRzIHRyaWdnZXIgYW55IG5lY2Vzc2FyeSBhY3Rpb25zIG9yIGFkanVzdG1lbnRzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHJlc291cmNlIGxpbWl0cyBhcmUgY29ycmVjdGx5IGFwcGxpZWQsIGFuZCBpZiBhbnkgb3B0aW1pc2F0aW9uIGNhbiBiZSBtYWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg5NTpcdFx0fVxuMTg5NjpcdFx0cmV0dXJuIG1heDtcbjE4OTc6XHR9XG4xODk4Olx0XG4xODk5Olx0dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4xOTAwOlx0XHRcdFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZylcbjE5MDE6XHR7XG4xOTAyOlx0XHRib29sIHN3YXBfZXZlbnQgPSBldmVudCA9PSBNRU1DR19TV0FQX0hJR0ggfHwgZXZlbnQgPT0gTUVNQ0dfU1dBUF9NQVggfHxcbjE5MDM6XHRcdFx0XHQgIGV2ZW50ID09IE1FTUNHX1NXQVBfRkFJTDtcbjE5MDQ6XHRcbjE5MDU6XHRcdC8qIEZvciBub3cgb25seSBNRU1DR19NQVggY2FuIGhhcHBlbiB3aXRoICFhbGxvd19zcGlubmluZyBjb250ZXh0LiAqL1xuMTkwNjpcdFx0Vk1fV0FSTl9PTl9PTkNFKCFhbGxvd19zcGlubmluZyBcdTAwMjZcdTAwMjYgZXZlbnQgIT0gTUVNQ0dfTUFYKTtcbjE5MDc6XHRcbjE5MDg6XHRcdGF0b21pY19sb25nX2luYyhcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnlfZXZlbnRzX2xvY2FsW2V2ZW50XSk7XG4xOTA5Olx0XHRpZiAoIXN3YXBfZXZlbnQgXHUwMDI2XHUwMDI2IGFsbG93X3NwaW5uaW5nKVxuMTkxMDpcdFx0XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2bWVtY2ctXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xuMTkxMTpcdFxuMTkxMjpcdFx0ZG8ge1xuMTkxMzpcdFx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tldmVudF0pO1xuMTkxNDpcdFx0XHRpZiAoYWxsb3dfc3Bpbm5pbmcpIHtcbjE5MTU6XHRcdFx0XHRpZiAoc3dhcF9ldmVudClcbjE5MTY6XHRcdFx0XHRcdGNncm91cF9maWxlX25vdGlmeShcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwX2V2ZW50c19maWxlKTtcbjE5MTc6XHRcdFx0XHRlbHNlXG4xOTE4Olx0XHRcdFx0XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2bWVtY2ctXHUwMDNlZXZlbnRzX2ZpbGUpO1xuMTkxOTpcdFx0XHR9XG4xOTIwOlx0XG4xOTIxOlx0XHRcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbjE5MjI6XHRcdFx0XHRicmVhaztcbjE5MjM6XHRcdFx0aWYgKGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfTE9DQUxfRVZFTlRTKVxuMTkyNDpcdFx0XHRcdGJyZWFrO1xuMTkyNTpcdFx0fSB3aGlsZSAoKG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSBcdTAwMjZcdTAwMjZcbjE5MjY6XHRcdFx0ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKTtcbjE5Mjc6XHR9XG4xOTI4Olx0RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jZ19tZW1vcnlfZXZlbnQpO1xuMTkyOTpcdFxuMTkzMDpcdHN0YXRpYyBib29sIG1lbV9jZ3JvdXBfb3V0X29mX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuMTkzMTpcdFx0XHRcdFx0ICAgICBpbnQgb3JkZXIpXG4xOTMyOlx0e1xuMTkzMzpcdFx0c3RydWN0IG9vbV9jb250cm9sIG9jID0ge1xuMTkzNDpcdFx0XHQuem9uZWxpc3QgPSBOVUxMLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTg0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYHRyeV9jaGFyZ2VgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IHJlbGF0ZWQgdG8gYHRyeV9jaGFyZ2VgLiBGaXJzdCwgSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIGNhbGwgc2l0ZXMgYW5kIHdoaWNoIGVudHJ5IHBvaW50cyB0cmlnZ2VyIGl0LiBLbm93aW5nIHRoZSB1cHN0cmVhbSBjb250ZXh0IGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgb3B0aW1pemF0aW9uIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHRhcmdldGVkIHNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9uIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0IGZpbGUgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBwbGFjZSB0byBiZWdpbiwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY29udHJvbCBncm91cHMuIEhvcGVmdWxseSwgYSBncmVwIHdpbGwgZ2V0IG1lIHRoZSBpbmZvcm1hdGlvbiBJJiMzOTttIGxvb2tpbmcgZm9yIHF1aWNrbHkuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfY2dyb3VwLmM9MjU2PXN0YXRpYyBpbnQgX19odWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwKGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vaHVnZXRsYl9jZ3JvdXAuYy0yNzQtXG5tbS9odWdldGxiX2Nncm91cC5jOjI3NTpcdGlmICghcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXG5tbS9odWdldGxiX2Nncm91cC5jLTI3Ni1cdFx0ICAgIF9faHVnZXRsYl9jZ3JvdXBfY291bnRlcl9mcm9tX2Nncm91cChoX2NnLCBpZHgsIHJzdmQpLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yNTQxPWJvb2wgbWVtY2cxX2NoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjU0NS1cbm1tL21lbWNvbnRyb2wtdjEuYzoyNTQ2Olx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXRjcG1lbSwgbnJfcGFnZXMsIFx1MDAyNmZhaWwpKSB7XG5tbS9tZW1jb250cm9sLXYxLmMtMjU0Ny1cdFx0bWVtY2ctXHUwMDNldGNwbWVtX3ByZXNzdXJlID0gMDtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjUxOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfaGlnaF9kZWxheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTI1NTEtICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tXG5tbS9tZW1jb250cm9sLmM6MjU1MjogKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmRcbm1tL21lbWNvbnRyb2wuYy0yNTUzLSAqIHJldHVybiBwYXRoIHdoZXJlIHJlY2xhaW0gaXMgYWx3YXlzIGFibGUgdG8gYmxvY2suXG4tLVxubW0vbWVtY29udHJvbC5jPTI1NTU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjY0NC1cbm1tL21lbWNvbnRyb2wuYzoyNjQ1OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxubW0vbWVtY29udHJvbC5jLTI2NDYtXHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjY3MC1cdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XG5tbS9tZW1jb250cm9sLmM6MjY3MTpcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG5tbS9tZW1jb250cm9sLmM6MjY3MjpcdFx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKVxubW0vbWVtY29udHJvbC5jLTI2NzMtXHRcdFx0Z290byBkb25lX3Jlc3RvY2s7XG4tLVxubW0vbWVtY29udHJvbC5jLTI4NTctXG5tbS9tZW1jb250cm9sLmM6Mjg1ODpzdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9tZW1jb250cm9sLmMtMjg1OS1cdFx0XHQgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg2My1cbm1tL21lbWNvbnRyb2wuYzoyODY0Olx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMjg2NS19XG4tLVxubW0vbWVtY29udHJvbC5jPTMxNTc9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE2NC1cbm1tL21lbWNvbnRyb2wuYzozMTY1Olx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzE2Ni1cdGlmIChyZXQpXG4tLVxubW0vbWVtY29udHJvbC5jPTUyMDU9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjEzLVx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxubW0vbWVtY29udHJvbC5jOjUyMTQ6XHRcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01MjE1LVx0aWYgKHJldCkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NjI1PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU2MzItXG5tbS9tZW1jb250cm9sLmM6NTYzMzpcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcbm1tL21lbWNvbnRyb2wuYy01NjM0LVx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTY5MT1pbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzI4LS8qKlxubW0vbWVtY29udHJvbC5jOjU3Mjk6ICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTczMC0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcbi0tXG5tbS9tZW1jb250cm9sLmMtNTczNS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1NzM2OmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1jb250cm9sLmMtNTczNy17XG4tLVxubW0vbWVtY29udHJvbC5jLTU3NjQtXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgXHUwMDI2XHUwMDI2XG5tbS9tZW1jb250cm9sLmM6NTc2NTpcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFx1MDAyNmNvdW50ZXIpKSB7XG5tbS9tZW1jb250cm9sLmMtNTc2Ni1cdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7XG4tLVxubW0vcGFnZV9jb3VudGVyLmM9NzY9dm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtMTA5LS8qKlxubW0vcGFnZV9jb3VudGVyLmM6MTEwOiAqIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlIC0gdHJ5IHRvIGhpZXJhcmNoaWNhbGx5IGNoYXJnZSBwYWdlc1xubW0vcGFnZV9jb3VudGVyLmMtMTExLSAqIEBjb3VudGVyOiBjb3VudGVyXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtMTE3LSAqL1xubW0vcGFnZV9jb3VudGVyLmM6MTE4OmJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbm1tL3BhZ2VfY291bnRlci5jLTExOS1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vcGFnZV9jb3VudGVyLmM9MTk3PWludCBwYWdlX2NvdW50ZXJfc2V0X21heChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3BhZ2VfY291bnRlci5jLTIwOC1cdFx0ICogYW5kIGFmdGVyLCBzbyB0aGUgcmVhZC1zd2FwLXJlYWQgaXMgb3JkZXJlZCBhbmRcbm1tL3BhZ2VfY291bnRlci5jOjIwOTpcdFx0ICogZW5zdXJlcyBjb2hlcmVuY3kgd2l0aCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZSgpOlxubW0vcGFnZV9jb3VudGVyLmMtMjEwLVx0XHQgKiB0aGF0IGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBjb3VudCBiZWZvcmUgY2hlY2tpbmdcbi0tXG5tbS9zd2FwZmlsZS5jPTE3NDA9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwZmlsZS5jLTE3NzctXHQvKiBOZWVkIHRvIGNhbGwgdGhpcyBldmVuIGlmIGFsbG9jYXRpb24gZmFpbGVkLCBmb3IgTUVNQ0dfU1dBUF9GQUlMLiAqL1xubW0vc3dhcGZpbGUuYzoxNzc4Olx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpXG5tbS9zd2FwZmlsZS5jLTE3NzktXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBDaGFyZ2UgTWVjaGFuaXNtcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgbWVtb3J5IGFjY291bnRpbmcgYnVzaW5lc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjaGFyZ2UgZnVuY3Rpb25zIHdvcmsuIEZpcnN0LCBJJiMzOTtsbCB0cmFjZSB0aGUgY2FsbHMgdG8gYGNoYXJnZV9tZW1jZ2AsIGBtZW1fY2dyb3VwX2NoYXJnZWAsIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGhpZXJhcmNoeSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgZmxvdy4gQWZ0ZXIgdGhhdCBJJiMzOTtsbCBsb29rIGZvciBgbWVtX2Nncm91cF9jaGFyZ2VgIGFuZCBgdHJ5X2NoYXJnZWAgaW4gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCwgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBkZWZpbmVkIGFuZCB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgY2dyb3Vwcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNoYXJnaW5nIHByb2Nlc3MgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2NoYXJnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTYzMT1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NDAtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NDE6aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NDItXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NDMtLyoqXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NDQ6ICogbWVtX2Nncm91cF9jaGFyZ2UgLSBDaGFyZ2UgYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gdG8gYSBjZ3JvdXAuXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NDUtICogQGZvbGlvOiBGb2xpbyB0byBjaGFyZ2UuXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjU2LSAqL1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjU3OnN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjU4LVx0XHRcdFx0ICAgIGdmcF90IGdmcClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjEtXHRcdHJldHVybiAwO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjYyOlx0cmV0dXJuIF9fbWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIG1tLCBnZnApO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjYzLX1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2NC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2NTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY2LVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY3MD12b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NzUtICpcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY3NjogKiBVbmNoYXJnZSBhIGZvbGlvIHByZXZpb3VzbHkgY2hhcmdlZCB3aXRoIG1lbV9jZ3JvdXBfY2hhcmdlKCkuXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NzctICovXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTE0Nz1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTUyLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1MzpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1NC1cdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTU4LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1OTpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNjAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA3MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrOgoKKipJbnZlc3RpZ2F0aW5nIGBtbS9tZW1jb250cm9sLmNgIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gYG1tL21lbWNvbnRyb2wuY2AuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0IGZpbGUgaXMgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gSXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgdGhhdCBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlLCBhbmQgb2Z0ZW4sIGl0JiMzOTtsbCBpbmNsdWRlIGRlcGVuZGVuY2llcywgb3IgYXQgbGVhc3QgaGludHMgYWJvdXQgd2hpY2ggS2NvbmZpZyBvcHRpb25zIGdvdmVybiBpdHMgaW5jbHVzaW9uIG9yIGJlaGF2aW9yLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGluIHRoZSBgTWFrZWZpbGVgIGl0c2VsZiwgb3IgcGVyaGFwcyBzb21lIHJlZmVyZW5jZXMgdG8gb3RoZXIgS2NvbmZpZy1yZWxhdGVkIGZpbGVzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEZyb20gdGhlcmUsIEkgY2FuIGRyaWxsIGRvd24gZGVlcGVyIGFzIG5lZWRlZCwgYnV0IHRoZSBgTWFrZWZpbGVgIGlzIHVzdWFsbHkgdGhlIG1vc3QgZXhwZWRpZW50IHN0YXJ0aW5nIGxvY2F0aW9uLiBJJiMzOTttIGFudGljaXBhdGluZyBmaW5kaW5nIHNvbWUgYCNpZmRlZmAgYmxvY2tzIG9yIHNvbWV0aGluZyBzaW1pbGFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbm1tL01ha2VmaWxlLTMwLUtDT1ZfSU5TVFJVTUVOVF9tbXpvbmUubyA6PSBuXG4tLVxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTcxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkNoZWNraW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgQ29udHJvbCBHcm91cHMqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbG9va2luZyBpbiB0aGUgcmlnaHQgcGxhY2UgZm9yIHRoZSBtZW1vcnkgY2dyb3VwIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGluaXQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBkZWZpbml0aW9ucyBmb3IgYWxsIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYENPTkZJR19NRU1DR2AuIFRoaXMgc2hvdWxkIGJlIHRoZSBmbGFnIG9yIG9wdGlvbiB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIHdpdGhpbiB0aGlzIGJ1aWxkLiBNYWtlcyBzZW5zZSB0byBzdGFydCB0aGVyZSwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5ODQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IENHcm91cHMgTGFuZHNjYXBlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIE1FTUNHIChtZW1vcnkgY2dyb3VwKSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBleHBvc2VkLCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byBidWlsZCBhIGJldHRlciBtZW50YWwgbWFwIG9mIHRoZSBhdmFpbGFibGUgc3dpdGNoZXMsIGFuZCB3aGljaCBvbmVzIGhhdmUgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBnZXQgdGhlIGZ1bGwgZmVhdHVyZS1zZXQgZXhwb3NlZC4gSSYjMzk7bSBhbHNvIHJlYWxseSBob3BpbmcgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIG5ldyBvciBpbnRlcmVzdGluZyBpbiB0aGVyZSB0aGF0IEkgbWlzc2VkIGR1cmluZyBteSBsYXN0IHBhc3Mgb3ZlciB0aGlzIGFyZWEuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwODE6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwODI6XHRcbjEwODM6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA4NDpcdFxuMTA4NTpcdGNvbmZpZyBNRU1DR1xuMTA4NjpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4NzpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4ODpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODk6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwOTA6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA5MTpcdFx0aGVscFxuMTA5MjpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDkzOlx0XG4xMDk0Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTg6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDk5Olx0XHRkZWZhdWx0IHlcbjExMDA6XHRcbjExMDE6XHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbjExMDI6XHRcdGJvb2xcbjExMDM6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMDQ6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjExMDU6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjExMDY6XHRcdGRlZmF1bHQgeVxuMTEwNzpcdFxuMTEwODpcdGNvbmZpZyBNRU1DR19WMVxuMTEwOTpcdFx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMTEwOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTExOlx0XHRkZWZhdWx0IG5cbjExMTI6XHRcdGhlbHBcbjExMTM6XHRcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XG4xMTE0Olx0XHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjk1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgcGFyZW50IG1lbnUgZm9yIGBjb25maWcgTUVNQ0dgLiBUaGlzIG1lYW5zIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBsaXZlcyB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0gc3RydWN0dXJlLiBVbmRlcnN0YW5kaW5nIGl0cyBsb2NhdGlvbiBpcyBjcnVjaWFsOyBpdCBoZWxwcyBtZSBncmFzcCBpdHMgY29udGV4dCwgd2hhdCBvdGhlciBvcHRpb25zIGl0JiMzOTtzIHJlbGF0ZWQgdG8sIGFuZCBwb3RlbnRpYWxseSwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBvcmlnaW5zLCB0aGUgYnJhbmNoZXMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gdHJlZSB0aGF0IGxlYWQgdG8gaXQuIEl0JiMzOTtzIGxpa2UgbmF2aWdhdGluZyBhIGNvbXBsZXggZmlsZSBzeXN0ZW0gb3IgYSBkZWVwbHkgbmVzdGVkIGNvZGUgc3RydWN0dXJlIOKAkyB5b3UgY2FuJiMzOTt0IHVuZGVyc3RhbmQgYSBzaW5nbGUgZmlsZS9jb25maWd1cmF0aW9uIHZhbHVlIGluIGlzb2xhdGlvbjsgeW91IG5lZWQgdG8ga25vdyB3aGVyZSBpdCByZXNpZGVzIHdpdGhpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzZWUgaG93IEkgY2FuIGRpc2NvdmVyIHRoZSBwYXJlbnQgbWVudSBhbmQgd2hhdCBpbnNpZ2h0cyBpdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA0MDpcdFx0ICB0aGUgc2FtZSBwcm9jZXNzIG9udG8gYSBzaW5nbGUgTGFzdCBMZXZlbCBDYWNoZSAoTExDKSBkb21haW4gd2hlblxuMTA0MTpcdFx0ICBwb3NzaWJsZS4gVGhpcyBpbXByb3ZlcyBjYWNoZSBsb2NhbGl0eSBieSBrZWVwaW5nIHRhc2tzIHRoYXQgc2hhcmVcbjEwNDI6XHRcdCAgcmVzb3VyY2VzIHdpdGhpbiB0aGUgc2FtZSBjYWNoZSBkb21haW4sIHJlZHVjaW5nIGNhY2hlIG1pc3NlcyBhbmRcbjEwNDM6XHRcdCAgbG93ZXJpbmcgZGF0YSBhY2Nlc3MgbGF0ZW5jeS5cbjEwNDQ6XHRcbjEwNDU6XHRjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXG4xMDQ2Olx0XHRib29sIFwmIzM0O0F1dG9tYXRpY2FsbHkgZW5hYmxlIE5VTUEgYXdhcmUgbWVtb3J5L3Rhc2sgcGxhY2VtZW50XCYjMzQ7XG4xMDQ3Olx0XHRkZWZhdWx0IHlcbjEwNDg6XHRcdGRlcGVuZHMgb24gTlVNQV9CQUxBTkNJTkdcbjEwNDk6XHRcdGhlbHBcbjEwNTA6XHRcdCAgSWYgc2V0LCBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgd2lsbCBiZSBlbmFibGVkIGlmIHJ1bm5pbmcgb24gYSBOVU1BXG4xMDUxOlx0XHQgIG1hY2hpbmUuXG4xMDUyOlx0XG4xMDUzOlx0Y29uZmlnIFNMQUJfT0JKX0VYVFxuMTA1NDpcdFx0Ym9vbFxuMTA1NTpcdFxuMTA1NjpcdG1lbnVjb25maWcgQ0dST1VQU1xuMTA1NzpcdFx0Ym9vbCBcJiMzNDtDb250cm9sIEdyb3VwIHN1cHBvcnRcJiMzNDtcbjEwNTg6XHRcdHNlbGVjdCBLRVJORlNcbjEwNTk6XHRcdGhlbHBcbjEwNjA6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBncm91cGluZyBzZXRzIG9mIHByb2Nlc3NlcyB0b2dldGhlciwgZm9yXG4xMDYxOlx0XHQgIHVzZSB3aXRoIHByb2Nlc3MgY29udHJvbCBzdWJzeXN0ZW1zIHN1Y2ggYXMgQ3B1c2V0cywgQ0ZTLCBtZW1vcnlcbjEwNjI6XHRcdCAgY29udHJvbHMgb3IgZGV2aWNlIGlzb2xhdGlvbi5cbjEwNjM6XHRcdCAgU2VlXG4xMDY0Olx0XHRcdC0gRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZGVzaWduLUNGUy5yc3RcdChDRlMpXG4xMDY1Olx0XHRcdC0gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvIChmZWF0dXJlcyBmb3IgZ3JvdXBpbmcsIGlzb2xhdGlvblxuMTA2NjpcdFx0XHRcdFx0XHQgIGFuZCByZXNvdXJjZSBjb250cm9sKVxuMTA2NzpcdFxuMTA2ODpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDY5Olx0XG4xMDcwOlx0aWYgQ0dST1VQU1xuMTA3MTpcdFxuMTA3MjpcdGNvbmZpZyBQQUdFX0NPVU5URVJcbjEwNzM6XHRcdGJvb2xcbjEwNzQ6XHRcbjEwNzU6XHRjb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbjEwNzY6XHRcdGJvb2wgXCYjMzQ7RmF2b3IgZHluYW1pYyBtb2RpZmljYXRpb24gbGF0ZW5jeSByZWR1Y3Rpb24gYnkgZGVmYXVsdFwmIzM0O1xuMTA3NzpcdFx0aGVscFxuMTA3ODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBcJiMzNDtmYXZvcmR5bm1vZHNcJiMzNDsgbW91bnQgb3B0aW9uIGJ5IGRlZmF1bHRcbjEwNzk6XHRcdCAgd2hpY2ggcmVkdWNlcyB0aGUgbGF0ZW5jaWVzIG9mIGR5bmFtaWMgY2dyb3VwIG1vZGlmaWNhdGlvbnMgc3VjaFxuMTA4MDpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwODE6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwODI6XHRcbjEwODM6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA4NDpcdFxuMTA4NTpcdGNvbmZpZyBNRU1DR1xuMTA4NjpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4NzpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4ODpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODk6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MDcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IENHUk9VUCBDaGFyZ2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgTUVNQ0dgIGNvZGUsIHNwZWNpZmljYWxseSB1bmRlciB0aGUgYGlmIENHUk9VUFNgIGNvbmRpdGlvbmFsLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgY2hhcmdpbmcgbWVjaGFuaXNtcy4gSSYjMzk7bSBzdGFydGluZyBieSBsb29raW5nIGF0IGZvY3VzIHN5bWJvbHMgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSBjaGFuZ2VzIGFyZSBoYXBwZW5pbmcuIEkgY2FuIHNlZSB0aGUgZnVuY3Rpb24gZGlyZWN0bHkgbW9kaWZpZWQgaXMgdGhlIHN0YXRpYyBgdHJ5X2NoYXJnZV9tZW1jZ2AuCgpOb3csIGxldCYjMzk7cyBleHBsb3JlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBJdCBsb29rcyBsaWtlIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBjYWxsZWQgZnJvbSBhIGZldyBwbGFjZXMuIEkgY2FuIHNlZSB0aGF0IGBfX21lbV9jZ3JvdXBfY2hhcmdlYCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBhcmUgZGVmaW5pdGVseSBjYWxsaW5nIHRoaXMgZGlyZWN0bHkuIEkgYWxzbyBzZWUgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCB3aGljaCBkb2VzbiYjMzk7dCBkaXJlY3RseSBjYWxsIGl0IGJ1dCBpbnN0ZWFkIHVzZXMgYHBhZ2VfY291bnRlcl90cnlfY2hhcmdlYC4gQW5kIGl0IGFwcGVhcnMgdGhhdCBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGlzIGNhbGxlZCBieSBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXRzZWxmLiBJJiMzOTttIGFsc28gc2VlaW5nIGB0cnlfY2hhcmdlYCBpcyBkZWZpbmVkIGFzIHN0YXRpYyBpbmxpbmUsIHdoaWNoIGlzIHVzZWZ1bCB0byBub3RlLgoKTmV4dCwgSSBuZWVkIHRvIGJyb2FkZW4gbXkgc2NvcGUgYW5kIGxvb2sgYXQgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2AgcmVsYXRlZCB0byBtZW1vcnkgY2hhcmdpbmcgaW4gZ2VuZXJhbC4gSSYjMzk7dmUgYWxyZWFkeSBub3RlZCBgX19tZW1fY2dyb3VwX2NoYXJnZWAsIGFuZCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBidXQgYWxzbyBuZWVkIHRvIGNvbnNpZGVyICBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGFuZCBgX19tZW1jZ19tZW1vcnlfZXZlbnRgLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHJlc3Qgb2YgYG1tL21lbWNvbnRyb2wuY2AgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgb3IgZW50cnkgcG9pbnRzIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgdHJ5X2NoYXJnZV9tZW1jZ2AgQ2FsbHMqKgoKT2theSwgc28gSSB3YW50IHRvIGdldCBhIGhhbmRsZSBvbiBhbGwgdGhlIHBsYWNlcyBpbiBgbW0vbWVtY29udHJvbC5jYCB3aGVyZSBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXMgaW52b2tlZC4gVGhpcyBmdW5jdGlvbiBpcyBmdW5kYW1lbnRhbCB0byBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIGNvbnRyb2wuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHNpdGVzIHRvIGZ1bGx5IGdyYXNwIGhvdyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcmVjbGFpbSBhcmUgbWFuYWdlZCB3aXRoaW4gdGhlIGNncm91cCBoaWVyYXJjaHkuIEtub3dpbmcgdGhlIGNhbGwgbG9jYXRpb25zIHdpbGwgaGVscCBtZSBzZWUgdGhlIGZsb3cgb2YgYWxsb2NhdGlvbiByZXF1ZXN0cyB0aHJvdWdoIHRoZSBzeXN0ZW0gYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgYWNjb3VudGluZyBlcnJvcnMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBkaWZmZXJlbnQgbWVtb3J5IGFsbG9jYXRpb24gcGF0aHMsIGxpa2UgcGFnZSBmYXVsdHMsIHNsYWIgYWxsb2NhdGlvbnMsIGFuZCBkaXJlY3QgcmVjbGFpbSBhdHRlbXB0cy4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBhbnkgc3VidGxldGllcyByZWdhcmRpbmcgdGhlIGxvY2sgb3JkZXJpbmcgaW4gdGhvc2UgY2FsbCBzaXRlcywgdG9vLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGVhY2ggY2FsbCwgZXNwZWNpYWxseSB0aGUgY2FsbGVyJiMzOTtzIGFyZ3VtZW50cywgaXMgY3J1Y2lhbC4gVGhpcyB3aWxsIGhpZ2hsaWdodCB3aGVyZSBtZW1vcnkgYWNjb3VudGluZyBkZWNpc2lvbnMgYXJlIG1hZGUgYW5kIGhvdyB0aGUgc3lzdGVtIHJlYWN0cyB0byBtZW1vcnkgcHJlc3N1cmUgd2l0aGluIHRoZSBjZ3JvdXAgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfY2hhcmdlX21lbWNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0yNTU1PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTI2NDQtXG5tbS9tZW1jb250cm9sLmM6MjY0NTpzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbm1tL21lbWNvbnRyb2wuYy0yNjQ2LVx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jPTI4NTg9c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yODYzLVxubW0vbWVtY29udHJvbC5jOjI4NjQ6XHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0yODY1LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9MzE1Nz1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTY0LVxubW0vbWVtY29udHJvbC5jOjMxNjU6XHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0zMTY2LVx0aWYgKHJldClcbi0tXG5tbS9tZW1jb250cm9sLmM9NTIwNT1zdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMTMtXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXG5tbS9tZW1jb250cm9sLmM6NTIxNDpcdFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xubW0vbWVtY29udHJvbC5jLTUyMTUtXHRpZiAocmV0KSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTU2MjU9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTYzMi1cbm1tL21lbWNvbnRyb2wuYzo1NjMzOlx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xubW0vbWVtY29udHJvbC5jLTU2MzQtXHRcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEwOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IENoYXJnZSBNZWNoYW5pc21zKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IG1lbW9yeSBhY2NvdW50aW5nIGlzIGhhcHBlbmluZyBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBjZ3JvdXBzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRyYWNpbmcgdGhlIGNvZGUgcGF0aHMgaW52b2x2ZWQgaW4gbWVtb3J5IGNoYXJnaW5nIG9wZXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciB0aGlzLCB3aGljaCBhcmUgYGNoYXJnZV9tZW1jZ2AgYW5kIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIGNhbGxpbmcgY29udGV4dHMsIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlciwgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkmIzM5O3JlIG1hbmlwdWxhdGluZy4gVGhpcyB3aWxsIGhlbHAgbWUgZGVidWcgYSBtZW1vcnkgbGVhayBpc3N1ZS4gSSYjMzk7bSBzdXNwZWN0aW5nIGEgbWlzY2FsY3VsYXRpb24gb3IgYW4gdW5pbnRlbmRlZCBkb3VibGUtY2hhcmdlLiBUaGlzIGRldGFpbGVkIGV4YW1pbmF0aW9uIHdpbGwgaGVscCBtZSBmaW5kIHRoZSByb290IGNhdXNlLCBhbmQgZm9ybXVsYXRlIGEgdmlhYmxlIHBhdGNoIG9yIHdvcmthcm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoYXJnZV9tZW1jZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MjU1NT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjQ0LVxubW0vbWVtY29udHJvbC5jOjI2NDU6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9tZW1jb250cm9sLmMtMjY0Ni1cdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yODU4PXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg2My1cbm1tL21lbWNvbnRyb2wuYzoyODY0Olx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMjg2NS19XG4tLVxubW0vbWVtY29udHJvbC5jPTMxNTc9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE2NC1cbm1tL21lbWNvbnRyb2wuYzozMTY1Olx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzE2Ni1cdGlmIChyZXQpXG4tLVxubW0vbWVtY29udHJvbC5jPTUxOTA9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjA0LVxubW0vbWVtY29udHJvbC5jOjUyMDU6c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC5jLTUyMDYtXHRcdFx0Z2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjEzLVx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxubW0vbWVtY29udHJvbC5jOjUyMTQ6XHRcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01MjE1LVx0aWYgKHJldCkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MjI1PWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMzAtXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xubW0vbWVtY29udHJvbC5jOjUyMzE6XHRyZXQgPSBjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApO1xubW0vbWVtY29udHJvbC5jLTUyMzItXHRjc3NfcHV0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4tLVxubW0vbWVtY29udHJvbC5jPTUyNDk9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjYyLVxubW0vbWVtY29udHJvbC5jOjUyNjM6XHRpZiAoY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKSlcbm1tL21lbWNvbnRyb2wuYy01MjY0LVx0XHRyZXQgPSAtRU5PTUVNO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MjgzPWludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG4tLVxubW0vbWVtY29udHJvbC5jLTUyOTctXG5tbS9tZW1jb250cm9sLmM6NTI5ODpcdHJldCA9IGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCk7XG5tbS9tZW1jb250cm9sLmMtNTI5OS1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTYyNT1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01NjMyLVxubW0vbWVtY29udHJvbC5jOjU2MzM6XHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XG5tbS9tZW1jb250cm9sLmMtNTYzNC1cdFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzAwCgkJCQkJCQlvdXRwdXQ6IDE1NgoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IENncm91cCBBY2NvdW50aW5nIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG1lbW9yeSBjZ3JvdXAgbG9naWMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdpdGggaG93IGFsbG9jYXRpb24gZmFpbHVyZXMgYXJlIGhhbmRsZWQgYWZ0ZXIgdGhpcyBwYXRjaC4gSSYjMzk7bSBub3RpbmcgdGhlIGtleSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIGFyZWE6IGBfX21lbV9jZ3JvdXBfY2hhcmdlYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCwgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCwgYW5kIGBfX21lbWNnX21lbW9yeV9ldmVudGAuIEkgbmVlZCB0byBlbnN1cmUgSSBoYXZlIGFsbCBteSBiYXNlcyBjb3ZlcmVkLgoKRmlyc3QsIEkmIzM5O20gdmVyaWZ5aW5nIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zOiBgQ0dST1VQU2AgYW5kIGBNRU1DR2AuIFRoZXkmIzM5O3JlIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMsIGFuZCBJJiMzOTtsbCBjb25maXJtIHRoZWlyIHByZXNlbmNlIHRvIGVuc3VyZSB0aGUgY29yZSBtZW1jb250cm9sIGNvZGUgaXMgZW5hYmxlZC4gSSYjMzk7bGwgYWxzbyBkb3VibGUtY2hlY2sgYG1tL21lbWNvbnRyb2wuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IElzIHRoaXMgcGF0Y2ggZnV6ei13b3J0aHk/IEdpdmVuIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXR1cm4gcGF0aCBvZiBgdHJ5X2NoYXJnZV9tZW1jZ2AgdG8gdHJpZ2dlciBhIGBNRU1DR19NQVhgIGV2ZW50IG9uIGFsbG9jYXRpb24gZmFpbHVyZXMsIGl0JiMzOTtzIHByZXR0eSBjbGVhciBpdCBhbHRlcnMgY29yZSBtZW1jZyBhY2NvdW50aW5nIGFuZCBldmVudCBub3RpZmljYXRpb25zLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgYm90aCB1c2Vyc3BhY2UgbWVtb3J5IGNncm91cCBsb2dpYyBhbmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsICpXb3J0aEZ1enppbmcqIGhhcyB0byBiZSBgdHJ1ZWAuIEl0JiMzOTtzIGEgY2xlYXIgY2hhbmdlIGluIGhvdyBtZW1vcnkgcHJlc3N1cmUgaXMgc2lnbmFsZWQuCgpGaW5hbGx5LCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBzZXQtcmVzdWx0cyBwYXJhbWV0ZXJzLiBJ4oCZdmUgY29uZmlybWVkIGBXb3J0aEZ1enppbmdgIGFzIGB0cnVlYC4gSSBuZWVkIHRvIGNvbmNpc2VseSBleHBsYWluIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBjaGFuZ2UsIHdoaWNoIEkmIzM5O2xsIGRvLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb25maXJtZWQgYXMgYFsmIzM0O0NHUk9VUFMmIzM0OywgJiMzNDtNRU1DRyYjMzQ7XWAsIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNsZWFybHkgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIEkgaWRlbnRpZmllZCBlYXJsaWVyOiBgWyYjMzQ7X19tZW1fY2dyb3VwX2NoYXJnZSYjMzQ7LCAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OywgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywgJiMzNDttZW1fY2dyb3VwX3NrX2NoYXJnZSYjMzQ7LCAmIzM0O19fbWVtY2dfbWVtb3J5X2V2ZW50JiMzNDtdYC4gTm93IEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbWVtX2Nncm91cF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1jZ19tZW1vcnlfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdHJ5X2NoYXJnZV9tZW1jZygpIHRvIGVuc3VyZSB0aGF0IE1FTUNHX01BWCBldmVudHMgYXJlIHByb3Blcmx5IHJhaXNlZCB2aWEgX19tZW1jZ19tZW1vcnlfZXZlbnQoKSB3aGVuIG1lbW9yeSBjZ3JvdXAgYWxsb2NhdGlvbiByZXF1ZXN0cyBhcmUgcmVqZWN0ZWQgd2l0aCAtRU5PTUVNLiBUaGlzIGFsdGVycyBjb3JlIG1lbWNnIGxpbWl0IGV2ZW50IGhhbmRsaW5nIGFuZCBtZW1vcnkgY2hhcmdpbmcgY29udHJvbCBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19tZW1fY2dyb3VwX2NoYXJnZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3NrX2NoYXJnZSYjMzQ7LAogICAgJiMzNDtfX21lbWNnX21lbW9yeV9ldmVudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0cnlfY2hhcmdlX21lbWNnKCkgdG8gZW5zdXJlIHRoYXQgTUVNQ0dfTUFYIGV2ZW50cyBhcmUgcHJvcGVybHkgcmFpc2VkIHZpYSBfX21lbWNnX21lbW9yeV9ldmVudCgpIHdoZW4gbWVtb3J5IGNncm91cCBhbGxvY2F0aW9uIHJlcXVlc3RzIGFyZSByZWplY3RlZCB3aXRoIC1FTk9NRU0uIFRoaXMgYWx0ZXJzIGNvcmUgbWVtY2cgbGltaXQgZXZlbnQgaGFuZGxpbmcgYW5kIG1lbW9yeSBjaGFyZ2luZyBjb250cm9sIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdHJ5X2NoYXJnZV9tZW1jZygpYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBlbnN1cmUgdGhhdCBhIGBNRU1DR19NQVhgIG1lbW9yeSBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiBhbiBhbGxvY2F0aW9uIGNoYXJnZSByZXF1ZXN0IGlzIHJlamVjdGVkIHdpdGggYC1FTk9NRU1gLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgdmFyaWFibGUgYHJldCA9IDBgLCBzZXRzIGByZXQgPSAtRU5PTUVNYCBvbiBmYWlsdXJlLCBhbmQgcm91dGVzIHRocm91Z2ggYSBjb21tb24gYG91dDpgIGxhYmVsIHRvIHJhaXNlIHRoZSBldmVudCBiZWZvcmUgcmV0dXJuaW5nIGByZXRgLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIChzdGFjay9oZWFwL3BhZ2VzKSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIGNoYW5nZXMgaGVyZSBkbyBub3QgaW52b2x2ZSBjb3B5aW5nIGRhdGEgc3RydWN0dXJlcyBvciBidWZmZXJzIHRvIHVzZXIgc3BhY2UsIGFsbG9jYXRpbmcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGByZXRgLCBgcmFpc2VkX21heF9ldmVudGAsIGBtZW1fb3Zlcl9saW1pdGApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxuLSBBbnkgcG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGNvbnRyb2wgZmxvdyBidWdzLCBtZW1jZyBldmVudCBjb3VudGVyIG1hbmlwdWxhdGlvbiwgbG9ja2luZyBvciBzdGF0ZSB0cmFja2luZyBkdXJpbmcgbWVtY2cgcmVjbGFpbS9ldmVudHMpIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDYzNjk4M2Y2NWNmMTAyYzI5ZTQ3NDA2YTVlODFhOGE1NjZiOWYyNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMDI6NTI6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMTI3MWQzOTBiNjE3ZS4uMTU4YjA1NjJlOGRmMyAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMjY1NiwxMCAmIzQzOzI2NTYsMTEgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssCiAJYm9vbCByYWlzZWRfbWF4X2V2ZW50ID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBwZmxhZ3M7CiAJYm9vbCBhbGxvd19zcGlubmluZyA9IGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKGdmcF9tYXNrKTsKJiM0MzsJaW50IHJldCA9IDA7CiAKIHJldHJ5OgogCWlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpCi0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHJldDsKIAogCWlmICghYWxsb3dfc3Bpbm5pbmcpCiAJCS8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqLwpAQCAtMjc3MCwxNiAmIzQzOzI3NzEsMTEgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssCiAJICogcHV0IHRoZSBidXJkZW4gb2YgcmVjbGFpbSBvbiByZWd1bGFyIGFsbG9jYXRpb24gcmVxdWVzdHMKIAkgKiBhbmQgbGV0IHRoZXNlIGdvIHRocm91Z2ggYXMgcHJpdmlsZWdlZCBhbGxvY2F0aW9ucy4KIAkgKi8KLQlpZiAoIShnZnBfbWFzayAmYW1wOyAoX19HRlBfTk9GQUlMIHwgX19HRlBfSElHSCkpKQotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKCEoZ2ZwX21hc2sgJmFtcDsgKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpKSkgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiBmb3JjZToKLQkvKgotCSAqIElmIHRoZSBhbGxvY2F0aW9uIGhhcyB0byBiZSBlbmZvcmNlZCwgZG9uJiMzOTt0IGZvcmdldCB0byByYWlzZQotCSAqIGEgTUVNQ0dfTUFYIGV2ZW50LgotCSAqLwotCWlmICghcmFpc2VkX21heF9ldmVudCkKLQkJX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpOwotCiAJLyoKIAkgKiBUaGUgYWxsb2NhdGlvbiBlaXRoZXIgY2FuJiMzOTt0IGZhaWwgb3Igd2lsbCBsZWFkIHRvIG1vcmUgbWVtb3J5CiAJICogYmVpbmcgZnJlZWQgdmVyeSBzb29uLiAgQWxsb3cgbWVtb3J5IHVzYWdlIGdvIG92ZXIgdGhlIGxpbWl0CkBAIC0yNzg5LDcgJiM0MzsyNzg1LDE1IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLAogCWlmIChkb19tZW1zd19hY2NvdW50KCkpCiAJCXBhZ2VfY291bnRlcl9jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIG5yX3BhZ2VzKTsKIAotCXJldHVybiAwOwomIzQzO291dDoKJiM0MzsJLyoKJiM0MzsJICogRG9uJiMzOTt0IGZvcmdldCB0byByYWlzZSBhIE1FTUNHX01BWCBldmVudCBmb3IgZm9yY2VkIG9yIHJlamVjdGVkCiYjNDM7CSAqIHJlcXVlc3RzLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyYWlzZWRfbWF4X2V2ZW50KQomIzQzOwkJX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogCiBkb25lX3Jlc3RvY2s6CiAJaWYgKGJhdGNoICZndDsgbnJfcGFnZXMpCkBAIC0yODQ4LDcgJiM0MzsyODUyLDcgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssCiAJICAgICEoY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfTUVNQUxMT0MpICZhbXA7JmFtcDsKIAkgICAgZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKQogCQlfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7Ci0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzaywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHVzZXIgd2FudHMgbWUgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW4gdGhlIExpbnV4IGtlcm5lbCBuZWNlc3NpdGF0ZXMgZXh0cmEgc2NydXRpbnkuIEFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLgoKVGhlIHBhdGNoIGl0c2VsZiB0YXJnZXRzIGBtbS9tZW1jb250cm9sLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB0cnlfY2hhcmdlX21lbWNnKClgIGZ1bmN0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGFuZCBob3cgdGhpcyBwYXRjaCBtb2RpZmllcyBpdC4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcG90ZW50aWFsIG1lbW9yeS1yZWxhdGVkIGlzc3VlcyBoZXJlLgoKSSYjMzk7bGwgcmVhZCB0aHJvdWdoIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyAyNjUwLTI4NjAgb2YgYG1tL21lbWNvbnRyb2wuY2AuIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgdG9vbHMgLSBtb3N0IGxpa2VseSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgLSB0byBnZXQgdGhpcyBzZWN0aW9uIGxvYWRlZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2hhbmdlcyBpbiBtZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBwb2ludGVyIG1hbmlwdWxhdGlvbiwgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbnZvbHZlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoaXMgY29kZSBzZWdtZW50LiBUaGVuIEkmIzM5O2xsIHN0YXJ0IHRoaW5raW5nIGxpa2UgS01TQU4sIHRyeWluZyB0byBpZGVudGlmeSBhcmVhcyB3aGVyZSBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMgY291bGQgb2NjdXIgdW5kZXIgc3BlY2lmaWMsIHBlcmhhcHMgdW51c3VhbCwgY29uZGl0aW9ucy4gRG9lcyB0aGUgcGF0Y2ggYWx0ZXIgdGhlIHBhdGggdG8gdGhlIHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzIG9yIGNyZWF0ZSBlbnRpcmVseSBuZXcgcG9zc2liaWxpdGllcz8gVGhhdCBpcyB3aGF0IEkgbmVlZCB0byB3b3JrIG91dCB0byBkZXRlcm1pbmUgaWYgdGhpcyByZXF1aXJlcyBhIHNlcGFyYXRlIGZ1enppbmcgc2Vzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjUwOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX292ZXJfbGltaXQ7XG4yNjUxOlx0XHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xuMjY1MjpcdFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XG4yNjUzOlx0XHRib29sIHBhc3NlZF9vb20gPSBmYWxzZTtcbjI2NTQ6XHRcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XG4yNjU1Olx0XHRib29sIGRyYWluZWQgPSBmYWxzZTtcbjI2NTY6XHRcdGJvb2wgcmFpc2VkX21heF9ldmVudCA9IGZhbHNlO1xuMjY1NzpcdFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4yNjU4Olx0XHRib29sIGFsbG93X3NwaW5uaW5nID0gZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZ2ZwX21hc2spO1xuMjY1OTpcdFx0aW50IHJldCA9IDA7XG4yNjYwOlx0XG4yNjYxOlx0cmV0cnk6XG4yNjYyOlx0XHRpZiAoY29uc3VtZV9zdG9jayhtZW1jZywgbnJfcGFnZXMpKVxuMjY2MzpcdFx0XHRyZXR1cm4gcmV0O1xuMjY2NDpcdFxuMjY2NTpcdFx0aWYgKCFhbGxvd19zcGlubmluZylcbjI2NjY6XHRcdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG4yNjY3Olx0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4yNjY4Olx0XG4yNjY5Olx0XHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuMjY3MDpcdFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbjI2NzE6XHRcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG4yNjcyOlx0XHRcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIGJhdGNoLCBcdTAwMjZjb3VudGVyKSlcbjI2NzM6XHRcdFx0XHRnb3RvIGRvbmVfcmVzdG9jaztcbjI2NzQ6XHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbjI2NzU6XHRcdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIGJhdGNoKTtcbjI2NzY6XHRcdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpO1xuMjY3NzpcdFx0fSBlbHNlIHtcbjI2Nzg6XHRcdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XG4yNjc5Olx0XHRcdHJlY2xhaW1fb3B0aW9ucyBcdTAwMjY9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuMjY4MDpcdFx0fVxuMjY4MTpcdFxuMjY4MjpcdFx0aWYgKGJhdGNoIFx1MDAzZSBucl9wYWdlcykge1xuMjY4MzpcdFx0XHRiYXRjaCA9IG5yX3BhZ2VzO1xuMjY4NDpcdFx0XHRnb3RvIHJldHJ5O1xuMjY4NTpcdFx0fVxuMjY4NjpcdFxuMjY4NzpcdFx0LypcbjI2ODg6XHRcdCAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvXG4yNjg5Olx0XHQgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksXG4yNjkwOlx0XHQgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrXG4yNjkxOlx0XHQgKiB1bmRlciB0aGUgbGltaXQgb3ZlciB0cmlnZ2VyaW5nIE9PTSBraWxscyBpbiB0aGVzZSBjYXNlcy5cbjI2OTI6XHRcdCAqL1xuMjY5MzpcdFx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKSlcbjI2OTQ6XHRcdFx0Z290byBmb3JjZTtcbjI2OTU6XHRcbjI2OTY6XHRcdGlmICh1bmxpa2VseSh0YXNrX2luX21lbWNnX29vbShjdXJyZW50KSkpXG4yNjk3Olx0XHRcdGdvdG8gbm9tZW07XG4yNjk4Olx0XG4yNjk5Olx0XHRpZiAoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcbjI3MDA6XHRcdFx0Z290byBub21lbTtcbjI3MDE6XHRcbjI3MDI6XHRcdC8qXG4yNzAzOlx0XHQgKiBPT00gdmljdGltIHN0aWxsIG5lZWRzIHRvIGNoYXJnZSBtZW1vcnkgdG8gZXhpdC4gT09NIHJlYXBlciBzaG91bGRcbjI3MDQ6XHRcdCAqIGhlbHAgYnV0IGl0IG1pZ2h0IGZhaWwgb24gbW1hcF9sb2NrIGNvbnRlbnRpb24uIElmIHRoZSB2aWN0aW0gaXMgYVxuMjcwNTpcdFx0ICogbGFyZ2UgdGhyZWFkIGdyb3VwIHRoZW4gYWxsIGV4aXRpbmcgdGhyZWFkcyBtaWdodCBjb21wZXRlIG9uIG9vbV9sb2NrXG4yNzA2Olx0XHQgKiBqdXN0IHRvIGxlYXJuIHRoYXQgdGhlcmUgaXMgbm90aGluZyByZWFsbHkga2lsbGFibGUgYW55bW9yZS4gQmFpbFxuMjcwNzpcdFx0ICogb3V0IGVhcmx5IGFuZCBmYWlsIHRoZSBjaGFyZ2UgdG8gZXhwZWRpdGUgdGhlaXIgZXhpdC4gVGhleSBhcmVcbjI3MDg6XHRcdCAqIGNvbnNpZGVyZWQgZnVsbHkgcmVjbGFpbWVkIGJ5IHRoZSBvb20gcmVhcGVyIGFuZCB0aGV5IHNob3VsZG4mIzM5O3RcbjI3MDk6XHRcdCAqIGNvbnRyaWJ1dGUgZnVydGhlciBjaGFyZ2VzLlxuMjcxMDpcdFx0ICovXG4yNzExOlx0XHRpZiAodHNrX2lzX29vbV92aWN0aW0oY3VycmVudCkgXHUwMDI2XHUwMDI2XG4yNzEyOlx0XHQgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIGN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZW9vbV9tbSkpXG4yNzEzOlx0XHRcdGdvdG8gbm9tZW07XG4yNzE0Olx0XG4yNzE1Olx0XHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XG4yNzE2Olx0XHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcbjI3MTc6XHRcbjI3MTg6XHRcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuMjcxOTpcdFx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXG4yNzIwOlx0XHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuMjcyMTpcdFx0cHNpX21lbXN0YWxsX2xlYXZlKFx1MDAyNnBmbGFncyk7XG4yNzIyOlx0XG4yNzIzOlx0XHRpZiAobWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpIFx1MDAzZT0gbnJfcGFnZXMpXG4yNzI0Olx0XHRcdGdvdG8gcmV0cnk7XG4yNzI1Olx0XG4yNzI2Olx0XHRpZiAoIWRyYWluZWQpIHtcbjI3Mjc6XHRcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTtcbjI3Mjg6XHRcdFx0ZHJhaW5lZCA9IHRydWU7XG4yNzI5Olx0XHRcdGdvdG8gcmV0cnk7XG4yNzMwOlx0XHR9XG4yNzMxOlx0XG4yNzMyOlx0XHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpXG4yNzMzOlx0XHRcdGdvdG8gbm9tZW07XG4yNzM0Olx0XHQvKlxuMjczNTpcdFx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cbjI3MzY6XHRcdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXG4yNzM3Olx0XHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cbjI3Mzg6XHRcdCAqXG4yNzM5Olx0XHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxuMjc0MDpcdFx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcbjI3NDE6XHRcdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cbjI3NDI6XHRcdCAqL1xuMjc0MzpcdFx0aWYgKG5yX3JlY2xhaW1lZCBcdTAwMjZcdTAwMjYgbnJfcGFnZXMgXHUwMDNjPSAoMSBcdTAwM2NcdTAwM2MgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKVxuMjc0NDpcdFx0XHRnb3RvIHJldHJ5O1xuMjc0NTpcdFxuMjc0NjpcdFx0aWYgKG5yX3JldHJpZXMtLSlcbjI3NDc6XHRcdFx0Z290byByZXRyeTtcbjI3NDg6XHRcbjI3NDk6XHRcdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfUkVUUllfTUFZRkFJTClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB3aGF0ZXZlciBmaWVsZCB0aGUgb3JpZ2luYWwgdGV4dCBwZXJ0YWlucyB0bzoKCioqRGl2aW5nIERlZXBlcjogRXhwbG9yaW5nIExpbmVzIDI3NTAtMjg2MCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBCYXNlZCBvbiB0aGUgaW5pdGlhbCBzY2FuLCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgYSBtb3JlIGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1hdGVyaWFsLiBHaXZlbiB0aGUgc2NvcGUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCwgSSB0aGluayBpdCYjMzk7cyB0aW1lIHRvIHplcm8gaW4gb24gbGluZXMgMjc1MCB0aHJvdWdoIDI4NjAuIFRoaXMgc2VjdGlvbiB3YXJyYW50cyBjbG9zZXIgZXhhbWluYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGNhbiB1bmVhcnRoIGZyb20gdGhhdCBwYXJ0aWN1bGFyIHNlZ21lbnQuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtsbCBwcm92aWRlIGZ1cnRoZXIgY2xhcml0eSBvciBuZXcgaW5zaWdodHMgb24gdGhlIHRvcGljIGF0IGhhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc1MDpcdFx0XHRnb3RvIG5vbWVtO1xuMjc1MTpcdFxuMjc1MjpcdFx0LyogQXZvaWQgZW5kbGVzcyBsb29wIGZvciB0YXNrcyBieXBhc3NlZCBieSB0aGUgb29tIGtpbGxlciAqL1xuMjc1MzpcdFx0aWYgKHBhc3NlZF9vb20gXHUwMDI2XHUwMDI2IHRhc2tfaXNfZHlpbmcoKSlcbjI3NTQ6XHRcdFx0Z290byBub21lbTtcbjI3NTU6XHRcbjI3NTY6XHRcdC8qXG4yNzU3Olx0XHQgKiBrZWVwIHJldHJ5aW5nIGFzIGxvbmcgYXMgdGhlIG1lbWNnIG9vbSBraWxsZXIgaXMgYWJsZSB0byBtYWtlXG4yNzU4Olx0XHQgKiBhIGZvcndhcmQgcHJvZ3Jlc3Mgb3IgYnlwYXNzIHRoZSBjaGFyZ2UgaWYgdGhlIG9vbSBraWxsZXJcbjI3NTk6XHRcdCAqIGNvdWxkbiYjMzk7dCBtYWtlIGFueSBwcm9ncmVzcy5cbjI3NjA6XHRcdCAqL1xuMjc2MTpcdFx0aWYgKG1lbV9jZ3JvdXBfb29tKG1lbV9vdmVyX2xpbWl0LCBnZnBfbWFzayxcbjI3NjI6XHRcdFx0XHQgICBnZXRfb3JkZXIobnJfcGFnZXMgKiBQQUdFX1NJWkUpKSkge1xuMjc2MzpcdFx0XHRwYXNzZWRfb29tID0gdHJ1ZTtcbjI3NjQ6XHRcdFx0bnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XG4yNzY1Olx0XHRcdGdvdG8gcmV0cnk7XG4yNzY2Olx0XHR9XG4yNzY3Olx0bm9tZW06XG4yNzY4Olx0XHQvKlxuMjc2OTpcdFx0ICogTWVtY2cgZG9lc24mIzM5O3QgaGF2ZSBhIGRlZGljYXRlZCByZXNlcnZlIGZvciBhdG9taWNcbjI3NzA6XHRcdCAqIGFsbG9jYXRpb25zLiBCdXQgbGlrZSB0aGUgZ2xvYmFsIGF0b21pYyBwb29sLCB3ZSBuZWVkIHRvXG4yNzcxOlx0XHQgKiBwdXQgdGhlIGJ1cmRlbiBvZiByZWNsYWltIG9uIHJlZ3VsYXIgYWxsb2NhdGlvbiByZXF1ZXN0c1xuMjc3MjpcdFx0ICogYW5kIGxldCB0aGVzZSBnbyB0aHJvdWdoIGFzIHByaXZpbGVnZWQgYWxsb2NhdGlvbnMuXG4yNzczOlx0XHQgKi9cbjI3NzQ6XHRcdGlmICghKGdmcF9tYXNrIFx1MDAyNiAoX19HRlBfTk9GQUlMIHwgX19HRlBfSElHSCkpKSB7XG4yNzc1Olx0XHRcdHJldCA9IC1FTk9NRU07XG4yNzc2Olx0XHRcdGdvdG8gb3V0O1xuMjc3NzpcdFx0fVxuMjc3ODpcdGZvcmNlOlxuMjc3OTpcdFx0LypcbjI3ODA6XHRcdCAqIFRoZSBhbGxvY2F0aW9uIGVpdGhlciBjYW4mIzM5O3QgZmFpbCBvciB3aWxsIGxlYWQgdG8gbW9yZSBtZW1vcnlcbjI3ODE6XHRcdCAqIGJlaW5nIGZyZWVkIHZlcnkgc29vbi4gIEFsbG93IG1lbW9yeSB1c2FnZSBnbyBvdmVyIHRoZSBsaW1pdFxuMjc4MjpcdFx0ICogdGVtcG9yYXJpbHkgYnkgZm9yY2UgY2hhcmdpbmcgaXQuXG4yNzgzOlx0XHQgKi9cbjI3ODQ6XHRcdHBhZ2VfY291bnRlcl9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LCBucl9wYWdlcyk7XG4yNzg1Olx0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuMjc4NjpcdFx0XHRwYWdlX2NvdW50ZXJfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XG4yNzg3Olx0XG4yNzg4Olx0b3V0OlxuMjc4OTpcdFx0LypcbjI3OTA6XHRcdCAqIERvbiYjMzk7dCBmb3JnZXQgdG8gcmFpc2UgYSBNRU1DR19NQVggZXZlbnQgZm9yIGZvcmNlZCBvciByZWplY3RlZFxuMjc5MTpcdFx0ICogcmVxdWVzdHMuXG4yNzkyOlx0XHQgKi9cbjI3OTM6XHRcdGlmICghcmFpc2VkX21heF9ldmVudClcbjI3OTQ6XHRcdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xuMjc5NTpcdFxuMjc5NjpcdFx0cmV0dXJuIHJldDtcbjI3OTc6XHRcbjI3OTg6XHRkb25lX3Jlc3RvY2s6XG4yNzk5Olx0XHRpZiAoYmF0Y2ggXHUwMDNlIG5yX3BhZ2VzKVxuMjgwMDpcdFx0XHRyZWZpbGxfc3RvY2sobWVtY2csIGJhdGNoIC0gbnJfcGFnZXMpO1xuMjgwMTpcdFxuMjgwMjpcdFx0LypcbjI4MDM6XHRcdCAqIElmIHRoZSBoaWVyYXJjaHkgaXMgYWJvdmUgdGhlIG5vcm1hbCBjb25zdW1wdGlvbiByYW5nZSwgc2NoZWR1bGVcbjI4MDQ6XHRcdCAqIHJlY2xhaW0gb24gcmV0dXJuaW5nIHRvIHVzZXJsYW5kLiAgV2UgY2FuIHBlcmZvcm0gcmVjbGFpbSBoZXJlXG4yODA1Olx0XHQgKiBpZiBfX0dGUF9SRUNMQUlNIGJ1dCBsZXQmIzM5O3MgYWx3YXlzIHB1bnQgZm9yIHNpbXBsaWNpdHkgYW5kIHNvIHRoYXRcbjI4MDY6XHRcdCAqIEdGUF9LRVJORUwgY2FuIGNvbnNpc3RlbnRseSBiZSB1c2VkIGR1cmluZyByZWNsYWltLiAgQG1lbWNnIGlzXG4yODA3Olx0XHQgKiBub3QgcmVjb3JkZWQgYXMgaXQgbW9zdCBsaWtlbHkgbWF0Y2hlcyBjdXJyZW50JiMzOTtzIGFuZCB3b24mIzM5O3RcbjI4MDg6XHRcdCAqIGNoYW5nZSBpbiB0aGUgbWVhbnRpbWUuICBBcyBoaWdoIGxpbWl0IGlzIGNoZWNrZWQgYWdhaW4gYmVmb3JlXG4yODA5Olx0XHQgKiByZWNsYWltLCB0aGUgY29zdCBvZiBtaXNtYXRjaCBpcyBuZWdsaWdpYmxlLlxuMjgxMDpcdFx0ICovXG4yODExOlx0XHRkbyB7XG4yODEyOlx0XHRcdGJvb2wgbWVtX2hpZ2gsIHN3YXBfaGlnaDtcbjI4MTM6XHRcbjI4MTQ6XHRcdFx0bWVtX2hpZ2ggPSBwYWdlX2NvdW50ZXJfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnkpIFx1MDAzZVxuMjgxNTpcdFx0XHRcdFJFQURfT05DRShtZW1jZy1cdTAwM2VtZW1vcnkuaGlnaCk7XG4yODE2Olx0XHRcdHN3YXBfaGlnaCA9IHBhZ2VfY291bnRlcl9yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApIFx1MDAzZVxuMjgxNzpcdFx0XHRcdFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwLmhpZ2gpO1xuMjgxODpcdFxuMjgxOTpcdFx0XHQvKiBEb24mIzM5O3QgYm90aGVyIGEgcmFuZG9tIGludGVycnVwdGVkIHRhc2sgKi9cbjI4MjA6XHRcdFx0aWYgKCFpbl90YXNrKCkpIHtcbjI4MjE6XHRcdFx0XHRpZiAobWVtX2hpZ2gpIHtcbjI4MjI6XHRcdFx0XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bWVtY2ctXHUwMDNlaGlnaF93b3JrKTtcbjI4MjM6XHRcdFx0XHRcdGJyZWFrO1xuMjgyNDpcdFx0XHRcdH1cbjI4MjU6XHRcdFx0XHRjb250aW51ZTtcbjI4MjY6XHRcdFx0fVxuMjgyNzpcdFxuMjgyODpcdFx0XHRpZiAobWVtX2hpZ2ggfHwgc3dhcF9oaWdoKSB7XG4yODI5Olx0XHRcdFx0LypcbjI4MzA6XHRcdFx0XHQgKiBUaGUgYWxsb2NhdGluZyB0YXNrcyBpbiB0aGlzIGNncm91cCB3aWxsIG5lZWQgdG8gZG9cbjI4MzE6XHRcdFx0XHQgKiByZWNsYWltIG9yIGJlIHRocm90dGxlZCB0byBwcmV2ZW50IGZ1cnRoZXIgZ3Jvd3RoXG4yODMyOlx0XHRcdFx0ICogb2YgdGhlIG1lbW9yeSBvciBzd2FwIGZvb3RwcmludHMuXG4yODMzOlx0XHRcdFx0ICpcbjI4MzQ6XHRcdFx0XHQgKiBUYXJnZXQgc29tZSBiZXN0LWVmZm9ydCBmYWlybmVzcyBiZXR3ZWVuIHRoZSB0YXNrcyxcbjI4MzU6XHRcdFx0XHQgKiBhbmQgZGlzdHJpYnV0ZSByZWNsYWltIHdvcmsgYW5kIGRlbGF5IHBlbmFsdGllc1xuMjgzNjpcdFx0XHRcdCAqIGJhc2VkIG9uIGhvdyBtdWNoIGVhY2ggdGFzayBpcyBhY3R1YWxseSBhbGxvY2F0aW5nLlxuMjgzNzpcdFx0XHRcdCAqL1xuMjgzODpcdFx0XHRcdGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoICYjNDM7PSBiYXRjaDtcbjI4Mzk6XHRcdFx0XHRzZXRfbm90aWZ5X3Jlc3VtZShjdXJyZW50KTtcbjI4NDA6XHRcdFx0XHRicmVhaztcbjI4NDE6XHRcdFx0fVxuMjg0MjpcdFx0fSB3aGlsZSAoKG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSk7XG4yODQzOlx0XG4yODQ0Olx0XHQvKlxuMjg0NTpcdFx0ICogUmVjbGFpbSBpcyBzZXQgdXAgYWJvdmUgdG8gYmUgY2FsbGVkIGZyb20gdGhlIHVzZXJsYW5kXG4yODQ2Olx0XHQgKiByZXR1cm4gcGF0aC4gQnV0IGFsc28gYXR0ZW1wdCBzeW5jaHJvbm91cyByZWNsYWltIHRvIGF2b2lkXG4yODQ3Olx0XHQgKiBleGNlc3NpdmUgb3ZlcnJ1biB3aGlsZSB0aGUgdGFzayBpcyBzdGlsbCBpbnNpZGUgdGhlXG4yODQ4Olx0XHQgKiBrZXJuZWwuIElmIHRoaXMgaXMgc3VjY2Vzc2Z1bCwgdGhlIHJldHVybiBwYXRoIHdpbGwgc2VlIGl0XG4yODQ5Olx0XHQgKiB3aGVuIGl0IHJlY2hlY2tzIHRoZSBvdmVyYWdlIGFuZCBzaW1wbHkgYmFpbCBvdXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUVNQ0dfTUFYIEV2ZW50IEhhbmRsaW5nIGluIGB0cnlfY2hhcmdlX21lbWNnYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHBhdGNoLiBJdCBhcHBlYXJzIHRoZSBjb3JlIGNoYW5nZSBjZW50ZXJzIGFyb3VuZCBob3cgdGhlIGBNRU1DR19NQVhgIGV2ZW50IGlzIHJhaXNlZCB3aXRoaW4gdGhlIGB0cnlfY2hhcmdlX21lbWNnYCBmdW5jdGlvbi4gIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBhIHJldHVybiB2YXJpYWJsZSBgcmV0YCBoYXMgYmVlbiBpbnRyb2R1Y2VkIGFuZCB1dGlsaXplZCB0byBoYW5kbGUgYm90aCBzdWNjZXNzZnVsIGFuZCBmYWlsZWQgbWVtb3J5IGNoYXJnZSByZXF1ZXN0cywgYW5kIGFsc28gdG8gZW5zdXJlIHRoZSBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGNhbGwgaXNuJiMzOTt0IG1pc3NlZCB1bmRlciBmYWlsdXJlIGNvbmRpdGlvbnMuIFByZXZpb3VzbHksIGl0IHNlZW1zIHRoZSBldmVudCBtaWdodCBoYXZlIGJlZW4gc2tpcHBlZCBpZiBhIHJlY2xhaW0gYXR0ZW1wdCB3YXMgYnlwYXNzZWQgZHVlIHRvIGZsYWdzIG9yIE9PTSBzaXR1YXRpb25zLgoKVGhlIG1vdGl2YXRpb24gc2VlbXMgY2xlYXI6IHRvIGVuc3VyZSB0aGF0IHRoZSBgTUVNQ0dfTUFYYCBldmVudCBpcyBjb25zaXN0ZW50bHkgcmFpc2VkIHdoZW4gYSBtZW1vcnkgY2hhcmdlIHJlcXVlc3QgZmFpbHMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGZhaWx1cmUgcGF0aCAoZS5nLiwgZGlyZWN0IGZhaWx1cmUgdmlhIGAhKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpYCBvciB0aHJvdWdoIHJlY2xhaW0gYnlwYXNzKS4gIFByZXZpb3VzbHksIHRoZSBldmVudCB3YXMgb25seSByYWlzZWQgZm9yIGVuZm9yY2VkIGFsbG9jYXRpb25zIG9yIGR1cmluZyByZWNsYWltLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG1pc3NlZCBldmVudHMgaW4gc29tZSBzY2VuYXJpb3MuCgpOb3csIGEgY3JpdGljYWwgdGhvdWdodDogY291bGQgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gIExldCYjMzk7cyBzZWUuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHVuaW5pdGlhbGl6ZWQgZGF0YSBjYW4gbGVhZCB0byBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIGBfX21lbWNnX21lbW9yeV9ldmVudGAgaW5jcmVtZW50cyBldmVudCBjb3VudGVycywgd2hpY2ggc2hvdWxkIGJlIHNhZmUuIEhvd2V2ZXIsIHRoZSBgbWVtX292ZXJfbGltaXRgIHBvaW50ZXIgbmVlZHMgYSBjbG9zZXIgbG9vay4gSXMgaXQgcG9zc2libGUgZm9yIGl0IHRvIGJlIHVzZWQgdW5pbml0aWFsaXplZD8KCk9rYXksIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIGxvZ2ljLiAgSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgY2FyZWZ1bGx5LCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgYGdvdG8gbm9tZW1gLCBgZ290byBmb3JjZWAsIGFuZCBgZ290byBvdXRgIHN0YXRlbWVudHMuIFRoZSBpbXBvcnRhbnQgdmFyaWFibGVzIGhlcmUgYXJlIGBtZW1fb3Zlcl9saW1pdGAsIGByYWlzZWRfbWF4X2V2ZW50YCwgYGFsbG93X3NwaW5uaW5nYCwgYW5kIG9mIGNvdXJzZSBgcmV0YC4gTG9va2luZyBhdCB0aGUgY29kZSBhcm91bmQgdGhlIGByZXRyeWAgbGFiZWwsIEkgc2VlIHRoYXQgaWYgYHBhZ2VfY291bnRlcl90cnlfY2hhcmdlYCBzdWNjZWVkcywgdGhlIGZ1bmN0aW9uIGBnb3RvIGRvbmVfcmVzdG9ja2AuIEhvd2V2ZXIsIGlmIGBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZWAgZmFpbHMsIHRoZSBgbWVtX292ZXJfbGltaXRgIHBvaW50ZXIgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQsIGVpdGhlciBhdCBsaW5lIDI2NzYgb3IgMjY3OC4gVGhlIHByb2dyYW0gZWl0aGVyIGdvZXMgdG8gYGZvcmNlYCBvciBgbm9tZW1gICphZnRlciogdGhlIGBtZW1fb3Zlcl9saW1pdGAgcG9pbnRlciBpcyBzZXQuIEFsc28gYHJldGAgaXMgc2V0IHRvIGAwYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbiBhbmQgdGhlbiB0byBgLUVOT01FTWAgaW4gY2FzZSBvZiBmYWlsdXJlLgoKSSBhbHNvIGhhdmUgdG8gY2hlY2sgdGhhdCBubyBvdGhlciBwYXRoIGV4aXN0cyB0byBgbm9tZW1gLCBgZm9yY2VgLCBvciBgb3V0YCBvdGhlciB0aGFuIHRocm91Z2ggdGhpcyBjb2RlIHBhdGgsIHNvIEkgc2hvdWxkIHBlcmZvcm0gYSBmdWxsIHNlYXJjaCBvZiBgbW0vbWVtY29udHJvbC5jYC4KCkJhc2VkIG9uIG15IGFuYWx5c2lzLCBpdCBzZWVtcyB0aGUgcGF0Y2ggaXMgc2FmZSByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIGBtZW1fb3Zlcl9saW1pdGAgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCB0aGUgZXZlbnQgaGFuZGxpbmcgbG9naWMgaXMgdGlnaHRlbmVkIHVwIHRvIGd1YXJhbnRlZSBhIGNvbnNpc3RlbnQgYE1FTUNHX01BWGAgZXZlbnQgb24gZmFpbHVyZXMsIHdoaWNoIGlzIGEgZ29vZCB0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z290byAobm9tZW18Zm9yY2V8b3V0KSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MTI1OD1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9pdGVyKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMjkwLVx0XHRlbHNlIGlmIChyZWNsYWltLVx1MDAzZWdlbmVyYXRpb24gIT0gZ2VuKVxubW0vbWVtY29udHJvbC5jOjEyOTE6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xubW0vbWVtY29udHJvbC5jLTEyOTItXG4tLVxubW0vbWVtY29udHJvbC5jPTE5OTI9c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X29vbV9ncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnZpY3RpbSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjAwNy1cdGlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxubW0vbWVtY29udHJvbC5jOjIwMDg6XHRcdGdvdG8gb3V0O1xubW0vbWVtY29udHJvbC5jLTIwMDktXG4tLVxubW0vbWVtY29udHJvbC5jLTIwMTUtXHRpZiAodW5saWtlbHkoIW1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudChtZW1jZywgb29tX2RvbWFpbikpKVxubW0vbWVtY29udHJvbC5jOjIwMTY6XHRcdGdvdG8gb3V0O1xubW0vbWVtY29udHJvbC5jLTIwMTctXG4tLVxubW0vbWVtY29udHJvbC5jPTI1NTU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjU3Ny1cdGlmICh0YXNrX2lzX2R5aW5nKCkpXG5tbS9tZW1jb250cm9sLmM6MjU3ODpcdFx0Z290byBvdXQ7XG5tbS9tZW1jb250cm9sLmMtMjU3OS1cbi0tXG5tbS9tZW1jb250cm9sLmMtMjYxNi1cdGlmIChwZW5hbHR5X2ppZmZpZXMgXHUwMDNjPSBIWiAvIDEwMClcbm1tL21lbWNvbnRyb2wuYzoyNjE3Olx0XHRnb3RvIG91dDtcbm1tL21lbWNvbnRyb2wuYy0yNjE4LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNjQ1PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjkzLVx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKSlcbm1tL21lbWNvbnRyb2wuYzoyNjk0Olx0XHRnb3RvIGZvcmNlO1xubW0vbWVtY29udHJvbC5jLTI2OTUtXG5tbS9tZW1jb250cm9sLmMtMjY5Ni1cdGlmICh1bmxpa2VseSh0YXNrX2luX21lbWNnX29vbShjdXJyZW50KSkpXG5tbS9tZW1jb250cm9sLmM6MjY5NzpcdFx0Z290byBub21lbTtcbm1tL21lbWNvbnRyb2wuYy0yNjk4LVxubW0vbWVtY29udHJvbC5jLTI2OTktXHRpZiAoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcbm1tL21lbWNvbnRyb2wuYzoyNzAwOlx0XHRnb3RvIG5vbWVtO1xubW0vbWVtY29udHJvbC5jLTI3MDEtXG4tLVxubW0vbWVtY29udHJvbC5jLTI3MTItXHQgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIGN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZW9vbV9tbSkpXG5tbS9tZW1jb250cm9sLmM6MjcxMzpcdFx0Z290byBub21lbTtcbm1tL21lbWNvbnRyb2wuYy0yNzE0LVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNzMyLVx0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9OT1JFVFJZKVxubW0vbWVtY29udHJvbC5jOjI3MzM6XHRcdGdvdG8gbm9tZW07XG5tbS9tZW1jb250cm9sLmMtMjczNC1cdC8qXG4tLVxubW0vbWVtY29udHJvbC5jLTI3NDktXHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1JFVFJZX01BWUZBSUwpXG5tbS9tZW1jb250cm9sLmM6Mjc1MDpcdFx0Z290byBub21lbTtcbm1tL21lbWNvbnRyb2wuYy0yNzUxLVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNzUzLVx0aWYgKHBhc3NlZF9vb20gXHUwMDI2XHUwMDI2IHRhc2tfaXNfZHlpbmcoKSlcbm1tL21lbWNvbnRyb2wuYzoyNzU0Olx0XHRnb3RvIG5vbWVtO1xubW0vbWVtY29udHJvbC5jLTI3NTUtXG4tLVxubW0vbWVtY29udHJvbC5jLTI3NzUtXHRcdHJldCA9IC1FTk9NRU07XG5tbS9tZW1jb250cm9sLmM6Mjc3NjpcdFx0Z290byBvdXQ7XG5tbS9tZW1jb250cm9sLmMtMjc3Ny1cdH1cbi0tXG5tbS9tZW1jb250cm9sLmM9MzE1Nz1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTY2LVx0aWYgKHJldClcbm1tL21lbWNvbnRyb2wuYzozMTY3Olx0XHRnb3RvIG91dDtcbm1tL21lbWNvbnRyb2wuYy0zMTY4LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zNDU5PXN0YXRpYyB2b2lkIF9fcmVmaWxsX29ial9zdG9jayhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTM0NzEtXHRcdGF0b21pY19hZGQobnJfYnl0ZXMsIFx1MDAyNm9iamNnLVx1MDAzZW5yX2NoYXJnZWRfYnl0ZXMpO1xubW0vbWVtY29udHJvbC5jOjM0NzI6XHRcdGdvdG8gb3V0O1xubW0vbWVtY29udHJvbC5jLTM0NzMtXHR9XG4tLVxubW0vbWVtY29udHJvbC5jPTQ4NDI9c3RhdGljIHNzaXplX3QgbWVtb3J5X2hpZ2hfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00ODU4LVx0aWYgKG9mLVx1MDAzZWZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19OT05CTE9DSylcbm1tL21lbWNvbnRyb2wuYzo0ODU5Olx0XHRnb3RvIG91dDtcbm1tL21lbWNvbnRyb2wuYy00ODYwLVxuLS1cbm1tL21lbWNvbnRyb2wuYz00OTAxPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9tYXhfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00OTE3LVx0aWYgKG9mLVx1MDAzZWZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19OT05CTE9DSylcbm1tL21lbWNvbnRyb2wuYzo0OTE4Olx0XHRnb3RvIG91dDtcbm1tL21lbWNvbnRyb2wuYy00OTE5LVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MjQ5PWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI2MC1cdFx0IW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxubW0vbWVtY29udHJvbC5jOjUyNjE6XHRcdGdvdG8gb3V0O1xubW0vbWVtY29udHJvbC5jLTUyNjItXG4tLVxubW0vbWVtY29udHJvbC5jPTU1Njk9dm9pZCBtZW1fY2dyb3VwX3NrX2FsbG9jKHN0cnVjdCBzb2NrICpzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTU4Mi1cdGlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxubW0vbWVtY29udHJvbC5jOjU1ODM6XHRcdGdvdG8gb3V0O1xubW0vbWVtY29udHJvbC5jLTU1ODQtXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXHUwMDI2XHUwMDI2ICFtZW1jZzFfdGNwbWVtX2FjdGl2ZShtZW1jZykpXG5tbS9tZW1jb250cm9sLmM6NTU4NTpcdFx0Z290byBvdXQ7XG5tbS9tZW1jb250cm9sLmMtNTU4Ni1cdGlmIChjc3NfdHJ5Z2V0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTMwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBNZW1vcnkgQ2hhcmdlIE1lY2hhbmlzbXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBjaGFyZ2luZyBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYG1lbWNnYCAobWVtb3J5IGNvbnRyb2wgZ3JvdXBzKSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBpbnZlc3RpZ2F0aW5nIHRoZSBjYWxsIGdyYXBocyBvZiB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBJIHdhbnQgdG8gc2VlICp3aG8qIGlzIGNhbGxpbmcgYHRyeV9jaGFyZ2VfbWVtY2dgIGFuZCBhbHNvLCBpbXBvcnRhbnRseSwgYHRyeV9jaGFyZ2VgLiBVbmRlcnN0YW5kaW5nIHRoZSB1cHN0cmVhbSB1c2FnZSBpcyBjcnVjaWFsIHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIGZsb3cgYW5kIHRoZSBwb3RlbnRpYWwgcG9pbnRzIHdoZXJlIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBsaW1pdGF0aW9ucyBtaWdodCBiZSB0cmlnZ2VyZWQuIFNlZWluZyB0aGUgY2FsbGluZyBjb250ZXh0cyB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaW5zaWdodCBpbnRvIGl0cyB1c2FnZS4gV2hlcmUgZG8gdGhlc2UgY2hlY2tzIGhhcHBlbj8gV2hhdCBraW5kIG9mIG9wZXJhdGlvbnMgYXJlIGJlaW5nIHByb3RlY3RlZD8gS25vd2luZyB0aGlzIHdpbGwgc2lnbmlmaWNhbnRseSBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWNsYWltZWQsIGFuZCBwb3RlbnRpYWxseSB0aHJvdHRsZWQgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV9jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI1MTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2hpZ2hfZGVsYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNTUxLSAqIFJlY2xhaW1zIG1lbW9yeSBvdmVyIHRoZSBoaWdoIGxpbWl0LiBDYWxsZWQgZGlyZWN0bHkgZnJvbVxubW0vbWVtY29udHJvbC5jOjI1NTI6ICogdHJ5X2NoYXJnZSgpIChjb250ZXh0IHBlcm1pdHRpbmcpLCBhcyB3ZWxsIGFzIGZyb20gdGhlIHVzZXJsYW5kXG5tbS9tZW1jb250cm9sLmMtMjU1My0gKiByZXR1cm4gcGF0aCB3aGVyZSByZWNsYWltIGlzIGFsd2F5cyBhYmxlIHRvIGJsb2NrLlxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNTU1PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTI2NDQtXG5tbS9tZW1jb250cm9sLmM6MjY0NTpzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbm1tL21lbWNvbnRyb2wuYy0yNjQ2LVx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jLTI2NzAtXHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSB8fFxubW0vbWVtY29udHJvbC5jOjI2NzE6XHQgICAgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIGJhdGNoLCBcdTAwMjZjb3VudGVyKSkge1xubW0vbWVtY29udHJvbC5jOjI2NzI6XHRcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIGJhdGNoLCBcdTAwMjZjb3VudGVyKSlcbm1tL21lbWNvbnRyb2wuYy0yNjczLVx0XHRcdGdvdG8gZG9uZV9yZXN0b2NrO1xuLS1cbm1tL21lbWNvbnRyb2wuYy0yODU3LVxubW0vbWVtY29udHJvbC5jOjI4NTg6c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxubW0vbWVtY29udHJvbC5jLTI4NTktXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jLTI4NjMtXG5tbS9tZW1jb250cm9sLmM6Mjg2NDpcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTI4NjUtfVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zMTU3PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG4tLVxubW0vbWVtY29udHJvbC5jLTMxNjQtXG5tbS9tZW1jb250cm9sLmM6MzE2NTpcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTMxNjYtXHRpZiAocmV0KVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MjA1PXN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTIxMy1cdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcbm1tL21lbWNvbnRyb2wuYzo1MjE0Olx0XHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG5tbS9tZW1jb250cm9sLmMtNTIxNS1cdGlmIChyZXQpIHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTYyNT1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01NjMyLVxubW0vbWVtY29udHJvbC5jOjU2MzM6XHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XG5tbS9tZW1jb250cm9sLmMtNTYzNC1cdFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XG4tLVxubW0vbWVtY29udHJvbC5jPTU2OTE9aW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTcyOC0vKipcbm1tL21lbWNvbnRyb2wuYzo1NzI5OiAqIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAgLSB0cnkgY2hhcmdpbmcgc3dhcCBzcGFjZSBmb3IgYSBmb2xpb1xubW0vbWVtY29udHJvbC5jLTU3MzAtICogQGZvbGlvOiBmb2xpbyBiZWluZyBhZGRlZCB0byBzd2FwXG4tLVxubW0vbWVtY29udHJvbC5jLTU3MzUtICovXG5tbS9tZW1jb250cm9sLmM6NTczNjppbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWVtY29udHJvbC5jLTU3Mzcte1xuLS1cbm1tL21lbWNvbnRyb2wuYy01NzY0LVx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIFx1MDAyNlx1MDAyNlxubW0vbWVtY29udHJvbC5jOjU3NjU6XHQgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzLCBcdTAwMjZjb3VudGVyKSkge1xubW0vbWVtY29udHJvbC5jLTU3NjYtXHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ1NgoJCQkJCQkJb3V0cHV0OiAyNjcKCQkJCQkJCXRob3VnaHRzOiA3NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBwYXRjaCB0byBgdHJ5X2NoYXJnZV9tZW1jZ2AuIFRoZSBrZXkgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB0aGUgcmV0dXJuIHBhdGggYW5kIGVycm9yIGhhbmRsaW5nLiBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGEgYHJldGAgdmFyaWFibGUgdG8gY2FwdHVyZSB0aGUgcmV0dXJuIHZhbHVlLCB0aGUgY29uc29saWRhdGlvbiBvZiB0aGUgcmV0dXJuIHBhdGhzIHRocm91Z2ggYW4gYG91dDpgIGxhYmVsLCBhbmQgdGhlIGNvbnNpc3RlbnQgY2FsbCB0byBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIHdoZW4gYSBtZW1vcnkgY2hhcmdlIGZhaWxzLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgc2VlbXMgbGlrZSBpdCBtaWdodCBiZSBsb2dpYyBjaGFuZ2VzIHRoYXQgZG8gbm90IGNhdXNlIGEgS01TQU4gY29uY2Vybi4KCk5vdywgbGV0JiMzOTtzIHJpZ29yb3VzbHkgZ28gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEuIEZpcnN0LCBhbSBJIGRlYWxpbmcgd2l0aCBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGFyZSBub3cgZXhwb3NlZCB0byB1c2Vyc3BhY2U/IE5vLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGNoYW5nZSB3aGF0JiMzOTtzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBTZWNvbmQsIGFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgYnJhbmNoZXMgdGhhdCBkZXBlbmQgb24gKnVuaW5pdGlhbGl6ZWQqIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyBObywgSSYjMzk7bSBjYXJlZnVsbHkgY2hlY2tpbmcgdGhlIGNvZGUgYW5kIGFsbCB0aGUgbG9jYWwgdmFyaWFibGVzIHVzZWQgKGByZXRgLCBgcmFpc2VkX21heF9ldmVudGAsIGV0Yy4pIGFyZSBkZWZpbml0ZWx5IGluaXRpYWxpemVkIGJlZm9yZSBhbnkgZXZhbHVhdGlvbiBvciBkZXJlZmVyZW5jaW5nIGhhcHBlbnMuIFRoaXJkLCBhcmUgdGhlcmUgbmV3IGFsbG9jYXRpb25zIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG1pZ2h0IGJlIHJlYWQgbGF0ZXI/IE5vLCB0aGlzIGlzIHB1cmVseSBtZW1vcnkgY2dyb3VwIGxvZ2ljLiBGb3VydGgsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJ1ZmZlciBhY2Nlc3MgdmlvbGF0aW9ucz8gTm8sIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBtb2RpZnkgYW55IGNvZGUgdGhhdCBpbnZvbHZlcyB0aGF0IHJpc2suCgpTaW5jZSB0aGlzIGlzIHB1cmVseSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGFuZCBldmVudCByZXBvcnRpbmcsIEkgYW0gdmVyeSBjb25maWRlbnQgdGhhdCBhbnkgYnVncyB3b3VsZCBiZSBsb2dpYyBidWdzLCBhY2NvdW50aW5nIGVycm9ycywgb3IgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBsb2NraW5nIGlzc3Vlcy4gVGhvc2UgYXJlIGFscmVhZHkgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhpcyBpcyBub3QgS01TQU4mIzM5O3MgZG9tYWluLgoKU28sIGZvciBteSBjb250cmFzdGluZyByZWFzb25pbmcsIEkgY2FuIHN1bW1hcml6ZSB0aGUgcGF0Y2ggYXMgZW5zdXJpbmcgYSBgTUVNQ0dfTUFYYCBldmVudCBpcyByYWlzZWQgd2hlbiBhIG1lbW9yeSBjaGFyZ2UgcmVxdWVzdCBmYWlscy4gS01TQU4gdGFyZ2V0cyBhcmUgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZGF0YSBidWZmZXJzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZSB0byBjb250cm9sIGZsb3cgb3IgbG9ja2luZyBpbiBgX19tZW1jZ19tZW1vcnlfZXZlbnRgLCB3aGljaCBpcyBjb3ZlcmVkIGJ5IEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgSSBjb25jbHVkZSB0aGF0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24mIzM5O3Qgd2FycmFudGVkLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBwcm92aWRlIGBOZWVkc0tNU0FOID0gZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdHJ5X2NoYXJnZV9tZW1jZygpYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBlbnN1cmUgdGhhdCBhIGBNRU1DR19NQVhgIG1lbW9yeSBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiBhbiBhbGxvY2F0aW9uIGNoYXJnZSByZXF1ZXN0IGlzIHJlamVjdGVkIHdpdGggYC1FTk9NRU1gLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgdmFyaWFibGUgYHJldCA9IDBgLCBzZXRzIGByZXQgPSAtRU5PTUVNYCBvbiBmYWlsdXJlLCBhbmQgcm91dGVzIHRocm91Z2ggYSBjb21tb24gYG91dDpgIGxhYmVsIHRvIHJhaXNlIHRoZSBldmVudCBiZWZvcmUgcmV0dXJuaW5nIGByZXRgLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIChzdGFjay9oZWFwL3BhZ2VzKSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIGNoYW5nZXMgaGVyZSBkbyBub3QgaW52b2x2ZSBjb3B5aW5nIGRhdGEgc3RydWN0dXJlcyBvciBidWZmZXJzIHRvIHVzZXIgc3BhY2UsIGFsbG9jYXRpbmcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGByZXRgLCBgcmFpc2VkX21heF9ldmVudGAsIGBtZW1fb3Zlcl9saW1pdGApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxuLSBBbnkgcG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGNvbnRyb2wgZmxvdyBidWdzLCBtZW1jZyBldmVudCBjb3VudGVyIG1hbmlwdWxhdGlvbiwgbG9ja2luZyBvciBzdGF0ZSB0cmFja2luZyBkdXJpbmcgbWVtY2cgcmVjbGFpbS9ldmVudHMpIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0cnlfY2hhcmdlX21lbWNnKClgIGluIGBtbS9tZW1jb250cm9sLmNgIHRvIGVuc3VyZSB0aGF0IGEgYE1FTUNHX01BWGAgbWVtb3J5IGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIGFuIGFsbG9jYXRpb24gY2hhcmdlIHJlcXVlc3QgaXMgcmVqZWN0ZWQgd2l0aCBgLUVOT01FTWAuIEl0IGludHJvZHVjZXMgYSBsb2NhbCB2YXJpYWJsZSBgcmV0ID0gMGAsIHNldHMgYHJldCA9IC1FTk9NRU1gIG9uIGZhaWx1cmUsIGFuZCByb3V0ZXMgdGhyb3VnaCBhIGNvbW1vbiBgb3V0OmAgbGFiZWwgdG8gcmFpc2UgdGhlIGV2ZW50IGJlZm9yZSByZXR1cm5pbmcgYHJldGAuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgKHN0YWNrL2hlYXAvcGFnZXMpIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBoZXJlIGRvIG5vdCBpbnZvbHZlIGNvcHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgdG8gdXNlciBzcGFjZSwgYWxsb2NhdGluZyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYHJldGAsIGByYWlzZWRfbWF4X2V2ZW50YCwgYG1lbV9vdmVyX2xpbWl0YCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG4tIEFueSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgY29udHJvbCBmbG93IGJ1Z3MsIG1lbWNnIGV2ZW50IGNvdW50ZXIgbWFuaXB1bGF0aW9uLCBsb2NraW5nIG9yIHN0YXRlIHRyYWNraW5nIGR1cmluZyBtZW1jZyByZWNsYWltL2V2ZW50cykgYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMsIEtBU0FOLCBhbmQgTE9DS0RFUC5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1Mjo0Ny45MzU3Nzc0MTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk3MzEwMjk0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX21lbV9jZ3JvdXBfY2hhcmdlXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCIsXG4gICAgXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIixcbiAgICBcIm1lbV9jZ3JvdXBfc2tfY2hhcmdlXCIsXG4gICAgXCJfX21lbWNnX21lbW9yeV9ldmVudFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRyeV9jaGFyZ2VfbWVtY2coKWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gZW5zdXJlIHRoYXQgYSBgTUVNQ0dfTUFYYCBtZW1vcnkgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gYW4gYWxsb2NhdGlvbiBjaGFyZ2UgcmVxdWVzdCBpcyByZWplY3RlZCB3aXRoIGAtRU5PTUVNYC4gSXQgaW50cm9kdWNlcyBhIGxvY2FsIHZhcmlhYmxlIGByZXQgPSAwYCwgc2V0cyBgcmV0ID0gLUVOT01FTWAgb24gZmFpbHVyZSwgYW5kIHJvdXRlcyB0aHJvdWdoIGEgY29tbW9uIGBvdXQ6YCBsYWJlbCB0byByYWlzZSB0aGUgZXZlbnQgYmVmb3JlIHJldHVybmluZyBgcmV0YC5cXG5cXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyAoc3RhY2svaGVhcC9wYWdlcykgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGhlcmUgZG8gbm90IGludm9sdmUgY29weWluZyBkYXRhIHN0cnVjdHVyZXMgb3IgYnVmZmVycyB0byB1c2VyIHNwYWNlLCBhbGxvY2F0aW5nIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgbG9jYWwgdmFyaWFibGVzIChgcmV0YCwgYHJhaXNlZF9tYXhfZXZlbnRgLCBgbWVtX292ZXJfbGltaXRgKSBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG4tIEFueSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgY29udHJvbCBmbG93IGJ1Z3MsIG1lbWNnIGV2ZW50IGNvdW50ZXIgbWFuaXB1bGF0aW9uLCBsb2NraW5nIG9yIHN0YXRlIHRyYWNraW5nIGR1cmluZyBtZW1jZyByZWNsYWltL2V2ZW50cykgYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMsIEtBU0FOLCBhbmQgTE9DS0RFUC5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdHJ5X2NoYXJnZV9tZW1jZygpIHRvIGVuc3VyZSB0aGF0IE1FTUNHX01BWCBldmVudHMgYXJlIHByb3Blcmx5IHJhaXNlZCB2aWEgX19tZW1jZ19tZW1vcnlfZXZlbnQoKSB3aGVuIG1lbW9yeSBjZ3JvdXAgYWxsb2NhdGlvbiByZXF1ZXN0cyBhcmUgcmVqZWN0ZWQgd2l0aCAtRU5PTUVNLiBUaGlzIGFsdGVycyBjb3JlIG1lbWNnIGxpbWl0IGV2ZW50IGhhbmRsaW5nIGFuZCBtZW1vcnkgY2hhcmdpbmcgY29udHJvbCBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1Mjo0Ny45MzU3ODM1OTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NzU0NTUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ2MzY5ODNmNjVjZjEwMmMyOWU0NzQwNmE1ZTgxYThhNTY2YjlmMjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMjo1Mjo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCAxMjcxZDM5MGI2MTdlLi4xNThiMDU2MmU4ZGYzIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0yNjU2LDEwICsyNjU2LDExIEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbiBcXHRib29sIHJhaXNlZF9tYXhfZXZlbnQgPSBmYWxzZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XFxuIFxcdGJvb2wgYWxsb3dfc3Bpbm5pbmcgPSBnZnBmbGFnc19hbGxvd19zcGlubmluZyhnZnBfbWFzayk7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXG4gcmV0cnk6XFxuIFxcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0aWYgKCFhbGxvd19zcGlubmluZylcXG4gXFx0XFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXFxuQEAgLTI3NzAsMTYgKzI3NzEsMTEgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuIFxcdCAqIHB1dCB0aGUgYnVyZGVuIG9mIHJlY2xhaW0gb24gcmVndWxhciBhbGxvY2F0aW9uIHJlcXVlc3RzXFxuIFxcdCAqIGFuZCBsZXQgdGhlc2UgZ28gdGhyb3VnaCBhcyBwcml2aWxlZ2VkIGFsbG9jYXRpb25zLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCEoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfTk9GQUlMIHwgX19HRlBfSElHSCkpKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0aWYgKCEoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfTk9GQUlMIHwgX19HRlBfSElHSCkpKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIGZvcmNlOlxcbi1cXHQvKlxcbi1cXHQgKiBJZiB0aGUgYWxsb2NhdGlvbiBoYXMgdG8gYmUgZW5mb3JjZWQsIGRvbid0IGZvcmdldCB0byByYWlzZVxcbi1cXHQgKiBhIE1FTUNHX01BWCBldmVudC5cXG4tXFx0ICovXFxuLVxcdGlmICghcmFpc2VkX21heF9ldmVudClcXG4tXFx0XFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xcbi1cXG4gXFx0LypcXG4gXFx0ICogVGhlIGFsbG9jYXRpb24gZWl0aGVyIGNhbid0IGZhaWwgb3Igd2lsbCBsZWFkIHRvIG1vcmUgbWVtb3J5XFxuIFxcdCAqIGJlaW5nIGZyZWVkIHZlcnkgc29vbi4gIEFsbG93IG1lbW9yeSB1c2FnZSBnbyBvdmVyIHRoZSBsaW1pdFxcbkBAIC0yNzg5LDcgKzI3ODUsMTUgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuIFxcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXFxuIFxcdFxcdHBhZ2VfY291bnRlcl9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgbnJfcGFnZXMpO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK291dDpcXG4rXFx0LypcXG4rXFx0ICogRG9uJ3QgZm9yZ2V0IHRvIHJhaXNlIGEgTUVNQ0dfTUFYIGV2ZW50IGZvciBmb3JjZWQgb3IgcmVqZWN0ZWRcXG4rXFx0ICogcmVxdWVzdHMuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXFxuK1xcdFxcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIFxcbiBkb25lX3Jlc3RvY2s6XFxuIFxcdGlmIChiYXRjaCBcXHUwMDNlIG5yX3BhZ2VzKVxcbkBAIC0yODQ4LDcgKzI4NTIsNyBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4gXFx0ICAgICEoY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9NRU1BTExPQykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcXG4gXFx0XFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1Mjo0OC41MTQyNjQ5MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU5NjA2MzkyMjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19tZW1fY2dyb3VwX2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiLFxuICAgIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCIsXG4gICAgXCJtZW1fY2dyb3VwX3NrX2NoYXJnZVwiLFxuICAgIFwiX19tZW1jZ19tZW1vcnlfZXZlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0cnlfY2hhcmdlX21lbWNnKCkgdG8gZW5zdXJlIHRoYXQgTUVNQ0dfTUFYIGV2ZW50cyBhcmUgcHJvcGVybHkgcmFpc2VkIHZpYSBfX21lbWNnX21lbW9yeV9ldmVudCgpIHdoZW4gbWVtb3J5IGNncm91cCBhbGxvY2F0aW9uIHJlcXVlc3RzIGFyZSByZWplY3RlZCB3aXRoIC1FTk9NRU0uIFRoaXMgYWx0ZXJzIGNvcmUgbWVtY2cgbGltaXQgZXZlbnQgaGFuZGxpbmcgYW5kIG1lbW9yeSBjaGFyZ2luZyBjb250cm9sIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ2MzY5ODNmNjVjZjEwMmMyOWU0NzQwNmE1ZTgxYThhNTY2YjlmMjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDAyOjUyOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxMjcxZDM5MGI2MTdlLi4xNThiMDU2MmU4ZGYzIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0yNjU2LDEwICsyNjU2LDExIEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0Ym9vbCByYWlzZWRfbWF4X2V2ZW50ID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIHBmbGFncztcbiBcdGJvb2wgYWxsb3dfc3Bpbm5pbmcgPSBnZnBmbGFnc19hbGxvd19zcGlubmluZyhnZnBfbWFzayk7XG4rXHRpbnQgcmV0ID0gMDtcbiBcbiByZXRyeTpcbiBcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0aWYgKCFhbGxvd19zcGlubmluZylcbiBcdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG5AQCAtMjc3MCwxNiArMjc3MSwxMSBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdCAqIHB1dCB0aGUgYnVyZGVuIG9mIHJlY2xhaW0gb24gcmVndWxhciBhbGxvY2F0aW9uIHJlcXVlc3RzXG4gXHQgKiBhbmQgbGV0IHRoZXNlIGdvIHRocm91Z2ggYXMgcHJpdmlsZWdlZCBhbGxvY2F0aW9ucy5cbiBcdCAqL1xuLVx0aWYgKCEoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKSkpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0aWYgKCEoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKSkpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4gZm9yY2U6XG4tXHQvKlxuLVx0ICogSWYgdGhlIGFsbG9jYXRpb24gaGFzIHRvIGJlIGVuZm9yY2VkLCBkb24ndCBmb3JnZXQgdG8gcmFpc2Vcbi1cdCAqIGEgTUVNQ0dfTUFYIGV2ZW50LlxuLVx0ICovXG4tXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXG4tXHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgYWxsb2NhdGlvbiBlaXRoZXIgY2FuJ3QgZmFpbCBvciB3aWxsIGxlYWQgdG8gbW9yZSBtZW1vcnlcbiBcdCAqIGJlaW5nIGZyZWVkIHZlcnkgc29vbi4gIEFsbG93IG1lbW9yeSB1c2FnZSBnbyBvdmVyIHRoZSBsaW1pdFxuQEAgLTI3ODksNyArMjc4NSwxNSBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXG4gXHRcdHBhZ2VfY291bnRlcl9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIG5yX3BhZ2VzKTtcbiBcbi1cdHJldHVybiAwO1xuK291dDpcbitcdC8qXG4rXHQgKiBEb24ndCBmb3JnZXQgdG8gcmFpc2UgYSBNRU1DR19NQVggZXZlbnQgZm9yIGZvcmNlZCBvciByZWplY3RlZFxuK1x0ICogcmVxdWVzdHMuXG4rXHQgKi9cbitcdGlmICghcmFpc2VkX21heF9ldmVudClcbitcdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xuK1xuK1x0cmV0dXJuIHJldDtcbiBcbiBkb25lX3Jlc3RvY2s6XG4gXHRpZiAoYmF0Y2ggXHUwMDNlIG5yX3BhZ2VzKVxuQEAgLTI4NDgsNyArMjg1Miw3IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0ICAgICEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcbiBcdFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1Mjo0OC41MTQyNjcyNzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTkyNDA5ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTWVtb3J5IENvbnRyb2wgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgbW9kaWZpZWQgZmlsZSwgYG1tL21lbWNvbnRyb2wuY2AuIFRoZSBmYWN0IHRoYXQgaXQncyB0b3VjaGluZyBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXMgYSBrZXkgaW5kaWNhdG9yIG9mIG1lbW9yeSByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBhY2NvdW50aW5nIGNoYW5nZXMuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBidWcgZml4ZXMgdG8gcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzLCBvciBldmVuIG5ldyBmZWF0dXJlcyByZWxhdGVkIHRvIG1lbWNnJ3MgYWJpbGl0eSB0byBsaW1pdCBhbmQgY29udHJvbCBtZW1vcnkgdXNhZ2UuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI2NTYuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBpbW1lZGlhdGUgY29udGV4dCBvZiB0aGUgY2hhbmdlLiBUaW1lIHRvIHB1bGwgdXAgYG1tL21lbWNvbnRyb2wuY2AgdXNpbmcgdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQgc28gSSBjYW4gc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGF0IGFyZWEuIFRoaXMgc2hvdWxkIGNsYXJpZnkgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGlmIGFueSwgYXJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIG9mIHRoaXMgcGF0Y2guIEtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCwgYW5kIHRoZSBmdW5jdGlvbidzIG92ZXJhbGwgcHVycG9zZSB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTI6NTUuNTA2NjgwMTg2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjUwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY1MDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX292ZXJfbGltaXQ7XFxuMjY1MTpcXHRcXHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xcbjI2NTI6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XFxuMjY1MzpcXHRcXHRib29sIHBhc3NlZF9vb20gPSBmYWxzZTtcXG4yNjU0OlxcdFxcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XFxuMjY1NTpcXHRcXHRib29sIGRyYWluZWQgPSBmYWxzZTtcXG4yNjU2OlxcdFxcdGJvb2wgcmFpc2VkX21heF9ldmVudCA9IGZhbHNlO1xcbjI2NTc6XFx0XFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XFxuMjY1ODpcXHRcXHRib29sIGFsbG93X3NwaW5uaW5nID0gZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZ2ZwX21hc2spO1xcbjI2NTk6XFx0XFx0aW50IHJldCA9IDA7XFxuMjY2MDpcXHRcXG4yNjYxOlxcdHJldHJ5OlxcbjI2NjI6XFx0XFx0aWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSlcXG4yNjYzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjY2NDpcXHRcXG4yNjY1OlxcdFxcdGlmICghYWxsb3dfc3Bpbm5pbmcpXFxuMjY2NjpcXHRcXHRcXHQvKiBBdm9pZCB0aGUgcmVmaWxsIGFuZCBmbHVzaCBvZiB0aGUgb2xkZXIgc3RvY2sgKi9cXG4yNjY3OlxcdFxcdFxcdGJhdGNoID0gbnJfcGFnZXM7XFxuMjY2ODpcXHRcXG4yNjY5OlxcdFxcdHJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XFxuMjY3MDpcXHRcXHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSB8fFxcbjI2NzE6XFx0XFx0ICAgIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtc3csIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpIHtcXG4yNjcyOlxcdFxcdFxcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSlcXG4yNjczOlxcdFxcdFxcdFxcdGdvdG8gZG9uZV9yZXN0b2NrO1xcbjI2NzQ6XFx0XFx0XFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcXG4yNjc1OlxcdFxcdFxcdFxcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBiYXRjaCk7XFxuMjY3NjpcXHRcXHRcXHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbW9yeSk7XFxuMjY3NzpcXHRcXHR9IGVsc2Uge1xcbjI2Nzg6XFx0XFx0XFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XFxuMjY3OTpcXHRcXHRcXHRyZWNsYWltX29wdGlvbnMgXFx1MDAyNj0gfk1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XFxuMjY4MDpcXHRcXHR9XFxuMjY4MTpcXHRcXG4yNjgyOlxcdFxcdGlmIChiYXRjaCBcXHUwMDNlIG5yX3BhZ2VzKSB7XFxuMjY4MzpcXHRcXHRcXHRiYXRjaCA9IG5yX3BhZ2VzO1xcbjI2ODQ6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yNjg1OlxcdFxcdH1cXG4yNjg2OlxcdFxcbjI2ODc6XFx0XFx0LypcXG4yNjg4OlxcdFxcdCAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvXFxuMjY4OTpcXHRcXHQgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksXFxuMjY5MDpcXHRcXHQgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrXFxuMjY5MTpcXHRcXHQgKiB1bmRlciB0aGUgbGltaXQgb3ZlciB0cmlnZ2VyaW5nIE9PTSBraWxscyBpbiB0aGVzZSBjYXNlcy5cXG4yNjkyOlxcdFxcdCAqL1xcbjI2OTM6XFx0XFx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpKVxcbjI2OTQ6XFx0XFx0XFx0Z290byBmb3JjZTtcXG4yNjk1OlxcdFxcbjI2OTY6XFx0XFx0aWYgKHVubGlrZWx5KHRhc2tfaW5fbWVtY2dfb29tKGN1cnJlbnQpKSlcXG4yNjk3OlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjY5ODpcXHRcXG4yNjk5OlxcdFxcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxcbjI3MDA6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzAxOlxcdFxcbjI3MDI6XFx0XFx0LypcXG4yNzAzOlxcdFxcdCAqIE9PTSB2aWN0aW0gc3RpbGwgbmVlZHMgdG8gY2hhcmdlIG1lbW9yeSB0byBleGl0LiBPT00gcmVhcGVyIHNob3VsZFxcbjI3MDQ6XFx0XFx0ICogaGVscCBidXQgaXQgbWlnaHQgZmFpbCBvbiBtbWFwX2xvY2sgY29udGVudGlvbi4gSWYgdGhlIHZpY3RpbSBpcyBhXFxuMjcwNTpcXHRcXHQgKiBsYXJnZSB0aHJlYWQgZ3JvdXAgdGhlbiBhbGwgZXhpdGluZyB0aHJlYWRzIG1pZ2h0IGNvbXBldGUgb24gb29tX2xvY2tcXG4yNzA2OlxcdFxcdCAqIGp1c3QgdG8gbGVhcm4gdGhhdCB0aGVyZSBpcyBub3RoaW5nIHJlYWxseSBraWxsYWJsZSBhbnltb3JlLiBCYWlsXFxuMjcwNzpcXHRcXHQgKiBvdXQgZWFybHkgYW5kIGZhaWwgdGhlIGNoYXJnZSB0byBleHBlZGl0ZSB0aGVpciBleGl0LiBUaGV5IGFyZVxcbjI3MDg6XFx0XFx0ICogY29uc2lkZXJlZCBmdWxseSByZWNsYWltZWQgYnkgdGhlIG9vbSByZWFwZXIgYW5kIHRoZXkgc2hvdWxkbid0XFxuMjcwOTpcXHRcXHQgKiBjb250cmlidXRlIGZ1cnRoZXIgY2hhcmdlcy5cXG4yNzEwOlxcdFxcdCAqL1xcbjI3MTE6XFx0XFx0aWYgKHRza19pc19vb21fdmljdGltKGN1cnJlbnQpIFxcdTAwMjZcXHUwMDI2XFxuMjcxMjpcXHRcXHQgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIGN1cnJlbnQtXFx1MDAzZXNpZ25hbC1cXHUwMDNlb29tX21tKSlcXG4yNzEzOlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjcxNDpcXHRcXG4yNzE1OlxcdFxcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcXG4yNzE2OlxcdFxcdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xcbjI3MTc6XFx0XFxuMjcxODpcXHRcXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxuMjcxOTpcXHRcXHRucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcyxcXG4yNzIwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTtcXG4yNzIxOlxcdFxcdHBzaV9tZW1zdGFsbF9sZWF2ZShcXHUwMDI2cGZsYWdzKTtcXG4yNzIyOlxcdFxcbjI3MjM6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfbWFyZ2luKG1lbV9vdmVyX2xpbWl0KSBcXHUwMDNlPSBucl9wYWdlcylcXG4yNzI0OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjcyNTpcXHRcXG4yNzI2OlxcdFxcdGlmICghZHJhaW5lZCkge1xcbjI3Mjc6XFx0XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTtcXG4yNzI4OlxcdFxcdFxcdGRyYWluZWQgPSB0cnVlO1xcbjI3Mjk6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yNzMwOlxcdFxcdH1cXG4yNzMxOlxcdFxcbjI3MzI6XFx0XFx0aWYgKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfTk9SRVRSWSlcXG4yNzMzOlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjczNDpcXHRcXHQvKlxcbjI3MzU6XFx0XFx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cXG4yNzM2OlxcdFxcdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXFxuMjczNzpcXHRcXHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cXG4yNzM4OlxcdFxcdCAqXFxuMjczOTpcXHRcXHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxcbjI3NDA6XFx0XFx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcXG4yNzQxOlxcdFxcdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cXG4yNzQyOlxcdFxcdCAqL1xcbjI3NDM6XFx0XFx0aWYgKG5yX3JlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiBucl9wYWdlcyBcXHUwMDNjPSAoMSBcXHUwMDNjXFx1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikpXFxuMjc0NDpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjI3NDU6XFx0XFxuMjc0NjpcXHRcXHRpZiAobnJfcmV0cmllcy0tKVxcbjI3NDc6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yNzQ4OlxcdFxcbjI3NDk6XFx0XFx0aWYgKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfUkVUUllfTUFZRkFJTClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTI6NTUuNTA2OTc3NTY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY5NDg3NjQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGJhc2VkIG9uIHlvdXIgaW5zdHJ1Y3Rpb25zOlxuXG4qKkRpdmluZyBpbnRvIG1tL21lbWNvbnRyb2wuYyoqXG5cbk9rYXksIGxldCdzIHpvb20gaW4gb24gbW0vbWVtY29udHJvbC5jLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDI3NTAgdG8gMjg2MC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIHNlY3Rpb24gaGFuZGxlcy4uLiBsaWtlbHkgc29tZSBjcml0aWNhbCBhc3BlY3Qgb2YgbWVtb3J5IGNvbnRyb2wgb3IgYWNjb3VudGluZy4gR2l2ZW4gdGhlIGNvbnRleHQsIEknbSBndWVzc2luZyB0aGlzIG1pZ2h0IGludm9sdmUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gY2dyb3VwIG1lbW9yeSBsaW1pdHMgYW5kIHBvdGVudGlhbGx5IHRoZSBwYWdlIHJlY2xhaW0gcHJvY2Vzcywgb3IgcGVyaGFwcyBob3cgdGhlIG1lbW9yeSBjb250cm9sbGVyIHJlYWN0cyB0byBoaWdoLW1lbW9yeSBwcmVzc3VyZSB3aXRoaW4gYSBzcGVjaWZpYyBjZ3JvdXAuIEknbSBtZW50YWxseSBwYXJzaW5nIHRoZSBsaWtlbHkgZnVuY3Rpb24gY2FsbHMgYW5kIGRhdGEgc3RydWN0dXJlcyBJJ2xsIGVuY291bnRlcjogYG1lbV9jZ3JvdXBfYCwgYHBhZ2VfY291bnRlcl9gLCB0aGUgdXN1YWwgc3VzcGVjdHMuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZSB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gYSBzcGVjaWZpYyBzY2VuYXJpbyBJJ20gdHJvdWJsZXNob290aW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvZiByYWNlIGNvbmRpdGlvbnMsIHN1YnRsZSBvdmVyZmxvdyBpc3N1ZXMsIG9yIHBlcmhhcHMgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9ucyBjb3VsZCBiZSBhcHBsaWVkLiBUaGlzIHNlY3Rpb24gaXMgcHJvYmFibHkgaW52b2x2ZWQgd2l0aCBhbGxvY2F0aW5nIG1lbW9yeSwgY2hlY2tpbmcgbGltaXRzLCByZWxlYXNpbmcgbWVtb3J5LCB3aGljaCBhcmUgcHJldHR5IGNyaXRpY2FsIHBpZWNlcyBvZiBjb2RlIGZvciBhbnkgbWVtb3J5IGNvbnRyb2xsZXIuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGFjdHVhbGx5IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUyOjU5LjIwMTg1NjM3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc1MCxcbiAgXCJMaW5lQ291bnRcIjogMTEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3NTA6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzUxOlxcdFxcbjI3NTI6XFx0XFx0LyogQXZvaWQgZW5kbGVzcyBsb29wIGZvciB0YXNrcyBieXBhc3NlZCBieSB0aGUgb29tIGtpbGxlciAqL1xcbjI3NTM6XFx0XFx0aWYgKHBhc3NlZF9vb20gXFx1MDAyNlxcdTAwMjYgdGFza19pc19keWluZygpKVxcbjI3NTQ6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzU1OlxcdFxcbjI3NTY6XFx0XFx0LypcXG4yNzU3OlxcdFxcdCAqIGtlZXAgcmV0cnlpbmcgYXMgbG9uZyBhcyB0aGUgbWVtY2cgb29tIGtpbGxlciBpcyBhYmxlIHRvIG1ha2VcXG4yNzU4OlxcdFxcdCAqIGEgZm9yd2FyZCBwcm9ncmVzcyBvciBieXBhc3MgdGhlIGNoYXJnZSBpZiB0aGUgb29tIGtpbGxlclxcbjI3NTk6XFx0XFx0ICogY291bGRuJ3QgbWFrZSBhbnkgcHJvZ3Jlc3MuXFxuMjc2MDpcXHRcXHQgKi9cXG4yNzYxOlxcdFxcdGlmIChtZW1fY2dyb3VwX29vbShtZW1fb3Zlcl9saW1pdCwgZ2ZwX21hc2ssXFxuMjc2MjpcXHRcXHRcXHRcXHQgICBnZXRfb3JkZXIobnJfcGFnZXMgKiBQQUdFX1NJWkUpKSkge1xcbjI3NjM6XFx0XFx0XFx0cGFzc2VkX29vbSA9IHRydWU7XFxuMjc2NDpcXHRcXHRcXHRucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG4yNzY1OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjc2NjpcXHRcXHR9XFxuMjc2NzpcXHRub21lbTpcXG4yNzY4OlxcdFxcdC8qXFxuMjc2OTpcXHRcXHQgKiBNZW1jZyBkb2Vzbid0IGhhdmUgYSBkZWRpY2F0ZWQgcmVzZXJ2ZSBmb3IgYXRvbWljXFxuMjc3MDpcXHRcXHQgKiBhbGxvY2F0aW9ucy4gQnV0IGxpa2UgdGhlIGdsb2JhbCBhdG9taWMgcG9vbCwgd2UgbmVlZCB0b1xcbjI3NzE6XFx0XFx0ICogcHV0IHRoZSBidXJkZW4gb2YgcmVjbGFpbSBvbiByZWd1bGFyIGFsbG9jYXRpb24gcmVxdWVzdHNcXG4yNzcyOlxcdFxcdCAqIGFuZCBsZXQgdGhlc2UgZ28gdGhyb3VnaCBhcyBwcml2aWxlZ2VkIGFsbG9jYXRpb25zLlxcbjI3NzM6XFx0XFx0ICovXFxuMjc3NDpcXHRcXHRpZiAoIShnZnBfbWFzayBcXHUwMDI2IChfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKSkpIHtcXG4yNzc1OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMjc3NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4yNzc3OlxcdFxcdH1cXG4yNzc4OlxcdGZvcmNlOlxcbjI3Nzk6XFx0XFx0LypcXG4yNzgwOlxcdFxcdCAqIFRoZSBhbGxvY2F0aW9uIGVpdGhlciBjYW4ndCBmYWlsIG9yIHdpbGwgbGVhZCB0byBtb3JlIG1lbW9yeVxcbjI3ODE6XFx0XFx0ICogYmVpbmcgZnJlZWQgdmVyeSBzb29uLiAgQWxsb3cgbWVtb3J5IHVzYWdlIGdvIG92ZXIgdGhlIGxpbWl0XFxuMjc4MjpcXHRcXHQgKiB0ZW1wb3JhcmlseSBieSBmb3JjZSBjaGFyZ2luZyBpdC5cXG4yNzgzOlxcdFxcdCAqL1xcbjI3ODQ6XFx0XFx0cGFnZV9jb3VudGVyX2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgbnJfcGFnZXMpO1xcbjI3ODU6XFx0XFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcXG4yNzg2OlxcdFxcdFxcdHBhZ2VfY291bnRlcl9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgbnJfcGFnZXMpO1xcbjI3ODc6XFx0XFxuMjc4ODpcXHRvdXQ6XFxuMjc4OTpcXHRcXHQvKlxcbjI3OTA6XFx0XFx0ICogRG9uJ3QgZm9yZ2V0IHRvIHJhaXNlIGEgTUVNQ0dfTUFYIGV2ZW50IGZvciBmb3JjZWQgb3IgcmVqZWN0ZWRcXG4yNzkxOlxcdFxcdCAqIHJlcXVlc3RzLlxcbjI3OTI6XFx0XFx0ICovXFxuMjc5MzpcXHRcXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXFxuMjc5NDpcXHRcXHRcXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XFxuMjc5NTpcXHRcXG4yNzk2OlxcdFxcdHJldHVybiByZXQ7XFxuMjc5NzpcXHRcXG4yNzk4OlxcdGRvbmVfcmVzdG9jazpcXG4yNzk5OlxcdFxcdGlmIChiYXRjaCBcXHUwMDNlIG5yX3BhZ2VzKVxcbjI4MDA6XFx0XFx0XFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBiYXRjaCAtIG5yX3BhZ2VzKTtcXG4yODAxOlxcdFxcbjI4MDI6XFx0XFx0LypcXG4yODAzOlxcdFxcdCAqIElmIHRoZSBoaWVyYXJjaHkgaXMgYWJvdmUgdGhlIG5vcm1hbCBjb25zdW1wdGlvbiByYW5nZSwgc2NoZWR1bGVcXG4yODA0OlxcdFxcdCAqIHJlY2xhaW0gb24gcmV0dXJuaW5nIHRvIHVzZXJsYW5kLiAgV2UgY2FuIHBlcmZvcm0gcmVjbGFpbSBoZXJlXFxuMjgwNTpcXHRcXHQgKiBpZiBfX0dGUF9SRUNMQUlNIGJ1dCBsZXQncyBhbHdheXMgcHVudCBmb3Igc2ltcGxpY2l0eSBhbmQgc28gdGhhdFxcbjI4MDY6XFx0XFx0ICogR0ZQX0tFUk5FTCBjYW4gY29uc2lzdGVudGx5IGJlIHVzZWQgZHVyaW5nIHJlY2xhaW0uICBAbWVtY2cgaXNcXG4yODA3OlxcdFxcdCAqIG5vdCByZWNvcmRlZCBhcyBpdCBtb3N0IGxpa2VseSBtYXRjaGVzIGN1cnJlbnQncyBhbmQgd29uJ3RcXG4yODA4OlxcdFxcdCAqIGNoYW5nZSBpbiB0aGUgbWVhbnRpbWUuICBBcyBoaWdoIGxpbWl0IGlzIGNoZWNrZWQgYWdhaW4gYmVmb3JlXFxuMjgwOTpcXHRcXHQgKiByZWNsYWltLCB0aGUgY29zdCBvZiBtaXNtYXRjaCBpcyBuZWdsaWdpYmxlLlxcbjI4MTA6XFx0XFx0ICovXFxuMjgxMTpcXHRcXHRkbyB7XFxuMjgxMjpcXHRcXHRcXHRib29sIG1lbV9oaWdoLCBzd2FwX2hpZ2g7XFxuMjgxMzpcXHRcXG4yODE0OlxcdFxcdFxcdG1lbV9oaWdoID0gcGFnZV9jb3VudGVyX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnkpIFxcdTAwM2VcXG4yODE1OlxcdFxcdFxcdFxcdFJFQURfT05DRShtZW1jZy1cXHUwMDNlbWVtb3J5LmhpZ2gpO1xcbjI4MTY6XFx0XFx0XFx0c3dhcF9oaWdoID0gcGFnZV9jb3VudGVyX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwKSBcXHUwMDNlXFxuMjgxNzpcXHRcXHRcXHRcXHRSRUFEX09OQ0UobWVtY2ctXFx1MDAzZXN3YXAuaGlnaCk7XFxuMjgxODpcXHRcXG4yODE5OlxcdFxcdFxcdC8qIERvbid0IGJvdGhlciBhIHJhbmRvbSBpbnRlcnJ1cHRlZCB0YXNrICovXFxuMjgyMDpcXHRcXHRcXHRpZiAoIWluX3Rhc2soKSkge1xcbjI4MjE6XFx0XFx0XFx0XFx0aWYgKG1lbV9oaWdoKSB7XFxuMjgyMjpcXHRcXHRcXHRcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZtZW1jZy1cXHUwMDNlaGlnaF93b3JrKTtcXG4yODIzOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4MjQ6XFx0XFx0XFx0XFx0fVxcbjI4MjU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjgyNjpcXHRcXHRcXHR9XFxuMjgyNzpcXHRcXG4yODI4OlxcdFxcdFxcdGlmIChtZW1faGlnaCB8fCBzd2FwX2hpZ2gpIHtcXG4yODI5OlxcdFxcdFxcdFxcdC8qXFxuMjgzMDpcXHRcXHRcXHRcXHQgKiBUaGUgYWxsb2NhdGluZyB0YXNrcyBpbiB0aGlzIGNncm91cCB3aWxsIG5lZWQgdG8gZG9cXG4yODMxOlxcdFxcdFxcdFxcdCAqIHJlY2xhaW0gb3IgYmUgdGhyb3R0bGVkIHRvIHByZXZlbnQgZnVydGhlciBncm93dGhcXG4yODMyOlxcdFxcdFxcdFxcdCAqIG9mIHRoZSBtZW1vcnkgb3Igc3dhcCBmb290cHJpbnRzLlxcbjI4MzM6XFx0XFx0XFx0XFx0ICpcXG4yODM0OlxcdFxcdFxcdFxcdCAqIFRhcmdldCBzb21lIGJlc3QtZWZmb3J0IGZhaXJuZXNzIGJldHdlZW4gdGhlIHRhc2tzLFxcbjI4MzU6XFx0XFx0XFx0XFx0ICogYW5kIGRpc3RyaWJ1dGUgcmVjbGFpbSB3b3JrIGFuZCBkZWxheSBwZW5hbHRpZXNcXG4yODM2OlxcdFxcdFxcdFxcdCAqIGJhc2VkIG9uIGhvdyBtdWNoIGVhY2ggdGFzayBpcyBhY3R1YWxseSBhbGxvY2F0aW5nLlxcbjI4Mzc6XFx0XFx0XFx0XFx0ICovXFxuMjgzODpcXHRcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2ggKz0gYmF0Y2g7XFxuMjgzOTpcXHRcXHRcXHRcXHRzZXRfbm90aWZ5X3Jlc3VtZShjdXJyZW50KTtcXG4yODQwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4NDE6XFx0XFx0XFx0fVxcbjI4NDI6XFx0XFx0fSB3aGlsZSAoKG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSk7XFxuMjg0MzpcXHRcXG4yODQ0OlxcdFxcdC8qXFxuMjg0NTpcXHRcXHQgKiBSZWNsYWltIGlzIHNldCB1cCBhYm92ZSB0byBiZSBjYWxsZWQgZnJvbSB0aGUgdXNlcmxhbmRcXG4yODQ2OlxcdFxcdCAqIHJldHVybiBwYXRoLiBCdXQgYWxzbyBhdHRlbXB0IHN5bmNocm9ub3VzIHJlY2xhaW0gdG8gYXZvaWRcXG4yODQ3OlxcdFxcdCAqIGV4Y2Vzc2l2ZSBvdmVycnVuIHdoaWxlIHRoZSB0YXNrIGlzIHN0aWxsIGluc2lkZSB0aGVcXG4yODQ4OlxcdFxcdCAqIGtlcm5lbC4gSWYgdGhpcyBpcyBzdWNjZXNzZnVsLCB0aGUgcmV0dXJuIHBhdGggd2lsbCBzZWUgaXRcXG4yODQ5OlxcdFxcdCAqIHdoZW4gaXQgcmVjaGVja3MgdGhlIG92ZXJhZ2UgYW5kIHNpbXBseSBiYWlsIG91dC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTI6NTkuMjAyMTQ3NDQ4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU4NTgxOTgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCdzIGZ1enotd29ydGh5LiBJdCdzIGEgY2hhbmdlIGluIHRoZSBgdHJ5X2NoYXJnZV9tZW1jZ2AgZnVuY3Rpb24uIEJlZm9yZSwgaWYgYW4gYWxsb2NhdGlvbiBmYWlsZWQgKHJldHVybmVkIC1FTk9NRU0pICphbmQqIGAhcmFpc2VkX21heF9ldmVudGAgKHdoaWNoIHdvdWxkIGhhdmUgcHJldmVudGVkIHRoZSBNRU1DR19NQVggZXZlbnQgZnJvbSBiZWluZyByYWlzZWQpLCB0aGUgZnVuY3Rpb24gd291bGQgcmV0dXJuIC1FTk9NRU0gZGlyZWN0bHkgd2l0aG91dCByYWlzaW5nIHRoZSBgTUVNQ0dfTUFYYCBldmVudC4gTm93LCBpdCBzZWVtcyB0aGF0IGV2ZW4gb24gYSAtRU5PTUVNIHJldHVybiwgaXQgKmFsd2F5cyoganVtcHMgdG8gYW4gYG91dDpgIGxhYmVsLCBhbmQgdGhlbiBjb25kaXRpb25hbGx5IHJhaXNlcyB0aGF0IGV2ZW50LlxuXG5UaGUgY3JpdGljYWwgY2hhbmdlIGlzIHRoYXQgbm93IHdlIGFyZSByYWlzaW5nIHRoZSBgTUVNQ0dfTUFYYCBldmVudCBldmVuIHdoZW4gYSByZWd1bGFyIGFsbG9jYXRpb24gZmFpbHMgKHdoZW4gYCFnZnBfbWFzayBcdTAwMjYgKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpYCksIHdoZXJlYXMgYmVmb3JlIGl0IHdvdWxkIG9ubHkgYmUgcmFpc2VkIGZvciBmb3JjZWQgYWxsb2NhdGlvbnMuICBUaGlzIGNvdWxkIGhhdmUgaW50ZXJlc3RpbmcgaW1wbGljYXRpb25zLiBJcyB0aGlzIGEgY2hhbmdlIHRvIGVycm9yIGhhbmRsaW5nPyBUbyB1c2VyLXZpc2libGUgbm90aWZpY2F0aW9ucz9cblxuR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHF1aWNrbHkgY29uc2lkZXIgdGhlIGNyaXRlcmlhIGZvciBcIldvcnRoRnV6emluZy5cIiBUaGlzIHBhdGNoIGNsZWFybHkgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyBhIGNyaXRpY2FsIGNvZGUgcGF0aCwgc28gSSBjYW4gYWxyZWFkeSBydWxlIG91dCB0aGUgY3JpdGVyaWEgdGhhdCB3b3VsZCBwcmV2ZW50IGZ1enppbmcsIGxpa2UgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIHVucmVhY2hhYmxlIGNvZGUsIGV0Yy5cblxuTm93LCBhIGtleSBxdWVzdGlvbiBhcmlzZXM6IHdoYXQncyB0aGUgYmVoYXZpb3Igb2YgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YD8gRG9lcyBgbWVtX292ZXJfbGltaXRgIGhhdmUgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBzdGF0ZSwgYW5kIGlzIHRoaXMgbmV3IHBhdGggYSB2dWxuZXJhYmlsaXR5PyBNeSBzZWFyY2ggaW1tZWRpYXRlbHkgZm9jdXNlcyBvbiBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIHRvIGdldCBhIHByZWNpc2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhIG1vZGlmaWNhdGlvbiB0byBtZW1vcnkgZXZlbnQgY291bnRlciBiZWhhdmlvciwgb3IgaXMgdGhpcyBhIG5ldyBtZW1vcnkgZXZlbnQgdHJpZ2dlcmVkPyBUaGlzIGluZm9ybWF0aW9uIHdpbGwgZGV0ZXJtaW5lIHRoZSByaXNrIGFuZCB0aGUgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzYzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MDQuNzg3OTcwOTI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MzAzNTE1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19tZW1vcnlfZXZlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9OTk3PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tZW1jZ19ldmVudF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTAwMzp2b2lkIF9fbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMDA0LVxcdFxcdFxcdCAgZW51bSBtZW1jZ19tZW1vcnlfZXZlbnQgZXZlbnQsIGJvb2wgYWxsb3dfc3Bpbm5pbmcpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTAwNj1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDgte1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEwMDk6XFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIGV2ZW50LCB0cnVlKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMDEwLX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xODgwPXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xODk4LVxcbm1tL21lbWNvbnRyb2wuYzoxODk5OnZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy0xOTAwLVxcdFxcdFxcdCAgZW51bSBtZW1jZ19tZW1vcnlfZXZlbnQgZXZlbnQsIGJvb2wgYWxsb3dfc3Bpbm5pbmcpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTkyNy19XFxubW0vbWVtY29udHJvbC5jOjE5Mjg6RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jZ19tZW1vcnlfZXZlbnQpO1xcbm1tL21lbWNvbnRyb2wuYy0xOTI5LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI2NDU9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjcxNC1cXG5tbS9tZW1jb250cm9sLmM6MjcxNTpcXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XFxubW0vbWVtY29udHJvbC5jLTI3MTYtXFx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjc5My1cXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXFxubW0vbWVtY29udHJvbC5jOjI3OTQ6XFx0XFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xcbm1tL21lbWNvbnRyb2wuYy0yNzk1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1MzowNy4zMTgzMjc2NzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODgwOTUwODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgQ29udHJvbCBFdmVudHMqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGZ1bmN0aW9uIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbWVtb3J5IGNvbnRyb2wgZXZlbnRzIGFyZSBoYW5kbGVkIGF0IHRoZSBsb3dlc3QgbGV2ZWwuIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBvdmVyYWxsIHN5c3RlbSBtZW1vcnkgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IHdoZW4gaXQgY29tZXMgdG8gY2dyb3VwIG1lbW9yeSBsaW1pdHMgYW5kIGhvdyB0aGV5J3JlIGVuZm9yY2VkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBldmVudHMgdHJpZ2dlciBhbnkgbmVjZXNzYXJ5IGFjdGlvbnMgb3IgYWRqdXN0bWVudHMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgcmVzb3VyY2UgbGltaXRzIGFyZSBjb3JyZWN0bHkgYXBwbGllZCwgYW5kIGlmIGFueSBvcHRpbWlzYXRpb24gY2FuIGJlIG1hZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1MzoxMS4xOTkyODMwODNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg1NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODk1OlxcdFxcdH1cXG4xODk2OlxcdFxcdHJldHVybiBtYXg7XFxuMTg5NzpcXHR9XFxuMTg5ODpcXHRcXG4xODk5OlxcdHZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbjE5MDA6XFx0XFx0XFx0XFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZylcXG4xOTAxOlxcdHtcXG4xOTAyOlxcdFxcdGJvb2wgc3dhcF9ldmVudCA9IGV2ZW50ID09IE1FTUNHX1NXQVBfSElHSCB8fCBldmVudCA9PSBNRU1DR19TV0FQX01BWCB8fFxcbjE5MDM6XFx0XFx0XFx0XFx0ICBldmVudCA9PSBNRU1DR19TV0FQX0ZBSUw7XFxuMTkwNDpcXHRcXG4xOTA1OlxcdFxcdC8qIEZvciBub3cgb25seSBNRU1DR19NQVggY2FuIGhhcHBlbiB3aXRoICFhbGxvd19zcGlubmluZyBjb250ZXh0LiAqL1xcbjE5MDY6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFhbGxvd19zcGlubmluZyBcXHUwMDI2XFx1MDAyNiBldmVudCAhPSBNRU1DR19NQVgpO1xcbjE5MDc6XFx0XFxuMTkwODpcXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfZXZlbnRzX2xvY2FsW2V2ZW50XSk7XFxuMTkwOTpcXHRcXHRpZiAoIXN3YXBfZXZlbnQgXFx1MDAyNlxcdTAwMjYgYWxsb3dfc3Bpbm5pbmcpXFxuMTkxMDpcXHRcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm1lbWNnLVxcdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XFxuMTkxMTpcXHRcXG4xOTEyOlxcdFxcdGRvIHtcXG4xOTEzOlxcdFxcdFxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNbZXZlbnRdKTtcXG4xOTE0OlxcdFxcdFxcdGlmIChhbGxvd19zcGlubmluZykge1xcbjE5MTU6XFx0XFx0XFx0XFx0aWYgKHN3YXBfZXZlbnQpXFxuMTkxNjpcXHRcXHRcXHRcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwX2V2ZW50c19maWxlKTtcXG4xOTE3OlxcdFxcdFxcdFxcdGVsc2VcXG4xOTE4OlxcdFxcdFxcdFxcdFxcdGNncm91cF9maWxlX25vdGlmeShcXHUwMDI2bWVtY2ctXFx1MDAzZWV2ZW50c19maWxlKTtcXG4xOTE5OlxcdFxcdFxcdH1cXG4xOTIwOlxcdFxcbjE5MjE6XFx0XFx0XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbjE5MjI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTkyMzpcXHRcXHRcXHRpZiAoY2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfTE9DQUxfRVZFTlRTKVxcbjE5MjQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTkyNTpcXHRcXHR9IHdoaWxlICgobWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpIFxcdTAwMjZcXHUwMDI2XFxuMTkyNjpcXHRcXHRcXHQgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpO1xcbjE5Mjc6XFx0fVxcbjE5Mjg6XFx0RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jZ19tZW1vcnlfZXZlbnQpO1xcbjE5Mjk6XFx0XFxuMTkzMDpcXHRzdGF0aWMgYm9vbCBtZW1fY2dyb3VwX291dF9vZl9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4xOTMxOlxcdFxcdFxcdFxcdFxcdCAgICAgaW50IG9yZGVyKVxcbjE5MzI6XFx0e1xcbjE5MzM6XFx0XFx0c3RydWN0IG9vbV9jb250cm9sIG9jID0ge1xcbjE5MzQ6XFx0XFx0XFx0LnpvbmVsaXN0ID0gTlVMTCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MTEuMTk5Njc5OTQzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDUzMjU5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYHRyeV9jaGFyZ2VgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgcmVsYXRlZCB0byBgdHJ5X2NoYXJnZWAuIEZpcnN0LCBJJ20gdGhpbmtpbmcsIGxldCdzIHRyYWNlIHRoaXMgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIGNhbGwgc2l0ZXMgYW5kIHdoaWNoIGVudHJ5IHBvaW50cyB0cmlnZ2VyIGl0LiBLbm93aW5nIHRoZSB1cHN0cmVhbSBjb250ZXh0IGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgb3B0aW1pemF0aW9uIGhlcmUuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgdGFyZ2V0ZWQgc2VhcmNoIGZvciB0aGUgZnVuY3Rpb24gaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQgZmlsZSBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGJlZ2luLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjb250cm9sIGdyb3Vwcy4gSG9wZWZ1bGx5LCBhIGdyZXAgd2lsbCBnZXQgbWUgdGhlIGluZm9ybWF0aW9uIEknbSBsb29raW5nIGZvciBxdWlja2x5LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE4NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MTMuMTQ1MDA4MzE3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTgwNDA0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiX2Nncm91cC5jPTI1Nj1zdGF0aWMgaW50IF9faHVnZXRsYl9jZ3JvdXBfY2hhcmdlX2Nncm91cChpbnQgaWR4LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy0yNzQtXFxubW0vaHVnZXRsYl9jZ3JvdXAuYzoyNzU6XFx0aWYgKCFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXG5tbS9odWdldGxiX2Nncm91cC5jLTI3Ni1cXHRcXHQgICAgX19odWdldGxiX2Nncm91cF9jb3VudGVyX2Zyb21fY2dyb3VwKGhfY2csIGlkeCwgcnN2ZCksXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjU0MT1ib29sIG1lbWNnMV9jaGFyZ2Vfc2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjU0NS1cXG5tbS9tZW1jb250cm9sLXYxLmM6MjU0NjpcXHRpZiAocGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2V0Y3BtZW0sIG5yX3BhZ2VzLCBcXHUwMDI2ZmFpbCkpIHtcXG5tbS9tZW1jb250cm9sLXYxLmMtMjU0Ny1cXHRcXHRtZW1jZy1cXHUwMDNldGNwbWVtX3ByZXNzdXJlID0gMDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNTE4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9oaWdoX2RlbGF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTUxLSAqIFJlY2xhaW1zIG1lbW9yeSBvdmVyIHRoZSBoaWdoIGxpbWl0LiBDYWxsZWQgZGlyZWN0bHkgZnJvbVxcbm1tL21lbWNvbnRyb2wuYzoyNTUyOiAqIHRyeV9jaGFyZ2UoKSAoY29udGV4dCBwZXJtaXR0aW5nKSwgYXMgd2VsbCBhcyBmcm9tIHRoZSB1c2VybGFuZFxcbm1tL21lbWNvbnRyb2wuYy0yNTUzLSAqIHJldHVybiBwYXRoIHdoZXJlIHJlY2xhaW0gaXMgYWx3YXlzIGFibGUgdG8gYmxvY2suXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjU1NT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NDQtXFxubW0vbWVtY29udHJvbC5jOjI2NDU6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI2NDYtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNjcwLVxcdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XFxubW0vbWVtY29udHJvbC5jOjI2NzE6XFx0ICAgIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtc3csIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpIHtcXG5tbS9tZW1jb250cm9sLmM6MjY3MjpcXHRcXHRpZiAocGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpXFxubW0vbWVtY29udHJvbC5jLTI2NzMtXFx0XFx0XFx0Z290byBkb25lX3Jlc3RvY2s7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjg1Ny1cXG5tbS9tZW1jb250cm9sLmM6Mjg1ODpzdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI4NTktXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjg2My1cXG5tbS9tZW1jb250cm9sLmM6Mjg2NDpcXHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMjg2NS19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzE1Nz1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxNjQtXFxubW0vbWVtY29udHJvbC5jOjMxNjU6XFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTMxNjYtXFx0aWYgKHJldClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjA1PXN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjEzLVxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG5tbS9tZW1jb250cm9sLmM6NTIxNDpcXHRcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTUyMTUtXFx0aWYgKHJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU2MjU9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NjMyLVxcbm1tL21lbWNvbnRyb2wuYzo1NjMzOlxcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcXG5tbS9tZW1jb250cm9sLmMtNTYzNC1cXHRcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjkxPWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTcyOC0vKipcXG5tbS9tZW1jb250cm9sLmM6NTcyOTogKiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwIC0gdHJ5IGNoYXJnaW5nIHN3YXAgc3BhY2UgZm9yIGEgZm9saW9cXG5tbS9tZW1jb250cm9sLmMtNTczMC0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzM1LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1NzM2OmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtY29udHJvbC5jLTU3Mzcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3NjQtXFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtY29udHJvbC5jOjU3NjU6XFx0ICAgICFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIG5yX3BhZ2VzLCBcXHUwMDI2Y291bnRlcikpIHtcXG5tbS9tZW1jb250cm9sLmMtNTc2Ni1cXHRcXHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jPTc2PXZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtMTA5LS8qKlxcbm1tL3BhZ2VfY291bnRlci5jOjExMDogKiBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZSAtIHRyeSB0byBoaWVyYXJjaGljYWxseSBjaGFyZ2UgcGFnZXNcXG5tbS9wYWdlX2NvdW50ZXIuYy0xMTEtICogQGNvdW50ZXI6IGNvdW50ZXJcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jLTExNy0gKi9cXG5tbS9wYWdlX2NvdW50ZXIuYzoxMTg6Ym9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxcbm1tL3BhZ2VfY291bnRlci5jLTExOS1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9wYWdlX2NvdW50ZXIuYz0xOTc9aW50IHBhZ2VfY291bnRlcl9zZXRfbWF4KHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS9wYWdlX2NvdW50ZXIuYy0yMDgtXFx0XFx0ICogYW5kIGFmdGVyLCBzbyB0aGUgcmVhZC1zd2FwLXJlYWQgaXMgb3JkZXJlZCBhbmRcXG5tbS9wYWdlX2NvdW50ZXIuYzoyMDk6XFx0XFx0ICogZW5zdXJlcyBjb2hlcmVuY3kgd2l0aCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZSgpOlxcbm1tL3BhZ2VfY291bnRlci5jLTIxMC1cXHRcXHQgKiB0aGF0IGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBjb3VudCBiZWZvcmUgY2hlY2tpbmdcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTc0MD1pbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xNzc3LVxcdC8qIE5lZWQgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgYWxsb2NhdGlvbiBmYWlsZWQsIGZvciBNRU1DR19TV0FQX0ZBSUwuICovXFxubW0vc3dhcGZpbGUuYzoxNzc4OlxcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKVxcbm1tL3N3YXBmaWxlLmMtMTc3OS1cXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUzOjEzLjIzNDgxNzE4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwMjU4MzcwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQ2hhcmdlIE1lY2hhbmlzbXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBtZW1vcnkgYWNjb3VudGluZyBidXNpbmVzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNoYXJnZSBmdW5jdGlvbnMgd29yay4gRmlyc3QsIEknbGwgdHJhY2UgdGhlIGNhbGxzIHRvIGBjaGFyZ2VfbWVtY2dgLCBgbWVtX2Nncm91cF9jaGFyZ2VgLCBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGhpZXJhcmNoeSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgZmxvdy4gQWZ0ZXIgdGhhdCBJJ2xsIGxvb2sgZm9yIGBtZW1fY2dyb3VwX2NoYXJnZWAgYW5kIGB0cnlfY2hhcmdlYCBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCB0byBzZWUgaG93IHRoZXkncmUgZGVmaW5lZCBhbmQgdGhlIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggbWVtb3J5IGNncm91cHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjaGFyZ2luZyBwcm9jZXNzIGFuZCBhbnkgcG90ZW50aWFsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1MzoxNy4yNjA2NTc3MjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMDMyODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTYzMT1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY0MC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NDE6aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjQyLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY0My0vKipcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NDQ6ICogbWVtX2Nncm91cF9jaGFyZ2UgLSBDaGFyZ2UgYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gdG8gYSBjZ3JvdXAuXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjQ1LSAqIEBmb2xpbzogRm9saW8gdG8gY2hhcmdlLlxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjU2LSAqL1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY1NzpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NTgtXFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2MS1cXHRcXHRyZXR1cm4gMDtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjI6XFx0cmV0dXJuIF9fbWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIG1tLCBnZnApO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2My19XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY0LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2NTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2Ni1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY3MD12b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY3NS0gKlxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY3NjogKiBVbmNoYXJnZSBhIGZvbGlvIHByZXZpb3VzbHkgY2hhcmdlZCB3aXRoIG1lbV9jZ3JvdXBfY2hhcmdlKCkuXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjc3LSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTE0Nz1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1MzpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTQtXFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTgtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1OTpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTYwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MTcuMzMzNjk2NzkxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwMTE5MDAzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2s6XG5cbioqSW52ZXN0aWdhdGluZyBgbW0vbWVtY29udHJvbC5jYCBLY29uZmlnIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gYG1tL21lbWNvbnRyb2wuY2AuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0IGZpbGUgaXMgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gSXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgdGhhdCBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlLCBhbmQgb2Z0ZW4sIGl0J2xsIGluY2x1ZGUgZGVwZW5kZW5jaWVzLCBvciBhdCBsZWFzdCBoaW50cyBhYm91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMgZ292ZXJuIGl0cyBpbmNsdXNpb24gb3IgYmVoYXZpb3IuIEknbSBleHBlY3RpbmcgdG8gc2VlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBpbiB0aGUgYE1ha2VmaWxlYCBpdHNlbGYsIG9yIHBlcmhhcHMgc29tZSByZWZlcmVuY2VzIHRvIG90aGVyIEtjb25maWctcmVsYXRlZCBmaWxlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHByZXR0eSBnb29kIHN0YXJ0aW5nIHBvaW50LiBGcm9tIHRoZXJlLCBJIGNhbiBkcmlsbCBkb3duIGRlZXBlciBhcyBuZWVkZWQsIGJ1dCB0aGUgYE1ha2VmaWxlYCBpcyB1c3VhbGx5IHRoZSBtb3N0IGV4cGVkaWVudCBzdGFydGluZyBsb2NhdGlvbi4gSSdtIGFudGljaXBhdGluZyBmaW5kaW5nIHNvbWUgYCNpZmRlZmAgYmxvY2tzIG9yIHNvbWV0aGluZyBzaW1pbGFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA3MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUzOjIyLjM0NTU5OTE1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgzNTU1MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY29udHJvbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjk6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTEwMz1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cXG5tbS9NYWtlZmlsZToxMDQ6b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICs9IGJwZl9tZW1jb250cm9sLm9cXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MjIuNDQzOTcyNDk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyOTAyNzU3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipDaGVja2luZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgTWVtb3J5IENvbnRyb2wgR3JvdXBzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBsb29raW5nIGluIHRoZSByaWdodCBwbGFjZSBmb3IgdGhlIG1lbW9yeSBjZ3JvdXAgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byBgaW5pdC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBkZWZpbml0aW9ucyBmb3IgYWxsIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGBDT05GSUdfTUVNQ0dgLiBUaGlzIHNob3VsZCBiZSB0aGUgZmxhZyBvciBvcHRpb24gdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIG1lbW9yeSBjb250cm9sIGdyb3VwcyB3aXRoaW4gdGhpcyBidWlsZC4gTWFrZXMgc2Vuc2UgdG8gc3RhcnQgdGhlcmUsIHRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NzEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1MzoyNi43MzQyNTA5NjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NzAxNjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg0LVxcbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA5NS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwMC1cXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTEwMi1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwNy1cXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwOS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1MzoyNi44MzM5NjAzMzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ5MDM0Nzk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBDR3JvdXBzIExhbmRzY2FwZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgTUVNQ0cgKG1lbW9yeSBjZ3JvdXApIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGV4cG9zZWQsIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIGJ1aWxkIGEgYmV0dGVyIG1lbnRhbCBtYXAgb2YgdGhlIGF2YWlsYWJsZSBzd2l0Y2hlcywgYW5kIHdoaWNoIG9uZXMgaGF2ZSB0byBiZSBlbmFibGVkIGluIG9yZGVyIHRvIGdldCB0aGUgZnVsbCBmZWF0dXJlLXNldCBleHBvc2VkLiBJJ20gYWxzbyByZWFsbHkgaG9waW5nIHRoZXJlJ3Mgc29tZXRoaW5nIG5ldyBvciBpbnRlcmVzdGluZyBpbiB0aGVyZSB0aGF0IEkgbWlzc2VkIGR1cmluZyBteSBsYXN0IHBhc3Mgb3ZlciB0aGlzIGFyZWEuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUzOjI5LjMyNDMxMTE0N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcXG4xMDgxOlxcdFxcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cXG4xMDgyOlxcdFxcbjEwODM6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA4NDpcXHRcXG4xMDg1OlxcdGNvbmZpZyBNRU1DR1xcbjEwODY6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4NzpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4ODpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODk6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwOTA6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA5MTpcXHRcXHRoZWxwXFxuMTA5MjpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDkzOlxcdFxcbjEwOTQ6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDk1OlxcdFxcdGJvb2xcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDk4OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk5OlxcdFxcdGRlZmF1bHQgeVxcbjExMDA6XFx0XFxuMTEwMTpcXHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4xMTAyOlxcdFxcdGJvb2xcXG4xMTAzOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTA0OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMTA1OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjExMDY6XFx0XFx0ZGVmYXVsdCB5XFxuMTEwNzpcXHRcXG4xMTA4OlxcdGNvbmZpZyBNRU1DR19WMVxcbjExMDk6XFx0XFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMTEwOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTExOlxcdFxcdGRlZmF1bHQgblxcbjExMTI6XFx0XFx0aGVscFxcbjExMTM6XFx0XFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcXG4xMTE0OlxcdFxcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MjkuMzI0NDMxMjA3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTM4NTUzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBwYXJlbnQgbWVudSBmb3IgYGNvbmZpZyBNRU1DR2AuIFRoaXMgbWVhbnMgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gbGl2ZXMgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtIHN0cnVjdHVyZS4gVW5kZXJzdGFuZGluZyBpdHMgbG9jYXRpb24gaXMgY3J1Y2lhbDsgaXQgaGVscHMgbWUgZ3Jhc3AgaXRzIGNvbnRleHQsIHdoYXQgb3RoZXIgb3B0aW9ucyBpdCdzIHJlbGF0ZWQgdG8sIGFuZCBwb3RlbnRpYWxseSwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBvcmlnaW5zLCB0aGUgYnJhbmNoZXMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gdHJlZSB0aGF0IGxlYWQgdG8gaXQuIEl0J3MgbGlrZSBuYXZpZ2F0aW5nIGEgY29tcGxleCBmaWxlIHN5c3RlbSBvciBhIGRlZXBseSBuZXN0ZWQgY29kZSBzdHJ1Y3R1cmUg4oCTIHlvdSBjYW4ndCB1bmRlcnN0YW5kIGEgc2luZ2xlIGZpbGUvY29uZmlndXJhdGlvbiB2YWx1ZSBpbiBpc29sYXRpb247IHlvdSBuZWVkIHRvIGtub3cgd2hlcmUgaXQgcmVzaWRlcyB3aXRoaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUgaG93IEkgY2FuIGRpc2NvdmVyIHRoZSBwYXJlbnQgbWVudSBhbmQgd2hhdCBpbnNpZ2h0cyBpdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY5NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MzEuMjc4MjkwNDI5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzcyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA0MDpcXHRcXHQgIHRoZSBzYW1lIHByb2Nlc3Mgb250byBhIHNpbmdsZSBMYXN0IExldmVsIENhY2hlIChMTEMpIGRvbWFpbiB3aGVuXFxuMTA0MTpcXHRcXHQgIHBvc3NpYmxlLiBUaGlzIGltcHJvdmVzIGNhY2hlIGxvY2FsaXR5IGJ5IGtlZXBpbmcgdGFza3MgdGhhdCBzaGFyZVxcbjEwNDI6XFx0XFx0ICByZXNvdXJjZXMgd2l0aGluIHRoZSBzYW1lIGNhY2hlIGRvbWFpbiwgcmVkdWNpbmcgY2FjaGUgbWlzc2VzIGFuZFxcbjEwNDM6XFx0XFx0ICBsb3dlcmluZyBkYXRhIGFjY2VzcyBsYXRlbmN5LlxcbjEwNDQ6XFx0XFxuMTA0NTpcXHRjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXFxuMTA0NjpcXHRcXHRib29sIFxcXCJBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudFxcXCJcXG4xMDQ3OlxcdFxcdGRlZmF1bHQgeVxcbjEwNDg6XFx0XFx0ZGVwZW5kcyBvbiBOVU1BX0JBTEFOQ0lOR1xcbjEwNDk6XFx0XFx0aGVscFxcbjEwNTA6XFx0XFx0ICBJZiBzZXQsIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyB3aWxsIGJlIGVuYWJsZWQgaWYgcnVubmluZyBvbiBhIE5VTUFcXG4xMDUxOlxcdFxcdCAgbWFjaGluZS5cXG4xMDUyOlxcdFxcbjEwNTM6XFx0Y29uZmlnIFNMQUJfT0JKX0VYVFxcbjEwNTQ6XFx0XFx0Ym9vbFxcbjEwNTU6XFx0XFxuMTA1NjpcXHRtZW51Y29uZmlnIENHUk9VUFNcXG4xMDU3OlxcdFxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG4xMDU4OlxcdFxcdHNlbGVjdCBLRVJORlNcXG4xMDU5OlxcdFxcdGhlbHBcXG4xMDYwOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBncm91cGluZyBzZXRzIG9mIHByb2Nlc3NlcyB0b2dldGhlciwgZm9yXFxuMTA2MTpcXHRcXHQgIHVzZSB3aXRoIHByb2Nlc3MgY29udHJvbCBzdWJzeXN0ZW1zIHN1Y2ggYXMgQ3B1c2V0cywgQ0ZTLCBtZW1vcnlcXG4xMDYyOlxcdFxcdCAgY29udHJvbHMgb3IgZGV2aWNlIGlzb2xhdGlvbi5cXG4xMDYzOlxcdFxcdCAgU2VlXFxuMTA2NDpcXHRcXHRcXHQtIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMucnN0XFx0KENGUylcXG4xMDY1OlxcdFxcdFxcdC0gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvIChmZWF0dXJlcyBmb3IgZ3JvdXBpbmcsIGlzb2xhdGlvblxcbjEwNjY6XFx0XFx0XFx0XFx0XFx0XFx0ICBhbmQgcmVzb3VyY2UgY29udHJvbClcXG4xMDY3OlxcdFxcbjEwNjg6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA2OTpcXHRcXG4xMDcwOlxcdGlmIENHUk9VUFNcXG4xMDcxOlxcdFxcbjEwNzI6XFx0Y29uZmlnIFBBR0VfQ09VTlRFUlxcbjEwNzM6XFx0XFx0Ym9vbFxcbjEwNzQ6XFx0XFxuMTA3NTpcXHRjb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4xMDc2OlxcdFxcdGJvb2wgXFxcIkZhdm9yIGR5bmFtaWMgbW9kaWZpY2F0aW9uIGxhdGVuY3kgcmVkdWN0aW9uIGJ5IGRlZmF1bHRcXFwiXFxuMTA3NzpcXHRcXHRoZWxwXFxuMTA3ODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFxcXCJmYXZvcmR5bm1vZHNcXFwiIG1vdW50IG9wdGlvbiBieSBkZWZhdWx0XFxuMTA3OTpcXHRcXHQgIHdoaWNoIHJlZHVjZXMgdGhlIGxhdGVuY2llcyBvZiBkeW5hbWljIGNncm91cCBtb2RpZmljYXRpb25zIHN1Y2hcXG4xMDgwOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA4MTpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwODQ6XFx0XFxuMTA4NTpcXHRjb25maWcgTUVNQ0dcXG4xMDg2OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODc6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODg6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDg5OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MzEuMjc4NDc2OTA5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5ODI3MjcxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IENHUk9VUCBDaGFyZ2luZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYE1FTUNHYCBjb2RlLCBzcGVjaWZpY2FsbHkgdW5kZXIgdGhlIGBpZiBDR1JPVVBTYCBjb25kaXRpb25hbC4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGNoYXJnaW5nIG1lY2hhbmlzbXMuIEknbSBzdGFydGluZyBieSBsb29raW5nIGF0IGZvY3VzIHN5bWJvbHMgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSBjaGFuZ2VzIGFyZSBoYXBwZW5pbmcuIEkgY2FuIHNlZSB0aGUgZnVuY3Rpb24gZGlyZWN0bHkgbW9kaWZpZWQgaXMgdGhlIHN0YXRpYyBgdHJ5X2NoYXJnZV9tZW1jZ2AuXG5cbk5vdywgbGV0J3MgZXhwbG9yZSBob3cgaXQncyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBJdCBsb29rcyBsaWtlIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBjYWxsZWQgZnJvbSBhIGZldyBwbGFjZXMuIEkgY2FuIHNlZSB0aGF0IGBfX21lbV9jZ3JvdXBfY2hhcmdlYCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBhcmUgZGVmaW5pdGVseSBjYWxsaW5nIHRoaXMgZGlyZWN0bHkuIEkgYWxzbyBzZWUgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCB3aGljaCBkb2Vzbid0IGRpcmVjdGx5IGNhbGwgaXQgYnV0IGluc3RlYWQgdXNlcyBgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2VgLiBBbmQgaXQgYXBwZWFycyB0aGF0IGBfX21lbWNnX21lbW9yeV9ldmVudGAgaXMgY2FsbGVkIGJ5IGB0cnlfY2hhcmdlX21lbWNnYCBpdHNlbGYuIEknbSBhbHNvIHNlZWluZyBgdHJ5X2NoYXJnZWAgaXMgZGVmaW5lZCBhcyBzdGF0aWMgaW5saW5lLCB3aGljaCBpcyB1c2VmdWwgdG8gbm90ZS5cblxuTmV4dCwgSSBuZWVkIHRvIGJyb2FkZW4gbXkgc2NvcGUgYW5kIGxvb2sgYXQgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2AgcmVsYXRlZCB0byBtZW1vcnkgY2hhcmdpbmcgaW4gZ2VuZXJhbC4gSSd2ZSBhbHJlYWR5IG5vdGVkIGBfX21lbV9jZ3JvdXBfY2hhcmdlYCwgYW5kIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAsIGJ1dCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBfX21lbWNnX21lbW9yeV9ldmVudGAuIEknbSBnb2luZyB0byBzY2FuIHRoZSByZXN0IG9mIGBtbS9tZW1jb250cm9sLmNgIGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zIG9yIGVudHJ5IHBvaW50cyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjA3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MzUuMjYxMjA3MzA5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjkwOTU4NzAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmNoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUzOjM1LjUzMDMxMDA5OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODIyMzU1NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgdHJ5X2NoYXJnZV9tZW1jZ2AgQ2FsbHMqKlxuXG5Pa2F5LCBzbyBJIHdhbnQgdG8gZ2V0IGEgaGFuZGxlIG9uIGFsbCB0aGUgcGxhY2VzIGluIGBtbS9tZW1jb250cm9sLmNgIHdoZXJlIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBpbnZva2VkLiBUaGlzIGZ1bmN0aW9uIGlzIGZ1bmRhbWVudGFsIHRvIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBhbmQgY29udHJvbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgc2l0ZXMgdG8gZnVsbHkgZ3Jhc3AgaG93IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCByZWNsYWltIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgY2dyb3VwIGhpZXJhcmNoeS4gS25vd2luZyB0aGUgY2FsbCBsb2NhdGlvbnMgd2lsbCBoZWxwIG1lIHNlZSB0aGUgZmxvdyBvZiBhbGxvY2F0aW9uIHJlcXVlc3RzIHRocm91Z2ggdGhlIHN5c3RlbSBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBhY2NvdW50aW5nIGVycm9ycy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggZGlmZmVyZW50IG1lbW9yeSBhbGxvY2F0aW9uIHBhdGhzLCBsaWtlIHBhZ2UgZmF1bHRzLCBzbGFiIGFsbG9jYXRpb25zLCBhbmQgZGlyZWN0IHJlY2xhaW0gYXR0ZW1wdHMuIEknbGwgbmVlZCB0byBjb25zaWRlciBhbnkgc3VidGxldGllcyByZWdhcmRpbmcgdGhlIGxvY2sgb3JkZXJpbmcgaW4gdGhvc2UgY2FsbCBzaXRlcywgdG9vLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGVhY2ggY2FsbCwgZXNwZWNpYWxseSB0aGUgY2FsbGVyJ3MgYXJndW1lbnRzLCBpcyBjcnVjaWFsLiBUaGlzIHdpbGwgaGlnaGxpZ2h0IHdoZXJlIG1lbW9yeSBhY2NvdW50aW5nIGRlY2lzaW9ucyBhcmUgbWFkZSBhbmQgaG93IHRoZSBzeXN0ZW0gcmVhY3RzIHRvIG1lbW9yeSBwcmVzc3VyZSB3aXRoaW4gdGhlIGNncm91cCBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjU5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MzkuMzUyNjY4ODMxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDAxMzg0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfY2hhcmdlX21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjU1NT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NDQtXFxubW0vbWVtY29udHJvbC5jOjI2NDU6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI2NDYtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yODU4PXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODYzLVxcbm1tL21lbWNvbnRyb2wuYzoyODY0OlxcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0yODY1LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMTU3PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzE2NC1cXG5tbS9tZW1jb250cm9sLmM6MzE2NTpcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzE2Ni1cXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMDU9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMTMtXFx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxcbm1tL21lbWNvbnRyb2wuYzo1MjE0OlxcdFxcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG5tbS9tZW1jb250cm9sLmMtNTIxNS1cXHRpZiAocmV0KSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTYyNT1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2MzItXFxubW0vbWVtY29udHJvbC5jOjU2MzM6XFx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xcbm1tL21lbWNvbnRyb2wuYy01NjM0LVxcdFxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1MzozOS40MzI2ODczMDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0OTU0NTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQ2hhcmdlIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBtZW1vcnkgYWNjb3VudGluZyBpcyBoYXBwZW5pbmcgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgY2dyb3Vwcy4gSSdtIHRoaW5raW5nIGFib3V0IHRyYWNpbmcgdGhlIGNvZGUgcGF0aHMgaW52b2x2ZWQgaW4gbWVtb3J5IGNoYXJnaW5nIG9wZXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciB0aGlzLCB3aGljaCBhcmUgYGNoYXJnZV9tZW1jZ2AgYW5kIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIGNhbGxpbmcgY29udGV4dHMsIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlciwgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkncmUgbWFuaXB1bGF0aW5nLiBUaGlzIHdpbGwgaGVscCBtZSBkZWJ1ZyBhIG1lbW9yeSBsZWFrIGlzc3VlLiBJJ20gc3VzcGVjdGluZyBhIG1pc2NhbGN1bGF0aW9uIG9yIGFuIHVuaW50ZW5kZWQgZG91YmxlLWNoYXJnZS4gVGhpcyBkZXRhaWxlZCBleGFtaW5hdGlvbiB3aWxsIGhlbHAgbWUgZmluZCB0aGUgcm9vdCBjYXVzZSwgYW5kIGZvcm11bGF0ZSBhIHZpYWJsZSBwYXRjaCBvciB3b3JrYXJvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjEwOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUzOjQxLjY4MjIzNjMzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1MjUxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhcmdlX21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjU1NT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NDQtXFxubW0vbWVtY29udHJvbC5jOjI2NDU6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI2NDYtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yODU4PXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODYzLVxcbm1tL21lbWNvbnRyb2wuYzoyODY0OlxcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0yODY1LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMTU3PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzE2NC1cXG5tbS9tZW1jb250cm9sLmM6MzE2NTpcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzE2Ni1cXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxOTA9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMDQtXFxubW0vbWVtY29udHJvbC5jOjUyMDU6c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy01MjA2LVxcdFxcdFxcdGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjEzLVxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG5tbS9tZW1jb250cm9sLmM6NTIxNDpcXHRcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTUyMTUtXFx0aWYgKHJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMjU9aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjMwLVxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XFxubW0vbWVtY29udHJvbC5jOjUyMzE6XFx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcXG5tbS9tZW1jb250cm9sLmMtNTIzMi1cXHRjc3NfcHV0KFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjQ5PWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjYyLVxcbm1tL21lbWNvbnRyb2wuYzo1MjYzOlxcdGlmIChjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApKVxcbm1tL21lbWNvbnRyb2wuYy01MjY0LVxcdFxcdHJldCA9IC1FTk9NRU07XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI4Mz1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyOTctXFxubW0vbWVtY29udHJvbC5jOjUyOTg6XFx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcXG5tbS9tZW1jb250cm9sLmMtNTI5OS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjI1PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTYzMi1cXG5tbS9tZW1jb250cm9sLmM6NTYzMzpcXHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XFxubW0vbWVtY29udHJvbC5jLTU2MzQtXFx0XFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUzOjQxLjc0MTc2NjU3MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjI2NjEzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIEFjY291bnRpbmcgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG1lbW9yeSBjZ3JvdXAgbG9naWMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdpdGggaG93IGFsbG9jYXRpb24gZmFpbHVyZXMgYXJlIGhhbmRsZWQgYWZ0ZXIgdGhpcyBwYXRjaC4gSSdtIG5vdGluZyB0aGUga2V5IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMgYXJlYTogYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBhbmQgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YC4gSSBuZWVkIHRvIGVuc3VyZSBJIGhhdmUgYWxsIG15IGJhc2VzIGNvdmVyZWQuXG5cbkZpcnN0LCBJJ20gdmVyaWZ5aW5nIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zOiBgQ0dST1VQU2AgYW5kIGBNRU1DR2AuIFRoZXkncmUgdGhlIG9idmlvdXMgY2FuZGlkYXRlcywgYW5kIEknbGwgY29uZmlybSB0aGVpciBwcmVzZW5jZSB0byBlbnN1cmUgdGhlIGNvcmUgbWVtY29udHJvbCBjb2RlIGlzIGVuYWJsZWQuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgYG1tL21lbWNvbnRyb2wuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogSXMgdGhpcyBwYXRjaCBmdXp6LXdvcnRoeT8gR2l2ZW4gdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiBwYXRoIG9mIGB0cnlfY2hhcmdlX21lbWNnYCB0byB0cmlnZ2VyIGEgYE1FTUNHX01BWGAgZXZlbnQgb24gYWxsb2NhdGlvbiBmYWlsdXJlcywgaXQncyBwcmV0dHkgY2xlYXIgaXQgYWx0ZXJzIGNvcmUgbWVtY2cgYWNjb3VudGluZyBhbmQgZXZlbnQgbm90aWZpY2F0aW9ucy4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIGJvdGggdXNlcnNwYWNlIG1lbW9yeSBjZ3JvdXAgbG9naWMgYW5kIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCAqV29ydGhGdXp6aW5nKiBoYXMgdG8gYmUgYHRydWVgLiBJdCdzIGEgY2xlYXIgY2hhbmdlIGluIGhvdyBtZW1vcnkgcHJlc3N1cmUgaXMgc2lnbmFsZWQuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBkZWZpbmUgdGhlIHNldC1yZXN1bHRzIHBhcmFtZXRlcnMuIEnigJl2ZSBjb25maXJtZWQgYFdvcnRoRnV6emluZ2AgYXMgYHRydWVgLiBJIG5lZWQgdG8gY29uY2lzZWx5IGV4cGxhaW4gdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGNoYW5nZSwgd2hpY2ggSSdsbCBkby4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29uZmlybWVkIGFzIGBbXCJDR1JPVVBTXCIsIFwiTUVNQ0dcIl1gLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyBJIGlkZW50aWZpZWQgZWFybGllcjogYFtcIl9fbWVtX2Nncm91cF9jaGFyZ2VcIiwgXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCIsIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCIsIFwibWVtX2Nncm91cF9za19jaGFyZ2VcIiwgXCJfX21lbWNnX21lbW9yeV9ldmVudFwiXWAuIE5vdyBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMwMCwiT3V0cHV0VG9rZW5zIjoxNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6NDcuOTY4MzgzMDAxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMjY5OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbWVtX2Nncm91cF9jaGFyZ2VcIixcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiLFxuICAgIFwibWVtX2Nncm91cF9za19jaGFyZ2VcIixcbiAgICBcIl9fbWVtY2dfbWVtb3J5X2V2ZW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdHJ5X2NoYXJnZV9tZW1jZygpIHRvIGVuc3VyZSB0aGF0IE1FTUNHX01BWCBldmVudHMgYXJlIHByb3Blcmx5IHJhaXNlZCB2aWEgX19tZW1jZ19tZW1vcnlfZXZlbnQoKSB3aGVuIG1lbW9yeSBjZ3JvdXAgYWxsb2NhdGlvbiByZXF1ZXN0cyBhcmUgcmVqZWN0ZWQgd2l0aCAtRU5PTUVNLiBUaGlzIGFsdGVycyBjb3JlIG1lbWNnIGxpbWl0IGV2ZW50IGhhbmRsaW5nIGFuZCBtZW1vcnkgY2hhcmdpbmcgY29udHJvbCBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19tZW1fY2dyb3VwX2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiLFxuICAgIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCIsXG4gICAgXCJtZW1fY2dyb3VwX3NrX2NoYXJnZVwiLFxuICAgIFwiX19tZW1jZ19tZW1vcnlfZXZlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0cnlfY2hhcmdlX21lbWNnKCkgdG8gZW5zdXJlIHRoYXQgTUVNQ0dfTUFYIGV2ZW50cyBhcmUgcHJvcGVybHkgcmFpc2VkIHZpYSBfX21lbWNnX21lbW9yeV9ldmVudCgpIHdoZW4gbWVtb3J5IGNncm91cCBhbGxvY2F0aW9uIHJlcXVlc3RzIGFyZSByZWplY3RlZCB3aXRoIC1FTk9NRU0uIFRoaXMgYWx0ZXJzIGNvcmUgbWVtY2cgbGltaXQgZXZlbnQgaGFuZGxpbmcgYW5kIG1lbW9yeSBjaGFyZ2luZyBjb250cm9sIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUzOjQ4LjEyMDY2MTM1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTU0NjEzMjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUzOjQ4LjEyMTExMTMyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTk1NDU2Nzc1MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0cnlfY2hhcmdlX21lbWNnKClgIGluIGBtbS9tZW1jb250cm9sLmNgIHRvIGVuc3VyZSB0aGF0IGEgYE1FTUNHX01BWGAgbWVtb3J5IGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIGFuIGFsbG9jYXRpb24gY2hhcmdlIHJlcXVlc3QgaXMgcmVqZWN0ZWQgd2l0aCBgLUVOT01FTWAuIEl0IGludHJvZHVjZXMgYSBsb2NhbCB2YXJpYWJsZSBgcmV0ID0gMGAsIHNldHMgYHJldCA9IC1FTk9NRU1gIG9uIGZhaWx1cmUsIGFuZCByb3V0ZXMgdGhyb3VnaCBhIGNvbW1vbiBgb3V0OmAgbGFiZWwgdG8gcmFpc2UgdGhlIGV2ZW50IGJlZm9yZSByZXR1cm5pbmcgYHJldGAuXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgKHN0YWNrL2hlYXAvcGFnZXMpIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBoZXJlIGRvIG5vdCBpbnZvbHZlIGNvcHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgdG8gdXNlciBzcGFjZSwgYWxsb2NhdGluZyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYHJldGAsIGByYWlzZWRfbWF4X2V2ZW50YCwgYG1lbV9vdmVyX2xpbWl0YCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuLSBBbnkgcG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGNvbnRyb2wgZmxvdyBidWdzLCBtZW1jZyBldmVudCBjb3VudGVyIG1hbmlwdWxhdGlvbiwgbG9ja2luZyBvciBzdGF0ZSB0cmFja2luZyBkdXJpbmcgbWVtY2cgcmVjbGFpbS9ldmVudHMpIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ2MzY5ODNmNjVjZjEwMmMyOWU0NzQwNmE1ZTgxYThhNTY2YjlmMjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDAyOjUyOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxMjcxZDM5MGI2MTdlLi4xNThiMDU2MmU4ZGYzIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0yNjU2LDEwICsyNjU2LDExIEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0Ym9vbCByYWlzZWRfbWF4X2V2ZW50ID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIHBmbGFncztcbiBcdGJvb2wgYWxsb3dfc3Bpbm5pbmcgPSBnZnBmbGFnc19hbGxvd19zcGlubmluZyhnZnBfbWFzayk7XG4rXHRpbnQgcmV0ID0gMDtcbiBcbiByZXRyeTpcbiBcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0aWYgKCFhbGxvd19zcGlubmluZylcbiBcdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG5AQCAtMjc3MCwxNiArMjc3MSwxMSBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdCAqIHB1dCB0aGUgYnVyZGVuIG9mIHJlY2xhaW0gb24gcmVndWxhciBhbGxvY2F0aW9uIHJlcXVlc3RzXG4gXHQgKiBhbmQgbGV0IHRoZXNlIGdvIHRocm91Z2ggYXMgcHJpdmlsZWdlZCBhbGxvY2F0aW9ucy5cbiBcdCAqL1xuLVx0aWYgKCEoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKSkpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0aWYgKCEoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKSkpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4gZm9yY2U6XG4tXHQvKlxuLVx0ICogSWYgdGhlIGFsbG9jYXRpb24gaGFzIHRvIGJlIGVuZm9yY2VkLCBkb24ndCBmb3JnZXQgdG8gcmFpc2Vcbi1cdCAqIGEgTUVNQ0dfTUFYIGV2ZW50LlxuLVx0ICovXG4tXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXG4tXHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgYWxsb2NhdGlvbiBlaXRoZXIgY2FuJ3QgZmFpbCBvciB3aWxsIGxlYWQgdG8gbW9yZSBtZW1vcnlcbiBcdCAqIGJlaW5nIGZyZWVkIHZlcnkgc29vbi4gIEFsbG93IG1lbW9yeSB1c2FnZSBnbyBvdmVyIHRoZSBsaW1pdFxuQEAgLTI3ODksNyArMjc4NSwxNSBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXG4gXHRcdHBhZ2VfY291bnRlcl9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIG5yX3BhZ2VzKTtcbiBcbi1cdHJldHVybiAwO1xuK291dDpcbitcdC8qXG4rXHQgKiBEb24ndCBmb3JnZXQgdG8gcmFpc2UgYSBNRU1DR19NQVggZXZlbnQgZm9yIGZvcmNlZCBvciByZWplY3RlZFxuK1x0ICogcmVxdWVzdHMuXG4rXHQgKi9cbitcdGlmICghcmFpc2VkX21heF9ldmVudClcbitcdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xuK1xuK1x0cmV0dXJuIHJldDtcbiBcbiBkb25lX3Jlc3RvY2s6XG4gXHRpZiAoYmF0Y2ggXHUwMDNlIG5yX3BhZ2VzKVxuQEAgLTI4NDgsNyArMjg1Miw3IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0ICAgICEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcbiBcdFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1Mzo0OC4xMjExMTI1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjUzMDk0NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHVzZXIgd2FudHMgbWUgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW4gdGhlIExpbnV4IGtlcm5lbCBuZWNlc3NpdGF0ZXMgZXh0cmEgc2NydXRpbnkuIEFscmlnaHQsIGxldCdzIGRpdmUgaW4uXG5cblRoZSBwYXRjaCBpdHNlbGYgdGFyZ2V0cyBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdHJ5X2NoYXJnZV9tZW1jZygpYCBmdW5jdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBhbmQgaG93IHRoaXMgcGF0Y2ggbW9kaWZpZXMgaXQuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBvdGVudGlhbCBtZW1vcnktcmVsYXRlZCBpc3N1ZXMgaGVyZS5cblxuSSdsbCByZWFkIHRocm91Z2ggdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDI2NTAtMjg2MCBvZiBgbW0vbWVtY29udHJvbC5jYC4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IHRvb2xzIC0gbW9zdCBsaWtlbHkgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIC0gdG8gZ2V0IHRoaXMgc2VjdGlvbiBsb2FkZWQuIEknbGwgYmUgbG9va2luZyBmb3IgY2hhbmdlcyBpbiBtZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBwb2ludGVyIG1hbmlwdWxhdGlvbiwgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbnZvbHZlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoaXMgY29kZSBzZWdtZW50LiBUaGVuIEknbGwgc3RhcnQgdGhpbmtpbmcgbGlrZSBLTVNBTiwgdHJ5aW5nIHRvIGlkZW50aWZ5IGFyZWFzIHdoZXJlIG1lbW9yeSBhY2Nlc3MgdmlvbGF0aW9ucyBjb3VsZCBvY2N1ciB1bmRlciBzcGVjaWZpYywgcGVyaGFwcyB1bnVzdWFsLCBjb25kaXRpb25zLiBEb2VzIHRoZSBwYXRjaCBhbHRlciB0aGUgcGF0aCB0byB0aGUgcG90ZW50aWFsIG1lbW9yeSBlcnJvcnMgb3IgY3JlYXRlIGVudGlyZWx5IG5ldyBwb3NzaWJpbGl0aWVzPyBUaGF0IGlzIHdoYXQgSSBuZWVkIHRvIHdvcmsgb3V0IHRvIGRldGVybWluZSBpZiB0aGlzIHJlcXVpcmVzIGEgc2VwYXJhdGUgZnV6emluZyBzZXNzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjkxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTQ6MDcuNzc0MjEwODQ4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI2NTA6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9vdmVyX2xpbWl0O1xcbjI2NTE6XFx0XFx0c3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjtcXG4yNjUyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkO1xcbjI2NTM6XFx0XFx0Ym9vbCBwYXNzZWRfb29tID0gZmFsc2U7XFxuMjY1NDpcXHRcXHR1bnNpZ25lZCBpbnQgcmVjbGFpbV9vcHRpb25zO1xcbjI2NTU6XFx0XFx0Ym9vbCBkcmFpbmVkID0gZmFsc2U7XFxuMjY1NjpcXHRcXHRib29sIHJhaXNlZF9tYXhfZXZlbnQgPSBmYWxzZTtcXG4yNjU3OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xcbjI2NTg6XFx0XFx0Ym9vbCBhbGxvd19zcGlubmluZyA9IGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKGdmcF9tYXNrKTtcXG4yNjU5OlxcdFxcdGludCByZXQgPSAwO1xcbjI2NjA6XFx0XFxuMjY2MTpcXHRyZXRyeTpcXG4yNjYyOlxcdFxcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXFxuMjY2MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjI2NjQ6XFx0XFxuMjY2NTpcXHRcXHRpZiAoIWFsbG93X3NwaW5uaW5nKVxcbjI2NjY6XFx0XFx0XFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXFxuMjY2NzpcXHRcXHRcXHRiYXRjaCA9IG5yX3BhZ2VzO1xcbjI2Njg6XFx0XFxuMjY2OTpcXHRcXHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xcbjI2NzA6XFx0XFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcXG4yNjcxOlxcdFxcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBiYXRjaCwgXFx1MDAyNmNvdW50ZXIpKSB7XFxuMjY3MjpcXHRcXHRcXHRpZiAocGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpXFxuMjY3MzpcXHRcXHRcXHRcXHRnb3RvIGRvbmVfcmVzdG9jaztcXG4yNjc0OlxcdFxcdFxcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXFxuMjY3NTpcXHRcXHRcXHRcXHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgYmF0Y2gpO1xcbjI2NzY6XFx0XFx0XFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpO1xcbjI2Nzc6XFx0XFx0fSBlbHNlIHtcXG4yNjc4OlxcdFxcdFxcdG1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtc3cpO1xcbjI2Nzk6XFx0XFx0XFx0cmVjbGFpbV9vcHRpb25zIFxcdTAwMjY9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQO1xcbjI2ODA6XFx0XFx0fVxcbjI2ODE6XFx0XFxuMjY4MjpcXHRcXHRpZiAoYmF0Y2ggXFx1MDAzZSBucl9wYWdlcykge1xcbjI2ODM6XFx0XFx0XFx0YmF0Y2ggPSBucl9wYWdlcztcXG4yNjg0OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjY4NTpcXHRcXHR9XFxuMjY4NjpcXHRcXG4yNjg3OlxcdFxcdC8qXFxuMjY4ODpcXHRcXHQgKiBQcmV2ZW50IHVuYm91bmRlZCByZWN1cnNpb24gd2hlbiByZWNsYWltIG9wZXJhdGlvbnMgbmVlZCB0b1xcbjI2ODk6XFx0XFx0ICogYWxsb2NhdGUgbWVtb3J5LiBUaGlzIG1pZ2h0IGV4Y2VlZCB0aGUgbGltaXRzIHRlbXBvcmFyaWx5LFxcbjI2OTA6XFx0XFx0ICogYnV0IHdlIHByZWZlciBmYWNpbGl0YXRpbmcgbWVtb3J5IHJlY2xhaW0gYW5kIGdldHRpbmcgYmFja1xcbjI2OTE6XFx0XFx0ICogdW5kZXIgdGhlIGxpbWl0IG92ZXIgdHJpZ2dlcmluZyBPT00ga2lsbHMgaW4gdGhlc2UgY2FzZXMuXFxuMjY5MjpcXHRcXHQgKi9cXG4yNjkzOlxcdFxcdGlmICh1bmxpa2VseShjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DKSlcXG4yNjk0OlxcdFxcdFxcdGdvdG8gZm9yY2U7XFxuMjY5NTpcXHRcXG4yNjk2OlxcdFxcdGlmICh1bmxpa2VseSh0YXNrX2luX21lbWNnX29vbShjdXJyZW50KSkpXFxuMjY5NzpcXHRcXHRcXHRnb3RvIG5vbWVtO1xcbjI2OTg6XFx0XFxuMjY5OTpcXHRcXHRpZiAoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcXG4yNzAwOlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjcwMTpcXHRcXG4yNzAyOlxcdFxcdC8qXFxuMjcwMzpcXHRcXHQgKiBPT00gdmljdGltIHN0aWxsIG5lZWRzIHRvIGNoYXJnZSBtZW1vcnkgdG8gZXhpdC4gT09NIHJlYXBlciBzaG91bGRcXG4yNzA0OlxcdFxcdCAqIGhlbHAgYnV0IGl0IG1pZ2h0IGZhaWwgb24gbW1hcF9sb2NrIGNvbnRlbnRpb24uIElmIHRoZSB2aWN0aW0gaXMgYVxcbjI3MDU6XFx0XFx0ICogbGFyZ2UgdGhyZWFkIGdyb3VwIHRoZW4gYWxsIGV4aXRpbmcgdGhyZWFkcyBtaWdodCBjb21wZXRlIG9uIG9vbV9sb2NrXFxuMjcwNjpcXHRcXHQgKiBqdXN0IHRvIGxlYXJuIHRoYXQgdGhlcmUgaXMgbm90aGluZyByZWFsbHkga2lsbGFibGUgYW55bW9yZS4gQmFpbFxcbjI3MDc6XFx0XFx0ICogb3V0IGVhcmx5IGFuZCBmYWlsIHRoZSBjaGFyZ2UgdG8gZXhwZWRpdGUgdGhlaXIgZXhpdC4gVGhleSBhcmVcXG4yNzA4OlxcdFxcdCAqIGNvbnNpZGVyZWQgZnVsbHkgcmVjbGFpbWVkIGJ5IHRoZSBvb20gcmVhcGVyIGFuZCB0aGV5IHNob3VsZG4ndFxcbjI3MDk6XFx0XFx0ICogY29udHJpYnV0ZSBmdXJ0aGVyIGNoYXJnZXMuXFxuMjcxMDpcXHRcXHQgKi9cXG4yNzExOlxcdFxcdGlmICh0c2tfaXNfb29tX3ZpY3RpbShjdXJyZW50KSBcXHUwMDI2XFx1MDAyNlxcbjI3MTI6XFx0XFx0ICAgIG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZW9vbV9tbSkpXFxuMjcxMzpcXHRcXHRcXHRnb3RvIG5vbWVtO1xcbjI3MTQ6XFx0XFxuMjcxNTpcXHRcXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XFxuMjcxNjpcXHRcXHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcXG4yNzE3OlxcdFxcbjI3MTg6XFx0XFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbjI3MTk6XFx0XFx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXFxuMjcyMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgZ2ZwX21hc2ssIHJlY2xhaW1fb3B0aW9ucywgTlVMTCk7XFxuMjcyMTpcXHRcXHRwc2lfbWVtc3RhbGxfbGVhdmUoXFx1MDAyNnBmbGFncyk7XFxuMjcyMjpcXHRcXG4yNzIzOlxcdFxcdGlmIChtZW1fY2dyb3VwX21hcmdpbihtZW1fb3Zlcl9saW1pdCkgXFx1MDAzZT0gbnJfcGFnZXMpXFxuMjcyNDpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjI3MjU6XFx0XFxuMjcyNjpcXHRcXHRpZiAoIWRyYWluZWQpIHtcXG4yNzI3OlxcdFxcdFxcdGRyYWluX2FsbF9zdG9jayhtZW1fb3Zlcl9saW1pdCk7XFxuMjcyODpcXHRcXHRcXHRkcmFpbmVkID0gdHJ1ZTtcXG4yNzI5OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjczMDpcXHRcXHR9XFxuMjczMTpcXHRcXG4yNzMyOlxcdFxcdGlmIChnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX05PUkVUUlkpXFxuMjczMzpcXHRcXHRcXHRnb3RvIG5vbWVtO1xcbjI3MzQ6XFx0XFx0LypcXG4yNzM1OlxcdFxcdCAqIEV2ZW4gdGhvdWdoIHRoZSBsaW1pdCBpcyBleGNlZWRlZCBhdCB0aGlzIHBvaW50LCByZWNsYWltXFxuMjczNjpcXHRcXHQgKiBtYXkgaGF2ZSBiZWVuIGFibGUgdG8gZnJlZSBzb21lIHBhZ2VzLiAgUmV0cnkgdGhlIGNoYXJnZVxcbjI3Mzc6XFx0XFx0ICogYmVmb3JlIGtpbGxpbmcgdGhlIHRhc2suXFxuMjczODpcXHRcXHQgKlxcbjI3Mzk6XFx0XFx0ICogT25seSBmb3IgcmVndWxhciBwYWdlcywgdGhvdWdoOiBodWdlIHBhZ2VzIGFyZSByYXRoZXJcXG4yNzQwOlxcdFxcdCAqIHVubGlrZWx5IHRvIHN1Y2NlZWQgc28gY2xvc2UgdG8gdGhlIGxpbWl0LCBhbmQgd2UgZmFsbCBiYWNrXFxuMjc0MTpcXHRcXHQgKiB0byByZWd1bGFyIHBhZ2VzIGFueXdheSBpbiBjYXNlIG9mIGZhaWx1cmUuXFxuMjc0MjpcXHRcXHQgKi9cXG4yNzQzOlxcdFxcdGlmIChucl9yZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgbnJfcGFnZXMgXFx1MDAzYz0gKDEgXFx1MDAzY1xcdTAwM2MgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKVxcbjI3NDQ6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yNzQ1OlxcdFxcbjI3NDY6XFx0XFx0aWYgKG5yX3JldHJpZXMtLSlcXG4yNzQ3OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjc0ODpcXHRcXG4yNzQ5OlxcdFxcdGlmIChnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX1JFVFJZX01BWUZBSUwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjU0OjA3Ljc3NDc1MzUzOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzQwMTE1MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gd2hhdGV2ZXIgZmllbGQgdGhlIG9yaWdpbmFsIHRleHQgcGVydGFpbnMgdG86XG5cbioqRGl2aW5nIERlZXBlcjogRXhwbG9yaW5nIExpbmVzIDI3NTAtMjg2MCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gQmFzZWQgb24gdGhlIGluaXRpYWwgc2NhbiwgSSdtIHRoaW5raW5nIHdlIG5lZWQgYSBtb3JlIGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1hdGVyaWFsLiBHaXZlbiB0aGUgc2NvcGUgd2UncmUgZGVhbGluZyB3aXRoLCBJIHRoaW5rIGl0J3MgdGltZSB0byB6ZXJvIGluIG9uIGxpbmVzIDI3NTAgdGhyb3VnaCAyODYwLiBUaGlzIHNlY3Rpb24gd2FycmFudHMgY2xvc2VyIGV4YW1pbmF0aW9uLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiB1bmVhcnRoIGZyb20gdGhhdCBwYXJ0aWN1bGFyIHNlZ21lbnQuIEknbSBob3BpbmcgaXQnbGwgcHJvdmlkZSBmdXJ0aGVyIGNsYXJpdHkgb3IgbmV3IGluc2lnaHRzIG9uIHRoZSB0b3BpYyBhdCBoYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjcxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1NDowOS41MTQ4NzI4MzdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3NTA6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzUxOlxcdFxcbjI3NTI6XFx0XFx0LyogQXZvaWQgZW5kbGVzcyBsb29wIGZvciB0YXNrcyBieXBhc3NlZCBieSB0aGUgb29tIGtpbGxlciAqL1xcbjI3NTM6XFx0XFx0aWYgKHBhc3NlZF9vb20gXFx1MDAyNlxcdTAwMjYgdGFza19pc19keWluZygpKVxcbjI3NTQ6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzU1OlxcdFxcbjI3NTY6XFx0XFx0LypcXG4yNzU3OlxcdFxcdCAqIGtlZXAgcmV0cnlpbmcgYXMgbG9uZyBhcyB0aGUgbWVtY2cgb29tIGtpbGxlciBpcyBhYmxlIHRvIG1ha2VcXG4yNzU4OlxcdFxcdCAqIGEgZm9yd2FyZCBwcm9ncmVzcyBvciBieXBhc3MgdGhlIGNoYXJnZSBpZiB0aGUgb29tIGtpbGxlclxcbjI3NTk6XFx0XFx0ICogY291bGRuJ3QgbWFrZSBhbnkgcHJvZ3Jlc3MuXFxuMjc2MDpcXHRcXHQgKi9cXG4yNzYxOlxcdFxcdGlmIChtZW1fY2dyb3VwX29vbShtZW1fb3Zlcl9saW1pdCwgZ2ZwX21hc2ssXFxuMjc2MjpcXHRcXHRcXHRcXHQgICBnZXRfb3JkZXIobnJfcGFnZXMgKiBQQUdFX1NJWkUpKSkge1xcbjI3NjM6XFx0XFx0XFx0cGFzc2VkX29vbSA9IHRydWU7XFxuMjc2NDpcXHRcXHRcXHRucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG4yNzY1OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjc2NjpcXHRcXHR9XFxuMjc2NzpcXHRub21lbTpcXG4yNzY4OlxcdFxcdC8qXFxuMjc2OTpcXHRcXHQgKiBNZW1jZyBkb2Vzbid0IGhhdmUgYSBkZWRpY2F0ZWQgcmVzZXJ2ZSBmb3IgYXRvbWljXFxuMjc3MDpcXHRcXHQgKiBhbGxvY2F0aW9ucy4gQnV0IGxpa2UgdGhlIGdsb2JhbCBhdG9taWMgcG9vbCwgd2UgbmVlZCB0b1xcbjI3NzE6XFx0XFx0ICogcHV0IHRoZSBidXJkZW4gb2YgcmVjbGFpbSBvbiByZWd1bGFyIGFsbG9jYXRpb24gcmVxdWVzdHNcXG4yNzcyOlxcdFxcdCAqIGFuZCBsZXQgdGhlc2UgZ28gdGhyb3VnaCBhcyBwcml2aWxlZ2VkIGFsbG9jYXRpb25zLlxcbjI3NzM6XFx0XFx0ICovXFxuMjc3NDpcXHRcXHRpZiAoIShnZnBfbWFzayBcXHUwMDI2IChfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKSkpIHtcXG4yNzc1OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMjc3NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4yNzc3OlxcdFxcdH1cXG4yNzc4OlxcdGZvcmNlOlxcbjI3Nzk6XFx0XFx0LypcXG4yNzgwOlxcdFxcdCAqIFRoZSBhbGxvY2F0aW9uIGVpdGhlciBjYW4ndCBmYWlsIG9yIHdpbGwgbGVhZCB0byBtb3JlIG1lbW9yeVxcbjI3ODE6XFx0XFx0ICogYmVpbmcgZnJlZWQgdmVyeSBzb29uLiAgQWxsb3cgbWVtb3J5IHVzYWdlIGdvIG92ZXIgdGhlIGxpbWl0XFxuMjc4MjpcXHRcXHQgKiB0ZW1wb3JhcmlseSBieSBmb3JjZSBjaGFyZ2luZyBpdC5cXG4yNzgzOlxcdFxcdCAqL1xcbjI3ODQ6XFx0XFx0cGFnZV9jb3VudGVyX2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgbnJfcGFnZXMpO1xcbjI3ODU6XFx0XFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcXG4yNzg2OlxcdFxcdFxcdHBhZ2VfY291bnRlcl9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgbnJfcGFnZXMpO1xcbjI3ODc6XFx0XFxuMjc4ODpcXHRvdXQ6XFxuMjc4OTpcXHRcXHQvKlxcbjI3OTA6XFx0XFx0ICogRG9uJ3QgZm9yZ2V0IHRvIHJhaXNlIGEgTUVNQ0dfTUFYIGV2ZW50IGZvciBmb3JjZWQgb3IgcmVqZWN0ZWRcXG4yNzkxOlxcdFxcdCAqIHJlcXVlc3RzLlxcbjI3OTI6XFx0XFx0ICovXFxuMjc5MzpcXHRcXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXFxuMjc5NDpcXHRcXHRcXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XFxuMjc5NTpcXHRcXG4yNzk2OlxcdFxcdHJldHVybiByZXQ7XFxuMjc5NzpcXHRcXG4yNzk4OlxcdGRvbmVfcmVzdG9jazpcXG4yNzk5OlxcdFxcdGlmIChiYXRjaCBcXHUwMDNlIG5yX3BhZ2VzKVxcbjI4MDA6XFx0XFx0XFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBiYXRjaCAtIG5yX3BhZ2VzKTtcXG4yODAxOlxcdFxcbjI4MDI6XFx0XFx0LypcXG4yODAzOlxcdFxcdCAqIElmIHRoZSBoaWVyYXJjaHkgaXMgYWJvdmUgdGhlIG5vcm1hbCBjb25zdW1wdGlvbiByYW5nZSwgc2NoZWR1bGVcXG4yODA0OlxcdFxcdCAqIHJlY2xhaW0gb24gcmV0dXJuaW5nIHRvIHVzZXJsYW5kLiAgV2UgY2FuIHBlcmZvcm0gcmVjbGFpbSBoZXJlXFxuMjgwNTpcXHRcXHQgKiBpZiBfX0dGUF9SRUNMQUlNIGJ1dCBsZXQncyBhbHdheXMgcHVudCBmb3Igc2ltcGxpY2l0eSBhbmQgc28gdGhhdFxcbjI4MDY6XFx0XFx0ICogR0ZQX0tFUk5FTCBjYW4gY29uc2lzdGVudGx5IGJlIHVzZWQgZHVyaW5nIHJlY2xhaW0uICBAbWVtY2cgaXNcXG4yODA3OlxcdFxcdCAqIG5vdCByZWNvcmRlZCBhcyBpdCBtb3N0IGxpa2VseSBtYXRjaGVzIGN1cnJlbnQncyBhbmQgd29uJ3RcXG4yODA4OlxcdFxcdCAqIGNoYW5nZSBpbiB0aGUgbWVhbnRpbWUuICBBcyBoaWdoIGxpbWl0IGlzIGNoZWNrZWQgYWdhaW4gYmVmb3JlXFxuMjgwOTpcXHRcXHQgKiByZWNsYWltLCB0aGUgY29zdCBvZiBtaXNtYXRjaCBpcyBuZWdsaWdpYmxlLlxcbjI4MTA6XFx0XFx0ICovXFxuMjgxMTpcXHRcXHRkbyB7XFxuMjgxMjpcXHRcXHRcXHRib29sIG1lbV9oaWdoLCBzd2FwX2hpZ2g7XFxuMjgxMzpcXHRcXG4yODE0OlxcdFxcdFxcdG1lbV9oaWdoID0gcGFnZV9jb3VudGVyX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnkpIFxcdTAwM2VcXG4yODE1OlxcdFxcdFxcdFxcdFJFQURfT05DRShtZW1jZy1cXHUwMDNlbWVtb3J5LmhpZ2gpO1xcbjI4MTY6XFx0XFx0XFx0c3dhcF9oaWdoID0gcGFnZV9jb3VudGVyX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwKSBcXHUwMDNlXFxuMjgxNzpcXHRcXHRcXHRcXHRSRUFEX09OQ0UobWVtY2ctXFx1MDAzZXN3YXAuaGlnaCk7XFxuMjgxODpcXHRcXG4yODE5OlxcdFxcdFxcdC8qIERvbid0IGJvdGhlciBhIHJhbmRvbSBpbnRlcnJ1cHRlZCB0YXNrICovXFxuMjgyMDpcXHRcXHRcXHRpZiAoIWluX3Rhc2soKSkge1xcbjI4MjE6XFx0XFx0XFx0XFx0aWYgKG1lbV9oaWdoKSB7XFxuMjgyMjpcXHRcXHRcXHRcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZtZW1jZy1cXHUwMDNlaGlnaF93b3JrKTtcXG4yODIzOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4MjQ6XFx0XFx0XFx0XFx0fVxcbjI4MjU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjgyNjpcXHRcXHRcXHR9XFxuMjgyNzpcXHRcXG4yODI4OlxcdFxcdFxcdGlmIChtZW1faGlnaCB8fCBzd2FwX2hpZ2gpIHtcXG4yODI5OlxcdFxcdFxcdFxcdC8qXFxuMjgzMDpcXHRcXHRcXHRcXHQgKiBUaGUgYWxsb2NhdGluZyB0YXNrcyBpbiB0aGlzIGNncm91cCB3aWxsIG5lZWQgdG8gZG9cXG4yODMxOlxcdFxcdFxcdFxcdCAqIHJlY2xhaW0gb3IgYmUgdGhyb3R0bGVkIHRvIHByZXZlbnQgZnVydGhlciBncm93dGhcXG4yODMyOlxcdFxcdFxcdFxcdCAqIG9mIHRoZSBtZW1vcnkgb3Igc3dhcCBmb290cHJpbnRzLlxcbjI4MzM6XFx0XFx0XFx0XFx0ICpcXG4yODM0OlxcdFxcdFxcdFxcdCAqIFRhcmdldCBzb21lIGJlc3QtZWZmb3J0IGZhaXJuZXNzIGJldHdlZW4gdGhlIHRhc2tzLFxcbjI4MzU6XFx0XFx0XFx0XFx0ICogYW5kIGRpc3RyaWJ1dGUgcmVjbGFpbSB3b3JrIGFuZCBkZWxheSBwZW5hbHRpZXNcXG4yODM2OlxcdFxcdFxcdFxcdCAqIGJhc2VkIG9uIGhvdyBtdWNoIGVhY2ggdGFzayBpcyBhY3R1YWxseSBhbGxvY2F0aW5nLlxcbjI4Mzc6XFx0XFx0XFx0XFx0ICovXFxuMjgzODpcXHRcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2ggKz0gYmF0Y2g7XFxuMjgzOTpcXHRcXHRcXHRcXHRzZXRfbm90aWZ5X3Jlc3VtZShjdXJyZW50KTtcXG4yODQwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4NDE6XFx0XFx0XFx0fVxcbjI4NDI6XFx0XFx0fSB3aGlsZSAoKG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSk7XFxuMjg0MzpcXHRcXG4yODQ0OlxcdFxcdC8qXFxuMjg0NTpcXHRcXHQgKiBSZWNsYWltIGlzIHNldCB1cCBhYm92ZSB0byBiZSBjYWxsZWQgZnJvbSB0aGUgdXNlcmxhbmRcXG4yODQ2OlxcdFxcdCAqIHJldHVybiBwYXRoLiBCdXQgYWxzbyBhdHRlbXB0IHN5bmNocm9ub3VzIHJlY2xhaW0gdG8gYXZvaWRcXG4yODQ3OlxcdFxcdCAqIGV4Y2Vzc2l2ZSBvdmVycnVuIHdoaWxlIHRoZSB0YXNrIGlzIHN0aWxsIGluc2lkZSB0aGVcXG4yODQ4OlxcdFxcdCAqIGtlcm5lbC4gSWYgdGhpcyBpcyBzdWNjZXNzZnVsLCB0aGUgcmV0dXJuIHBhdGggd2lsbCBzZWUgaXRcXG4yODQ5OlxcdFxcdCAqIHdoZW4gaXQgcmVjaGVja3MgdGhlIG92ZXJhZ2UgYW5kIHNpbXBseSBiYWlsIG91dC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTQ6MDkuNTE2NTk0MjA3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg1NzE3NjMxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNRU1DR19NQVggRXZlbnQgSGFuZGxpbmcgaW4gYHRyeV9jaGFyZ2VfbWVtY2dgKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCB0aGlzIHBhdGNoLiBJdCBhcHBlYXJzIHRoZSBjb3JlIGNoYW5nZSBjZW50ZXJzIGFyb3VuZCBob3cgdGhlIGBNRU1DR19NQVhgIGV2ZW50IGlzIHJhaXNlZCB3aXRoaW4gdGhlIGB0cnlfY2hhcmdlX21lbWNnYCBmdW5jdGlvbi4gIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBhIHJldHVybiB2YXJpYWJsZSBgcmV0YCBoYXMgYmVlbiBpbnRyb2R1Y2VkIGFuZCB1dGlsaXplZCB0byBoYW5kbGUgYm90aCBzdWNjZXNzZnVsIGFuZCBmYWlsZWQgbWVtb3J5IGNoYXJnZSByZXF1ZXN0cywgYW5kIGFsc28gdG8gZW5zdXJlIHRoZSBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGNhbGwgaXNuJ3QgbWlzc2VkIHVuZGVyIGZhaWx1cmUgY29uZGl0aW9ucy4gUHJldmlvdXNseSwgaXQgc2VlbXMgdGhlIGV2ZW50IG1pZ2h0IGhhdmUgYmVlbiBza2lwcGVkIGlmIGEgcmVjbGFpbSBhdHRlbXB0IHdhcyBieXBhc3NlZCBkdWUgdG8gZmxhZ3Mgb3IgT09NIHNpdHVhdGlvbnMuXG5cblRoZSBtb3RpdmF0aW9uIHNlZW1zIGNsZWFyOiB0byBlbnN1cmUgdGhhdCB0aGUgYE1FTUNHX01BWGAgZXZlbnQgaXMgY29uc2lzdGVudGx5IHJhaXNlZCB3aGVuIGEgbWVtb3J5IGNoYXJnZSByZXF1ZXN0IGZhaWxzLCByZWdhcmRsZXNzIG9mIHRoZSBmYWlsdXJlIHBhdGggKGUuZy4sIGRpcmVjdCBmYWlsdXJlIHZpYSBgIShfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKWAgb3IgdGhyb3VnaCByZWNsYWltIGJ5cGFzcykuICBQcmV2aW91c2x5LCB0aGUgZXZlbnQgd2FzIG9ubHkgcmFpc2VkIGZvciBlbmZvcmNlZCBhbGxvY2F0aW9ucyBvciBkdXJpbmcgcmVjbGFpbSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBtaXNzZWQgZXZlbnRzIGluIHNvbWUgc2NlbmFyaW9zLlxuXG5Ob3csIGEgY3JpdGljYWwgdGhvdWdodDogY291bGQgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gIExldCdzIHNlZS4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgdW5pbml0aWFsaXplZCBkYXRhIGNhbiBsZWFkIHRvIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCBpbmNyZW1lbnRzIGV2ZW50IGNvdW50ZXJzLCB3aGljaCBzaG91bGQgYmUgc2FmZS4gSG93ZXZlciwgdGhlIGBtZW1fb3Zlcl9saW1pdGAgcG9pbnRlciBuZWVkcyBhIGNsb3NlciBsb29rLiBJcyBpdCBwb3NzaWJsZSBmb3IgaXQgdG8gYmUgdXNlZCB1bmluaXRpYWxpemVkP1xuXG5Pa2F5LCBsZXQncyBzdGVwIHRocm91Z2ggdGhlIGxvZ2ljLiAgSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgY2FyZWZ1bGx5LCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgYGdvdG8gbm9tZW1gLCBgZ290byBmb3JjZWAsIGFuZCBgZ290byBvdXRgIHN0YXRlbWVudHMuIFRoZSBpbXBvcnRhbnQgdmFyaWFibGVzIGhlcmUgYXJlIGBtZW1fb3Zlcl9saW1pdGAsIGByYWlzZWRfbWF4X2V2ZW50YCwgYGFsbG93X3NwaW5uaW5nYCwgYW5kIG9mIGNvdXJzZSBgcmV0YC4gTG9va2luZyBhdCB0aGUgY29kZSBhcm91bmQgdGhlIGByZXRyeWAgbGFiZWwsIEkgc2VlIHRoYXQgaWYgYHBhZ2VfY291bnRlcl90cnlfY2hhcmdlYCBzdWNjZWVkcywgdGhlIGZ1bmN0aW9uIGBnb3RvIGRvbmVfcmVzdG9ja2AuIEhvd2V2ZXIsIGlmIGBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZWAgZmFpbHMsIHRoZSBgbWVtX292ZXJfbGltaXRgIHBvaW50ZXIgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQsIGVpdGhlciBhdCBsaW5lIDI2NzYgb3IgMjY3OC4gVGhlIHByb2dyYW0gZWl0aGVyIGdvZXMgdG8gYGZvcmNlYCBvciBgbm9tZW1gICphZnRlciogdGhlIGBtZW1fb3Zlcl9saW1pdGAgcG9pbnRlciBpcyBzZXQuIEFsc28gYHJldGAgaXMgc2V0IHRvIGAwYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbiBhbmQgdGhlbiB0byBgLUVOT01FTWAgaW4gY2FzZSBvZiBmYWlsdXJlLlxuXG5JIGFsc28gaGF2ZSB0byBjaGVjayB0aGF0IG5vIG90aGVyIHBhdGggZXhpc3RzIHRvIGBub21lbWAsIGBmb3JjZWAsIG9yIGBvdXRgIG90aGVyIHRoYW4gdGhyb3VnaCB0aGlzIGNvZGUgcGF0aCwgc28gSSBzaG91bGQgcGVyZm9ybSBhIGZ1bGwgc2VhcmNoIG9mIGBtbS9tZW1jb250cm9sLmNgLlxuXG5CYXNlZCBvbiBteSBhbmFseXNpcywgaXQgc2VlbXMgdGhlIHBhdGNoIGlzIHNhZmUgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBgbWVtX292ZXJfbGltaXRgIGlzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgdGhlIGV2ZW50IGhhbmRsaW5nIGxvZ2ljIGlzIHRpZ2h0ZW5lZCB1cCB0byBndWFyYW50ZWUgYSBjb25zaXN0ZW50IGBNRU1DR19NQVhgIGV2ZW50IG9uIGZhaWx1cmVzLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTQ6MTguMDg4MzYwOTZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjMwODYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnb3RvIChub21lbXxmb3JjZXxvdXQpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MTI1OD1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9pdGVyKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTEyOTAtXFx0XFx0ZWxzZSBpZiAocmVjbGFpbS1cXHUwMDNlZ2VuZXJhdGlvbiAhPSBnZW4pXFxubW0vbWVtY29udHJvbC5jOjEyOTE6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbm1tL21lbWNvbnRyb2wuYy0xMjkyLVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE5OTI9c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X29vbV9ncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnZpY3RpbSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMDA3LVxcdGlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxcbm1tL21lbWNvbnRyb2wuYzoyMDA4OlxcdFxcdGdvdG8gb3V0O1xcbm1tL21lbWNvbnRyb2wuYy0yMDA5LVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIwMTUtXFx0aWYgKHVubGlrZWx5KCFtZW1fY2dyb3VwX2lzX2Rlc2NlbmRhbnQobWVtY2csIG9vbV9kb21haW4pKSlcXG5tbS9tZW1jb250cm9sLmM6MjAxNjpcXHRcXHRnb3RvIG91dDtcXG5tbS9tZW1jb250cm9sLmMtMjAxNy1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNTU1PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjU3Ny1cXHRpZiAodGFza19pc19keWluZygpKVxcbm1tL21lbWNvbnRyb2wuYzoyNTc4OlxcdFxcdGdvdG8gb3V0O1xcbm1tL21lbWNvbnRyb2wuYy0yNTc5LVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2MTYtXFx0aWYgKHBlbmFsdHlfamlmZmllcyBcXHUwMDNjPSBIWiAvIDEwMClcXG5tbS9tZW1jb250cm9sLmM6MjYxNzpcXHRcXHRnb3RvIG91dDtcXG5tbS9tZW1jb250cm9sLmMtMjYxOC1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNjQ1PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2OTMtXFx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpKVxcbm1tL21lbWNvbnRyb2wuYzoyNjk0OlxcdFxcdGdvdG8gZm9yY2U7XFxubW0vbWVtY29udHJvbC5jLTI2OTUtXFxubW0vbWVtY29udHJvbC5jLTI2OTYtXFx0aWYgKHVubGlrZWx5KHRhc2tfaW5fbWVtY2dfb29tKGN1cnJlbnQpKSlcXG5tbS9tZW1jb250cm9sLmM6MjY5NzpcXHRcXHRnb3RvIG5vbWVtO1xcbm1tL21lbWNvbnRyb2wuYy0yNjk4LVxcbm1tL21lbWNvbnRyb2wuYy0yNjk5LVxcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxcbm1tL21lbWNvbnRyb2wuYzoyNzAwOlxcdFxcdGdvdG8gbm9tZW07XFxubW0vbWVtY29udHJvbC5jLTI3MDEtXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjcxMi1cXHQgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIGN1cnJlbnQtXFx1MDAzZXNpZ25hbC1cXHUwMDNlb29tX21tKSlcXG5tbS9tZW1jb250cm9sLmM6MjcxMzpcXHRcXHRnb3RvIG5vbWVtO1xcbm1tL21lbWNvbnRyb2wuYy0yNzE0LVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI3MzItXFx0aWYgKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfTk9SRVRSWSlcXG5tbS9tZW1jb250cm9sLmM6MjczMzpcXHRcXHRnb3RvIG5vbWVtO1xcbm1tL21lbWNvbnRyb2wuYy0yNzM0LVxcdC8qXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjc0OS1cXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9SRVRSWV9NQVlGQUlMKVxcbm1tL21lbWNvbnRyb2wuYzoyNzUwOlxcdFxcdGdvdG8gbm9tZW07XFxubW0vbWVtY29udHJvbC5jLTI3NTEtXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjc1My1cXHRpZiAocGFzc2VkX29vbSBcXHUwMDI2XFx1MDAyNiB0YXNrX2lzX2R5aW5nKCkpXFxubW0vbWVtY29udHJvbC5jOjI3NTQ6XFx0XFx0Z290byBub21lbTtcXG5tbS9tZW1jb250cm9sLmMtMjc1NS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNzc1LVxcdFxcdHJldCA9IC1FTk9NRU07XFxubW0vbWVtY29udHJvbC5jOjI3NzY6XFx0XFx0Z290byBvdXQ7XFxubW0vbWVtY29udHJvbC5jLTI3NzctXFx0fVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTMxNTc9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTY2LVxcdGlmIChyZXQpXFxubW0vbWVtY29udHJvbC5jOjMxNjc6XFx0XFx0Z290byBvdXQ7XFxubW0vbWVtY29udHJvbC5jLTMxNjgtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzQ1OT1zdGF0aWMgdm9pZCBfX3JlZmlsbF9vYmpfc3RvY2soc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM0NzEtXFx0XFx0YXRvbWljX2FkZChucl9ieXRlcywgXFx1MDAyNm9iamNnLVxcdTAwM2Vucl9jaGFyZ2VkX2J5dGVzKTtcXG5tbS9tZW1jb250cm9sLmM6MzQ3MjpcXHRcXHRnb3RvIG91dDtcXG5tbS9tZW1jb250cm9sLmMtMzQ3My1cXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDg0Mj1zdGF0aWMgc3NpemVfdCBtZW1vcnlfaGlnaF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDg1OC1cXHRpZiAob2YtXFx1MDAzZWZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX05PTkJMT0NLKVxcbm1tL21lbWNvbnRyb2wuYzo0ODU5OlxcdFxcdGdvdG8gb3V0O1xcbm1tL21lbWNvbnRyb2wuYy00ODYwLVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ5MDE9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDkxNy1cXHRpZiAob2YtXFx1MDAzZWZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX05PTkJMT0NLKVxcbm1tL21lbWNvbnRyb2wuYzo0OTE4OlxcdFxcdGdvdG8gb3V0O1xcbm1tL21lbWNvbnRyb2wuYy00OTE5LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyNDk9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNjAtXFx0XFx0IW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL21lbWNvbnRyb2wuYzo1MjYxOlxcdFxcdGdvdG8gb3V0O1xcbm1tL21lbWNvbnRyb2wuYy01MjYyLVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU1Njk9dm9pZCBtZW1fY2dyb3VwX3NrX2FsbG9jKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NTgyLVxcdGlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxcbm1tL21lbWNvbnRyb2wuYzo1NTgzOlxcdFxcdGdvdG8gb3V0O1xcbm1tL21lbWNvbnRyb2wuYy01NTg0LVxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSBcXHUwMDI2XFx1MDAyNiAhbWVtY2cxX3RjcG1lbV9hY3RpdmUobWVtY2cpKVxcbm1tL21lbWNvbnRyb2wuYzo1NTg1OlxcdFxcdGdvdG8gb3V0O1xcbm1tL21lbWNvbnRyb2wuYy01NTg2LVxcdGlmIChjc3NfdHJ5Z2V0KFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTQ6MTguMjIwNjc0MTgxWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxODg0NjkxMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBDaGFyZ2UgTWVjaGFuaXNtcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgY2hhcmdpbmcgYmVoYXZpb3IsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBtZW1jZ2AgKG1lbW9yeSBjb250cm9sIGdyb3VwcykgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgaW52ZXN0aWdhdGluZyB0aGUgY2FsbCBncmFwaHMgb2YgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSSB3YW50IHRvIHNlZSAqd2hvKiBpcyBjYWxsaW5nIGB0cnlfY2hhcmdlX21lbWNnYCBhbmQgYWxzbywgaW1wb3J0YW50bHksIGB0cnlfY2hhcmdlYC4gVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gdXNhZ2UgaXMgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBmbG93IGFuZCB0aGUgcG90ZW50aWFsIHBvaW50cyB3aGVyZSBtZW1vcnkgYWNjb3VudGluZyBhbmQgbGltaXRhdGlvbnMgbWlnaHQgYmUgdHJpZ2dlcmVkLiBTZWVpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBnaXZlIG1lIHRoZSBiZXN0IGluc2lnaHQgaW50byBpdHMgdXNhZ2UuIFdoZXJlIGRvIHRoZXNlIGNoZWNrcyBoYXBwZW4/IFdoYXQga2luZCBvZiBvcGVyYXRpb25zIGFyZSBiZWluZyBwcm90ZWN0ZWQ/IEtub3dpbmcgdGhpcyB3aWxsIHNpZ25pZmljYW50bHkgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVjbGFpbWVkLCBhbmQgcG90ZW50aWFsbHkgdGhyb3R0bGVkIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEzMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjU0OjQwLjEwNTM2ODU3MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzNDg2MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X2NoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTI1MTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2hpZ2hfZGVsYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI1NTEtICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tXFxubW0vbWVtY29udHJvbC5jOjI1NTI6ICogdHJ5X2NoYXJnZSgpIChjb250ZXh0IHBlcm1pdHRpbmcpLCBhcyB3ZWxsIGFzIGZyb20gdGhlIHVzZXJsYW5kXFxubW0vbWVtY29udHJvbC5jLTI1NTMtICogcmV0dXJuIHBhdGggd2hlcmUgcmVjbGFpbSBpcyBhbHdheXMgYWJsZSB0byBibG9jay5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNTU1PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY0NC1cXG5tbS9tZW1jb250cm9sLmM6MjY0NTpzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9tZW1jb250cm9sLmMtMjY0Ni1cXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NzAtXFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcXG5tbS9tZW1jb250cm9sLmM6MjY3MTpcXHQgICAgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSkge1xcbm1tL21lbWNvbnRyb2wuYzoyNjcyOlxcdFxcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSlcXG5tbS9tZW1jb250cm9sLmMtMjY3My1cXHRcXHRcXHRnb3RvIGRvbmVfcmVzdG9jaztcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODU3LVxcbm1tL21lbWNvbnRyb2wuYzoyODU4OnN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9tZW1jb250cm9sLmMtMjg1OS1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODYzLVxcbm1tL21lbWNvbnRyb2wuYzoyODY0OlxcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0yODY1LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMTU3PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzE2NC1cXG5tbS9tZW1jb250cm9sLmM6MzE2NTpcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzE2Ni1cXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMDU9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMTMtXFx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxcbm1tL21lbWNvbnRyb2wuYzo1MjE0OlxcdFxcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG5tbS9tZW1jb250cm9sLmMtNTIxNS1cXHRpZiAocmV0KSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTYyNT1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2MzItXFxubW0vbWVtY29udHJvbC5jOjU2MzM6XFx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xcbm1tL21lbWNvbnRyb2wuYy01NjM0LVxcdFxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU2OTE9aW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzI4LS8qKlxcbm1tL21lbWNvbnRyb2wuYzo1NzI5OiAqIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAgLSB0cnkgY2hhcmdpbmcgc3dhcCBzcGFjZSBmb3IgYSBmb2xpb1xcbm1tL21lbWNvbnRyb2wuYy01NzMwLSAqIEBmb2xpbzogZm9saW8gYmVpbmcgYWRkZWQgdG8gc3dhcFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3MzUtICovXFxubW0vbWVtY29udHJvbC5jOjU3MzY6aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9tZW1jb250cm9sLmMtNTczNy17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc2NC1cXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1jb250cm9sLmM6NTc2NTpcXHQgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFxcdTAwMjZjb3VudGVyKSkge1xcbm1tL21lbWNvbnRyb2wuYy01NzY2LVxcdFxcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1NDo0MC4xNTk3MjQ2NDdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzUwNzAzOTQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBBcHBsaWNhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBwYXRjaCB0byBgdHJ5X2NoYXJnZV9tZW1jZ2AuIFRoZSBrZXkgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB0aGUgcmV0dXJuIHBhdGggYW5kIGVycm9yIGhhbmRsaW5nLiBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGEgYHJldGAgdmFyaWFibGUgdG8gY2FwdHVyZSB0aGUgcmV0dXJuIHZhbHVlLCB0aGUgY29uc29saWRhdGlvbiBvZiB0aGUgcmV0dXJuIHBhdGhzIHRocm91Z2ggYW4gYG91dDpgIGxhYmVsLCBhbmQgdGhlIGNvbnNpc3RlbnQgY2FsbCB0byBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIHdoZW4gYSBtZW1vcnkgY2hhcmdlIGZhaWxzLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgc2VlbXMgbGlrZSBpdCBtaWdodCBiZSBsb2dpYyBjaGFuZ2VzIHRoYXQgZG8gbm90IGNhdXNlIGEgS01TQU4gY29uY2Vybi5cblxuTm93LCBsZXQncyByaWdvcm91c2x5IGdvIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhLiBGaXJzdCwgYW0gSSBkZWFsaW5nIHdpdGgga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgbm93IGV4cG9zZWQgdG8gdXNlcnNwYWNlPyBObywgdGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSB3aGF0J3MgZXhwb3NlZCB0byB1c2Vyc3BhY2UuIFNlY29uZCwgYXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IGRlcGVuZCBvbiAqdW5pbml0aWFsaXplZCogdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/IE5vLCBJJ20gY2FyZWZ1bGx5IGNoZWNraW5nIHRoZSBjb2RlIGFuZCBhbGwgdGhlIGxvY2FsIHZhcmlhYmxlcyB1c2VkIChgcmV0YCwgYHJhaXNlZF9tYXhfZXZlbnRgLCBldGMuKSBhcmUgZGVmaW5pdGVseSBpbml0aWFsaXplZCBiZWZvcmUgYW55IGV2YWx1YXRpb24gb3IgZGVyZWZlcmVuY2luZyBoYXBwZW5zLiBUaGlyZCwgYXJlIHRoZXJlIG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBtaWdodCBiZSByZWFkIGxhdGVyPyBObywgdGhpcyBpcyBwdXJlbHkgbWVtb3J5IGNncm91cCBsb2dpYy4gRm91cnRoLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBidWZmZXIgYWNjZXNzIHZpb2xhdGlvbnM/IE5vLCB0aGUgcGF0Y2ggZG9lc24ndCBtb2RpZnkgYW55IGNvZGUgdGhhdCBpbnZvbHZlcyB0aGF0IHJpc2suXG5cblNpbmNlIHRoaXMgaXMgcHVyZWx5IG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgYW5kIGV2ZW50IHJlcG9ydGluZywgSSBhbSB2ZXJ5IGNvbmZpZGVudCB0aGF0IGFueSBidWdzIHdvdWxkIGJlIGxvZ2ljIGJ1Z3MsIGFjY291bnRpbmcgZXJyb3JzLCBvciB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGxvY2tpbmcgaXNzdWVzLiBUaG9zZSBhcmUgYWxyZWFkeSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4sIGFuZCBMT0NLREVQLiBUaGlzIGlzIG5vdCBLTVNBTidzIGRvbWFpbi5cblxuU28sIGZvciBteSBjb250cmFzdGluZyByZWFzb25pbmcsIEkgY2FuIHN1bW1hcml6ZSB0aGUgcGF0Y2ggYXMgZW5zdXJpbmcgYSBgTUVNQ0dfTUFYYCBldmVudCBpcyByYWlzZWQgd2hlbiBhIG1lbW9yeSBjaGFyZ2UgcmVxdWVzdCBmYWlscy4gS01TQU4gdGFyZ2V0cyBhcmUgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZGF0YSBidWZmZXJzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZSB0byBjb250cm9sIGZsb3cgb3IgbG9ja2luZyBpbiBgX19tZW1jZ19tZW1vcnlfZXZlbnRgLCB3aGljaCBpcyBjb3ZlcmVkIGJ5IEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgSSBjb25jbHVkZSB0aGF0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24ndCB3YXJyYW50ZWQuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgcHJvdmlkZSBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NTYsIk91dHB1dFRva2VucyI6MjY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjU0OjQ3LjY2Njc2NjgzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdHJ5X2NoYXJnZV9tZW1jZygpYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBlbnN1cmUgdGhhdCBhIGBNRU1DR19NQVhgIG1lbW9yeSBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiBhbiBhbGxvY2F0aW9uIGNoYXJnZSByZXF1ZXN0IGlzIHJlamVjdGVkIHdpdGggYC1FTk9NRU1gLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgdmFyaWFibGUgYHJldCA9IDBgLCBzZXRzIGByZXQgPSAtRU5PTUVNYCBvbiBmYWlsdXJlLCBhbmQgcm91dGVzIHRocm91Z2ggYSBjb21tb24gYG91dDpgIGxhYmVsIHRvIHJhaXNlIHRoZSBldmVudCBiZWZvcmUgcmV0dXJuaW5nIGByZXRgLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIChzdGFjay9oZWFwL3BhZ2VzKSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIGNoYW5nZXMgaGVyZSBkbyBub3QgaW52b2x2ZSBjb3B5aW5nIGRhdGEgc3RydWN0dXJlcyBvciBidWZmZXJzIHRvIHVzZXIgc3BhY2UsIGFsbG9jYXRpbmcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGByZXRgLCBgcmFpc2VkX21heF9ldmVudGAsIGBtZW1fb3Zlcl9saW1pdGApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcbi0gQW55IHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChlLmcuLCBjb250cm9sIGZsb3cgYnVncywgbWVtY2cgZXZlbnQgY291bnRlciBtYW5pcHVsYXRpb24sIGxvY2tpbmcgb3Igc3RhdGUgdHJhY2tpbmcgZHVyaW5nIG1lbWNnIHJlY2xhaW0vZXZlbnRzKSBhcmUgd2l0aGluIHRoZSBkb21haW4gb2Ygc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scywgS0FTQU4sIGFuZCBMT0NLREVQLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdHJ5X2NoYXJnZV9tZW1jZygpYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBlbnN1cmUgdGhhdCBhIGBNRU1DR19NQVhgIG1lbW9yeSBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiBhbiBhbGxvY2F0aW9uIGNoYXJnZSByZXF1ZXN0IGlzIHJlamVjdGVkIHdpdGggYC1FTk9NRU1gLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgdmFyaWFibGUgYHJldCA9IDBgLCBzZXRzIGByZXQgPSAtRU5PTUVNYCBvbiBmYWlsdXJlLCBhbmQgcm91dGVzIHRocm91Z2ggYSBjb21tb24gYG91dDpgIGxhYmVsIHRvIHJhaXNlIHRoZSBldmVudCBiZWZvcmUgcmV0dXJuaW5nIGByZXRgLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIChzdGFjay9oZWFwL3BhZ2VzKSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIGNoYW5nZXMgaGVyZSBkbyBub3QgaW52b2x2ZSBjb3B5aW5nIGRhdGEgc3RydWN0dXJlcyBvciBidWZmZXJzIHRvIHVzZXIgc3BhY2UsIGFsbG9jYXRpbmcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGByZXRgLCBgcmFpc2VkX21heF9ldmVudGAsIGBtZW1fb3Zlcl9saW1pdGApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcbi0gQW55IHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChlLmcuLCBjb250cm9sIGZsb3cgYnVncywgbWVtY2cgZXZlbnQgY291bnRlciBtYW5pcHVsYXRpb24sIGxvY2tpbmcgb3Igc3RhdGUgdHJhY2tpbmcgZHVyaW5nIG1lbWNnIHJlY2xhaW0vZXZlbnRzKSBhcmUgd2l0aGluIHRoZSBkb21haW4gb2Ygc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scywgS0FTQU4sIGFuZCBMT0NLREVQLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2qm9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 02:11:56 +0000 UTC FinishedAt: 2026-09-01 02:54:48 +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": "ba8d93a7c61eb1a846220fd8184b94292f51afb1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG" ], "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": "ba8d93a7c61eb1a846220fd8184b94292f51afb1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG" ], "series_id": "c6c703b7-cd2d-4329-97fa-2817f9b5a56f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__mem_cgroup_charge", "mem_cgroup_charge_hugetlb", "mem_cgroup_swapin_charge_folio", "mem_cgroup_sk_charge", "__memcg_memory_event" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX21lbV9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2tfY2hhcmdlJiMzNDssCiAgICAmIzM0O19fbWVtY2dfbWVtb3J5X2V2ZW50JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRyeV9jaGFyZ2VfbWVtY2coKWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gZW5zdXJlIHRoYXQgYSBgTUVNQ0dfTUFYYCBtZW1vcnkgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gYW4gYWxsb2NhdGlvbiBjaGFyZ2UgcmVxdWVzdCBpcyByZWplY3RlZCB3aXRoIGAtRU5PTUVNYC4gSXQgaW50cm9kdWNlcyBhIGxvY2FsIHZhcmlhYmxlIGByZXQgPSAwYCwgc2V0cyBgcmV0ID0gLUVOT01FTWAgb24gZmFpbHVyZSwgYW5kIHJvdXRlcyB0aHJvdWdoIGEgY29tbW9uIGBvdXQ6YCBsYWJlbCB0byByYWlzZSB0aGUgZXZlbnQgYmVmb3JlIHJldHVybmluZyBgcmV0YC5cblxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcbi0gS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyAoc3RhY2svaGVhcC9wYWdlcykgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGhlcmUgZG8gbm90IGludm9sdmUgY29weWluZyBkYXRhIHN0cnVjdHVyZXMgb3IgYnVmZmVycyB0byB1c2VyIHNwYWNlLCBhbGxvY2F0aW5nIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgbG9jYWwgdmFyaWFibGVzIChgcmV0YCwgYHJhaXNlZF9tYXhfZXZlbnRgLCBgbWVtX292ZXJfbGltaXRgKSBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbi0gQW55IHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChlLmcuLCBjb250cm9sIGZsb3cgYnVncywgbWVtY2cgZXZlbnQgY291bnRlciBtYW5pcHVsYXRpb24sIGxvY2tpbmcgb3Igc3RhdGUgdHJhY2tpbmcgZHVyaW5nIG1lbWNnIHJlY2xhaW0vZXZlbnRzKSBhcmUgd2l0aGluIHRoZSBkb21haW4gb2Ygc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scywgS0FTQU4sIGFuZCBMT0NLREVQLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRyeV9jaGFyZ2VfbWVtY2coKSB0byBlbnN1cmUgdGhhdCBNRU1DR19NQVggZXZlbnRzIGFyZSBwcm9wZXJseSByYWlzZWQgdmlhIF9fbWVtY2dfbWVtb3J5X2V2ZW50KCkgd2hlbiBtZW1vcnkgY2dyb3VwIGFsbG9jYXRpb24gcmVxdWVzdHMgYXJlIHJlamVjdGVkIHdpdGggLUVOT01FTS4gVGhpcyBhbHRlcnMgY29yZSBtZW1jZyBsaW1pdCBldmVudCBoYW5kbGluZyBhbmQgbWVtb3J5IGNoYXJnaW5nIGNvbnRyb2wgZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ2MzY5ODNmNjVjZjEwMmMyOWU0NzQwNmE1ZTgxYThhNTY2YjlmMjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDAyOjUyOjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTI3MWQzOTBiNjE3ZS4uMTU4YjA1NjJlOGRmMyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMjY1NiwxMCAmIzQzOzI2NTYsMTEgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRib29sIHJhaXNlZF9tYXhfZXZlbnQgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuIFx0Ym9vbCBhbGxvd19zcGlubmluZyA9IGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKGdmcF9tYXNrKTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiByZXRyeTpcbiBcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGlmICghYWxsb3dfc3Bpbm5pbmcpXG4gXHRcdC8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqL1xuQEAgLTI3NzAsMTYgJiM0MzsyNzcxLDExIEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0ICogcHV0IHRoZSBidXJkZW4gb2YgcmVjbGFpbSBvbiByZWd1bGFyIGFsbG9jYXRpb24gcmVxdWVzdHNcbiBcdCAqIGFuZCBsZXQgdGhlc2UgZ28gdGhyb3VnaCBhcyBwcml2aWxlZ2VkIGFsbG9jYXRpb25zLlxuIFx0ICovXG4tXHRpZiAoIShnZnBfbWFzayBcdTAwMjYgKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpKSlcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0aWYgKCEoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKSkpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gZm9yY2U6XG4tXHQvKlxuLVx0ICogSWYgdGhlIGFsbG9jYXRpb24gaGFzIHRvIGJlIGVuZm9yY2VkLCBkb24mIzM5O3QgZm9yZ2V0IHRvIHJhaXNlXG4tXHQgKiBhIE1FTUNHX01BWCBldmVudC5cbi1cdCAqL1xuLVx0aWYgKCFyYWlzZWRfbWF4X2V2ZW50KVxuLVx0XHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XG4tXG4gXHQvKlxuIFx0ICogVGhlIGFsbG9jYXRpb24gZWl0aGVyIGNhbiYjMzk7dCBmYWlsIG9yIHdpbGwgbGVhZCB0byBtb3JlIG1lbW9yeVxuIFx0ICogYmVpbmcgZnJlZWQgdmVyeSBzb29uLiAgQWxsb3cgbWVtb3J5IHVzYWdlIGdvIG92ZXIgdGhlIGxpbWl0XG5AQCAtMjc4OSw3ICYjNDM7Mjc4NSwxNSBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXG4gXHRcdHBhZ2VfY291bnRlcl9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIG5yX3BhZ2VzKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztvdXQ6XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEb24mIzM5O3QgZm9yZ2V0IHRvIHJhaXNlIGEgTUVNQ0dfTUFYIGV2ZW50IGZvciBmb3JjZWQgb3IgcmVqZWN0ZWRcbiYjNDM7XHQgKiByZXF1ZXN0cy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXG4mIzQzO1x0XHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gXG4gZG9uZV9yZXN0b2NrOlxuIFx0aWYgKGJhdGNoIFx1MDAzZSBucl9wYWdlcylcbkBAIC0yODQ4LDcgJiM0MzsyODUyLDcgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHQgICAgIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9NRU1BTExPQykgXHUwMDI2XHUwMDI2XG4gXHQgICAgZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxuIFx0XHRfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbWVtX2Nncm91cF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1jZ19tZW1vcnlfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdHJ5X2NoYXJnZV9tZW1jZygpIHRvIGVuc3VyZSB0aGF0IE1FTUNHX01BWCBldmVudHMgYXJlIHByb3Blcmx5IHJhaXNlZCB2aWEgX19tZW1jZ19tZW1vcnlfZXZlbnQoKSB3aGVuIG1lbW9yeSBjZ3JvdXAgYWxsb2NhdGlvbiByZXF1ZXN0cyBhcmUgcmVqZWN0ZWQgd2l0aCAtRU5PTUVNLiBUaGlzIGFsdGVycyBjb3JlIG1lbWNnIGxpbWl0IGV2ZW50IGhhbmRsaW5nIGFuZCBtZW1vcnkgY2hhcmdpbmcgY29udHJvbCBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDYzNjk4M2Y2NWNmMTAyYzI5ZTQ3NDA2YTVlODFhOGE1NjZiOWYyNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMDI6NTI6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMTI3MWQzOTBiNjE3ZS4uMTU4YjA1NjJlOGRmMyAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMjY1NiwxMCAmIzQzOzI2NTYsMTEgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssCiAJYm9vbCByYWlzZWRfbWF4X2V2ZW50ID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBwZmxhZ3M7CiAJYm9vbCBhbGxvd19zcGlubmluZyA9IGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKGdmcF9tYXNrKTsKJiM0MzsJaW50IHJldCA9IDA7CiAKIHJldHJ5OgogCWlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpCi0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHJldDsKIAogCWlmICghYWxsb3dfc3Bpbm5pbmcpCiAJCS8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqLwpAQCAtMjc3MCwxNiAmIzQzOzI3NzEsMTEgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssCiAJICogcHV0IHRoZSBidXJkZW4gb2YgcmVjbGFpbSBvbiByZWd1bGFyIGFsbG9jYXRpb24gcmVxdWVzdHMKIAkgKiBhbmQgbGV0IHRoZXNlIGdvIHRocm91Z2ggYXMgcHJpdmlsZWdlZCBhbGxvY2F0aW9ucy4KIAkgKi8KLQlpZiAoIShnZnBfbWFzayAmYW1wOyAoX19HRlBfTk9GQUlMIHwgX19HRlBfSElHSCkpKQotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKCEoZ2ZwX21hc2sgJmFtcDsgKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpKSkgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiBmb3JjZToKLQkvKgotCSAqIElmIHRoZSBhbGxvY2F0aW9uIGhhcyB0byBiZSBlbmZvcmNlZCwgZG9uJiMzOTt0IGZvcmdldCB0byByYWlzZQotCSAqIGEgTUVNQ0dfTUFYIGV2ZW50LgotCSAqLwotCWlmICghcmFpc2VkX21heF9ldmVudCkKLQkJX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpOwotCiAJLyoKIAkgKiBUaGUgYWxsb2NhdGlvbiBlaXRoZXIgY2FuJiMzOTt0IGZhaWwgb3Igd2lsbCBsZWFkIHRvIG1vcmUgbWVtb3J5CiAJICogYmVpbmcgZnJlZWQgdmVyeSBzb29uLiAgQWxsb3cgbWVtb3J5IHVzYWdlIGdvIG92ZXIgdGhlIGxpbWl0CkBAIC0yNzg5LDcgJiM0MzsyNzg1LDE1IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLAogCWlmIChkb19tZW1zd19hY2NvdW50KCkpCiAJCXBhZ2VfY291bnRlcl9jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIG5yX3BhZ2VzKTsKIAotCXJldHVybiAwOwomIzQzO291dDoKJiM0MzsJLyoKJiM0MzsJICogRG9uJiMzOTt0IGZvcmdldCB0byByYWlzZSBhIE1FTUNHX01BWCBldmVudCBmb3IgZm9yY2VkIG9yIHJlamVjdGVkCiYjNDM7CSAqIHJlcXVlc3RzLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyYWlzZWRfbWF4X2V2ZW50KQomIzQzOwkJX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogCiBkb25lX3Jlc3RvY2s6CiAJaWYgKGJhdGNoICZndDsgbnJfcGFnZXMpCkBAIC0yODQ4LDcgJiM0MzsyODUyLDcgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssCiAJICAgICEoY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfTUVNQUxMT0MpICZhbXA7JmFtcDsKIAkgICAgZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKQogCQlfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7Ci0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzaywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTWVtb3J5IENvbnRyb2wgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBtb2RpZmllZCBmaWxlLCBgbW0vbWVtY29udHJvbC5jYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyB0b3VjaGluZyBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXMgYSBrZXkgaW5kaWNhdG9yIG9mIG1lbW9yeSByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBhY2NvdW50aW5nIGNoYW5nZXMuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBidWcgZml4ZXMgdG8gcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzLCBvciBldmVuIG5ldyBmZWF0dXJlcyByZWxhdGVkIHRvIG1lbWNnJiMzOTtzIGFiaWxpdHkgdG8gbGltaXQgYW5kIGNvbnRyb2wgbWVtb3J5IHVzYWdlLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI2NTYuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1tZWRpYXRlIGNvbnRleHQgb2YgdGhlIGNoYW5nZS4gVGltZSB0byBwdWxsIHVwIGBtbS9tZW1jb250cm9sLmNgIHVzaW5nIHRoZSBgcmVhZC1maWxlYCBjb21tYW5kIHNvIEkgY2FuIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoYXQgYXJlYS4gVGhpcyBzaG91bGQgY2xhcmlmeSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgaWYgYW55LCBhcmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgYmVoYXZpb3Igb2YgdGhpcyBwYXRjaC4gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkLCBhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIG92ZXJhbGwgcHVycG9zZSB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2NTA6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1fb3Zlcl9saW1pdDtcbjI2NTE6XHRcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7XG4yNjUyOlx0XHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcbjI2NTM6XHRcdGJvb2wgcGFzc2VkX29vbSA9IGZhbHNlO1xuMjY1NDpcdFx0dW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucztcbjI2NTU6XHRcdGJvb2wgZHJhaW5lZCA9IGZhbHNlO1xuMjY1NjpcdFx0Ym9vbCByYWlzZWRfbWF4X2V2ZW50ID0gZmFsc2U7XG4yNjU3Olx0XHR1bnNpZ25lZCBsb25nIHBmbGFncztcbjI2NTg6XHRcdGJvb2wgYWxsb3dfc3Bpbm5pbmcgPSBnZnBmbGFnc19hbGxvd19zcGlubmluZyhnZnBfbWFzayk7XG4yNjU5Olx0XHRpbnQgcmV0ID0gMDtcbjI2NjA6XHRcbjI2NjE6XHRyZXRyeTpcbjI2NjI6XHRcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4yNjYzOlx0XHRcdHJldHVybiByZXQ7XG4yNjY0Olx0XG4yNjY1Olx0XHRpZiAoIWFsbG93X3NwaW5uaW5nKVxuMjY2NjpcdFx0XHQvKiBBdm9pZCB0aGUgcmVmaWxsIGFuZCBmbHVzaCBvZiB0aGUgb2xkZXIgc3RvY2sgKi9cbjI2Njc6XHRcdFx0YmF0Y2ggPSBucl9wYWdlcztcbjI2Njg6XHRcbjI2Njk6XHRcdHJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XG4yNjcwOlx0XHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSB8fFxuMjY3MTpcdFx0ICAgIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBiYXRjaCwgXHUwMDI2Y291bnRlcikpIHtcbjI2NzI6XHRcdFx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKVxuMjY3MzpcdFx0XHRcdGdvdG8gZG9uZV9yZXN0b2NrO1xuMjY3NDpcdFx0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuMjY3NTpcdFx0XHRcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gpO1xuMjY3NjpcdFx0XHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbW9yeSk7XG4yNjc3Olx0XHR9IGVsc2Uge1xuMjY3ODpcdFx0XHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbXN3KTtcbjI2Nzk6XHRcdFx0cmVjbGFpbV9vcHRpb25zIFx1MDAyNj0gfk1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XG4yNjgwOlx0XHR9XG4yNjgxOlx0XG4yNjgyOlx0XHRpZiAoYmF0Y2ggXHUwMDNlIG5yX3BhZ2VzKSB7XG4yNjgzOlx0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4yNjg0Olx0XHRcdGdvdG8gcmV0cnk7XG4yNjg1Olx0XHR9XG4yNjg2Olx0XG4yNjg3Olx0XHQvKlxuMjY4ODpcdFx0ICogUHJldmVudCB1bmJvdW5kZWQgcmVjdXJzaW9uIHdoZW4gcmVjbGFpbSBvcGVyYXRpb25zIG5lZWQgdG9cbjI2ODk6XHRcdCAqIGFsbG9jYXRlIG1lbW9yeS4gVGhpcyBtaWdodCBleGNlZWQgdGhlIGxpbWl0cyB0ZW1wb3JhcmlseSxcbjI2OTA6XHRcdCAqIGJ1dCB3ZSBwcmVmZXIgZmFjaWxpdGF0aW5nIG1lbW9yeSByZWNsYWltIGFuZCBnZXR0aW5nIGJhY2tcbjI2OTE6XHRcdCAqIHVuZGVyIHRoZSBsaW1pdCBvdmVyIHRyaWdnZXJpbmcgT09NIGtpbGxzIGluIHRoZXNlIGNhc2VzLlxuMjY5MjpcdFx0ICovXG4yNjkzOlx0XHRpZiAodW5saWtlbHkoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpKVxuMjY5NDpcdFx0XHRnb3RvIGZvcmNlO1xuMjY5NTpcdFxuMjY5NjpcdFx0aWYgKHVubGlrZWx5KHRhc2tfaW5fbWVtY2dfb29tKGN1cnJlbnQpKSlcbjI2OTc6XHRcdFx0Z290byBub21lbTtcbjI2OTg6XHRcbjI2OTk6XHRcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxuMjcwMDpcdFx0XHRnb3RvIG5vbWVtO1xuMjcwMTpcdFxuMjcwMjpcdFx0LypcbjI3MDM6XHRcdCAqIE9PTSB2aWN0aW0gc3RpbGwgbmVlZHMgdG8gY2hhcmdlIG1lbW9yeSB0byBleGl0LiBPT00gcmVhcGVyIHNob3VsZFxuMjcwNDpcdFx0ICogaGVscCBidXQgaXQgbWlnaHQgZmFpbCBvbiBtbWFwX2xvY2sgY29udGVudGlvbi4gSWYgdGhlIHZpY3RpbSBpcyBhXG4yNzA1Olx0XHQgKiBsYXJnZSB0aHJlYWQgZ3JvdXAgdGhlbiBhbGwgZXhpdGluZyB0aHJlYWRzIG1pZ2h0IGNvbXBldGUgb24gb29tX2xvY2tcbjI3MDY6XHRcdCAqIGp1c3QgdG8gbGVhcm4gdGhhdCB0aGVyZSBpcyBub3RoaW5nIHJlYWxseSBraWxsYWJsZSBhbnltb3JlLiBCYWlsXG4yNzA3Olx0XHQgKiBvdXQgZWFybHkgYW5kIGZhaWwgdGhlIGNoYXJnZSB0byBleHBlZGl0ZSB0aGVpciBleGl0LiBUaGV5IGFyZVxuMjcwODpcdFx0ICogY29uc2lkZXJlZCBmdWxseSByZWNsYWltZWQgYnkgdGhlIG9vbSByZWFwZXIgYW5kIHRoZXkgc2hvdWxkbiYjMzk7dFxuMjcwOTpcdFx0ICogY29udHJpYnV0ZSBmdXJ0aGVyIGNoYXJnZXMuXG4yNzEwOlx0XHQgKi9cbjI3MTE6XHRcdGlmICh0c2tfaXNfb29tX3ZpY3RpbShjdXJyZW50KSBcdTAwMjZcdTAwMjZcbjI3MTI6XHRcdCAgICBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlb29tX21tKSlcbjI3MTM6XHRcdFx0Z290byBub21lbTtcbjI3MTQ6XHRcbjI3MTU6XHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbjI3MTY6XHRcdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xuMjcxNzpcdFxuMjcxODpcdFx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG4yNzE5Olx0XHRucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcyxcbjI3MjA6XHRcdFx0XHRcdFx0XHQgICAgZ2ZwX21hc2ssIHJlY2xhaW1fb3B0aW9ucywgTlVMTCk7XG4yNzIxOlx0XHRwc2lfbWVtc3RhbGxfbGVhdmUoXHUwMDI2cGZsYWdzKTtcbjI3MjI6XHRcbjI3MjM6XHRcdGlmIChtZW1fY2dyb3VwX21hcmdpbihtZW1fb3Zlcl9saW1pdCkgXHUwMDNlPSBucl9wYWdlcylcbjI3MjQ6XHRcdFx0Z290byByZXRyeTtcbjI3MjU6XHRcbjI3MjY6XHRcdGlmICghZHJhaW5lZCkge1xuMjcyNzpcdFx0XHRkcmFpbl9hbGxfc3RvY2sobWVtX292ZXJfbGltaXQpO1xuMjcyODpcdFx0XHRkcmFpbmVkID0gdHJ1ZTtcbjI3Mjk6XHRcdFx0Z290byByZXRyeTtcbjI3MzA6XHRcdH1cbjI3MzE6XHRcbjI3MzI6XHRcdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfTk9SRVRSWSlcbjI3MzM6XHRcdFx0Z290byBub21lbTtcbjI3MzQ6XHRcdC8qXG4yNzM1Olx0XHQgKiBFdmVuIHRob3VnaCB0aGUgbGltaXQgaXMgZXhjZWVkZWQgYXQgdGhpcyBwb2ludCwgcmVjbGFpbVxuMjczNjpcdFx0ICogbWF5IGhhdmUgYmVlbiBhYmxlIHRvIGZyZWUgc29tZSBwYWdlcy4gIFJldHJ5IHRoZSBjaGFyZ2VcbjI3Mzc6XHRcdCAqIGJlZm9yZSBraWxsaW5nIHRoZSB0YXNrLlxuMjczODpcdFx0ICpcbjI3Mzk6XHRcdCAqIE9ubHkgZm9yIHJlZ3VsYXIgcGFnZXMsIHRob3VnaDogaHVnZSBwYWdlcyBhcmUgcmF0aGVyXG4yNzQwOlx0XHQgKiB1bmxpa2VseSB0byBzdWNjZWVkIHNvIGNsb3NlIHRvIHRoZSBsaW1pdCwgYW5kIHdlIGZhbGwgYmFja1xuMjc0MTpcdFx0ICogdG8gcmVndWxhciBwYWdlcyBhbnl3YXkgaW4gY2FzZSBvZiBmYWlsdXJlLlxuMjc0MjpcdFx0ICovXG4yNzQzOlx0XHRpZiAobnJfcmVjbGFpbWVkIFx1MDAyNlx1MDAyNiBucl9wYWdlcyBcdTAwM2M9ICgxIFx1MDAzY1x1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikpXG4yNzQ0Olx0XHRcdGdvdG8gcmV0cnk7XG4yNzQ1Olx0XG4yNzQ2Olx0XHRpZiAobnJfcmV0cmllcy0tKVxuMjc0NzpcdFx0XHRnb3RvIHJldHJ5O1xuMjc0ODpcdFxuMjc0OTpcdFx0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9SRVRSWV9NQVlGQUlMKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBiYXNlZCBvbiB5b3VyIGluc3RydWN0aW9uczoKCioqRGl2aW5nIGludG8gbW0vbWVtY29udHJvbC5jKioKCk9rYXksIGxldCYjMzk7cyB6b29tIGluIG9uIG1tL21lbWNvbnRyb2wuYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAyNzUwIHRvIDI4NjAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBzZWN0aW9uIGhhbmRsZXMuLi4gbGlrZWx5IHNvbWUgY3JpdGljYWwgYXNwZWN0IG9mIG1lbW9yeSBjb250cm9sIG9yIGFjY291bnRpbmcuIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgbWlnaHQgaW52b2x2ZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBjZ3JvdXAgbWVtb3J5IGxpbWl0cyBhbmQgcG90ZW50aWFsbHkgdGhlIHBhZ2UgcmVjbGFpbSBwcm9jZXNzLCBvciBwZXJoYXBzIGhvdyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgcmVhY3RzIHRvIGhpZ2gtbWVtb3J5IHByZXNzdXJlIHdpdGhpbiBhIHNwZWNpZmljIGNncm91cC4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBsaWtlbHkgZnVuY3Rpb24gY2FsbHMgYW5kIGRhdGEgc3RydWN0dXJlcyBJJiMzOTtsbCBlbmNvdW50ZXI6IGBtZW1fY2dyb3VwX2AsIGBwYWdlX2NvdW50ZXJfYCwgdGhlIHVzdWFsIHN1c3BlY3RzLiBJ4oCZbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmUgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2sgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiBhIHNwZWNpZmljIHNjZW5hcmlvIEkmIzM5O20gdHJvdWJsZXNob290aW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgb2YgcmFjZSBjb25kaXRpb25zLCBzdWJ0bGUgb3ZlcmZsb3cgaXNzdWVzLCBvciBwZXJoYXBzIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbnMgY291bGQgYmUgYXBwbGllZC4gVGhpcyBzZWN0aW9uIGlzIHByb2JhYmx5IGludm9sdmVkIHdpdGggYWxsb2NhdGluZyBtZW1vcnksIGNoZWNraW5nIGxpbWl0cywgcmVsZWFzaW5nIG1lbW9yeSwgd2hpY2ggYXJlIHByZXR0eSBjcml0aWNhbCBwaWVjZXMgb2YgY29kZSBmb3IgYW55IG1lbW9yeSBjb250cm9sbGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3NTA6XHRcdFx0Z290byBub21lbTtcbjI3NTE6XHRcbjI3NTI6XHRcdC8qIEF2b2lkIGVuZGxlc3MgbG9vcCBmb3IgdGFza3MgYnlwYXNzZWQgYnkgdGhlIG9vbSBraWxsZXIgKi9cbjI3NTM6XHRcdGlmIChwYXNzZWRfb29tIFx1MDAyNlx1MDAyNiB0YXNrX2lzX2R5aW5nKCkpXG4yNzU0Olx0XHRcdGdvdG8gbm9tZW07XG4yNzU1Olx0XG4yNzU2Olx0XHQvKlxuMjc1NzpcdFx0ICoga2VlcCByZXRyeWluZyBhcyBsb25nIGFzIHRoZSBtZW1jZyBvb20ga2lsbGVyIGlzIGFibGUgdG8gbWFrZVxuMjc1ODpcdFx0ICogYSBmb3J3YXJkIHByb2dyZXNzIG9yIGJ5cGFzcyB0aGUgY2hhcmdlIGlmIHRoZSBvb20ga2lsbGVyXG4yNzU5Olx0XHQgKiBjb3VsZG4mIzM5O3QgbWFrZSBhbnkgcHJvZ3Jlc3MuXG4yNzYwOlx0XHQgKi9cbjI3NjE6XHRcdGlmIChtZW1fY2dyb3VwX29vbShtZW1fb3Zlcl9saW1pdCwgZ2ZwX21hc2ssXG4yNzYyOlx0XHRcdFx0ICAgZ2V0X29yZGVyKG5yX3BhZ2VzICogUEFHRV9TSVpFKSkpIHtcbjI3NjM6XHRcdFx0cGFzc2VkX29vbSA9IHRydWU7XG4yNzY0Olx0XHRcdG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuMjc2NTpcdFx0XHRnb3RvIHJldHJ5O1xuMjc2NjpcdFx0fVxuMjc2NzpcdG5vbWVtOlxuMjc2ODpcdFx0LypcbjI3Njk6XHRcdCAqIE1lbWNnIGRvZXNuJiMzOTt0IGhhdmUgYSBkZWRpY2F0ZWQgcmVzZXJ2ZSBmb3IgYXRvbWljXG4yNzcwOlx0XHQgKiBhbGxvY2F0aW9ucy4gQnV0IGxpa2UgdGhlIGdsb2JhbCBhdG9taWMgcG9vbCwgd2UgbmVlZCB0b1xuMjc3MTpcdFx0ICogcHV0IHRoZSBidXJkZW4gb2YgcmVjbGFpbSBvbiByZWd1bGFyIGFsbG9jYXRpb24gcmVxdWVzdHNcbjI3NzI6XHRcdCAqIGFuZCBsZXQgdGhlc2UgZ28gdGhyb3VnaCBhcyBwcml2aWxlZ2VkIGFsbG9jYXRpb25zLlxuMjc3MzpcdFx0ICovXG4yNzc0Olx0XHRpZiAoIShnZnBfbWFzayBcdTAwMjYgKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpKSkge1xuMjc3NTpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMjc3NjpcdFx0XHRnb3RvIG91dDtcbjI3Nzc6XHRcdH1cbjI3Nzg6XHRmb3JjZTpcbjI3Nzk6XHRcdC8qXG4yNzgwOlx0XHQgKiBUaGUgYWxsb2NhdGlvbiBlaXRoZXIgY2FuJiMzOTt0IGZhaWwgb3Igd2lsbCBsZWFkIHRvIG1vcmUgbWVtb3J5XG4yNzgxOlx0XHQgKiBiZWluZyBmcmVlZCB2ZXJ5IHNvb24uICBBbGxvdyBtZW1vcnkgdXNhZ2UgZ28gb3ZlciB0aGUgbGltaXRcbjI3ODI6XHRcdCAqIHRlbXBvcmFyaWx5IGJ5IGZvcmNlIGNoYXJnaW5nIGl0LlxuMjc4MzpcdFx0ICovXG4yNzg0Olx0XHRwYWdlX2NvdW50ZXJfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgbnJfcGFnZXMpO1xuMjc4NTpcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbjI3ODY6XHRcdFx0cGFnZV9jb3VudGVyX2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgbnJfcGFnZXMpO1xuMjc4NzpcdFxuMjc4ODpcdG91dDpcbjI3ODk6XHRcdC8qXG4yNzkwOlx0XHQgKiBEb24mIzM5O3QgZm9yZ2V0IHRvIHJhaXNlIGEgTUVNQ0dfTUFYIGV2ZW50IGZvciBmb3JjZWQgb3IgcmVqZWN0ZWRcbjI3OTE6XHRcdCAqIHJlcXVlc3RzLlxuMjc5MjpcdFx0ICovXG4yNzkzOlx0XHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXG4yNzk0Olx0XHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbjI3OTU6XHRcbjI3OTY6XHRcdHJldHVybiByZXQ7XG4yNzk3Olx0XG4yNzk4Olx0ZG9uZV9yZXN0b2NrOlxuMjc5OTpcdFx0aWYgKGJhdGNoIFx1MDAzZSBucl9wYWdlcylcbjI4MDA6XHRcdFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBiYXRjaCAtIG5yX3BhZ2VzKTtcbjI4MDE6XHRcbjI4MDI6XHRcdC8qXG4yODAzOlx0XHQgKiBJZiB0aGUgaGllcmFyY2h5IGlzIGFib3ZlIHRoZSBub3JtYWwgY29uc3VtcHRpb24gcmFuZ2UsIHNjaGVkdWxlXG4yODA0Olx0XHQgKiByZWNsYWltIG9uIHJldHVybmluZyB0byB1c2VybGFuZC4gIFdlIGNhbiBwZXJmb3JtIHJlY2xhaW0gaGVyZVxuMjgwNTpcdFx0ICogaWYgX19HRlBfUkVDTEFJTSBidXQgbGV0JiMzOTtzIGFsd2F5cyBwdW50IGZvciBzaW1wbGljaXR5IGFuZCBzbyB0aGF0XG4yODA2Olx0XHQgKiBHRlBfS0VSTkVMIGNhbiBjb25zaXN0ZW50bHkgYmUgdXNlZCBkdXJpbmcgcmVjbGFpbS4gIEBtZW1jZyBpc1xuMjgwNzpcdFx0ICogbm90IHJlY29yZGVkIGFzIGl0IG1vc3QgbGlrZWx5IG1hdGNoZXMgY3VycmVudCYjMzk7cyBhbmQgd29uJiMzOTt0XG4yODA4Olx0XHQgKiBjaGFuZ2UgaW4gdGhlIG1lYW50aW1lLiAgQXMgaGlnaCBsaW1pdCBpcyBjaGVja2VkIGFnYWluIGJlZm9yZVxuMjgwOTpcdFx0ICogcmVjbGFpbSwgdGhlIGNvc3Qgb2YgbWlzbWF0Y2ggaXMgbmVnbGlnaWJsZS5cbjI4MTA6XHRcdCAqL1xuMjgxMTpcdFx0ZG8ge1xuMjgxMjpcdFx0XHRib29sIG1lbV9oaWdoLCBzd2FwX2hpZ2g7XG4yODEzOlx0XG4yODE0Olx0XHRcdG1lbV9oaWdoID0gcGFnZV9jb3VudGVyX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5KSBcdTAwM2VcbjI4MTU6XHRcdFx0XHRSRUFEX09OQ0UobWVtY2ctXHUwMDNlbWVtb3J5LmhpZ2gpO1xuMjgxNjpcdFx0XHRzd2FwX2hpZ2ggPSBwYWdlX2NvdW50ZXJfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKSBcdTAwM2VcbjI4MTc6XHRcdFx0XHRSRUFEX09OQ0UobWVtY2ctXHUwMDNlc3dhcC5oaWdoKTtcbjI4MTg6XHRcbjI4MTk6XHRcdFx0LyogRG9uJiMzOTt0IGJvdGhlciBhIHJhbmRvbSBpbnRlcnJ1cHRlZCB0YXNrICovXG4yODIwOlx0XHRcdGlmICghaW5fdGFzaygpKSB7XG4yODIxOlx0XHRcdFx0aWYgKG1lbV9oaWdoKSB7XG4yODIyOlx0XHRcdFx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNm1lbWNnLVx1MDAzZWhpZ2hfd29yayk7XG4yODIzOlx0XHRcdFx0XHRicmVhaztcbjI4MjQ6XHRcdFx0XHR9XG4yODI1Olx0XHRcdFx0Y29udGludWU7XG4yODI2Olx0XHRcdH1cbjI4Mjc6XHRcbjI4Mjg6XHRcdFx0aWYgKG1lbV9oaWdoIHx8IHN3YXBfaGlnaCkge1xuMjgyOTpcdFx0XHRcdC8qXG4yODMwOlx0XHRcdFx0ICogVGhlIGFsbG9jYXRpbmcgdGFza3MgaW4gdGhpcyBjZ3JvdXAgd2lsbCBuZWVkIHRvIGRvXG4yODMxOlx0XHRcdFx0ICogcmVjbGFpbSBvciBiZSB0aHJvdHRsZWQgdG8gcHJldmVudCBmdXJ0aGVyIGdyb3d0aFxuMjgzMjpcdFx0XHRcdCAqIG9mIHRoZSBtZW1vcnkgb3Igc3dhcCBmb290cHJpbnRzLlxuMjgzMzpcdFx0XHRcdCAqXG4yODM0Olx0XHRcdFx0ICogVGFyZ2V0IHNvbWUgYmVzdC1lZmZvcnQgZmFpcm5lc3MgYmV0d2VlbiB0aGUgdGFza3MsXG4yODM1Olx0XHRcdFx0ICogYW5kIGRpc3RyaWJ1dGUgcmVjbGFpbSB3b3JrIGFuZCBkZWxheSBwZW5hbHRpZXNcbjI4MzY6XHRcdFx0XHQgKiBiYXNlZCBvbiBob3cgbXVjaCBlYWNoIHRhc2sgaXMgYWN0dWFsbHkgYWxsb2NhdGluZy5cbjI4Mzc6XHRcdFx0XHQgKi9cbjI4Mzg6XHRcdFx0XHRjdXJyZW50LVx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaCAmIzQzOz0gYmF0Y2g7XG4yODM5Olx0XHRcdFx0c2V0X25vdGlmeV9yZXN1bWUoY3VycmVudCk7XG4yODQwOlx0XHRcdFx0YnJlYWs7XG4yODQxOlx0XHRcdH1cbjI4NDI6XHRcdH0gd2hpbGUgKChtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSkpO1xuMjg0MzpcdFxuMjg0NDpcdFx0LypcbjI4NDU6XHRcdCAqIFJlY2xhaW0gaXMgc2V0IHVwIGFib3ZlIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSB1c2VybGFuZFxuMjg0NjpcdFx0ICogcmV0dXJuIHBhdGguIEJ1dCBhbHNvIGF0dGVtcHQgc3luY2hyb25vdXMgcmVjbGFpbSB0byBhdm9pZFxuMjg0NzpcdFx0ICogZXhjZXNzaXZlIG92ZXJydW4gd2hpbGUgdGhlIHRhc2sgaXMgc3RpbGwgaW5zaWRlIHRoZVxuMjg0ODpcdFx0ICoga2VybmVsLiBJZiB0aGlzIGlzIHN1Y2Nlc3NmdWwsIHRoZSByZXR1cm4gcGF0aCB3aWxsIHNlZSBpdFxuMjg0OTpcdFx0ICogd2hlbiBpdCByZWNoZWNrcyB0aGUgb3ZlcmFnZSBhbmQgc2ltcGx5IGJhaWwgb3V0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNjMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA5NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCYjMzk7cyBmdXp6LXdvcnRoeS4gSXQmIzM5O3MgYSBjaGFuZ2UgaW4gdGhlIGB0cnlfY2hhcmdlX21lbWNnYCBmdW5jdGlvbi4gQmVmb3JlLCBpZiBhbiBhbGxvY2F0aW9uIGZhaWxlZCAocmV0dXJuZWQgLUVOT01FTSkgKmFuZCogYCFyYWlzZWRfbWF4X2V2ZW50YCAod2hpY2ggd291bGQgaGF2ZSBwcmV2ZW50ZWQgdGhlIE1FTUNHX01BWCBldmVudCBmcm9tIGJlaW5nIHJhaXNlZCksIHRoZSBmdW5jdGlvbiB3b3VsZCByZXR1cm4gLUVOT01FTSBkaXJlY3RseSB3aXRob3V0IHJhaXNpbmcgdGhlIGBNRU1DR19NQVhgIGV2ZW50LiBOb3csIGl0IHNlZW1zIHRoYXQgZXZlbiBvbiBhIC1FTk9NRU0gcmV0dXJuLCBpdCAqYWx3YXlzKiBqdW1wcyB0byBhbiBgb3V0OmAgbGFiZWwsIGFuZCB0aGVuIGNvbmRpdGlvbmFsbHkgcmFpc2VzIHRoYXQgZXZlbnQuCgpUaGUgY3JpdGljYWwgY2hhbmdlIGlzIHRoYXQgbm93IHdlIGFyZSByYWlzaW5nIHRoZSBgTUVNQ0dfTUFYYCBldmVudCBldmVuIHdoZW4gYSByZWd1bGFyIGFsbG9jYXRpb24gZmFpbHMgKHdoZW4gYCFnZnBfbWFzayAmYW1wOyAoX19HRlBfTk9GQUlMIHwgX19HRlBfSElHSClgKSwgd2hlcmVhcyBiZWZvcmUgaXQgd291bGQgb25seSBiZSByYWlzZWQgZm9yIGZvcmNlZCBhbGxvY2F0aW9ucy4gIFRoaXMgY291bGQgaGF2ZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMuIElzIHRoaXMgYSBjaGFuZ2UgdG8gZXJyb3IgaGFuZGxpbmc/IFRvIHVzZXItdmlzaWJsZSBub3RpZmljYXRpb25zPwoKR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHF1aWNrbHkgY29uc2lkZXIgdGhlIGNyaXRlcmlhIGZvciAmIzM0O1dvcnRoRnV6emluZy4mIzM0OyBUaGlzIHBhdGNoIGNsZWFybHkgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyBhIGNyaXRpY2FsIGNvZGUgcGF0aCwgc28gSSBjYW4gYWxyZWFkeSBydWxlIG91dCB0aGUgY3JpdGVyaWEgdGhhdCB3b3VsZCBwcmV2ZW50IGZ1enppbmcsIGxpa2UgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIHVucmVhY2hhYmxlIGNvZGUsIGV0Yy4KCk5vdywgYSBrZXkgcXVlc3Rpb24gYXJpc2VzOiB3aGF0JiMzOTtzIHRoZSBiZWhhdmlvciBvZiBgX19tZW1jZ19tZW1vcnlfZXZlbnRgPyBEb2VzIGBtZW1fb3Zlcl9saW1pdGAgaGF2ZSBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHN0YXRlLCBhbmQgaXMgdGhpcyBuZXcgcGF0aCBhIHZ1bG5lcmFiaWxpdHk/IE15IHNlYXJjaCBpbW1lZGlhdGVseSBmb2N1c2VzIG9uIGBfX21lbWNnX21lbW9yeV9ldmVudGAgdG8gZ2V0IGEgcHJlY2lzZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGEgbW9kaWZpY2F0aW9uIHRvIG1lbW9yeSBldmVudCBjb3VudGVyIGJlaGF2aW9yLCBvciBpcyB0aGlzIGEgbmV3IG1lbW9yeSBldmVudCB0cmlnZ2VyZWQ/IFRoaXMgaW5mb3JtYXRpb24gd2lsbCBkZXRlcm1pbmUgdGhlIHJpc2sgYW5kIHRoZSBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1jZ19tZW1vcnlfZXZlbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9OTk3PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tZW1jZ19ldmVudF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMDAyLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTAwMzp2b2lkIF9fbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDQtXHRcdFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTAwNj1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMDA4LXtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEwMDk6XHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1jZywgZXZlbnQsIHRydWUpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTAxMC19XG4tLVxubW0vbWVtY29udHJvbC5jPTE4ODA9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xODk4LVxubW0vbWVtY29udHJvbC5jOjE4OTk6dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9tZW1jb250cm9sLmMtMTkwMC1cdFx0XHQgIGVudW0gbWVtY2dfbWVtb3J5X2V2ZW50IGV2ZW50LCBib29sIGFsbG93X3NwaW5uaW5nKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xOTI3LX1cbm1tL21lbWNvbnRyb2wuYzoxOTI4OkVYUE9SVF9TWU1CT0xfR1BMKF9fbWVtY2dfbWVtb3J5X2V2ZW50KTtcbm1tL21lbWNvbnRyb2wuYy0xOTI5LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNjQ1PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNzE0LVxubW0vbWVtY29udHJvbC5jOjI3MTU6XHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XG5tbS9tZW1jb250cm9sLmMtMjcxNi1cdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xuLS1cbm1tL21lbWNvbnRyb2wuYy0yNzkzLVx0aWYgKCFyYWlzZWRfbWF4X2V2ZW50KVxubW0vbWVtY29udHJvbC5jOjI3OTQ6XHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbm1tL21lbWNvbnRyb2wuYy0yNzk1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBNZW1vcnkgQ29udHJvbCBFdmVudHMqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGBfX21lbWNnX21lbW9yeV9ldmVudGAgZnVuY3Rpb24gd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBtZW1vcnkgY29udHJvbCBldmVudHMgYXJlIGhhbmRsZWQgYXQgdGhlIGxvd2VzdCBsZXZlbC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBvdmVyYWxsIHN5c3RlbSBtZW1vcnkgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IHdoZW4gaXQgY29tZXMgdG8gY2dyb3VwIG1lbW9yeSBsaW1pdHMgYW5kIGhvdyB0aGV5JiMzOTtyZSBlbmZvcmNlZC4gSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgZXZlbnRzIHRyaWdnZXIgYW55IG5lY2Vzc2FyeSBhY3Rpb25zIG9yIGFkanVzdG1lbnRzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHJlc291cmNlIGxpbWl0cyBhcmUgY29ycmVjdGx5IGFwcGxpZWQsIGFuZCBpZiBhbnkgb3B0aW1pc2F0aW9uIGNhbiBiZSBtYWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg5NTpcdFx0fVxuMTg5NjpcdFx0cmV0dXJuIG1heDtcbjE4OTc6XHR9XG4xODk4Olx0XG4xODk5Olx0dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4xOTAwOlx0XHRcdFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZylcbjE5MDE6XHR7XG4xOTAyOlx0XHRib29sIHN3YXBfZXZlbnQgPSBldmVudCA9PSBNRU1DR19TV0FQX0hJR0ggfHwgZXZlbnQgPT0gTUVNQ0dfU1dBUF9NQVggfHxcbjE5MDM6XHRcdFx0XHQgIGV2ZW50ID09IE1FTUNHX1NXQVBfRkFJTDtcbjE5MDQ6XHRcbjE5MDU6XHRcdC8qIEZvciBub3cgb25seSBNRU1DR19NQVggY2FuIGhhcHBlbiB3aXRoICFhbGxvd19zcGlubmluZyBjb250ZXh0LiAqL1xuMTkwNjpcdFx0Vk1fV0FSTl9PTl9PTkNFKCFhbGxvd19zcGlubmluZyBcdTAwMjZcdTAwMjYgZXZlbnQgIT0gTUVNQ0dfTUFYKTtcbjE5MDc6XHRcbjE5MDg6XHRcdGF0b21pY19sb25nX2luYyhcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnlfZXZlbnRzX2xvY2FsW2V2ZW50XSk7XG4xOTA5Olx0XHRpZiAoIXN3YXBfZXZlbnQgXHUwMDI2XHUwMDI2IGFsbG93X3NwaW5uaW5nKVxuMTkxMDpcdFx0XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2bWVtY2ctXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xuMTkxMTpcdFxuMTkxMjpcdFx0ZG8ge1xuMTkxMzpcdFx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tldmVudF0pO1xuMTkxNDpcdFx0XHRpZiAoYWxsb3dfc3Bpbm5pbmcpIHtcbjE5MTU6XHRcdFx0XHRpZiAoc3dhcF9ldmVudClcbjE5MTY6XHRcdFx0XHRcdGNncm91cF9maWxlX25vdGlmeShcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwX2V2ZW50c19maWxlKTtcbjE5MTc6XHRcdFx0XHRlbHNlXG4xOTE4Olx0XHRcdFx0XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2bWVtY2ctXHUwMDNlZXZlbnRzX2ZpbGUpO1xuMTkxOTpcdFx0XHR9XG4xOTIwOlx0XG4xOTIxOlx0XHRcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbjE5MjI6XHRcdFx0XHRicmVhaztcbjE5MjM6XHRcdFx0aWYgKGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfTE9DQUxfRVZFTlRTKVxuMTkyNDpcdFx0XHRcdGJyZWFrO1xuMTkyNTpcdFx0fSB3aGlsZSAoKG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSBcdTAwMjZcdTAwMjZcbjE5MjY6XHRcdFx0ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKTtcbjE5Mjc6XHR9XG4xOTI4Olx0RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jZ19tZW1vcnlfZXZlbnQpO1xuMTkyOTpcdFxuMTkzMDpcdHN0YXRpYyBib29sIG1lbV9jZ3JvdXBfb3V0X29mX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuMTkzMTpcdFx0XHRcdFx0ICAgICBpbnQgb3JkZXIpXG4xOTMyOlx0e1xuMTkzMzpcdFx0c3RydWN0IG9vbV9jb250cm9sIG9jID0ge1xuMTkzNDpcdFx0XHQuem9uZWxpc3QgPSBOVUxMLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTg0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYHRyeV9jaGFyZ2VgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IHJlbGF0ZWQgdG8gYHRyeV9jaGFyZ2VgLiBGaXJzdCwgSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIGNhbGwgc2l0ZXMgYW5kIHdoaWNoIGVudHJ5IHBvaW50cyB0cmlnZ2VyIGl0LiBLbm93aW5nIHRoZSB1cHN0cmVhbSBjb250ZXh0IGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgb3B0aW1pemF0aW9uIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHRhcmdldGVkIHNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9uIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0IGZpbGUgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBwbGFjZSB0byBiZWdpbiwgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY29udHJvbCBncm91cHMuIEhvcGVmdWxseSwgYSBncmVwIHdpbGwgZ2V0IG1lIHRoZSBpbmZvcm1hdGlvbiBJJiMzOTttIGxvb2tpbmcgZm9yIHF1aWNrbHkuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfY2dyb3VwLmM9MjU2PXN0YXRpYyBpbnQgX19odWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwKGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vaHVnZXRsYl9jZ3JvdXAuYy0yNzQtXG5tbS9odWdldGxiX2Nncm91cC5jOjI3NTpcdGlmICghcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXG5tbS9odWdldGxiX2Nncm91cC5jLTI3Ni1cdFx0ICAgIF9faHVnZXRsYl9jZ3JvdXBfY291bnRlcl9mcm9tX2Nncm91cChoX2NnLCBpZHgsIHJzdmQpLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yNTQxPWJvb2wgbWVtY2cxX2NoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjU0NS1cbm1tL21lbWNvbnRyb2wtdjEuYzoyNTQ2Olx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXRjcG1lbSwgbnJfcGFnZXMsIFx1MDAyNmZhaWwpKSB7XG5tbS9tZW1jb250cm9sLXYxLmMtMjU0Ny1cdFx0bWVtY2ctXHUwMDNldGNwbWVtX3ByZXNzdXJlID0gMDtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjUxOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfaGlnaF9kZWxheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTI1NTEtICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tXG5tbS9tZW1jb250cm9sLmM6MjU1MjogKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmRcbm1tL21lbWNvbnRyb2wuYy0yNTUzLSAqIHJldHVybiBwYXRoIHdoZXJlIHJlY2xhaW0gaXMgYWx3YXlzIGFibGUgdG8gYmxvY2suXG4tLVxubW0vbWVtY29udHJvbC5jPTI1NTU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjY0NC1cbm1tL21lbWNvbnRyb2wuYzoyNjQ1OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxubW0vbWVtY29udHJvbC5jLTI2NDYtXHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjY3MC1cdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XG5tbS9tZW1jb250cm9sLmM6MjY3MTpcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG5tbS9tZW1jb250cm9sLmM6MjY3MjpcdFx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKVxubW0vbWVtY29udHJvbC5jLTI2NzMtXHRcdFx0Z290byBkb25lX3Jlc3RvY2s7XG4tLVxubW0vbWVtY29udHJvbC5jLTI4NTctXG5tbS9tZW1jb250cm9sLmM6Mjg1ODpzdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9tZW1jb250cm9sLmMtMjg1OS1cdFx0XHQgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg2My1cbm1tL21lbWNvbnRyb2wuYzoyODY0Olx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMjg2NS19XG4tLVxubW0vbWVtY29udHJvbC5jPTMxNTc9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE2NC1cbm1tL21lbWNvbnRyb2wuYzozMTY1Olx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzE2Ni1cdGlmIChyZXQpXG4tLVxubW0vbWVtY29udHJvbC5jPTUyMDU9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjEzLVx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxubW0vbWVtY29udHJvbC5jOjUyMTQ6XHRcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01MjE1LVx0aWYgKHJldCkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NjI1PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU2MzItXG5tbS9tZW1jb250cm9sLmM6NTYzMzpcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcbm1tL21lbWNvbnRyb2wuYy01NjM0LVx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTY5MT1pbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzI4LS8qKlxubW0vbWVtY29udHJvbC5jOjU3Mjk6ICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTczMC0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcbi0tXG5tbS9tZW1jb250cm9sLmMtNTczNS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1NzM2OmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1jb250cm9sLmMtNTczNy17XG4tLVxubW0vbWVtY29udHJvbC5jLTU3NjQtXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgXHUwMDI2XHUwMDI2XG5tbS9tZW1jb250cm9sLmM6NTc2NTpcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFx1MDAyNmNvdW50ZXIpKSB7XG5tbS9tZW1jb250cm9sLmMtNTc2Ni1cdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7XG4tLVxubW0vcGFnZV9jb3VudGVyLmM9NzY9dm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtMTA5LS8qKlxubW0vcGFnZV9jb3VudGVyLmM6MTEwOiAqIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlIC0gdHJ5IHRvIGhpZXJhcmNoaWNhbGx5IGNoYXJnZSBwYWdlc1xubW0vcGFnZV9jb3VudGVyLmMtMTExLSAqIEBjb3VudGVyOiBjb3VudGVyXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtMTE3LSAqL1xubW0vcGFnZV9jb3VudGVyLmM6MTE4OmJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbm1tL3BhZ2VfY291bnRlci5jLTExOS1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vcGFnZV9jb3VudGVyLmM9MTk3PWludCBwYWdlX2NvdW50ZXJfc2V0X21heChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3BhZ2VfY291bnRlci5jLTIwOC1cdFx0ICogYW5kIGFmdGVyLCBzbyB0aGUgcmVhZC1zd2FwLXJlYWQgaXMgb3JkZXJlZCBhbmRcbm1tL3BhZ2VfY291bnRlci5jOjIwOTpcdFx0ICogZW5zdXJlcyBjb2hlcmVuY3kgd2l0aCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZSgpOlxubW0vcGFnZV9jb3VudGVyLmMtMjEwLVx0XHQgKiB0aGF0IGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBjb3VudCBiZWZvcmUgY2hlY2tpbmdcbi0tXG5tbS9zd2FwZmlsZS5jPTE3NDA9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwZmlsZS5jLTE3NzctXHQvKiBOZWVkIHRvIGNhbGwgdGhpcyBldmVuIGlmIGFsbG9jYXRpb24gZmFpbGVkLCBmb3IgTUVNQ0dfU1dBUF9GQUlMLiAqL1xubW0vc3dhcGZpbGUuYzoxNzc4Olx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpXG5tbS9zd2FwZmlsZS5jLTE3NzktXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBDaGFyZ2UgTWVjaGFuaXNtcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgbWVtb3J5IGFjY291bnRpbmcgYnVzaW5lc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjaGFyZ2UgZnVuY3Rpb25zIHdvcmsuIEZpcnN0LCBJJiMzOTtsbCB0cmFjZSB0aGUgY2FsbHMgdG8gYGNoYXJnZV9tZW1jZ2AsIGBtZW1fY2dyb3VwX2NoYXJnZWAsIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGhpZXJhcmNoeSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgZmxvdy4gQWZ0ZXIgdGhhdCBJJiMzOTtsbCBsb29rIGZvciBgbWVtX2Nncm91cF9jaGFyZ2VgIGFuZCBgdHJ5X2NoYXJnZWAgaW4gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCwgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBkZWZpbmVkIGFuZCB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgY2dyb3Vwcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNoYXJnaW5nIHByb2Nlc3MgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2NoYXJnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTYzMT1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NDAtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NDE6aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NDItXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NDMtLyoqXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NDQ6ICogbWVtX2Nncm91cF9jaGFyZ2UgLSBDaGFyZ2UgYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gdG8gYSBjZ3JvdXAuXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NDUtICogQGZvbGlvOiBGb2xpbyB0byBjaGFyZ2UuXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjU2LSAqL1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjU3OnN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjU4LVx0XHRcdFx0ICAgIGdmcF90IGdmcClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjEtXHRcdHJldHVybiAwO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjYyOlx0cmV0dXJuIF9fbWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIG1tLCBnZnApO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjYzLX1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2NC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2NTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY2LVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY3MD12b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NzUtICpcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY3NjogKiBVbmNoYXJnZSBhIGZvbGlvIHByZXZpb3VzbHkgY2hhcmdlZCB3aXRoIG1lbV9jZ3JvdXBfY2hhcmdlKCkuXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NzctICovXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTE0Nz1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTUyLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1MzpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1NC1cdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTU4LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1OTpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNjAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA3MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrOgoKKipJbnZlc3RpZ2F0aW5nIGBtbS9tZW1jb250cm9sLmNgIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gYG1tL21lbWNvbnRyb2wuY2AuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0IGZpbGUgaXMgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gSXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgdGhhdCBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlLCBhbmQgb2Z0ZW4sIGl0JiMzOTtsbCBpbmNsdWRlIGRlcGVuZGVuY2llcywgb3IgYXQgbGVhc3QgaGludHMgYWJvdXQgd2hpY2ggS2NvbmZpZyBvcHRpb25zIGdvdmVybiBpdHMgaW5jbHVzaW9uIG9yIGJlaGF2aW9yLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGluIHRoZSBgTWFrZWZpbGVgIGl0c2VsZiwgb3IgcGVyaGFwcyBzb21lIHJlZmVyZW5jZXMgdG8gb3RoZXIgS2NvbmZpZy1yZWxhdGVkIGZpbGVzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEZyb20gdGhlcmUsIEkgY2FuIGRyaWxsIGRvd24gZGVlcGVyIGFzIG5lZWRlZCwgYnV0IHRoZSBgTWFrZWZpbGVgIGlzIHVzdWFsbHkgdGhlIG1vc3QgZXhwZWRpZW50IHN0YXJ0aW5nIGxvY2F0aW9uLiBJJiMzOTttIGFudGljaXBhdGluZyBmaW5kaW5nIHNvbWUgYCNpZmRlZmAgYmxvY2tzIG9yIHNvbWV0aGluZyBzaW1pbGFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbm1tL01ha2VmaWxlLTMwLUtDT1ZfSU5TVFJVTUVOVF9tbXpvbmUubyA6PSBuXG4tLVxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTcxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkNoZWNraW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgQ29udHJvbCBHcm91cHMqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbG9va2luZyBpbiB0aGUgcmlnaHQgcGxhY2UgZm9yIHRoZSBtZW1vcnkgY2dyb3VwIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGluaXQvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBkZWZpbml0aW9ucyBmb3IgYWxsIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYENPTkZJR19NRU1DR2AuIFRoaXMgc2hvdWxkIGJlIHRoZSBmbGFnIG9yIG9wdGlvbiB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIHdpdGhpbiB0aGlzIGJ1aWxkLiBNYWtlcyBzZW5zZSB0byBzdGFydCB0aGVyZSwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5ODQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IENHcm91cHMgTGFuZHNjYXBlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIE1FTUNHIChtZW1vcnkgY2dyb3VwKSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBleHBvc2VkLCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG92ZXJhbGwga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byBidWlsZCBhIGJldHRlciBtZW50YWwgbWFwIG9mIHRoZSBhdmFpbGFibGUgc3dpdGNoZXMsIGFuZCB3aGljaCBvbmVzIGhhdmUgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBnZXQgdGhlIGZ1bGwgZmVhdHVyZS1zZXQgZXhwb3NlZC4gSSYjMzk7bSBhbHNvIHJlYWxseSBob3BpbmcgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIG5ldyBvciBpbnRlcmVzdGluZyBpbiB0aGVyZSB0aGF0IEkgbWlzc2VkIGR1cmluZyBteSBsYXN0IHBhc3Mgb3ZlciB0aGlzIGFyZWEuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwODE6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwODI6XHRcbjEwODM6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA4NDpcdFxuMTA4NTpcdGNvbmZpZyBNRU1DR1xuMTA4NjpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4NzpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4ODpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODk6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwOTA6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA5MTpcdFx0aGVscFxuMTA5MjpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDkzOlx0XG4xMDk0Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTg6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDk5Olx0XHRkZWZhdWx0IHlcbjExMDA6XHRcbjExMDE6XHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbjExMDI6XHRcdGJvb2xcbjExMDM6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMDQ6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjExMDU6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjExMDY6XHRcdGRlZmF1bHQgeVxuMTEwNzpcdFxuMTEwODpcdGNvbmZpZyBNRU1DR19WMVxuMTEwOTpcdFx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMTEwOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTExOlx0XHRkZWZhdWx0IG5cbjExMTI6XHRcdGhlbHBcbjExMTM6XHRcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XG4xMTE0Olx0XHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjk1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgcGFyZW50IG1lbnUgZm9yIGBjb25maWcgTUVNQ0dgLiBUaGlzIG1lYW5zIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBsaXZlcyB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0gc3RydWN0dXJlLiBVbmRlcnN0YW5kaW5nIGl0cyBsb2NhdGlvbiBpcyBjcnVjaWFsOyBpdCBoZWxwcyBtZSBncmFzcCBpdHMgY29udGV4dCwgd2hhdCBvdGhlciBvcHRpb25zIGl0JiMzOTtzIHJlbGF0ZWQgdG8sIGFuZCBwb3RlbnRpYWxseSwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBvcmlnaW5zLCB0aGUgYnJhbmNoZXMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gdHJlZSB0aGF0IGxlYWQgdG8gaXQuIEl0JiMzOTtzIGxpa2UgbmF2aWdhdGluZyBhIGNvbXBsZXggZmlsZSBzeXN0ZW0gb3IgYSBkZWVwbHkgbmVzdGVkIGNvZGUgc3RydWN0dXJlIOKAkyB5b3UgY2FuJiMzOTt0IHVuZGVyc3RhbmQgYSBzaW5nbGUgZmlsZS9jb25maWd1cmF0aW9uIHZhbHVlIGluIGlzb2xhdGlvbjsgeW91IG5lZWQgdG8ga25vdyB3aGVyZSBpdCByZXNpZGVzIHdpdGhpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzZWUgaG93IEkgY2FuIGRpc2NvdmVyIHRoZSBwYXJlbnQgbWVudSBhbmQgd2hhdCBpbnNpZ2h0cyBpdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA0MDpcdFx0ICB0aGUgc2FtZSBwcm9jZXNzIG9udG8gYSBzaW5nbGUgTGFzdCBMZXZlbCBDYWNoZSAoTExDKSBkb21haW4gd2hlblxuMTA0MTpcdFx0ICBwb3NzaWJsZS4gVGhpcyBpbXByb3ZlcyBjYWNoZSBsb2NhbGl0eSBieSBrZWVwaW5nIHRhc2tzIHRoYXQgc2hhcmVcbjEwNDI6XHRcdCAgcmVzb3VyY2VzIHdpdGhpbiB0aGUgc2FtZSBjYWNoZSBkb21haW4sIHJlZHVjaW5nIGNhY2hlIG1pc3NlcyBhbmRcbjEwNDM6XHRcdCAgbG93ZXJpbmcgZGF0YSBhY2Nlc3MgbGF0ZW5jeS5cbjEwNDQ6XHRcbjEwNDU6XHRjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXG4xMDQ2Olx0XHRib29sIFwmIzM0O0F1dG9tYXRpY2FsbHkgZW5hYmxlIE5VTUEgYXdhcmUgbWVtb3J5L3Rhc2sgcGxhY2VtZW50XCYjMzQ7XG4xMDQ3Olx0XHRkZWZhdWx0IHlcbjEwNDg6XHRcdGRlcGVuZHMgb24gTlVNQV9CQUxBTkNJTkdcbjEwNDk6XHRcdGhlbHBcbjEwNTA6XHRcdCAgSWYgc2V0LCBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgd2lsbCBiZSBlbmFibGVkIGlmIHJ1bm5pbmcgb24gYSBOVU1BXG4xMDUxOlx0XHQgIG1hY2hpbmUuXG4xMDUyOlx0XG4xMDUzOlx0Y29uZmlnIFNMQUJfT0JKX0VYVFxuMTA1NDpcdFx0Ym9vbFxuMTA1NTpcdFxuMTA1NjpcdG1lbnVjb25maWcgQ0dST1VQU1xuMTA1NzpcdFx0Ym9vbCBcJiMzNDtDb250cm9sIEdyb3VwIHN1cHBvcnRcJiMzNDtcbjEwNTg6XHRcdHNlbGVjdCBLRVJORlNcbjEwNTk6XHRcdGhlbHBcbjEwNjA6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBncm91cGluZyBzZXRzIG9mIHByb2Nlc3NlcyB0b2dldGhlciwgZm9yXG4xMDYxOlx0XHQgIHVzZSB3aXRoIHByb2Nlc3MgY29udHJvbCBzdWJzeXN0ZW1zIHN1Y2ggYXMgQ3B1c2V0cywgQ0ZTLCBtZW1vcnlcbjEwNjI6XHRcdCAgY29udHJvbHMgb3IgZGV2aWNlIGlzb2xhdGlvbi5cbjEwNjM6XHRcdCAgU2VlXG4xMDY0Olx0XHRcdC0gRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZGVzaWduLUNGUy5yc3RcdChDRlMpXG4xMDY1Olx0XHRcdC0gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvIChmZWF0dXJlcyBmb3IgZ3JvdXBpbmcsIGlzb2xhdGlvblxuMTA2NjpcdFx0XHRcdFx0XHQgIGFuZCByZXNvdXJjZSBjb250cm9sKVxuMTA2NzpcdFxuMTA2ODpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDY5Olx0XG4xMDcwOlx0aWYgQ0dST1VQU1xuMTA3MTpcdFxuMTA3MjpcdGNvbmZpZyBQQUdFX0NPVU5URVJcbjEwNzM6XHRcdGJvb2xcbjEwNzQ6XHRcbjEwNzU6XHRjb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbjEwNzY6XHRcdGJvb2wgXCYjMzQ7RmF2b3IgZHluYW1pYyBtb2RpZmljYXRpb24gbGF0ZW5jeSByZWR1Y3Rpb24gYnkgZGVmYXVsdFwmIzM0O1xuMTA3NzpcdFx0aGVscFxuMTA3ODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBcJiMzNDtmYXZvcmR5bm1vZHNcJiMzNDsgbW91bnQgb3B0aW9uIGJ5IGRlZmF1bHRcbjEwNzk6XHRcdCAgd2hpY2ggcmVkdWNlcyB0aGUgbGF0ZW5jaWVzIG9mIGR5bmFtaWMgY2dyb3VwIG1vZGlmaWNhdGlvbnMgc3VjaFxuMTA4MDpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwODE6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwODI6XHRcbjEwODM6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA4NDpcdFxuMTA4NTpcdGNvbmZpZyBNRU1DR1xuMTA4NjpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4NzpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4ODpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODk6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MDcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IENHUk9VUCBDaGFyZ2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgTUVNQ0dgIGNvZGUsIHNwZWNpZmljYWxseSB1bmRlciB0aGUgYGlmIENHUk9VUFNgIGNvbmRpdGlvbmFsLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgY2hhcmdpbmcgbWVjaGFuaXNtcy4gSSYjMzk7bSBzdGFydGluZyBieSBsb29raW5nIGF0IGZvY3VzIHN5bWJvbHMgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSBjaGFuZ2VzIGFyZSBoYXBwZW5pbmcuIEkgY2FuIHNlZSB0aGUgZnVuY3Rpb24gZGlyZWN0bHkgbW9kaWZpZWQgaXMgdGhlIHN0YXRpYyBgdHJ5X2NoYXJnZV9tZW1jZ2AuCgpOb3csIGxldCYjMzk7cyBleHBsb3JlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBJdCBsb29rcyBsaWtlIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBjYWxsZWQgZnJvbSBhIGZldyBwbGFjZXMuIEkgY2FuIHNlZSB0aGF0IGBfX21lbV9jZ3JvdXBfY2hhcmdlYCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBhcmUgZGVmaW5pdGVseSBjYWxsaW5nIHRoaXMgZGlyZWN0bHkuIEkgYWxzbyBzZWUgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCB3aGljaCBkb2VzbiYjMzk7dCBkaXJlY3RseSBjYWxsIGl0IGJ1dCBpbnN0ZWFkIHVzZXMgYHBhZ2VfY291bnRlcl90cnlfY2hhcmdlYC4gQW5kIGl0IGFwcGVhcnMgdGhhdCBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGlzIGNhbGxlZCBieSBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXRzZWxmLiBJJiMzOTttIGFsc28gc2VlaW5nIGB0cnlfY2hhcmdlYCBpcyBkZWZpbmVkIGFzIHN0YXRpYyBpbmxpbmUsIHdoaWNoIGlzIHVzZWZ1bCB0byBub3RlLgoKTmV4dCwgSSBuZWVkIHRvIGJyb2FkZW4gbXkgc2NvcGUgYW5kIGxvb2sgYXQgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2AgcmVsYXRlZCB0byBtZW1vcnkgY2hhcmdpbmcgaW4gZ2VuZXJhbC4gSSYjMzk7dmUgYWxyZWFkeSBub3RlZCBgX19tZW1fY2dyb3VwX2NoYXJnZWAsIGFuZCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBidXQgYWxzbyBuZWVkIHRvIGNvbnNpZGVyICBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGFuZCBgX19tZW1jZ19tZW1vcnlfZXZlbnRgLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHJlc3Qgb2YgYG1tL21lbWNvbnRyb2wuY2AgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgb3IgZW50cnkgcG9pbnRzIHRoYXQgbWlnaHQgYmUgaW52b2x2ZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgdHJ5X2NoYXJnZV9tZW1jZ2AgQ2FsbHMqKgoKT2theSwgc28gSSB3YW50IHRvIGdldCBhIGhhbmRsZSBvbiBhbGwgdGhlIHBsYWNlcyBpbiBgbW0vbWVtY29udHJvbC5jYCB3aGVyZSBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXMgaW52b2tlZC4gVGhpcyBmdW5jdGlvbiBpcyBmdW5kYW1lbnRhbCB0byBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgYW5kIGNvbnRyb2wuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHNpdGVzIHRvIGZ1bGx5IGdyYXNwIGhvdyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcmVjbGFpbSBhcmUgbWFuYWdlZCB3aXRoaW4gdGhlIGNncm91cCBoaWVyYXJjaHkuIEtub3dpbmcgdGhlIGNhbGwgbG9jYXRpb25zIHdpbGwgaGVscCBtZSBzZWUgdGhlIGZsb3cgb2YgYWxsb2NhdGlvbiByZXF1ZXN0cyB0aHJvdWdoIHRoZSBzeXN0ZW0gYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgYWNjb3VudGluZyBlcnJvcnMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBkaWZmZXJlbnQgbWVtb3J5IGFsbG9jYXRpb24gcGF0aHMsIGxpa2UgcGFnZSBmYXVsdHMsIHNsYWIgYWxsb2NhdGlvbnMsIGFuZCBkaXJlY3QgcmVjbGFpbSBhdHRlbXB0cy4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBhbnkgc3VidGxldGllcyByZWdhcmRpbmcgdGhlIGxvY2sgb3JkZXJpbmcgaW4gdGhvc2UgY2FsbCBzaXRlcywgdG9vLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGVhY2ggY2FsbCwgZXNwZWNpYWxseSB0aGUgY2FsbGVyJiMzOTtzIGFyZ3VtZW50cywgaXMgY3J1Y2lhbC4gVGhpcyB3aWxsIGhpZ2hsaWdodCB3aGVyZSBtZW1vcnkgYWNjb3VudGluZyBkZWNpc2lvbnMgYXJlIG1hZGUgYW5kIGhvdyB0aGUgc3lzdGVtIHJlYWN0cyB0byBtZW1vcnkgcHJlc3N1cmUgd2l0aGluIHRoZSBjZ3JvdXAgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfY2hhcmdlX21lbWNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0yNTU1PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTI2NDQtXG5tbS9tZW1jb250cm9sLmM6MjY0NTpzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbm1tL21lbWNvbnRyb2wuYy0yNjQ2LVx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jPTI4NTg9c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yODYzLVxubW0vbWVtY29udHJvbC5jOjI4NjQ6XHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0yODY1LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9MzE1Nz1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTY0LVxubW0vbWVtY29udHJvbC5jOjMxNjU6XHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcbm1tL21lbWNvbnRyb2wuYy0zMTY2LVx0aWYgKHJldClcbi0tXG5tbS9tZW1jb250cm9sLmM9NTIwNT1zdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMTMtXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXG5tbS9tZW1jb250cm9sLmM6NTIxNDpcdFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xubW0vbWVtY29udHJvbC5jLTUyMTUtXHRpZiAocmV0KSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTU2MjU9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTYzMi1cbm1tL21lbWNvbnRyb2wuYzo1NjMzOlx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xubW0vbWVtY29udHJvbC5jLTU2MzQtXHRcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEwOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IENoYXJnZSBNZWNoYW5pc21zKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IG1lbW9yeSBhY2NvdW50aW5nIGlzIGhhcHBlbmluZyBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBjZ3JvdXBzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRyYWNpbmcgdGhlIGNvZGUgcGF0aHMgaW52b2x2ZWQgaW4gbWVtb3J5IGNoYXJnaW5nIG9wZXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciB0aGlzLCB3aGljaCBhcmUgYGNoYXJnZV9tZW1jZ2AgYW5kIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIGNhbGxpbmcgY29udGV4dHMsIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlciwgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkmIzM5O3JlIG1hbmlwdWxhdGluZy4gVGhpcyB3aWxsIGhlbHAgbWUgZGVidWcgYSBtZW1vcnkgbGVhayBpc3N1ZS4gSSYjMzk7bSBzdXNwZWN0aW5nIGEgbWlzY2FsY3VsYXRpb24gb3IgYW4gdW5pbnRlbmRlZCBkb3VibGUtY2hhcmdlLiBUaGlzIGRldGFpbGVkIGV4YW1pbmF0aW9uIHdpbGwgaGVscCBtZSBmaW5kIHRoZSByb290IGNhdXNlLCBhbmQgZm9ybXVsYXRlIGEgdmlhYmxlIHBhdGNoIG9yIHdvcmthcm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoYXJnZV9tZW1jZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MjU1NT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjQ0LVxubW0vbWVtY29udHJvbC5jOjI2NDU6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9tZW1jb250cm9sLmMtMjY0Ni1cdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yODU4PXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg2My1cbm1tL21lbWNvbnRyb2wuYzoyODY0Olx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMjg2NS19XG4tLVxubW0vbWVtY29udHJvbC5jPTMxNTc9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE2NC1cbm1tL21lbWNvbnRyb2wuYzozMTY1Olx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzE2Ni1cdGlmIChyZXQpXG4tLVxubW0vbWVtY29udHJvbC5jPTUxOTA9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjA0LVxubW0vbWVtY29udHJvbC5jOjUyMDU6c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC5jLTUyMDYtXHRcdFx0Z2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjEzLVx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxubW0vbWVtY29udHJvbC5jOjUyMTQ6XHRcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01MjE1LVx0aWYgKHJldCkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MjI1PWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMzAtXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xubW0vbWVtY29udHJvbC5jOjUyMzE6XHRyZXQgPSBjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApO1xubW0vbWVtY29udHJvbC5jLTUyMzItXHRjc3NfcHV0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4tLVxubW0vbWVtY29udHJvbC5jPTUyNDk9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjYyLVxubW0vbWVtY29udHJvbC5jOjUyNjM6XHRpZiAoY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKSlcbm1tL21lbWNvbnRyb2wuYy01MjY0LVx0XHRyZXQgPSAtRU5PTUVNO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MjgzPWludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG4tLVxubW0vbWVtY29udHJvbC5jLTUyOTctXG5tbS9tZW1jb250cm9sLmM6NTI5ODpcdHJldCA9IGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCk7XG5tbS9tZW1jb250cm9sLmMtNTI5OS1cbi0tXG5tbS9tZW1jb250cm9sLmM9NTYyNT1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01NjMyLVxubW0vbWVtY29udHJvbC5jOjU2MzM6XHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XG5tbS9tZW1jb250cm9sLmMtNTYzNC1cdFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzAwCgkJCQkJCQlvdXRwdXQ6IDE1NgoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IENncm91cCBBY2NvdW50aW5nIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG1lbW9yeSBjZ3JvdXAgbG9naWMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdpdGggaG93IGFsbG9jYXRpb24gZmFpbHVyZXMgYXJlIGhhbmRsZWQgYWZ0ZXIgdGhpcyBwYXRjaC4gSSYjMzk7bSBub3RpbmcgdGhlIGtleSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIGFyZWE6IGBfX21lbV9jZ3JvdXBfY2hhcmdlYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCwgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCwgYW5kIGBfX21lbWNnX21lbW9yeV9ldmVudGAuIEkgbmVlZCB0byBlbnN1cmUgSSBoYXZlIGFsbCBteSBiYXNlcyBjb3ZlcmVkLgoKRmlyc3QsIEkmIzM5O20gdmVyaWZ5aW5nIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zOiBgQ0dST1VQU2AgYW5kIGBNRU1DR2AuIFRoZXkmIzM5O3JlIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMsIGFuZCBJJiMzOTtsbCBjb25maXJtIHRoZWlyIHByZXNlbmNlIHRvIGVuc3VyZSB0aGUgY29yZSBtZW1jb250cm9sIGNvZGUgaXMgZW5hYmxlZC4gSSYjMzk7bGwgYWxzbyBkb3VibGUtY2hlY2sgYG1tL21lbWNvbnRyb2wuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IElzIHRoaXMgcGF0Y2ggZnV6ei13b3J0aHk/IEdpdmVuIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSByZXR1cm4gcGF0aCBvZiBgdHJ5X2NoYXJnZV9tZW1jZ2AgdG8gdHJpZ2dlciBhIGBNRU1DR19NQVhgIGV2ZW50IG9uIGFsbG9jYXRpb24gZmFpbHVyZXMsIGl0JiMzOTtzIHByZXR0eSBjbGVhciBpdCBhbHRlcnMgY29yZSBtZW1jZyBhY2NvdW50aW5nIGFuZCBldmVudCBub3RpZmljYXRpb25zLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgYm90aCB1c2Vyc3BhY2UgbWVtb3J5IGNncm91cCBsb2dpYyBhbmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsICpXb3J0aEZ1enppbmcqIGhhcyB0byBiZSBgdHJ1ZWAuIEl0JiMzOTtzIGEgY2xlYXIgY2hhbmdlIGluIGhvdyBtZW1vcnkgcHJlc3N1cmUgaXMgc2lnbmFsZWQuCgpGaW5hbGx5LCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBzZXQtcmVzdWx0cyBwYXJhbWV0ZXJzLiBJ4oCZdmUgY29uZmlybWVkIGBXb3J0aEZ1enppbmdgIGFzIGB0cnVlYC4gSSBuZWVkIHRvIGNvbmNpc2VseSBleHBsYWluIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBjaGFuZ2UsIHdoaWNoIEkmIzM5O2xsIGRvLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBjb25maXJtZWQgYXMgYFsmIzM0O0NHUk9VUFMmIzM0OywgJiMzNDtNRU1DRyYjMzQ7XWAsIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNsZWFybHkgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIEkgaWRlbnRpZmllZCBlYXJsaWVyOiBgWyYjMzQ7X19tZW1fY2dyb3VwX2NoYXJnZSYjMzQ7LCAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OywgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywgJiMzNDttZW1fY2dyb3VwX3NrX2NoYXJnZSYjMzQ7LCAmIzM0O19fbWVtY2dfbWVtb3J5X2V2ZW50JiMzNDtdYC4gTm93IEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbWVtX2Nncm91cF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1jZ19tZW1vcnlfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdHJ5X2NoYXJnZV9tZW1jZygpIHRvIGVuc3VyZSB0aGF0IE1FTUNHX01BWCBldmVudHMgYXJlIHByb3Blcmx5IHJhaXNlZCB2aWEgX19tZW1jZ19tZW1vcnlfZXZlbnQoKSB3aGVuIG1lbW9yeSBjZ3JvdXAgYWxsb2NhdGlvbiByZXF1ZXN0cyBhcmUgcmVqZWN0ZWQgd2l0aCAtRU5PTUVNLiBUaGlzIGFsdGVycyBjb3JlIG1lbWNnIGxpbWl0IGV2ZW50IGhhbmRsaW5nIGFuZCBtZW1vcnkgY2hhcmdpbmcgY29udHJvbCBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19tZW1fY2dyb3VwX2NoYXJnZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3NrX2NoYXJnZSYjMzQ7LAogICAgJiMzNDtfX21lbWNnX21lbW9yeV9ldmVudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0cnlfY2hhcmdlX21lbWNnKCkgdG8gZW5zdXJlIHRoYXQgTUVNQ0dfTUFYIGV2ZW50cyBhcmUgcHJvcGVybHkgcmFpc2VkIHZpYSBfX21lbWNnX21lbW9yeV9ldmVudCgpIHdoZW4gbWVtb3J5IGNncm91cCBhbGxvY2F0aW9uIHJlcXVlc3RzIGFyZSByZWplY3RlZCB3aXRoIC1FTk9NRU0uIFRoaXMgYWx0ZXJzIGNvcmUgbWVtY2cgbGltaXQgZXZlbnQgaGFuZGxpbmcgYW5kIG1lbW9yeSBjaGFyZ2luZyBjb250cm9sIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdHJ5X2NoYXJnZV9tZW1jZygpYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBlbnN1cmUgdGhhdCBhIGBNRU1DR19NQVhgIG1lbW9yeSBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiBhbiBhbGxvY2F0aW9uIGNoYXJnZSByZXF1ZXN0IGlzIHJlamVjdGVkIHdpdGggYC1FTk9NRU1gLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgdmFyaWFibGUgYHJldCA9IDBgLCBzZXRzIGByZXQgPSAtRU5PTUVNYCBvbiBmYWlsdXJlLCBhbmQgcm91dGVzIHRocm91Z2ggYSBjb21tb24gYG91dDpgIGxhYmVsIHRvIHJhaXNlIHRoZSBldmVudCBiZWZvcmUgcmV0dXJuaW5nIGByZXRgLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIChzdGFjay9oZWFwL3BhZ2VzKSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIGNoYW5nZXMgaGVyZSBkbyBub3QgaW52b2x2ZSBjb3B5aW5nIGRhdGEgc3RydWN0dXJlcyBvciBidWZmZXJzIHRvIHVzZXIgc3BhY2UsIGFsbG9jYXRpbmcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGByZXRgLCBgcmFpc2VkX21heF9ldmVudGAsIGBtZW1fb3Zlcl9saW1pdGApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxuLSBBbnkgcG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGNvbnRyb2wgZmxvdyBidWdzLCBtZW1jZyBldmVudCBjb3VudGVyIG1hbmlwdWxhdGlvbiwgbG9ja2luZyBvciBzdGF0ZSB0cmFja2luZyBkdXJpbmcgbWVtY2cgcmVjbGFpbS9ldmVudHMpIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDYzNjk4M2Y2NWNmMTAyYzI5ZTQ3NDA2YTVlODFhOGE1NjZiOWYyNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMDI6NTI6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMTI3MWQzOTBiNjE3ZS4uMTU4YjA1NjJlOGRmMyAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMjY1NiwxMCAmIzQzOzI2NTYsMTEgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssCiAJYm9vbCByYWlzZWRfbWF4X2V2ZW50ID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBwZmxhZ3M7CiAJYm9vbCBhbGxvd19zcGlubmluZyA9IGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKGdmcF9tYXNrKTsKJiM0MzsJaW50IHJldCA9IDA7CiAKIHJldHJ5OgogCWlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpCi0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHJldDsKIAogCWlmICghYWxsb3dfc3Bpbm5pbmcpCiAJCS8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqLwpAQCAtMjc3MCwxNiAmIzQzOzI3NzEsMTEgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssCiAJICogcHV0IHRoZSBidXJkZW4gb2YgcmVjbGFpbSBvbiByZWd1bGFyIGFsbG9jYXRpb24gcmVxdWVzdHMKIAkgKiBhbmQgbGV0IHRoZXNlIGdvIHRocm91Z2ggYXMgcHJpdmlsZWdlZCBhbGxvY2F0aW9ucy4KIAkgKi8KLQlpZiAoIShnZnBfbWFzayAmYW1wOyAoX19HRlBfTk9GQUlMIHwgX19HRlBfSElHSCkpKQotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJaWYgKCEoZ2ZwX21hc2sgJmFtcDsgKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpKSkgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiBmb3JjZToKLQkvKgotCSAqIElmIHRoZSBhbGxvY2F0aW9uIGhhcyB0byBiZSBlbmZvcmNlZCwgZG9uJiMzOTt0IGZvcmdldCB0byByYWlzZQotCSAqIGEgTUVNQ0dfTUFYIGV2ZW50LgotCSAqLwotCWlmICghcmFpc2VkX21heF9ldmVudCkKLQkJX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpOwotCiAJLyoKIAkgKiBUaGUgYWxsb2NhdGlvbiBlaXRoZXIgY2FuJiMzOTt0IGZhaWwgb3Igd2lsbCBsZWFkIHRvIG1vcmUgbWVtb3J5CiAJICogYmVpbmcgZnJlZWQgdmVyeSBzb29uLiAgQWxsb3cgbWVtb3J5IHVzYWdlIGdvIG92ZXIgdGhlIGxpbWl0CkBAIC0yNzg5LDcgJiM0MzsyNzg1LDE1IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLAogCWlmIChkb19tZW1zd19hY2NvdW50KCkpCiAJCXBhZ2VfY291bnRlcl9jaGFyZ2UoJmFtcDttZW1jZy0mZ3Q7bWVtc3csIG5yX3BhZ2VzKTsKIAotCXJldHVybiAwOwomIzQzO291dDoKJiM0MzsJLyoKJiM0MzsJICogRG9uJiMzOTt0IGZvcmdldCB0byByYWlzZSBhIE1FTUNHX01BWCBldmVudCBmb3IgZm9yY2VkIG9yIHJlamVjdGVkCiYjNDM7CSAqIHJlcXVlc3RzLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyYWlzZWRfbWF4X2V2ZW50KQomIzQzOwkJX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogCiBkb25lX3Jlc3RvY2s6CiAJaWYgKGJhdGNoICZndDsgbnJfcGFnZXMpCkBAIC0yODQ4LDcgJiM0MzsyODUyLDcgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssCiAJICAgICEoY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfTUVNQUxMT0MpICZhbXA7JmFtcDsKIAkgICAgZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKQogCQlfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfbWFzayk7Ci0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzaywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHVzZXIgd2FudHMgbWUgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW4gdGhlIExpbnV4IGtlcm5lbCBuZWNlc3NpdGF0ZXMgZXh0cmEgc2NydXRpbnkuIEFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLgoKVGhlIHBhdGNoIGl0c2VsZiB0YXJnZXRzIGBtbS9tZW1jb250cm9sLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB0cnlfY2hhcmdlX21lbWNnKClgIGZ1bmN0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGFuZCBob3cgdGhpcyBwYXRjaCBtb2RpZmllcyBpdC4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcG90ZW50aWFsIG1lbW9yeS1yZWxhdGVkIGlzc3VlcyBoZXJlLgoKSSYjMzk7bGwgcmVhZCB0aHJvdWdoIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyAyNjUwLTI4NjAgb2YgYG1tL21lbWNvbnRyb2wuY2AuIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgdG9vbHMgLSBtb3N0IGxpa2VseSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgLSB0byBnZXQgdGhpcyBzZWN0aW9uIGxvYWRlZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2hhbmdlcyBpbiBtZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBwb2ludGVyIG1hbmlwdWxhdGlvbiwgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbnZvbHZlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoaXMgY29kZSBzZWdtZW50LiBUaGVuIEkmIzM5O2xsIHN0YXJ0IHRoaW5raW5nIGxpa2UgS01TQU4sIHRyeWluZyB0byBpZGVudGlmeSBhcmVhcyB3aGVyZSBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMgY291bGQgb2NjdXIgdW5kZXIgc3BlY2lmaWMsIHBlcmhhcHMgdW51c3VhbCwgY29uZGl0aW9ucy4gRG9lcyB0aGUgcGF0Y2ggYWx0ZXIgdGhlIHBhdGggdG8gdGhlIHBvdGVudGlhbCBtZW1vcnkgZXJyb3JzIG9yIGNyZWF0ZSBlbnRpcmVseSBuZXcgcG9zc2liaWxpdGllcz8gVGhhdCBpcyB3aGF0IEkgbmVlZCB0byB3b3JrIG91dCB0byBkZXRlcm1pbmUgaWYgdGhpcyByZXF1aXJlcyBhIHNlcGFyYXRlIGZ1enppbmcgc2Vzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjUwOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX292ZXJfbGltaXQ7XG4yNjUxOlx0XHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xuMjY1MjpcdFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XG4yNjUzOlx0XHRib29sIHBhc3NlZF9vb20gPSBmYWxzZTtcbjI2NTQ6XHRcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XG4yNjU1Olx0XHRib29sIGRyYWluZWQgPSBmYWxzZTtcbjI2NTY6XHRcdGJvb2wgcmFpc2VkX21heF9ldmVudCA9IGZhbHNlO1xuMjY1NzpcdFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4yNjU4Olx0XHRib29sIGFsbG93X3NwaW5uaW5nID0gZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZ2ZwX21hc2spO1xuMjY1OTpcdFx0aW50IHJldCA9IDA7XG4yNjYwOlx0XG4yNjYxOlx0cmV0cnk6XG4yNjYyOlx0XHRpZiAoY29uc3VtZV9zdG9jayhtZW1jZywgbnJfcGFnZXMpKVxuMjY2MzpcdFx0XHRyZXR1cm4gcmV0O1xuMjY2NDpcdFxuMjY2NTpcdFx0aWYgKCFhbGxvd19zcGlubmluZylcbjI2NjY6XHRcdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG4yNjY3Olx0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4yNjY4Olx0XG4yNjY5Olx0XHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuMjY3MDpcdFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbjI2NzE6XHRcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG4yNjcyOlx0XHRcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIGJhdGNoLCBcdTAwMjZjb3VudGVyKSlcbjI2NzM6XHRcdFx0XHRnb3RvIGRvbmVfcmVzdG9jaztcbjI2NzQ6XHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbjI2NzU6XHRcdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIGJhdGNoKTtcbjI2NzY6XHRcdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpO1xuMjY3NzpcdFx0fSBlbHNlIHtcbjI2Nzg6XHRcdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XG4yNjc5Olx0XHRcdHJlY2xhaW1fb3B0aW9ucyBcdTAwMjY9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuMjY4MDpcdFx0fVxuMjY4MTpcdFxuMjY4MjpcdFx0aWYgKGJhdGNoIFx1MDAzZSBucl9wYWdlcykge1xuMjY4MzpcdFx0XHRiYXRjaCA9IG5yX3BhZ2VzO1xuMjY4NDpcdFx0XHRnb3RvIHJldHJ5O1xuMjY4NTpcdFx0fVxuMjY4NjpcdFxuMjY4NzpcdFx0LypcbjI2ODg6XHRcdCAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvXG4yNjg5Olx0XHQgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksXG4yNjkwOlx0XHQgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrXG4yNjkxOlx0XHQgKiB1bmRlciB0aGUgbGltaXQgb3ZlciB0cmlnZ2VyaW5nIE9PTSBraWxscyBpbiB0aGVzZSBjYXNlcy5cbjI2OTI6XHRcdCAqL1xuMjY5MzpcdFx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKSlcbjI2OTQ6XHRcdFx0Z290byBmb3JjZTtcbjI2OTU6XHRcbjI2OTY6XHRcdGlmICh1bmxpa2VseSh0YXNrX2luX21lbWNnX29vbShjdXJyZW50KSkpXG4yNjk3Olx0XHRcdGdvdG8gbm9tZW07XG4yNjk4Olx0XG4yNjk5Olx0XHRpZiAoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcbjI3MDA6XHRcdFx0Z290byBub21lbTtcbjI3MDE6XHRcbjI3MDI6XHRcdC8qXG4yNzAzOlx0XHQgKiBPT00gdmljdGltIHN0aWxsIG5lZWRzIHRvIGNoYXJnZSBtZW1vcnkgdG8gZXhpdC4gT09NIHJlYXBlciBzaG91bGRcbjI3MDQ6XHRcdCAqIGhlbHAgYnV0IGl0IG1pZ2h0IGZhaWwgb24gbW1hcF9sb2NrIGNvbnRlbnRpb24uIElmIHRoZSB2aWN0aW0gaXMgYVxuMjcwNTpcdFx0ICogbGFyZ2UgdGhyZWFkIGdyb3VwIHRoZW4gYWxsIGV4aXRpbmcgdGhyZWFkcyBtaWdodCBjb21wZXRlIG9uIG9vbV9sb2NrXG4yNzA2Olx0XHQgKiBqdXN0IHRvIGxlYXJuIHRoYXQgdGhlcmUgaXMgbm90aGluZyByZWFsbHkga2lsbGFibGUgYW55bW9yZS4gQmFpbFxuMjcwNzpcdFx0ICogb3V0IGVhcmx5IGFuZCBmYWlsIHRoZSBjaGFyZ2UgdG8gZXhwZWRpdGUgdGhlaXIgZXhpdC4gVGhleSBhcmVcbjI3MDg6XHRcdCAqIGNvbnNpZGVyZWQgZnVsbHkgcmVjbGFpbWVkIGJ5IHRoZSBvb20gcmVhcGVyIGFuZCB0aGV5IHNob3VsZG4mIzM5O3RcbjI3MDk6XHRcdCAqIGNvbnRyaWJ1dGUgZnVydGhlciBjaGFyZ2VzLlxuMjcxMDpcdFx0ICovXG4yNzExOlx0XHRpZiAodHNrX2lzX29vbV92aWN0aW0oY3VycmVudCkgXHUwMDI2XHUwMDI2XG4yNzEyOlx0XHQgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIGN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZW9vbV9tbSkpXG4yNzEzOlx0XHRcdGdvdG8gbm9tZW07XG4yNzE0Olx0XG4yNzE1Olx0XHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XG4yNzE2Olx0XHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcbjI3MTc6XHRcbjI3MTg6XHRcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuMjcxOTpcdFx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXG4yNzIwOlx0XHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuMjcyMTpcdFx0cHNpX21lbXN0YWxsX2xlYXZlKFx1MDAyNnBmbGFncyk7XG4yNzIyOlx0XG4yNzIzOlx0XHRpZiAobWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpIFx1MDAzZT0gbnJfcGFnZXMpXG4yNzI0Olx0XHRcdGdvdG8gcmV0cnk7XG4yNzI1Olx0XG4yNzI2Olx0XHRpZiAoIWRyYWluZWQpIHtcbjI3Mjc6XHRcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTtcbjI3Mjg6XHRcdFx0ZHJhaW5lZCA9IHRydWU7XG4yNzI5Olx0XHRcdGdvdG8gcmV0cnk7XG4yNzMwOlx0XHR9XG4yNzMxOlx0XG4yNzMyOlx0XHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpXG4yNzMzOlx0XHRcdGdvdG8gbm9tZW07XG4yNzM0Olx0XHQvKlxuMjczNTpcdFx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cbjI3MzY6XHRcdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXG4yNzM3Olx0XHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cbjI3Mzg6XHRcdCAqXG4yNzM5Olx0XHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxuMjc0MDpcdFx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcbjI3NDE6XHRcdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cbjI3NDI6XHRcdCAqL1xuMjc0MzpcdFx0aWYgKG5yX3JlY2xhaW1lZCBcdTAwMjZcdTAwMjYgbnJfcGFnZXMgXHUwMDNjPSAoMSBcdTAwM2NcdTAwM2MgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKVxuMjc0NDpcdFx0XHRnb3RvIHJldHJ5O1xuMjc0NTpcdFxuMjc0NjpcdFx0aWYgKG5yX3JldHJpZXMtLSlcbjI3NDc6XHRcdFx0Z290byByZXRyeTtcbjI3NDg6XHRcbjI3NDk6XHRcdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfUkVUUllfTUFZRkFJTClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB3aGF0ZXZlciBmaWVsZCB0aGUgb3JpZ2luYWwgdGV4dCBwZXJ0YWlucyB0bzoKCioqRGl2aW5nIERlZXBlcjogRXhwbG9yaW5nIExpbmVzIDI3NTAtMjg2MCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBCYXNlZCBvbiB0aGUgaW5pdGlhbCBzY2FuLCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgYSBtb3JlIGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1hdGVyaWFsLiBHaXZlbiB0aGUgc2NvcGUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCwgSSB0aGluayBpdCYjMzk7cyB0aW1lIHRvIHplcm8gaW4gb24gbGluZXMgMjc1MCB0aHJvdWdoIDI4NjAuIFRoaXMgc2VjdGlvbiB3YXJyYW50cyBjbG9zZXIgZXhhbWluYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGNhbiB1bmVhcnRoIGZyb20gdGhhdCBwYXJ0aWN1bGFyIHNlZ21lbnQuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtsbCBwcm92aWRlIGZ1cnRoZXIgY2xhcml0eSBvciBuZXcgaW5zaWdodHMgb24gdGhlIHRvcGljIGF0IGhhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc1MDpcdFx0XHRnb3RvIG5vbWVtO1xuMjc1MTpcdFxuMjc1MjpcdFx0LyogQXZvaWQgZW5kbGVzcyBsb29wIGZvciB0YXNrcyBieXBhc3NlZCBieSB0aGUgb29tIGtpbGxlciAqL1xuMjc1MzpcdFx0aWYgKHBhc3NlZF9vb20gXHUwMDI2XHUwMDI2IHRhc2tfaXNfZHlpbmcoKSlcbjI3NTQ6XHRcdFx0Z290byBub21lbTtcbjI3NTU6XHRcbjI3NTY6XHRcdC8qXG4yNzU3Olx0XHQgKiBrZWVwIHJldHJ5aW5nIGFzIGxvbmcgYXMgdGhlIG1lbWNnIG9vbSBraWxsZXIgaXMgYWJsZSB0byBtYWtlXG4yNzU4Olx0XHQgKiBhIGZvcndhcmQgcHJvZ3Jlc3Mgb3IgYnlwYXNzIHRoZSBjaGFyZ2UgaWYgdGhlIG9vbSBraWxsZXJcbjI3NTk6XHRcdCAqIGNvdWxkbiYjMzk7dCBtYWtlIGFueSBwcm9ncmVzcy5cbjI3NjA6XHRcdCAqL1xuMjc2MTpcdFx0aWYgKG1lbV9jZ3JvdXBfb29tKG1lbV9vdmVyX2xpbWl0LCBnZnBfbWFzayxcbjI3NjI6XHRcdFx0XHQgICBnZXRfb3JkZXIobnJfcGFnZXMgKiBQQUdFX1NJWkUpKSkge1xuMjc2MzpcdFx0XHRwYXNzZWRfb29tID0gdHJ1ZTtcbjI3NjQ6XHRcdFx0bnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XG4yNzY1Olx0XHRcdGdvdG8gcmV0cnk7XG4yNzY2Olx0XHR9XG4yNzY3Olx0bm9tZW06XG4yNzY4Olx0XHQvKlxuMjc2OTpcdFx0ICogTWVtY2cgZG9lc24mIzM5O3QgaGF2ZSBhIGRlZGljYXRlZCByZXNlcnZlIGZvciBhdG9taWNcbjI3NzA6XHRcdCAqIGFsbG9jYXRpb25zLiBCdXQgbGlrZSB0aGUgZ2xvYmFsIGF0b21pYyBwb29sLCB3ZSBuZWVkIHRvXG4yNzcxOlx0XHQgKiBwdXQgdGhlIGJ1cmRlbiBvZiByZWNsYWltIG9uIHJlZ3VsYXIgYWxsb2NhdGlvbiByZXF1ZXN0c1xuMjc3MjpcdFx0ICogYW5kIGxldCB0aGVzZSBnbyB0aHJvdWdoIGFzIHByaXZpbGVnZWQgYWxsb2NhdGlvbnMuXG4yNzczOlx0XHQgKi9cbjI3NzQ6XHRcdGlmICghKGdmcF9tYXNrIFx1MDAyNiAoX19HRlBfTk9GQUlMIHwgX19HRlBfSElHSCkpKSB7XG4yNzc1Olx0XHRcdHJldCA9IC1FTk9NRU07XG4yNzc2Olx0XHRcdGdvdG8gb3V0O1xuMjc3NzpcdFx0fVxuMjc3ODpcdGZvcmNlOlxuMjc3OTpcdFx0LypcbjI3ODA6XHRcdCAqIFRoZSBhbGxvY2F0aW9uIGVpdGhlciBjYW4mIzM5O3QgZmFpbCBvciB3aWxsIGxlYWQgdG8gbW9yZSBtZW1vcnlcbjI3ODE6XHRcdCAqIGJlaW5nIGZyZWVkIHZlcnkgc29vbi4gIEFsbG93IG1lbW9yeSB1c2FnZSBnbyBvdmVyIHRoZSBsaW1pdFxuMjc4MjpcdFx0ICogdGVtcG9yYXJpbHkgYnkgZm9yY2UgY2hhcmdpbmcgaXQuXG4yNzgzOlx0XHQgKi9cbjI3ODQ6XHRcdHBhZ2VfY291bnRlcl9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LCBucl9wYWdlcyk7XG4yNzg1Olx0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuMjc4NjpcdFx0XHRwYWdlX2NvdW50ZXJfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XG4yNzg3Olx0XG4yNzg4Olx0b3V0OlxuMjc4OTpcdFx0LypcbjI3OTA6XHRcdCAqIERvbiYjMzk7dCBmb3JnZXQgdG8gcmFpc2UgYSBNRU1DR19NQVggZXZlbnQgZm9yIGZvcmNlZCBvciByZWplY3RlZFxuMjc5MTpcdFx0ICogcmVxdWVzdHMuXG4yNzkyOlx0XHQgKi9cbjI3OTM6XHRcdGlmICghcmFpc2VkX21heF9ldmVudClcbjI3OTQ6XHRcdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xuMjc5NTpcdFxuMjc5NjpcdFx0cmV0dXJuIHJldDtcbjI3OTc6XHRcbjI3OTg6XHRkb25lX3Jlc3RvY2s6XG4yNzk5Olx0XHRpZiAoYmF0Y2ggXHUwMDNlIG5yX3BhZ2VzKVxuMjgwMDpcdFx0XHRyZWZpbGxfc3RvY2sobWVtY2csIGJhdGNoIC0gbnJfcGFnZXMpO1xuMjgwMTpcdFxuMjgwMjpcdFx0LypcbjI4MDM6XHRcdCAqIElmIHRoZSBoaWVyYXJjaHkgaXMgYWJvdmUgdGhlIG5vcm1hbCBjb25zdW1wdGlvbiByYW5nZSwgc2NoZWR1bGVcbjI4MDQ6XHRcdCAqIHJlY2xhaW0gb24gcmV0dXJuaW5nIHRvIHVzZXJsYW5kLiAgV2UgY2FuIHBlcmZvcm0gcmVjbGFpbSBoZXJlXG4yODA1Olx0XHQgKiBpZiBfX0dGUF9SRUNMQUlNIGJ1dCBsZXQmIzM5O3MgYWx3YXlzIHB1bnQgZm9yIHNpbXBsaWNpdHkgYW5kIHNvIHRoYXRcbjI4MDY6XHRcdCAqIEdGUF9LRVJORUwgY2FuIGNvbnNpc3RlbnRseSBiZSB1c2VkIGR1cmluZyByZWNsYWltLiAgQG1lbWNnIGlzXG4yODA3Olx0XHQgKiBub3QgcmVjb3JkZWQgYXMgaXQgbW9zdCBsaWtlbHkgbWF0Y2hlcyBjdXJyZW50JiMzOTtzIGFuZCB3b24mIzM5O3RcbjI4MDg6XHRcdCAqIGNoYW5nZSBpbiB0aGUgbWVhbnRpbWUuICBBcyBoaWdoIGxpbWl0IGlzIGNoZWNrZWQgYWdhaW4gYmVmb3JlXG4yODA5Olx0XHQgKiByZWNsYWltLCB0aGUgY29zdCBvZiBtaXNtYXRjaCBpcyBuZWdsaWdpYmxlLlxuMjgxMDpcdFx0ICovXG4yODExOlx0XHRkbyB7XG4yODEyOlx0XHRcdGJvb2wgbWVtX2hpZ2gsIHN3YXBfaGlnaDtcbjI4MTM6XHRcbjI4MTQ6XHRcdFx0bWVtX2hpZ2ggPSBwYWdlX2NvdW50ZXJfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnkpIFx1MDAzZVxuMjgxNTpcdFx0XHRcdFJFQURfT05DRShtZW1jZy1cdTAwM2VtZW1vcnkuaGlnaCk7XG4yODE2Olx0XHRcdHN3YXBfaGlnaCA9IHBhZ2VfY291bnRlcl9yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApIFx1MDAzZVxuMjgxNzpcdFx0XHRcdFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwLmhpZ2gpO1xuMjgxODpcdFxuMjgxOTpcdFx0XHQvKiBEb24mIzM5O3QgYm90aGVyIGEgcmFuZG9tIGludGVycnVwdGVkIHRhc2sgKi9cbjI4MjA6XHRcdFx0aWYgKCFpbl90YXNrKCkpIHtcbjI4MjE6XHRcdFx0XHRpZiAobWVtX2hpZ2gpIHtcbjI4MjI6XHRcdFx0XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bWVtY2ctXHUwMDNlaGlnaF93b3JrKTtcbjI4MjM6XHRcdFx0XHRcdGJyZWFrO1xuMjgyNDpcdFx0XHRcdH1cbjI4MjU6XHRcdFx0XHRjb250aW51ZTtcbjI4MjY6XHRcdFx0fVxuMjgyNzpcdFxuMjgyODpcdFx0XHRpZiAobWVtX2hpZ2ggfHwgc3dhcF9oaWdoKSB7XG4yODI5Olx0XHRcdFx0LypcbjI4MzA6XHRcdFx0XHQgKiBUaGUgYWxsb2NhdGluZyB0YXNrcyBpbiB0aGlzIGNncm91cCB3aWxsIG5lZWQgdG8gZG9cbjI4MzE6XHRcdFx0XHQgKiByZWNsYWltIG9yIGJlIHRocm90dGxlZCB0byBwcmV2ZW50IGZ1cnRoZXIgZ3Jvd3RoXG4yODMyOlx0XHRcdFx0ICogb2YgdGhlIG1lbW9yeSBvciBzd2FwIGZvb3RwcmludHMuXG4yODMzOlx0XHRcdFx0ICpcbjI4MzQ6XHRcdFx0XHQgKiBUYXJnZXQgc29tZSBiZXN0LWVmZm9ydCBmYWlybmVzcyBiZXR3ZWVuIHRoZSB0YXNrcyxcbjI4MzU6XHRcdFx0XHQgKiBhbmQgZGlzdHJpYnV0ZSByZWNsYWltIHdvcmsgYW5kIGRlbGF5IHBlbmFsdGllc1xuMjgzNjpcdFx0XHRcdCAqIGJhc2VkIG9uIGhvdyBtdWNoIGVhY2ggdGFzayBpcyBhY3R1YWxseSBhbGxvY2F0aW5nLlxuMjgzNzpcdFx0XHRcdCAqL1xuMjgzODpcdFx0XHRcdGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoICYjNDM7PSBiYXRjaDtcbjI4Mzk6XHRcdFx0XHRzZXRfbm90aWZ5X3Jlc3VtZShjdXJyZW50KTtcbjI4NDA6XHRcdFx0XHRicmVhaztcbjI4NDE6XHRcdFx0fVxuMjg0MjpcdFx0fSB3aGlsZSAoKG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSk7XG4yODQzOlx0XG4yODQ0Olx0XHQvKlxuMjg0NTpcdFx0ICogUmVjbGFpbSBpcyBzZXQgdXAgYWJvdmUgdG8gYmUgY2FsbGVkIGZyb20gdGhlIHVzZXJsYW5kXG4yODQ2Olx0XHQgKiByZXR1cm4gcGF0aC4gQnV0IGFsc28gYXR0ZW1wdCBzeW5jaHJvbm91cyByZWNsYWltIHRvIGF2b2lkXG4yODQ3Olx0XHQgKiBleGNlc3NpdmUgb3ZlcnJ1biB3aGlsZSB0aGUgdGFzayBpcyBzdGlsbCBpbnNpZGUgdGhlXG4yODQ4Olx0XHQgKiBrZXJuZWwuIElmIHRoaXMgaXMgc3VjY2Vzc2Z1bCwgdGhlIHJldHVybiBwYXRoIHdpbGwgc2VlIGl0XG4yODQ5Olx0XHQgKiB3aGVuIGl0IHJlY2hlY2tzIHRoZSBvdmVyYWdlIGFuZCBzaW1wbHkgYmFpbCBvdXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUVNQ0dfTUFYIEV2ZW50IEhhbmRsaW5nIGluIGB0cnlfY2hhcmdlX21lbWNnYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHBhdGNoLiBJdCBhcHBlYXJzIHRoZSBjb3JlIGNoYW5nZSBjZW50ZXJzIGFyb3VuZCBob3cgdGhlIGBNRU1DR19NQVhgIGV2ZW50IGlzIHJhaXNlZCB3aXRoaW4gdGhlIGB0cnlfY2hhcmdlX21lbWNnYCBmdW5jdGlvbi4gIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBhIHJldHVybiB2YXJpYWJsZSBgcmV0YCBoYXMgYmVlbiBpbnRyb2R1Y2VkIGFuZCB1dGlsaXplZCB0byBoYW5kbGUgYm90aCBzdWNjZXNzZnVsIGFuZCBmYWlsZWQgbWVtb3J5IGNoYXJnZSByZXF1ZXN0cywgYW5kIGFsc28gdG8gZW5zdXJlIHRoZSBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGNhbGwgaXNuJiMzOTt0IG1pc3NlZCB1bmRlciBmYWlsdXJlIGNvbmRpdGlvbnMuIFByZXZpb3VzbHksIGl0IHNlZW1zIHRoZSBldmVudCBtaWdodCBoYXZlIGJlZW4gc2tpcHBlZCBpZiBhIHJlY2xhaW0gYXR0ZW1wdCB3YXMgYnlwYXNzZWQgZHVlIHRvIGZsYWdzIG9yIE9PTSBzaXR1YXRpb25zLgoKVGhlIG1vdGl2YXRpb24gc2VlbXMgY2xlYXI6IHRvIGVuc3VyZSB0aGF0IHRoZSBgTUVNQ0dfTUFYYCBldmVudCBpcyBjb25zaXN0ZW50bHkgcmFpc2VkIHdoZW4gYSBtZW1vcnkgY2hhcmdlIHJlcXVlc3QgZmFpbHMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGZhaWx1cmUgcGF0aCAoZS5nLiwgZGlyZWN0IGZhaWx1cmUgdmlhIGAhKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpYCBvciB0aHJvdWdoIHJlY2xhaW0gYnlwYXNzKS4gIFByZXZpb3VzbHksIHRoZSBldmVudCB3YXMgb25seSByYWlzZWQgZm9yIGVuZm9yY2VkIGFsbG9jYXRpb25zIG9yIGR1cmluZyByZWNsYWltLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG1pc3NlZCBldmVudHMgaW4gc29tZSBzY2VuYXJpb3MuCgpOb3csIGEgY3JpdGljYWwgdGhvdWdodDogY291bGQgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gIExldCYjMzk7cyBzZWUuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHVuaW5pdGlhbGl6ZWQgZGF0YSBjYW4gbGVhZCB0byBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIGBfX21lbWNnX21lbW9yeV9ldmVudGAgaW5jcmVtZW50cyBldmVudCBjb3VudGVycywgd2hpY2ggc2hvdWxkIGJlIHNhZmUuIEhvd2V2ZXIsIHRoZSBgbWVtX292ZXJfbGltaXRgIHBvaW50ZXIgbmVlZHMgYSBjbG9zZXIgbG9vay4gSXMgaXQgcG9zc2libGUgZm9yIGl0IHRvIGJlIHVzZWQgdW5pbml0aWFsaXplZD8KCk9rYXksIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIGxvZ2ljLiAgSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgY2FyZWZ1bGx5LCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgYGdvdG8gbm9tZW1gLCBgZ290byBmb3JjZWAsIGFuZCBgZ290byBvdXRgIHN0YXRlbWVudHMuIFRoZSBpbXBvcnRhbnQgdmFyaWFibGVzIGhlcmUgYXJlIGBtZW1fb3Zlcl9saW1pdGAsIGByYWlzZWRfbWF4X2V2ZW50YCwgYGFsbG93X3NwaW5uaW5nYCwgYW5kIG9mIGNvdXJzZSBgcmV0YC4gTG9va2luZyBhdCB0aGUgY29kZSBhcm91bmQgdGhlIGByZXRyeWAgbGFiZWwsIEkgc2VlIHRoYXQgaWYgYHBhZ2VfY291bnRlcl90cnlfY2hhcmdlYCBzdWNjZWVkcywgdGhlIGZ1bmN0aW9uIGBnb3RvIGRvbmVfcmVzdG9ja2AuIEhvd2V2ZXIsIGlmIGBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZWAgZmFpbHMsIHRoZSBgbWVtX292ZXJfbGltaXRgIHBvaW50ZXIgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQsIGVpdGhlciBhdCBsaW5lIDI2NzYgb3IgMjY3OC4gVGhlIHByb2dyYW0gZWl0aGVyIGdvZXMgdG8gYGZvcmNlYCBvciBgbm9tZW1gICphZnRlciogdGhlIGBtZW1fb3Zlcl9saW1pdGAgcG9pbnRlciBpcyBzZXQuIEFsc28gYHJldGAgaXMgc2V0IHRvIGAwYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbiBhbmQgdGhlbiB0byBgLUVOT01FTWAgaW4gY2FzZSBvZiBmYWlsdXJlLgoKSSBhbHNvIGhhdmUgdG8gY2hlY2sgdGhhdCBubyBvdGhlciBwYXRoIGV4aXN0cyB0byBgbm9tZW1gLCBgZm9yY2VgLCBvciBgb3V0YCBvdGhlciB0aGFuIHRocm91Z2ggdGhpcyBjb2RlIHBhdGgsIHNvIEkgc2hvdWxkIHBlcmZvcm0gYSBmdWxsIHNlYXJjaCBvZiBgbW0vbWVtY29udHJvbC5jYC4KCkJhc2VkIG9uIG15IGFuYWx5c2lzLCBpdCBzZWVtcyB0aGUgcGF0Y2ggaXMgc2FmZSByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIGBtZW1fb3Zlcl9saW1pdGAgaXMgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCB0aGUgZXZlbnQgaGFuZGxpbmcgbG9naWMgaXMgdGlnaHRlbmVkIHVwIHRvIGd1YXJhbnRlZSBhIGNvbnNpc3RlbnQgYE1FTUNHX01BWGAgZXZlbnQgb24gZmFpbHVyZXMsIHdoaWNoIGlzIGEgZ29vZCB0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z290byAobm9tZW18Zm9yY2V8b3V0KSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MTI1OD1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9pdGVyKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMjkwLVx0XHRlbHNlIGlmIChyZWNsYWltLVx1MDAzZWdlbmVyYXRpb24gIT0gZ2VuKVxubW0vbWVtY29udHJvbC5jOjEyOTE6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xubW0vbWVtY29udHJvbC5jLTEyOTItXG4tLVxubW0vbWVtY29udHJvbC5jPTE5OTI9c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X29vbV9ncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnZpY3RpbSxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjAwNy1cdGlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxubW0vbWVtY29udHJvbC5jOjIwMDg6XHRcdGdvdG8gb3V0O1xubW0vbWVtY29udHJvbC5jLTIwMDktXG4tLVxubW0vbWVtY29udHJvbC5jLTIwMTUtXHRpZiAodW5saWtlbHkoIW1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudChtZW1jZywgb29tX2RvbWFpbikpKVxubW0vbWVtY29udHJvbC5jOjIwMTY6XHRcdGdvdG8gb3V0O1xubW0vbWVtY29udHJvbC5jLTIwMTctXG4tLVxubW0vbWVtY29udHJvbC5jPTI1NTU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjU3Ny1cdGlmICh0YXNrX2lzX2R5aW5nKCkpXG5tbS9tZW1jb250cm9sLmM6MjU3ODpcdFx0Z290byBvdXQ7XG5tbS9tZW1jb250cm9sLmMtMjU3OS1cbi0tXG5tbS9tZW1jb250cm9sLmMtMjYxNi1cdGlmIChwZW5hbHR5X2ppZmZpZXMgXHUwMDNjPSBIWiAvIDEwMClcbm1tL21lbWNvbnRyb2wuYzoyNjE3Olx0XHRnb3RvIG91dDtcbm1tL21lbWNvbnRyb2wuYy0yNjE4LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNjQ1PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjkzLVx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKSlcbm1tL21lbWNvbnRyb2wuYzoyNjk0Olx0XHRnb3RvIGZvcmNlO1xubW0vbWVtY29udHJvbC5jLTI2OTUtXG5tbS9tZW1jb250cm9sLmMtMjY5Ni1cdGlmICh1bmxpa2VseSh0YXNrX2luX21lbWNnX29vbShjdXJyZW50KSkpXG5tbS9tZW1jb250cm9sLmM6MjY5NzpcdFx0Z290byBub21lbTtcbm1tL21lbWNvbnRyb2wuYy0yNjk4LVxubW0vbWVtY29udHJvbC5jLTI2OTktXHRpZiAoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcbm1tL21lbWNvbnRyb2wuYzoyNzAwOlx0XHRnb3RvIG5vbWVtO1xubW0vbWVtY29udHJvbC5jLTI3MDEtXG4tLVxubW0vbWVtY29udHJvbC5jLTI3MTItXHQgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIGN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZW9vbV9tbSkpXG5tbS9tZW1jb250cm9sLmM6MjcxMzpcdFx0Z290byBub21lbTtcbm1tL21lbWNvbnRyb2wuYy0yNzE0LVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNzMyLVx0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9OT1JFVFJZKVxubW0vbWVtY29udHJvbC5jOjI3MzM6XHRcdGdvdG8gbm9tZW07XG5tbS9tZW1jb250cm9sLmMtMjczNC1cdC8qXG4tLVxubW0vbWVtY29udHJvbC5jLTI3NDktXHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1JFVFJZX01BWUZBSUwpXG5tbS9tZW1jb250cm9sLmM6Mjc1MDpcdFx0Z290byBub21lbTtcbm1tL21lbWNvbnRyb2wuYy0yNzUxLVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNzUzLVx0aWYgKHBhc3NlZF9vb20gXHUwMDI2XHUwMDI2IHRhc2tfaXNfZHlpbmcoKSlcbm1tL21lbWNvbnRyb2wuYzoyNzU0Olx0XHRnb3RvIG5vbWVtO1xubW0vbWVtY29udHJvbC5jLTI3NTUtXG4tLVxubW0vbWVtY29udHJvbC5jLTI3NzUtXHRcdHJldCA9IC1FTk9NRU07XG5tbS9tZW1jb250cm9sLmM6Mjc3NjpcdFx0Z290byBvdXQ7XG5tbS9tZW1jb250cm9sLmMtMjc3Ny1cdH1cbi0tXG5tbS9tZW1jb250cm9sLmM9MzE1Nz1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMTY2LVx0aWYgKHJldClcbm1tL21lbWNvbnRyb2wuYzozMTY3Olx0XHRnb3RvIG91dDtcbm1tL21lbWNvbnRyb2wuYy0zMTY4LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zNDU5PXN0YXRpYyB2b2lkIF9fcmVmaWxsX29ial9zdG9jayhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTM0NzEtXHRcdGF0b21pY19hZGQobnJfYnl0ZXMsIFx1MDAyNm9iamNnLVx1MDAzZW5yX2NoYXJnZWRfYnl0ZXMpO1xubW0vbWVtY29udHJvbC5jOjM0NzI6XHRcdGdvdG8gb3V0O1xubW0vbWVtY29udHJvbC5jLTM0NzMtXHR9XG4tLVxubW0vbWVtY29udHJvbC5jPTQ4NDI9c3RhdGljIHNzaXplX3QgbWVtb3J5X2hpZ2hfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00ODU4LVx0aWYgKG9mLVx1MDAzZWZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19OT05CTE9DSylcbm1tL21lbWNvbnRyb2wuYzo0ODU5Olx0XHRnb3RvIG91dDtcbm1tL21lbWNvbnRyb2wuYy00ODYwLVxuLS1cbm1tL21lbWNvbnRyb2wuYz00OTAxPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9tYXhfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00OTE3LVx0aWYgKG9mLVx1MDAzZWZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19OT05CTE9DSylcbm1tL21lbWNvbnRyb2wuYzo0OTE4Olx0XHRnb3RvIG91dDtcbm1tL21lbWNvbnRyb2wuYy00OTE5LVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MjQ5PWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI2MC1cdFx0IW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxubW0vbWVtY29udHJvbC5jOjUyNjE6XHRcdGdvdG8gb3V0O1xubW0vbWVtY29udHJvbC5jLTUyNjItXG4tLVxubW0vbWVtY29udHJvbC5jPTU1Njk9dm9pZCBtZW1fY2dyb3VwX3NrX2FsbG9jKHN0cnVjdCBzb2NrICpzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTU4Mi1cdGlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxubW0vbWVtY29udHJvbC5jOjU1ODM6XHRcdGdvdG8gb3V0O1xubW0vbWVtY29udHJvbC5jLTU1ODQtXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXHUwMDI2XHUwMDI2ICFtZW1jZzFfdGNwbWVtX2FjdGl2ZShtZW1jZykpXG5tbS9tZW1jb250cm9sLmM6NTU4NTpcdFx0Z290byBvdXQ7XG5tbS9tZW1jb250cm9sLmMtNTU4Ni1cdGlmIChjc3NfdHJ5Z2V0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTMwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBNZW1vcnkgQ2hhcmdlIE1lY2hhbmlzbXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBjaGFyZ2luZyBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYG1lbWNnYCAobWVtb3J5IGNvbnRyb2wgZ3JvdXBzKSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBpbnZlc3RpZ2F0aW5nIHRoZSBjYWxsIGdyYXBocyBvZiB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBJIHdhbnQgdG8gc2VlICp3aG8qIGlzIGNhbGxpbmcgYHRyeV9jaGFyZ2VfbWVtY2dgIGFuZCBhbHNvLCBpbXBvcnRhbnRseSwgYHRyeV9jaGFyZ2VgLiBVbmRlcnN0YW5kaW5nIHRoZSB1cHN0cmVhbSB1c2FnZSBpcyBjcnVjaWFsIHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIGZsb3cgYW5kIHRoZSBwb3RlbnRpYWwgcG9pbnRzIHdoZXJlIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBsaW1pdGF0aW9ucyBtaWdodCBiZSB0cmlnZ2VyZWQuIFNlZWluZyB0aGUgY2FsbGluZyBjb250ZXh0cyB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaW5zaWdodCBpbnRvIGl0cyB1c2FnZS4gV2hlcmUgZG8gdGhlc2UgY2hlY2tzIGhhcHBlbj8gV2hhdCBraW5kIG9mIG9wZXJhdGlvbnMgYXJlIGJlaW5nIHByb3RlY3RlZD8gS25vd2luZyB0aGlzIHdpbGwgc2lnbmlmaWNhbnRseSBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGludHJpY2FjaWVzIG9mIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkLCByZWNsYWltZWQsIGFuZCBwb3RlbnRpYWxseSB0aHJvdHRsZWQgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDAyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV9jaGFyZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI1MTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2hpZ2hfZGVsYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNTUxLSAqIFJlY2xhaW1zIG1lbW9yeSBvdmVyIHRoZSBoaWdoIGxpbWl0LiBDYWxsZWQgZGlyZWN0bHkgZnJvbVxubW0vbWVtY29udHJvbC5jOjI1NTI6ICogdHJ5X2NoYXJnZSgpIChjb250ZXh0IHBlcm1pdHRpbmcpLCBhcyB3ZWxsIGFzIGZyb20gdGhlIHVzZXJsYW5kXG5tbS9tZW1jb250cm9sLmMtMjU1My0gKiByZXR1cm4gcGF0aCB3aGVyZSByZWNsYWltIGlzIGFsd2F5cyBhYmxlIHRvIGJsb2NrLlxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNTU1PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vbWVtY29udHJvbC5jLTI2NDQtXG5tbS9tZW1jb250cm9sLmM6MjY0NTpzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbm1tL21lbWNvbnRyb2wuYy0yNjQ2LVx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jLTI2NzAtXHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSB8fFxubW0vbWVtY29udHJvbC5jOjI2NzE6XHQgICAgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIGJhdGNoLCBcdTAwMjZjb3VudGVyKSkge1xubW0vbWVtY29udHJvbC5jOjI2NzI6XHRcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIGJhdGNoLCBcdTAwMjZjb3VudGVyKSlcbm1tL21lbWNvbnRyb2wuYy0yNjczLVx0XHRcdGdvdG8gZG9uZV9yZXN0b2NrO1xuLS1cbm1tL21lbWNvbnRyb2wuYy0yODU3LVxubW0vbWVtY29udHJvbC5jOjI4NTg6c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxubW0vbWVtY29udHJvbC5jLTI4NTktXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxubW0vbWVtY29udHJvbC5jLTI4NjMtXG5tbS9tZW1jb250cm9sLmM6Mjg2NDpcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTI4NjUtfVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zMTU3PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG4tLVxubW0vbWVtY29udHJvbC5jLTMxNjQtXG5tbS9tZW1jb250cm9sLmM6MzE2NTpcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTMxNjYtXHRpZiAocmV0KVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MjA1PXN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTIxMy1cdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcbm1tL21lbWNvbnRyb2wuYzo1MjE0Olx0XHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG5tbS9tZW1jb250cm9sLmMtNTIxNS1cdGlmIChyZXQpIHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTYyNT1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01NjMyLVxubW0vbWVtY29udHJvbC5jOjU2MzM6XHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XG5tbS9tZW1jb250cm9sLmMtNTYzNC1cdFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XG4tLVxubW0vbWVtY29udHJvbC5jPTU2OTE9aW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTcyOC0vKipcbm1tL21lbWNvbnRyb2wuYzo1NzI5OiAqIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAgLSB0cnkgY2hhcmdpbmcgc3dhcCBzcGFjZSBmb3IgYSBmb2xpb1xubW0vbWVtY29udHJvbC5jLTU3MzAtICogQGZvbGlvOiBmb2xpbyBiZWluZyBhZGRlZCB0byBzd2FwXG4tLVxubW0vbWVtY29udHJvbC5jLTU3MzUtICovXG5tbS9tZW1jb250cm9sLmM6NTczNjppbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWVtY29udHJvbC5jLTU3Mzcte1xuLS1cbm1tL21lbWNvbnRyb2wuYy01NzY0LVx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIFx1MDAyNlx1MDAyNlxubW0vbWVtY29udHJvbC5jOjU3NjU6XHQgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzLCBcdTAwMjZjb3VudGVyKSkge1xubW0vbWVtY29udHJvbC5jLTU3NjYtXHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ1NgoJCQkJCQkJb3V0cHV0OiAyNjcKCQkJCQkJCXRob3VnaHRzOiA3NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBwYXRjaCB0byBgdHJ5X2NoYXJnZV9tZW1jZ2AuIFRoZSBrZXkgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB0aGUgcmV0dXJuIHBhdGggYW5kIGVycm9yIGhhbmRsaW5nLiBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGEgYHJldGAgdmFyaWFibGUgdG8gY2FwdHVyZSB0aGUgcmV0dXJuIHZhbHVlLCB0aGUgY29uc29saWRhdGlvbiBvZiB0aGUgcmV0dXJuIHBhdGhzIHRocm91Z2ggYW4gYG91dDpgIGxhYmVsLCBhbmQgdGhlIGNvbnNpc3RlbnQgY2FsbCB0byBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIHdoZW4gYSBtZW1vcnkgY2hhcmdlIGZhaWxzLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgc2VlbXMgbGlrZSBpdCBtaWdodCBiZSBsb2dpYyBjaGFuZ2VzIHRoYXQgZG8gbm90IGNhdXNlIGEgS01TQU4gY29uY2Vybi4KCk5vdywgbGV0JiMzOTtzIHJpZ29yb3VzbHkgZ28gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEuIEZpcnN0LCBhbSBJIGRlYWxpbmcgd2l0aCBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGFyZSBub3cgZXhwb3NlZCB0byB1c2Vyc3BhY2U/IE5vLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGNoYW5nZSB3aGF0JiMzOTtzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBTZWNvbmQsIGFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgYnJhbmNoZXMgdGhhdCBkZXBlbmQgb24gKnVuaW5pdGlhbGl6ZWQqIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzPyBObywgSSYjMzk7bSBjYXJlZnVsbHkgY2hlY2tpbmcgdGhlIGNvZGUgYW5kIGFsbCB0aGUgbG9jYWwgdmFyaWFibGVzIHVzZWQgKGByZXRgLCBgcmFpc2VkX21heF9ldmVudGAsIGV0Yy4pIGFyZSBkZWZpbml0ZWx5IGluaXRpYWxpemVkIGJlZm9yZSBhbnkgZXZhbHVhdGlvbiBvciBkZXJlZmVyZW5jaW5nIGhhcHBlbnMuIFRoaXJkLCBhcmUgdGhlcmUgbmV3IGFsbG9jYXRpb25zIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG1pZ2h0IGJlIHJlYWQgbGF0ZXI/IE5vLCB0aGlzIGlzIHB1cmVseSBtZW1vcnkgY2dyb3VwIGxvZ2ljLiBGb3VydGgsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJ1ZmZlciBhY2Nlc3MgdmlvbGF0aW9ucz8gTm8sIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBtb2RpZnkgYW55IGNvZGUgdGhhdCBpbnZvbHZlcyB0aGF0IHJpc2suCgpTaW5jZSB0aGlzIGlzIHB1cmVseSBtZW1vcnkgY2dyb3VwIGNoYXJnaW5nIGFuZCBldmVudCByZXBvcnRpbmcsIEkgYW0gdmVyeSBjb25maWRlbnQgdGhhdCBhbnkgYnVncyB3b3VsZCBiZSBsb2dpYyBidWdzLCBhY2NvdW50aW5nIGVycm9ycywgb3IgdGhlIHVzdWFsIHN1c3BlY3RzIGxpa2UgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBsb2NraW5nIGlzc3Vlcy4gVGhvc2UgYXJlIGFscmVhZHkgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhpcyBpcyBub3QgS01TQU4mIzM5O3MgZG9tYWluLgoKU28sIGZvciBteSBjb250cmFzdGluZyByZWFzb25pbmcsIEkgY2FuIHN1bW1hcml6ZSB0aGUgcGF0Y2ggYXMgZW5zdXJpbmcgYSBgTUVNQ0dfTUFYYCBldmVudCBpcyByYWlzZWQgd2hlbiBhIG1lbW9yeSBjaGFyZ2UgcmVxdWVzdCBmYWlscy4gS01TQU4gdGFyZ2V0cyBhcmUgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZGF0YSBidWZmZXJzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZSB0byBjb250cm9sIGZsb3cgb3IgbG9ja2luZyBpbiBgX19tZW1jZ19tZW1vcnlfZXZlbnRgLCB3aGljaCBpcyBjb3ZlcmVkIGJ5IEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgSSBjb25jbHVkZSB0aGF0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24mIzM5O3Qgd2FycmFudGVkLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBwcm92aWRlIGBOZWVkc0tNU0FOID0gZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdHJ5X2NoYXJnZV9tZW1jZygpYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBlbnN1cmUgdGhhdCBhIGBNRU1DR19NQVhgIG1lbW9yeSBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiBhbiBhbGxvY2F0aW9uIGNoYXJnZSByZXF1ZXN0IGlzIHJlamVjdGVkIHdpdGggYC1FTk9NRU1gLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgdmFyaWFibGUgYHJldCA9IDBgLCBzZXRzIGByZXQgPSAtRU5PTUVNYCBvbiBmYWlsdXJlLCBhbmQgcm91dGVzIHRocm91Z2ggYSBjb21tb24gYG91dDpgIGxhYmVsIHRvIHJhaXNlIHRoZSBldmVudCBiZWZvcmUgcmV0dXJuaW5nIGByZXRgLlxuXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5OlxuLSBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIChzdGFjay9oZWFwL3BhZ2VzKSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIGNoYW5nZXMgaGVyZSBkbyBub3QgaW52b2x2ZSBjb3B5aW5nIGRhdGEgc3RydWN0dXJlcyBvciBidWZmZXJzIHRvIHVzZXIgc3BhY2UsIGFsbG9jYXRpbmcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGByZXRgLCBgcmFpc2VkX21heF9ldmVudGAsIGBtZW1fb3Zlcl9saW1pdGApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxuLSBBbnkgcG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGNvbnRyb2wgZmxvdyBidWdzLCBtZW1jZyBldmVudCBjb3VudGVyIG1hbmlwdWxhdGlvbiwgbG9ja2luZyBvciBzdGF0ZSB0cmFja2luZyBkdXJpbmcgbWVtY2cgcmVjbGFpbS9ldmVudHMpIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0cnlfY2hhcmdlX21lbWNnKClgIGluIGBtbS9tZW1jb250cm9sLmNgIHRvIGVuc3VyZSB0aGF0IGEgYE1FTUNHX01BWGAgbWVtb3J5IGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIGFuIGFsbG9jYXRpb24gY2hhcmdlIHJlcXVlc3QgaXMgcmVqZWN0ZWQgd2l0aCBgLUVOT01FTWAuIEl0IGludHJvZHVjZXMgYSBsb2NhbCB2YXJpYWJsZSBgcmV0ID0gMGAsIHNldHMgYHJldCA9IC1FTk9NRU1gIG9uIGZhaWx1cmUsIGFuZCByb3V0ZXMgdGhyb3VnaCBhIGNvbW1vbiBgb3V0OmAgbGFiZWwgdG8gcmFpc2UgdGhlIGV2ZW50IGJlZm9yZSByZXR1cm5pbmcgYHJldGAuXG5cbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XG4tIEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgKHN0YWNrL2hlYXAvcGFnZXMpIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBoZXJlIGRvIG5vdCBpbnZvbHZlIGNvcHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgdG8gdXNlciBzcGFjZSwgYWxsb2NhdGluZyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYHJldGAsIGByYWlzZWRfbWF4X2V2ZW50YCwgYG1lbV9vdmVyX2xpbWl0YCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG4tIEFueSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgY29udHJvbCBmbG93IGJ1Z3MsIG1lbWNnIGV2ZW50IGNvdW50ZXIgbWFuaXB1bGF0aW9uLCBsb2NraW5nIG9yIHN0YXRlIHRyYWNraW5nIGR1cmluZyBtZW1jZyByZWNsYWltL2V2ZW50cykgYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMsIEtBU0FOLCBhbmQgTE9DS0RFUC5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1Mjo0Ny45MzU3Nzc0MTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk3MzEwMjk0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX21lbV9jZ3JvdXBfY2hhcmdlXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCIsXG4gICAgXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIixcbiAgICBcIm1lbV9jZ3JvdXBfc2tfY2hhcmdlXCIsXG4gICAgXCJfX21lbWNnX21lbW9yeV9ldmVudFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRyeV9jaGFyZ2VfbWVtY2coKWAgaW4gYG1tL21lbWNvbnRyb2wuY2AgdG8gZW5zdXJlIHRoYXQgYSBgTUVNQ0dfTUFYYCBtZW1vcnkgZXZlbnQgaXMgZ2VuZXJhdGVkIHdoZW4gYW4gYWxsb2NhdGlvbiBjaGFyZ2UgcmVxdWVzdCBpcyByZWplY3RlZCB3aXRoIGAtRU5PTUVNYC4gSXQgaW50cm9kdWNlcyBhIGxvY2FsIHZhcmlhYmxlIGByZXQgPSAwYCwgc2V0cyBgcmV0ID0gLUVOT01FTWAgb24gZmFpbHVyZSwgYW5kIHJvdXRlcyB0aHJvdWdoIGEgY29tbW9uIGBvdXQ6YCBsYWJlbCB0byByYWlzZSB0aGUgZXZlbnQgYmVmb3JlIHJldHVybmluZyBgcmV0YC5cXG5cXG5LTVNBTiB2cyBLQVNBTiBBcHBsaWNhYmlsaXR5Olxcbi0gS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyAoc3RhY2svaGVhcC9wYWdlcykgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGhlcmUgZG8gbm90IGludm9sdmUgY29weWluZyBkYXRhIHN0cnVjdHVyZXMgb3IgYnVmZmVycyB0byB1c2VyIHNwYWNlLCBhbGxvY2F0aW5nIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgbG9jYWwgdmFyaWFibGVzIChgcmV0YCwgYHJhaXNlZF9tYXhfZXZlbnRgLCBgbWVtX292ZXJfbGltaXRgKSBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG4tIEFueSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgY29udHJvbCBmbG93IGJ1Z3MsIG1lbWNnIGV2ZW50IGNvdW50ZXIgbWFuaXB1bGF0aW9uLCBsb2NraW5nIG9yIHN0YXRlIHRyYWNraW5nIGR1cmluZyBtZW1jZyByZWNsYWltL2V2ZW50cykgYXJlIHdpdGhpbiB0aGUgZG9tYWluIG9mIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMsIEtBU0FOLCBhbmQgTE9DS0RFUC5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdHJ5X2NoYXJnZV9tZW1jZygpIHRvIGVuc3VyZSB0aGF0IE1FTUNHX01BWCBldmVudHMgYXJlIHByb3Blcmx5IHJhaXNlZCB2aWEgX19tZW1jZ19tZW1vcnlfZXZlbnQoKSB3aGVuIG1lbW9yeSBjZ3JvdXAgYWxsb2NhdGlvbiByZXF1ZXN0cyBhcmUgcmVqZWN0ZWQgd2l0aCAtRU5PTUVNLiBUaGlzIGFsdGVycyBjb3JlIG1lbWNnIGxpbWl0IGV2ZW50IGhhbmRsaW5nIGFuZCBtZW1vcnkgY2hhcmdpbmcgY29udHJvbCBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1Mjo0Ny45MzU3ODM1OTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NzU0NTUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ2MzY5ODNmNjVjZjEwMmMyOWU0NzQwNmE1ZTgxYThhNTY2YjlmMjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMSAwMjo1Mjo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCAxMjcxZDM5MGI2MTdlLi4xNThiMDU2MmU4ZGYzIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0yNjU2LDEwICsyNjU2LDExIEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbiBcXHRib29sIHJhaXNlZF9tYXhfZXZlbnQgPSBmYWxzZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XFxuIFxcdGJvb2wgYWxsb3dfc3Bpbm5pbmcgPSBnZnBmbGFnc19hbGxvd19zcGlubmluZyhnZnBfbWFzayk7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXG4gcmV0cnk6XFxuIFxcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0aWYgKCFhbGxvd19zcGlubmluZylcXG4gXFx0XFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXFxuQEAgLTI3NzAsMTYgKzI3NzEsMTEgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuIFxcdCAqIHB1dCB0aGUgYnVyZGVuIG9mIHJlY2xhaW0gb24gcmVndWxhciBhbGxvY2F0aW9uIHJlcXVlc3RzXFxuIFxcdCAqIGFuZCBsZXQgdGhlc2UgZ28gdGhyb3VnaCBhcyBwcml2aWxlZ2VkIGFsbG9jYXRpb25zLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCEoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfTk9GQUlMIHwgX19HRlBfSElHSCkpKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0aWYgKCEoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfTk9GQUlMIHwgX19HRlBfSElHSCkpKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIGZvcmNlOlxcbi1cXHQvKlxcbi1cXHQgKiBJZiB0aGUgYWxsb2NhdGlvbiBoYXMgdG8gYmUgZW5mb3JjZWQsIGRvbid0IGZvcmdldCB0byByYWlzZVxcbi1cXHQgKiBhIE1FTUNHX01BWCBldmVudC5cXG4tXFx0ICovXFxuLVxcdGlmICghcmFpc2VkX21heF9ldmVudClcXG4tXFx0XFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xcbi1cXG4gXFx0LypcXG4gXFx0ICogVGhlIGFsbG9jYXRpb24gZWl0aGVyIGNhbid0IGZhaWwgb3Igd2lsbCBsZWFkIHRvIG1vcmUgbWVtb3J5XFxuIFxcdCAqIGJlaW5nIGZyZWVkIHZlcnkgc29vbi4gIEFsbG93IG1lbW9yeSB1c2FnZSBnbyBvdmVyIHRoZSBsaW1pdFxcbkBAIC0yNzg5LDcgKzI3ODUsMTUgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuIFxcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXFxuIFxcdFxcdHBhZ2VfY291bnRlcl9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgbnJfcGFnZXMpO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK291dDpcXG4rXFx0LypcXG4rXFx0ICogRG9uJ3QgZm9yZ2V0IHRvIHJhaXNlIGEgTUVNQ0dfTUFYIGV2ZW50IGZvciBmb3JjZWQgb3IgcmVqZWN0ZWRcXG4rXFx0ICogcmVxdWVzdHMuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXFxuK1xcdFxcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIFxcbiBkb25lX3Jlc3RvY2s6XFxuIFxcdGlmIChiYXRjaCBcXHUwMDNlIG5yX3BhZ2VzKVxcbkBAIC0yODQ4LDcgKzI4NTIsNyBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4gXFx0ICAgICEoY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9NRU1BTExPQykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcXG4gXFx0XFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1Mjo0OC41MTQyNjQ5MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU5NjA2MzkyMjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19tZW1fY2dyb3VwX2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiLFxuICAgIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCIsXG4gICAgXCJtZW1fY2dyb3VwX3NrX2NoYXJnZVwiLFxuICAgIFwiX19tZW1jZ19tZW1vcnlfZXZlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0cnlfY2hhcmdlX21lbWNnKCkgdG8gZW5zdXJlIHRoYXQgTUVNQ0dfTUFYIGV2ZW50cyBhcmUgcHJvcGVybHkgcmFpc2VkIHZpYSBfX21lbWNnX21lbW9yeV9ldmVudCgpIHdoZW4gbWVtb3J5IGNncm91cCBhbGxvY2F0aW9uIHJlcXVlc3RzIGFyZSByZWplY3RlZCB3aXRoIC1FTk9NRU0uIFRoaXMgYWx0ZXJzIGNvcmUgbWVtY2cgbGltaXQgZXZlbnQgaGFuZGxpbmcgYW5kIG1lbW9yeSBjaGFyZ2luZyBjb250cm9sIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ2MzY5ODNmNjVjZjEwMmMyOWU0NzQwNmE1ZTgxYThhNTY2YjlmMjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDAyOjUyOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxMjcxZDM5MGI2MTdlLi4xNThiMDU2MmU4ZGYzIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0yNjU2LDEwICsyNjU2LDExIEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0Ym9vbCByYWlzZWRfbWF4X2V2ZW50ID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIHBmbGFncztcbiBcdGJvb2wgYWxsb3dfc3Bpbm5pbmcgPSBnZnBmbGFnc19hbGxvd19zcGlubmluZyhnZnBfbWFzayk7XG4rXHRpbnQgcmV0ID0gMDtcbiBcbiByZXRyeTpcbiBcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0aWYgKCFhbGxvd19zcGlubmluZylcbiBcdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG5AQCAtMjc3MCwxNiArMjc3MSwxMSBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdCAqIHB1dCB0aGUgYnVyZGVuIG9mIHJlY2xhaW0gb24gcmVndWxhciBhbGxvY2F0aW9uIHJlcXVlc3RzXG4gXHQgKiBhbmQgbGV0IHRoZXNlIGdvIHRocm91Z2ggYXMgcHJpdmlsZWdlZCBhbGxvY2F0aW9ucy5cbiBcdCAqL1xuLVx0aWYgKCEoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKSkpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0aWYgKCEoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKSkpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4gZm9yY2U6XG4tXHQvKlxuLVx0ICogSWYgdGhlIGFsbG9jYXRpb24gaGFzIHRvIGJlIGVuZm9yY2VkLCBkb24ndCBmb3JnZXQgdG8gcmFpc2Vcbi1cdCAqIGEgTUVNQ0dfTUFYIGV2ZW50LlxuLVx0ICovXG4tXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXG4tXHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgYWxsb2NhdGlvbiBlaXRoZXIgY2FuJ3QgZmFpbCBvciB3aWxsIGxlYWQgdG8gbW9yZSBtZW1vcnlcbiBcdCAqIGJlaW5nIGZyZWVkIHZlcnkgc29vbi4gIEFsbG93IG1lbW9yeSB1c2FnZSBnbyBvdmVyIHRoZSBsaW1pdFxuQEAgLTI3ODksNyArMjc4NSwxNSBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXG4gXHRcdHBhZ2VfY291bnRlcl9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIG5yX3BhZ2VzKTtcbiBcbi1cdHJldHVybiAwO1xuK291dDpcbitcdC8qXG4rXHQgKiBEb24ndCBmb3JnZXQgdG8gcmFpc2UgYSBNRU1DR19NQVggZXZlbnQgZm9yIGZvcmNlZCBvciByZWplY3RlZFxuK1x0ICogcmVxdWVzdHMuXG4rXHQgKi9cbitcdGlmICghcmFpc2VkX21heF9ldmVudClcbitcdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xuK1xuK1x0cmV0dXJuIHJldDtcbiBcbiBkb25lX3Jlc3RvY2s6XG4gXHRpZiAoYmF0Y2ggXHUwMDNlIG5yX3BhZ2VzKVxuQEAgLTI4NDgsNyArMjg1Miw3IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0ICAgICEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcbiBcdFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1Mjo0OC41MTQyNjcyNzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTkyNDA5ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTWVtb3J5IENvbnRyb2wgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgbW9kaWZpZWQgZmlsZSwgYG1tL21lbWNvbnRyb2wuY2AuIFRoZSBmYWN0IHRoYXQgaXQncyB0b3VjaGluZyBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXMgYSBrZXkgaW5kaWNhdG9yIG9mIG1lbW9yeSByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBhY2NvdW50aW5nIGNoYW5nZXMuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBidWcgZml4ZXMgdG8gcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzLCBvciBldmVuIG5ldyBmZWF0dXJlcyByZWxhdGVkIHRvIG1lbWNnJ3MgYWJpbGl0eSB0byBsaW1pdCBhbmQgY29udHJvbCBtZW1vcnkgdXNhZ2UuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI2NTYuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBpbW1lZGlhdGUgY29udGV4dCBvZiB0aGUgY2hhbmdlLiBUaW1lIHRvIHB1bGwgdXAgYG1tL21lbWNvbnRyb2wuY2AgdXNpbmcgdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQgc28gSSBjYW4gc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGF0IGFyZWEuIFRoaXMgc2hvdWxkIGNsYXJpZnkgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGlmIGFueSwgYXJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIG9mIHRoaXMgcGF0Y2guIEtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCwgYW5kIHRoZSBmdW5jdGlvbidzIG92ZXJhbGwgcHVycG9zZSB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTI6NTUuNTA2NjgwMTg2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjUwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY1MDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX292ZXJfbGltaXQ7XFxuMjY1MTpcXHRcXHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xcbjI2NTI6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XFxuMjY1MzpcXHRcXHRib29sIHBhc3NlZF9vb20gPSBmYWxzZTtcXG4yNjU0OlxcdFxcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XFxuMjY1NTpcXHRcXHRib29sIGRyYWluZWQgPSBmYWxzZTtcXG4yNjU2OlxcdFxcdGJvb2wgcmFpc2VkX21heF9ldmVudCA9IGZhbHNlO1xcbjI2NTc6XFx0XFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XFxuMjY1ODpcXHRcXHRib29sIGFsbG93X3NwaW5uaW5nID0gZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZ2ZwX21hc2spO1xcbjI2NTk6XFx0XFx0aW50IHJldCA9IDA7XFxuMjY2MDpcXHRcXG4yNjYxOlxcdHJldHJ5OlxcbjI2NjI6XFx0XFx0aWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSlcXG4yNjYzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjY2NDpcXHRcXG4yNjY1OlxcdFxcdGlmICghYWxsb3dfc3Bpbm5pbmcpXFxuMjY2NjpcXHRcXHRcXHQvKiBBdm9pZCB0aGUgcmVmaWxsIGFuZCBmbHVzaCBvZiB0aGUgb2xkZXIgc3RvY2sgKi9cXG4yNjY3OlxcdFxcdFxcdGJhdGNoID0gbnJfcGFnZXM7XFxuMjY2ODpcXHRcXG4yNjY5OlxcdFxcdHJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XFxuMjY3MDpcXHRcXHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSB8fFxcbjI2NzE6XFx0XFx0ICAgIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtc3csIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpIHtcXG4yNjcyOlxcdFxcdFxcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSlcXG4yNjczOlxcdFxcdFxcdFxcdGdvdG8gZG9uZV9yZXN0b2NrO1xcbjI2NzQ6XFx0XFx0XFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcXG4yNjc1OlxcdFxcdFxcdFxcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBiYXRjaCk7XFxuMjY3NjpcXHRcXHRcXHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbW9yeSk7XFxuMjY3NzpcXHRcXHR9IGVsc2Uge1xcbjI2Nzg6XFx0XFx0XFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XFxuMjY3OTpcXHRcXHRcXHRyZWNsYWltX29wdGlvbnMgXFx1MDAyNj0gfk1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XFxuMjY4MDpcXHRcXHR9XFxuMjY4MTpcXHRcXG4yNjgyOlxcdFxcdGlmIChiYXRjaCBcXHUwMDNlIG5yX3BhZ2VzKSB7XFxuMjY4MzpcXHRcXHRcXHRiYXRjaCA9IG5yX3BhZ2VzO1xcbjI2ODQ6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yNjg1OlxcdFxcdH1cXG4yNjg2OlxcdFxcbjI2ODc6XFx0XFx0LypcXG4yNjg4OlxcdFxcdCAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvXFxuMjY4OTpcXHRcXHQgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksXFxuMjY5MDpcXHRcXHQgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrXFxuMjY5MTpcXHRcXHQgKiB1bmRlciB0aGUgbGltaXQgb3ZlciB0cmlnZ2VyaW5nIE9PTSBraWxscyBpbiB0aGVzZSBjYXNlcy5cXG4yNjkyOlxcdFxcdCAqL1xcbjI2OTM6XFx0XFx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpKVxcbjI2OTQ6XFx0XFx0XFx0Z290byBmb3JjZTtcXG4yNjk1OlxcdFxcbjI2OTY6XFx0XFx0aWYgKHVubGlrZWx5KHRhc2tfaW5fbWVtY2dfb29tKGN1cnJlbnQpKSlcXG4yNjk3OlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjY5ODpcXHRcXG4yNjk5OlxcdFxcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxcbjI3MDA6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzAxOlxcdFxcbjI3MDI6XFx0XFx0LypcXG4yNzAzOlxcdFxcdCAqIE9PTSB2aWN0aW0gc3RpbGwgbmVlZHMgdG8gY2hhcmdlIG1lbW9yeSB0byBleGl0LiBPT00gcmVhcGVyIHNob3VsZFxcbjI3MDQ6XFx0XFx0ICogaGVscCBidXQgaXQgbWlnaHQgZmFpbCBvbiBtbWFwX2xvY2sgY29udGVudGlvbi4gSWYgdGhlIHZpY3RpbSBpcyBhXFxuMjcwNTpcXHRcXHQgKiBsYXJnZSB0aHJlYWQgZ3JvdXAgdGhlbiBhbGwgZXhpdGluZyB0aHJlYWRzIG1pZ2h0IGNvbXBldGUgb24gb29tX2xvY2tcXG4yNzA2OlxcdFxcdCAqIGp1c3QgdG8gbGVhcm4gdGhhdCB0aGVyZSBpcyBub3RoaW5nIHJlYWxseSBraWxsYWJsZSBhbnltb3JlLiBCYWlsXFxuMjcwNzpcXHRcXHQgKiBvdXQgZWFybHkgYW5kIGZhaWwgdGhlIGNoYXJnZSB0byBleHBlZGl0ZSB0aGVpciBleGl0LiBUaGV5IGFyZVxcbjI3MDg6XFx0XFx0ICogY29uc2lkZXJlZCBmdWxseSByZWNsYWltZWQgYnkgdGhlIG9vbSByZWFwZXIgYW5kIHRoZXkgc2hvdWxkbid0XFxuMjcwOTpcXHRcXHQgKiBjb250cmlidXRlIGZ1cnRoZXIgY2hhcmdlcy5cXG4yNzEwOlxcdFxcdCAqL1xcbjI3MTE6XFx0XFx0aWYgKHRza19pc19vb21fdmljdGltKGN1cnJlbnQpIFxcdTAwMjZcXHUwMDI2XFxuMjcxMjpcXHRcXHQgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIGN1cnJlbnQtXFx1MDAzZXNpZ25hbC1cXHUwMDNlb29tX21tKSlcXG4yNzEzOlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjcxNDpcXHRcXG4yNzE1OlxcdFxcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcXG4yNzE2OlxcdFxcdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xcbjI3MTc6XFx0XFxuMjcxODpcXHRcXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxuMjcxOTpcXHRcXHRucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcyxcXG4yNzIwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTtcXG4yNzIxOlxcdFxcdHBzaV9tZW1zdGFsbF9sZWF2ZShcXHUwMDI2cGZsYWdzKTtcXG4yNzIyOlxcdFxcbjI3MjM6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfbWFyZ2luKG1lbV9vdmVyX2xpbWl0KSBcXHUwMDNlPSBucl9wYWdlcylcXG4yNzI0OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjcyNTpcXHRcXG4yNzI2OlxcdFxcdGlmICghZHJhaW5lZCkge1xcbjI3Mjc6XFx0XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTtcXG4yNzI4OlxcdFxcdFxcdGRyYWluZWQgPSB0cnVlO1xcbjI3Mjk6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yNzMwOlxcdFxcdH1cXG4yNzMxOlxcdFxcbjI3MzI6XFx0XFx0aWYgKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfTk9SRVRSWSlcXG4yNzMzOlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjczNDpcXHRcXHQvKlxcbjI3MzU6XFx0XFx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cXG4yNzM2OlxcdFxcdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXFxuMjczNzpcXHRcXHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cXG4yNzM4OlxcdFxcdCAqXFxuMjczOTpcXHRcXHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxcbjI3NDA6XFx0XFx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcXG4yNzQxOlxcdFxcdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cXG4yNzQyOlxcdFxcdCAqL1xcbjI3NDM6XFx0XFx0aWYgKG5yX3JlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiBucl9wYWdlcyBcXHUwMDNjPSAoMSBcXHUwMDNjXFx1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikpXFxuMjc0NDpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjI3NDU6XFx0XFxuMjc0NjpcXHRcXHRpZiAobnJfcmV0cmllcy0tKVxcbjI3NDc6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yNzQ4OlxcdFxcbjI3NDk6XFx0XFx0aWYgKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfUkVUUllfTUFZRkFJTClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTI6NTUuNTA2OTc3NTY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY5NDg3NjQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGJhc2VkIG9uIHlvdXIgaW5zdHJ1Y3Rpb25zOlxuXG4qKkRpdmluZyBpbnRvIG1tL21lbWNvbnRyb2wuYyoqXG5cbk9rYXksIGxldCdzIHpvb20gaW4gb24gbW0vbWVtY29udHJvbC5jLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDI3NTAgdG8gMjg2MC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIHNlY3Rpb24gaGFuZGxlcy4uLiBsaWtlbHkgc29tZSBjcml0aWNhbCBhc3BlY3Qgb2YgbWVtb3J5IGNvbnRyb2wgb3IgYWNjb3VudGluZy4gR2l2ZW4gdGhlIGNvbnRleHQsIEknbSBndWVzc2luZyB0aGlzIG1pZ2h0IGludm9sdmUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gY2dyb3VwIG1lbW9yeSBsaW1pdHMgYW5kIHBvdGVudGlhbGx5IHRoZSBwYWdlIHJlY2xhaW0gcHJvY2Vzcywgb3IgcGVyaGFwcyBob3cgdGhlIG1lbW9yeSBjb250cm9sbGVyIHJlYWN0cyB0byBoaWdoLW1lbW9yeSBwcmVzc3VyZSB3aXRoaW4gYSBzcGVjaWZpYyBjZ3JvdXAuIEknbSBtZW50YWxseSBwYXJzaW5nIHRoZSBsaWtlbHkgZnVuY3Rpb24gY2FsbHMgYW5kIGRhdGEgc3RydWN0dXJlcyBJJ2xsIGVuY291bnRlcjogYG1lbV9jZ3JvdXBfYCwgYHBhZ2VfY291bnRlcl9gLCB0aGUgdXN1YWwgc3VzcGVjdHMuIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZSB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gYSBzcGVjaWZpYyBzY2VuYXJpbyBJJ20gdHJvdWJsZXNob290aW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvZiByYWNlIGNvbmRpdGlvbnMsIHN1YnRsZSBvdmVyZmxvdyBpc3N1ZXMsIG9yIHBlcmhhcHMgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9ucyBjb3VsZCBiZSBhcHBsaWVkLiBUaGlzIHNlY3Rpb24gaXMgcHJvYmFibHkgaW52b2x2ZWQgd2l0aCBhbGxvY2F0aW5nIG1lbW9yeSwgY2hlY2tpbmcgbGltaXRzLCByZWxlYXNpbmcgbWVtb3J5LCB3aGljaCBhcmUgcHJldHR5IGNyaXRpY2FsIHBpZWNlcyBvZiBjb2RlIGZvciBhbnkgbWVtb3J5IGNvbnRyb2xsZXIuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIGFjdHVhbGx5IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUyOjU5LjIwMTg1NjM3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc1MCxcbiAgXCJMaW5lQ291bnRcIjogMTEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3NTA6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzUxOlxcdFxcbjI3NTI6XFx0XFx0LyogQXZvaWQgZW5kbGVzcyBsb29wIGZvciB0YXNrcyBieXBhc3NlZCBieSB0aGUgb29tIGtpbGxlciAqL1xcbjI3NTM6XFx0XFx0aWYgKHBhc3NlZF9vb20gXFx1MDAyNlxcdTAwMjYgdGFza19pc19keWluZygpKVxcbjI3NTQ6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzU1OlxcdFxcbjI3NTY6XFx0XFx0LypcXG4yNzU3OlxcdFxcdCAqIGtlZXAgcmV0cnlpbmcgYXMgbG9uZyBhcyB0aGUgbWVtY2cgb29tIGtpbGxlciBpcyBhYmxlIHRvIG1ha2VcXG4yNzU4OlxcdFxcdCAqIGEgZm9yd2FyZCBwcm9ncmVzcyBvciBieXBhc3MgdGhlIGNoYXJnZSBpZiB0aGUgb29tIGtpbGxlclxcbjI3NTk6XFx0XFx0ICogY291bGRuJ3QgbWFrZSBhbnkgcHJvZ3Jlc3MuXFxuMjc2MDpcXHRcXHQgKi9cXG4yNzYxOlxcdFxcdGlmIChtZW1fY2dyb3VwX29vbShtZW1fb3Zlcl9saW1pdCwgZ2ZwX21hc2ssXFxuMjc2MjpcXHRcXHRcXHRcXHQgICBnZXRfb3JkZXIobnJfcGFnZXMgKiBQQUdFX1NJWkUpKSkge1xcbjI3NjM6XFx0XFx0XFx0cGFzc2VkX29vbSA9IHRydWU7XFxuMjc2NDpcXHRcXHRcXHRucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG4yNzY1OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjc2NjpcXHRcXHR9XFxuMjc2NzpcXHRub21lbTpcXG4yNzY4OlxcdFxcdC8qXFxuMjc2OTpcXHRcXHQgKiBNZW1jZyBkb2Vzbid0IGhhdmUgYSBkZWRpY2F0ZWQgcmVzZXJ2ZSBmb3IgYXRvbWljXFxuMjc3MDpcXHRcXHQgKiBhbGxvY2F0aW9ucy4gQnV0IGxpa2UgdGhlIGdsb2JhbCBhdG9taWMgcG9vbCwgd2UgbmVlZCB0b1xcbjI3NzE6XFx0XFx0ICogcHV0IHRoZSBidXJkZW4gb2YgcmVjbGFpbSBvbiByZWd1bGFyIGFsbG9jYXRpb24gcmVxdWVzdHNcXG4yNzcyOlxcdFxcdCAqIGFuZCBsZXQgdGhlc2UgZ28gdGhyb3VnaCBhcyBwcml2aWxlZ2VkIGFsbG9jYXRpb25zLlxcbjI3NzM6XFx0XFx0ICovXFxuMjc3NDpcXHRcXHRpZiAoIShnZnBfbWFzayBcXHUwMDI2IChfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKSkpIHtcXG4yNzc1OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMjc3NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4yNzc3OlxcdFxcdH1cXG4yNzc4OlxcdGZvcmNlOlxcbjI3Nzk6XFx0XFx0LypcXG4yNzgwOlxcdFxcdCAqIFRoZSBhbGxvY2F0aW9uIGVpdGhlciBjYW4ndCBmYWlsIG9yIHdpbGwgbGVhZCB0byBtb3JlIG1lbW9yeVxcbjI3ODE6XFx0XFx0ICogYmVpbmcgZnJlZWQgdmVyeSBzb29uLiAgQWxsb3cgbWVtb3J5IHVzYWdlIGdvIG92ZXIgdGhlIGxpbWl0XFxuMjc4MjpcXHRcXHQgKiB0ZW1wb3JhcmlseSBieSBmb3JjZSBjaGFyZ2luZyBpdC5cXG4yNzgzOlxcdFxcdCAqL1xcbjI3ODQ6XFx0XFx0cGFnZV9jb3VudGVyX2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgbnJfcGFnZXMpO1xcbjI3ODU6XFx0XFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcXG4yNzg2OlxcdFxcdFxcdHBhZ2VfY291bnRlcl9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgbnJfcGFnZXMpO1xcbjI3ODc6XFx0XFxuMjc4ODpcXHRvdXQ6XFxuMjc4OTpcXHRcXHQvKlxcbjI3OTA6XFx0XFx0ICogRG9uJ3QgZm9yZ2V0IHRvIHJhaXNlIGEgTUVNQ0dfTUFYIGV2ZW50IGZvciBmb3JjZWQgb3IgcmVqZWN0ZWRcXG4yNzkxOlxcdFxcdCAqIHJlcXVlc3RzLlxcbjI3OTI6XFx0XFx0ICovXFxuMjc5MzpcXHRcXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXFxuMjc5NDpcXHRcXHRcXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XFxuMjc5NTpcXHRcXG4yNzk2OlxcdFxcdHJldHVybiByZXQ7XFxuMjc5NzpcXHRcXG4yNzk4OlxcdGRvbmVfcmVzdG9jazpcXG4yNzk5OlxcdFxcdGlmIChiYXRjaCBcXHUwMDNlIG5yX3BhZ2VzKVxcbjI4MDA6XFx0XFx0XFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBiYXRjaCAtIG5yX3BhZ2VzKTtcXG4yODAxOlxcdFxcbjI4MDI6XFx0XFx0LypcXG4yODAzOlxcdFxcdCAqIElmIHRoZSBoaWVyYXJjaHkgaXMgYWJvdmUgdGhlIG5vcm1hbCBjb25zdW1wdGlvbiByYW5nZSwgc2NoZWR1bGVcXG4yODA0OlxcdFxcdCAqIHJlY2xhaW0gb24gcmV0dXJuaW5nIHRvIHVzZXJsYW5kLiAgV2UgY2FuIHBlcmZvcm0gcmVjbGFpbSBoZXJlXFxuMjgwNTpcXHRcXHQgKiBpZiBfX0dGUF9SRUNMQUlNIGJ1dCBsZXQncyBhbHdheXMgcHVudCBmb3Igc2ltcGxpY2l0eSBhbmQgc28gdGhhdFxcbjI4MDY6XFx0XFx0ICogR0ZQX0tFUk5FTCBjYW4gY29uc2lzdGVudGx5IGJlIHVzZWQgZHVyaW5nIHJlY2xhaW0uICBAbWVtY2cgaXNcXG4yODA3OlxcdFxcdCAqIG5vdCByZWNvcmRlZCBhcyBpdCBtb3N0IGxpa2VseSBtYXRjaGVzIGN1cnJlbnQncyBhbmQgd29uJ3RcXG4yODA4OlxcdFxcdCAqIGNoYW5nZSBpbiB0aGUgbWVhbnRpbWUuICBBcyBoaWdoIGxpbWl0IGlzIGNoZWNrZWQgYWdhaW4gYmVmb3JlXFxuMjgwOTpcXHRcXHQgKiByZWNsYWltLCB0aGUgY29zdCBvZiBtaXNtYXRjaCBpcyBuZWdsaWdpYmxlLlxcbjI4MTA6XFx0XFx0ICovXFxuMjgxMTpcXHRcXHRkbyB7XFxuMjgxMjpcXHRcXHRcXHRib29sIG1lbV9oaWdoLCBzd2FwX2hpZ2g7XFxuMjgxMzpcXHRcXG4yODE0OlxcdFxcdFxcdG1lbV9oaWdoID0gcGFnZV9jb3VudGVyX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnkpIFxcdTAwM2VcXG4yODE1OlxcdFxcdFxcdFxcdFJFQURfT05DRShtZW1jZy1cXHUwMDNlbWVtb3J5LmhpZ2gpO1xcbjI4MTY6XFx0XFx0XFx0c3dhcF9oaWdoID0gcGFnZV9jb3VudGVyX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwKSBcXHUwMDNlXFxuMjgxNzpcXHRcXHRcXHRcXHRSRUFEX09OQ0UobWVtY2ctXFx1MDAzZXN3YXAuaGlnaCk7XFxuMjgxODpcXHRcXG4yODE5OlxcdFxcdFxcdC8qIERvbid0IGJvdGhlciBhIHJhbmRvbSBpbnRlcnJ1cHRlZCB0YXNrICovXFxuMjgyMDpcXHRcXHRcXHRpZiAoIWluX3Rhc2soKSkge1xcbjI4MjE6XFx0XFx0XFx0XFx0aWYgKG1lbV9oaWdoKSB7XFxuMjgyMjpcXHRcXHRcXHRcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZtZW1jZy1cXHUwMDNlaGlnaF93b3JrKTtcXG4yODIzOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4MjQ6XFx0XFx0XFx0XFx0fVxcbjI4MjU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjgyNjpcXHRcXHRcXHR9XFxuMjgyNzpcXHRcXG4yODI4OlxcdFxcdFxcdGlmIChtZW1faGlnaCB8fCBzd2FwX2hpZ2gpIHtcXG4yODI5OlxcdFxcdFxcdFxcdC8qXFxuMjgzMDpcXHRcXHRcXHRcXHQgKiBUaGUgYWxsb2NhdGluZyB0YXNrcyBpbiB0aGlzIGNncm91cCB3aWxsIG5lZWQgdG8gZG9cXG4yODMxOlxcdFxcdFxcdFxcdCAqIHJlY2xhaW0gb3IgYmUgdGhyb3R0bGVkIHRvIHByZXZlbnQgZnVydGhlciBncm93dGhcXG4yODMyOlxcdFxcdFxcdFxcdCAqIG9mIHRoZSBtZW1vcnkgb3Igc3dhcCBmb290cHJpbnRzLlxcbjI4MzM6XFx0XFx0XFx0XFx0ICpcXG4yODM0OlxcdFxcdFxcdFxcdCAqIFRhcmdldCBzb21lIGJlc3QtZWZmb3J0IGZhaXJuZXNzIGJldHdlZW4gdGhlIHRhc2tzLFxcbjI4MzU6XFx0XFx0XFx0XFx0ICogYW5kIGRpc3RyaWJ1dGUgcmVjbGFpbSB3b3JrIGFuZCBkZWxheSBwZW5hbHRpZXNcXG4yODM2OlxcdFxcdFxcdFxcdCAqIGJhc2VkIG9uIGhvdyBtdWNoIGVhY2ggdGFzayBpcyBhY3R1YWxseSBhbGxvY2F0aW5nLlxcbjI4Mzc6XFx0XFx0XFx0XFx0ICovXFxuMjgzODpcXHRcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2ggKz0gYmF0Y2g7XFxuMjgzOTpcXHRcXHRcXHRcXHRzZXRfbm90aWZ5X3Jlc3VtZShjdXJyZW50KTtcXG4yODQwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4NDE6XFx0XFx0XFx0fVxcbjI4NDI6XFx0XFx0fSB3aGlsZSAoKG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSk7XFxuMjg0MzpcXHRcXG4yODQ0OlxcdFxcdC8qXFxuMjg0NTpcXHRcXHQgKiBSZWNsYWltIGlzIHNldCB1cCBhYm92ZSB0byBiZSBjYWxsZWQgZnJvbSB0aGUgdXNlcmxhbmRcXG4yODQ2OlxcdFxcdCAqIHJldHVybiBwYXRoLiBCdXQgYWxzbyBhdHRlbXB0IHN5bmNocm9ub3VzIHJlY2xhaW0gdG8gYXZvaWRcXG4yODQ3OlxcdFxcdCAqIGV4Y2Vzc2l2ZSBvdmVycnVuIHdoaWxlIHRoZSB0YXNrIGlzIHN0aWxsIGluc2lkZSB0aGVcXG4yODQ4OlxcdFxcdCAqIGtlcm5lbC4gSWYgdGhpcyBpcyBzdWNjZXNzZnVsLCB0aGUgcmV0dXJuIHBhdGggd2lsbCBzZWUgaXRcXG4yODQ5OlxcdFxcdCAqIHdoZW4gaXQgcmVjaGVja3MgdGhlIG92ZXJhZ2UgYW5kIHNpbXBseSBiYWlsIG91dC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTI6NTkuMjAyMTQ3NDQ4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU4NTgxOTgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCdzIGZ1enotd29ydGh5LiBJdCdzIGEgY2hhbmdlIGluIHRoZSBgdHJ5X2NoYXJnZV9tZW1jZ2AgZnVuY3Rpb24uIEJlZm9yZSwgaWYgYW4gYWxsb2NhdGlvbiBmYWlsZWQgKHJldHVybmVkIC1FTk9NRU0pICphbmQqIGAhcmFpc2VkX21heF9ldmVudGAgKHdoaWNoIHdvdWxkIGhhdmUgcHJldmVudGVkIHRoZSBNRU1DR19NQVggZXZlbnQgZnJvbSBiZWluZyByYWlzZWQpLCB0aGUgZnVuY3Rpb24gd291bGQgcmV0dXJuIC1FTk9NRU0gZGlyZWN0bHkgd2l0aG91dCByYWlzaW5nIHRoZSBgTUVNQ0dfTUFYYCBldmVudC4gTm93LCBpdCBzZWVtcyB0aGF0IGV2ZW4gb24gYSAtRU5PTUVNIHJldHVybiwgaXQgKmFsd2F5cyoganVtcHMgdG8gYW4gYG91dDpgIGxhYmVsLCBhbmQgdGhlbiBjb25kaXRpb25hbGx5IHJhaXNlcyB0aGF0IGV2ZW50LlxuXG5UaGUgY3JpdGljYWwgY2hhbmdlIGlzIHRoYXQgbm93IHdlIGFyZSByYWlzaW5nIHRoZSBgTUVNQ0dfTUFYYCBldmVudCBldmVuIHdoZW4gYSByZWd1bGFyIGFsbG9jYXRpb24gZmFpbHMgKHdoZW4gYCFnZnBfbWFzayBcdTAwMjYgKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpYCksIHdoZXJlYXMgYmVmb3JlIGl0IHdvdWxkIG9ubHkgYmUgcmFpc2VkIGZvciBmb3JjZWQgYWxsb2NhdGlvbnMuICBUaGlzIGNvdWxkIGhhdmUgaW50ZXJlc3RpbmcgaW1wbGljYXRpb25zLiBJcyB0aGlzIGEgY2hhbmdlIHRvIGVycm9yIGhhbmRsaW5nPyBUbyB1c2VyLXZpc2libGUgbm90aWZpY2F0aW9ucz9cblxuR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHF1aWNrbHkgY29uc2lkZXIgdGhlIGNyaXRlcmlhIGZvciBcIldvcnRoRnV6emluZy5cIiBUaGlzIHBhdGNoIGNsZWFybHkgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyBhIGNyaXRpY2FsIGNvZGUgcGF0aCwgc28gSSBjYW4gYWxyZWFkeSBydWxlIG91dCB0aGUgY3JpdGVyaWEgdGhhdCB3b3VsZCBwcmV2ZW50IGZ1enppbmcsIGxpa2UgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIHVucmVhY2hhYmxlIGNvZGUsIGV0Yy5cblxuTm93LCBhIGtleSBxdWVzdGlvbiBhcmlzZXM6IHdoYXQncyB0aGUgYmVoYXZpb3Igb2YgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YD8gRG9lcyBgbWVtX292ZXJfbGltaXRgIGhhdmUgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBzdGF0ZSwgYW5kIGlzIHRoaXMgbmV3IHBhdGggYSB2dWxuZXJhYmlsaXR5PyBNeSBzZWFyY2ggaW1tZWRpYXRlbHkgZm9jdXNlcyBvbiBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIHRvIGdldCBhIHByZWNpc2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhIG1vZGlmaWNhdGlvbiB0byBtZW1vcnkgZXZlbnQgY291bnRlciBiZWhhdmlvciwgb3IgaXMgdGhpcyBhIG5ldyBtZW1vcnkgZXZlbnQgdHJpZ2dlcmVkPyBUaGlzIGluZm9ybWF0aW9uIHdpbGwgZGV0ZXJtaW5lIHRoZSByaXNrIGFuZCB0aGUgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzYzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MDQuNzg3OTcwOTI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MzAzNTE1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZ19tZW1vcnlfZXZlbnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9OTk3PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tZW1jZ19ldmVudF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTAwMzp2b2lkIF9fbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMDA0LVxcdFxcdFxcdCAgZW51bSBtZW1jZ19tZW1vcnlfZXZlbnQgZXZlbnQsIGJvb2wgYWxsb3dfc3Bpbm5pbmcpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTAwNj1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDgte1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEwMDk6XFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIGV2ZW50LCB0cnVlKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMDEwLX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xODgwPXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xODk4LVxcbm1tL21lbWNvbnRyb2wuYzoxODk5OnZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy0xOTAwLVxcdFxcdFxcdCAgZW51bSBtZW1jZ19tZW1vcnlfZXZlbnQgZXZlbnQsIGJvb2wgYWxsb3dfc3Bpbm5pbmcpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTkyNy19XFxubW0vbWVtY29udHJvbC5jOjE5Mjg6RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jZ19tZW1vcnlfZXZlbnQpO1xcbm1tL21lbWNvbnRyb2wuYy0xOTI5LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI2NDU9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjcxNC1cXG5tbS9tZW1jb250cm9sLmM6MjcxNTpcXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XFxubW0vbWVtY29udHJvbC5jLTI3MTYtXFx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjc5My1cXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXFxubW0vbWVtY29udHJvbC5jOjI3OTQ6XFx0XFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xcbm1tL21lbWNvbnRyb2wuYy0yNzk1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1MzowNy4zMTgzMjc2NzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODgwOTUwODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgQ29udHJvbCBFdmVudHMqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGZ1bmN0aW9uIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbWVtb3J5IGNvbnRyb2wgZXZlbnRzIGFyZSBoYW5kbGVkIGF0IHRoZSBsb3dlc3QgbGV2ZWwuIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBvdmVyYWxsIHN5c3RlbSBtZW1vcnkgbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IHdoZW4gaXQgY29tZXMgdG8gY2dyb3VwIG1lbW9yeSBsaW1pdHMgYW5kIGhvdyB0aGV5J3JlIGVuZm9yY2VkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBldmVudHMgdHJpZ2dlciBhbnkgbmVjZXNzYXJ5IGFjdGlvbnMgb3IgYWRqdXN0bWVudHMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgcmVzb3VyY2UgbGltaXRzIGFyZSBjb3JyZWN0bHkgYXBwbGllZCwgYW5kIGlmIGFueSBvcHRpbWlzYXRpb24gY2FuIGJlIG1hZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1MzoxMS4xOTkyODMwODNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg1NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODk1OlxcdFxcdH1cXG4xODk2OlxcdFxcdHJldHVybiBtYXg7XFxuMTg5NzpcXHR9XFxuMTg5ODpcXHRcXG4xODk5OlxcdHZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbjE5MDA6XFx0XFx0XFx0XFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZylcXG4xOTAxOlxcdHtcXG4xOTAyOlxcdFxcdGJvb2wgc3dhcF9ldmVudCA9IGV2ZW50ID09IE1FTUNHX1NXQVBfSElHSCB8fCBldmVudCA9PSBNRU1DR19TV0FQX01BWCB8fFxcbjE5MDM6XFx0XFx0XFx0XFx0ICBldmVudCA9PSBNRU1DR19TV0FQX0ZBSUw7XFxuMTkwNDpcXHRcXG4xOTA1OlxcdFxcdC8qIEZvciBub3cgb25seSBNRU1DR19NQVggY2FuIGhhcHBlbiB3aXRoICFhbGxvd19zcGlubmluZyBjb250ZXh0LiAqL1xcbjE5MDY6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFhbGxvd19zcGlubmluZyBcXHUwMDI2XFx1MDAyNiBldmVudCAhPSBNRU1DR19NQVgpO1xcbjE5MDc6XFx0XFxuMTkwODpcXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfZXZlbnRzX2xvY2FsW2V2ZW50XSk7XFxuMTkwOTpcXHRcXHRpZiAoIXN3YXBfZXZlbnQgXFx1MDAyNlxcdTAwMjYgYWxsb3dfc3Bpbm5pbmcpXFxuMTkxMDpcXHRcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm1lbWNnLVxcdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XFxuMTkxMTpcXHRcXG4xOTEyOlxcdFxcdGRvIHtcXG4xOTEzOlxcdFxcdFxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNbZXZlbnRdKTtcXG4xOTE0OlxcdFxcdFxcdGlmIChhbGxvd19zcGlubmluZykge1xcbjE5MTU6XFx0XFx0XFx0XFx0aWYgKHN3YXBfZXZlbnQpXFxuMTkxNjpcXHRcXHRcXHRcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwX2V2ZW50c19maWxlKTtcXG4xOTE3OlxcdFxcdFxcdFxcdGVsc2VcXG4xOTE4OlxcdFxcdFxcdFxcdFxcdGNncm91cF9maWxlX25vdGlmeShcXHUwMDI2bWVtY2ctXFx1MDAzZWV2ZW50c19maWxlKTtcXG4xOTE5OlxcdFxcdFxcdH1cXG4xOTIwOlxcdFxcbjE5MjE6XFx0XFx0XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbjE5MjI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTkyMzpcXHRcXHRcXHRpZiAoY2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfTE9DQUxfRVZFTlRTKVxcbjE5MjQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTkyNTpcXHRcXHR9IHdoaWxlICgobWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpIFxcdTAwMjZcXHUwMDI2XFxuMTkyNjpcXHRcXHRcXHQgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpO1xcbjE5Mjc6XFx0fVxcbjE5Mjg6XFx0RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jZ19tZW1vcnlfZXZlbnQpO1xcbjE5Mjk6XFx0XFxuMTkzMDpcXHRzdGF0aWMgYm9vbCBtZW1fY2dyb3VwX291dF9vZl9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4xOTMxOlxcdFxcdFxcdFxcdFxcdCAgICAgaW50IG9yZGVyKVxcbjE5MzI6XFx0e1xcbjE5MzM6XFx0XFx0c3RydWN0IG9vbV9jb250cm9sIG9jID0ge1xcbjE5MzQ6XFx0XFx0XFx0LnpvbmVsaXN0ID0gTlVMTCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MTEuMTk5Njc5OTQzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDUzMjU5NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYHRyeV9jaGFyZ2VgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgcmVsYXRlZCB0byBgdHJ5X2NoYXJnZWAuIEZpcnN0LCBJJ20gdGhpbmtpbmcsIGxldCdzIHRyYWNlIHRoaXMgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIGNhbGwgc2l0ZXMgYW5kIHdoaWNoIGVudHJ5IHBvaW50cyB0cmlnZ2VyIGl0LiBLbm93aW5nIHRoZSB1cHN0cmVhbSBjb250ZXh0IGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgb3B0aW1pemF0aW9uIGhlcmUuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgdGFyZ2V0ZWQgc2VhcmNoIGZvciB0aGUgZnVuY3Rpb24gaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQgZmlsZSBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGJlZ2luLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjb250cm9sIGdyb3Vwcy4gSG9wZWZ1bGx5LCBhIGdyZXAgd2lsbCBnZXQgbWUgdGhlIGluZm9ybWF0aW9uIEknbSBsb29raW5nIGZvciBxdWlja2x5LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE4NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MTMuMTQ1MDA4MzE3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTgwNDA0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiX2Nncm91cC5jPTI1Nj1zdGF0aWMgaW50IF9faHVnZXRsYl9jZ3JvdXBfY2hhcmdlX2Nncm91cChpbnQgaWR4LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy0yNzQtXFxubW0vaHVnZXRsYl9jZ3JvdXAuYzoyNzU6XFx0aWYgKCFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXG5tbS9odWdldGxiX2Nncm91cC5jLTI3Ni1cXHRcXHQgICAgX19odWdldGxiX2Nncm91cF9jb3VudGVyX2Zyb21fY2dyb3VwKGhfY2csIGlkeCwgcnN2ZCksXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjU0MT1ib29sIG1lbWNnMV9jaGFyZ2Vfc2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjU0NS1cXG5tbS9tZW1jb250cm9sLXYxLmM6MjU0NjpcXHRpZiAocGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2V0Y3BtZW0sIG5yX3BhZ2VzLCBcXHUwMDI2ZmFpbCkpIHtcXG5tbS9tZW1jb250cm9sLXYxLmMtMjU0Ny1cXHRcXHRtZW1jZy1cXHUwMDNldGNwbWVtX3ByZXNzdXJlID0gMDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNTE4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGN1bGF0ZV9oaWdoX2RlbGF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTUxLSAqIFJlY2xhaW1zIG1lbW9yeSBvdmVyIHRoZSBoaWdoIGxpbWl0LiBDYWxsZWQgZGlyZWN0bHkgZnJvbVxcbm1tL21lbWNvbnRyb2wuYzoyNTUyOiAqIHRyeV9jaGFyZ2UoKSAoY29udGV4dCBwZXJtaXR0aW5nKSwgYXMgd2VsbCBhcyBmcm9tIHRoZSB1c2VybGFuZFxcbm1tL21lbWNvbnRyb2wuYy0yNTUzLSAqIHJldHVybiBwYXRoIHdoZXJlIHJlY2xhaW0gaXMgYWx3YXlzIGFibGUgdG8gYmxvY2suXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjU1NT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NDQtXFxubW0vbWVtY29udHJvbC5jOjI2NDU6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI2NDYtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNjcwLVxcdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XFxubW0vbWVtY29udHJvbC5jOjI2NzE6XFx0ICAgIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtc3csIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpIHtcXG5tbS9tZW1jb250cm9sLmM6MjY3MjpcXHRcXHRpZiAocGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpXFxubW0vbWVtY29udHJvbC5jLTI2NzMtXFx0XFx0XFx0Z290byBkb25lX3Jlc3RvY2s7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjg1Ny1cXG5tbS9tZW1jb250cm9sLmM6Mjg1ODpzdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI4NTktXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjg2My1cXG5tbS9tZW1jb250cm9sLmM6Mjg2NDpcXHRyZXR1cm4gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMjg2NS19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzE1Nz1zdGF0aWMgaW50IG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMxNjQtXFxubW0vbWVtY29udHJvbC5jOjMxNjU6XFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTMxNjYtXFx0aWYgKHJldClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjA1PXN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjEzLVxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG5tbS9tZW1jb250cm9sLmM6NTIxNDpcXHRcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTUyMTUtXFx0aWYgKHJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU2MjU9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NjMyLVxcbm1tL21lbWNvbnRyb2wuYzo1NjMzOlxcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcXG5tbS9tZW1jb250cm9sLmMtNTYzNC1cXHRcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjkxPWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTcyOC0vKipcXG5tbS9tZW1jb250cm9sLmM6NTcyOTogKiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwIC0gdHJ5IGNoYXJnaW5nIHN3YXAgc3BhY2UgZm9yIGEgZm9saW9cXG5tbS9tZW1jb250cm9sLmMtNTczMC0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzM1LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1NzM2OmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWVtY29udHJvbC5jLTU3Mzcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3NjQtXFx0aWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtY29udHJvbC5jOjU3NjU6XFx0ICAgICFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIG5yX3BhZ2VzLCBcXHUwMDI2Y291bnRlcikpIHtcXG5tbS9tZW1jb250cm9sLmMtNTc2Ni1cXHRcXHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jPTc2PXZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtMTA5LS8qKlxcbm1tL3BhZ2VfY291bnRlci5jOjExMDogKiBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZSAtIHRyeSB0byBoaWVyYXJjaGljYWxseSBjaGFyZ2UgcGFnZXNcXG5tbS9wYWdlX2NvdW50ZXIuYy0xMTEtICogQGNvdW50ZXI6IGNvdW50ZXJcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jLTExNy0gKi9cXG5tbS9wYWdlX2NvdW50ZXIuYzoxMTg6Ym9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxcbm1tL3BhZ2VfY291bnRlci5jLTExOS1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9wYWdlX2NvdW50ZXIuYz0xOTc9aW50IHBhZ2VfY291bnRlcl9zZXRfbWF4KHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS9wYWdlX2NvdW50ZXIuYy0yMDgtXFx0XFx0ICogYW5kIGFmdGVyLCBzbyB0aGUgcmVhZC1zd2FwLXJlYWQgaXMgb3JkZXJlZCBhbmRcXG5tbS9wYWdlX2NvdW50ZXIuYzoyMDk6XFx0XFx0ICogZW5zdXJlcyBjb2hlcmVuY3kgd2l0aCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZSgpOlxcbm1tL3BhZ2VfY291bnRlci5jLTIxMC1cXHRcXHQgKiB0aGF0IGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBjb3VudCBiZWZvcmUgY2hlY2tpbmdcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTc0MD1pbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xNzc3LVxcdC8qIE5lZWQgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgYWxsb2NhdGlvbiBmYWlsZWQsIGZvciBNRU1DR19TV0FQX0ZBSUwuICovXFxubW0vc3dhcGZpbGUuYzoxNzc4OlxcdGlmICh1bmxpa2VseShtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChmb2xpbykpKVxcbm1tL3N3YXBmaWxlLmMtMTc3OS1cXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUzOjEzLjIzNDgxNzE4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwMjU4MzcwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQ2hhcmdlIE1lY2hhbmlzbXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBtZW1vcnkgYWNjb3VudGluZyBidXNpbmVzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNoYXJnZSBmdW5jdGlvbnMgd29yay4gRmlyc3QsIEknbGwgdHJhY2UgdGhlIGNhbGxzIHRvIGBjaGFyZ2VfbWVtY2dgLCBgbWVtX2Nncm91cF9jaGFyZ2VgLCBgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXNgLCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGhpZXJhcmNoeSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgZmxvdy4gQWZ0ZXIgdGhhdCBJJ2xsIGxvb2sgZm9yIGBtZW1fY2dyb3VwX2NoYXJnZWAgYW5kIGB0cnlfY2hhcmdlYCBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCB0byBzZWUgaG93IHRoZXkncmUgZGVmaW5lZCBhbmQgdGhlIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggbWVtb3J5IGNncm91cHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjaGFyZ2luZyBwcm9jZXNzIGFuZCBhbnkgcG90ZW50aWFsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1MzoxNy4yNjA2NTc3MjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMDMyODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfY2hhcmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTYzMT1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY0MC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NDE6aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjQyLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY0My0vKipcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NDQ6ICogbWVtX2Nncm91cF9jaGFyZ2UgLSBDaGFyZ2UgYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gdG8gYSBjZ3JvdXAuXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjQ1LSAqIEBmb2xpbzogRm9saW8gdG8gY2hhcmdlLlxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjU2LSAqL1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY1NzpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NTgtXFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2MS1cXHRcXHRyZXR1cm4gMDtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjI6XFx0cmV0dXJuIF9fbWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIG1tLCBnZnApO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2My19XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY0LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2NTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2Ni1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY3MD12b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY3NS0gKlxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY3NjogKiBVbmNoYXJnZSBhIGZvbGlvIHByZXZpb3VzbHkgY2hhcmdlZCB3aXRoIG1lbV9jZ3JvdXBfY2hhcmdlKCkuXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjc3LSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTE0Nz1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1MzpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTQtXFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTgtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE1OTpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTYwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MTcuMzMzNjk2NzkxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwMTE5MDAzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2s6XG5cbioqSW52ZXN0aWdhdGluZyBgbW0vbWVtY29udHJvbC5jYCBLY29uZmlnIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gYG1tL21lbWNvbnRyb2wuY2AuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0IGZpbGUgaXMgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gSXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgdGhhdCBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlLCBhbmQgb2Z0ZW4sIGl0J2xsIGluY2x1ZGUgZGVwZW5kZW5jaWVzLCBvciBhdCBsZWFzdCBoaW50cyBhYm91dCB3aGljaCBLY29uZmlnIG9wdGlvbnMgZ292ZXJuIGl0cyBpbmNsdXNpb24gb3IgYmVoYXZpb3IuIEknbSBleHBlY3RpbmcgdG8gc2VlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBpbiB0aGUgYE1ha2VmaWxlYCBpdHNlbGYsIG9yIHBlcmhhcHMgc29tZSByZWZlcmVuY2VzIHRvIG90aGVyIEtjb25maWctcmVsYXRlZCBmaWxlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHByZXR0eSBnb29kIHN0YXJ0aW5nIHBvaW50LiBGcm9tIHRoZXJlLCBJIGNhbiBkcmlsbCBkb3duIGRlZXBlciBhcyBuZWVkZWQsIGJ1dCB0aGUgYE1ha2VmaWxlYCBpcyB1c3VhbGx5IHRoZSBtb3N0IGV4cGVkaWVudCBzdGFydGluZyBsb2NhdGlvbi4gSSdtIGFudGljaXBhdGluZyBmaW5kaW5nIHNvbWUgYCNpZmRlZmAgYmxvY2tzIG9yIHNvbWV0aGluZyBzaW1pbGFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA3MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUzOjIyLjM0NTU5OTE1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgzNTU1MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY29udHJvbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjk6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTEwMz1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cXG5tbS9NYWtlZmlsZToxMDQ6b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICs9IGJwZl9tZW1jb250cm9sLm9cXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MjIuNDQzOTcyNDk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyOTAyNzU3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipDaGVja2luZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgTWVtb3J5IENvbnRyb2wgR3JvdXBzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBsb29raW5nIGluIHRoZSByaWdodCBwbGFjZSBmb3IgdGhlIG1lbW9yeSBjZ3JvdXAgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byBgaW5pdC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBkZWZpbml0aW9ucyBmb3IgYWxsIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGBDT05GSUdfTUVNQ0dgLiBUaGlzIHNob3VsZCBiZSB0aGUgZmxhZyBvciBvcHRpb24gdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIG1lbW9yeSBjb250cm9sIGdyb3VwcyB3aXRoaW4gdGhpcyBidWlsZC4gTWFrZXMgc2Vuc2UgdG8gc3RhcnQgdGhlcmUsIHRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NzEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1MzoyNi43MzQyNTA5NjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NzAxNjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg0LVxcbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA5NS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwMC1cXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTEwMi1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwNy1cXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwOS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1MzoyNi44MzM5NjAzMzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ5MDM0Nzk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBDR3JvdXBzIExhbmRzY2FwZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgTUVNQ0cgKG1lbW9yeSBjZ3JvdXApIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGV4cG9zZWQsIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIGJ1aWxkIGEgYmV0dGVyIG1lbnRhbCBtYXAgb2YgdGhlIGF2YWlsYWJsZSBzd2l0Y2hlcywgYW5kIHdoaWNoIG9uZXMgaGF2ZSB0byBiZSBlbmFibGVkIGluIG9yZGVyIHRvIGdldCB0aGUgZnVsbCBmZWF0dXJlLXNldCBleHBvc2VkLiBJJ20gYWxzbyByZWFsbHkgaG9waW5nIHRoZXJlJ3Mgc29tZXRoaW5nIG5ldyBvciBpbnRlcmVzdGluZyBpbiB0aGVyZSB0aGF0IEkgbWlzc2VkIGR1cmluZyBteSBsYXN0IHBhc3Mgb3ZlciB0aGlzIGFyZWEuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUzOjI5LjMyNDMxMTE0N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcXG4xMDgxOlxcdFxcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cXG4xMDgyOlxcdFxcbjEwODM6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA4NDpcXHRcXG4xMDg1OlxcdGNvbmZpZyBNRU1DR1xcbjEwODY6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4NzpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4ODpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODk6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwOTA6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA5MTpcXHRcXHRoZWxwXFxuMTA5MjpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDkzOlxcdFxcbjEwOTQ6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDk1OlxcdFxcdGJvb2xcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDk4OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk5OlxcdFxcdGRlZmF1bHQgeVxcbjExMDA6XFx0XFxuMTEwMTpcXHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4xMTAyOlxcdFxcdGJvb2xcXG4xMTAzOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTA0OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMTA1OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjExMDY6XFx0XFx0ZGVmYXVsdCB5XFxuMTEwNzpcXHRcXG4xMTA4OlxcdGNvbmZpZyBNRU1DR19WMVxcbjExMDk6XFx0XFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMTEwOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTExOlxcdFxcdGRlZmF1bHQgblxcbjExMTI6XFx0XFx0aGVscFxcbjExMTM6XFx0XFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcXG4xMTE0OlxcdFxcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MjkuMzI0NDMxMjA3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTM4NTUzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBwYXJlbnQgbWVudSBmb3IgYGNvbmZpZyBNRU1DR2AuIFRoaXMgbWVhbnMgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gbGl2ZXMgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtIHN0cnVjdHVyZS4gVW5kZXJzdGFuZGluZyBpdHMgbG9jYXRpb24gaXMgY3J1Y2lhbDsgaXQgaGVscHMgbWUgZ3Jhc3AgaXRzIGNvbnRleHQsIHdoYXQgb3RoZXIgb3B0aW9ucyBpdCdzIHJlbGF0ZWQgdG8sIGFuZCBwb3RlbnRpYWxseSwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBvcmlnaW5zLCB0aGUgYnJhbmNoZXMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gdHJlZSB0aGF0IGxlYWQgdG8gaXQuIEl0J3MgbGlrZSBuYXZpZ2F0aW5nIGEgY29tcGxleCBmaWxlIHN5c3RlbSBvciBhIGRlZXBseSBuZXN0ZWQgY29kZSBzdHJ1Y3R1cmUg4oCTIHlvdSBjYW4ndCB1bmRlcnN0YW5kIGEgc2luZ2xlIGZpbGUvY29uZmlndXJhdGlvbiB2YWx1ZSBpbiBpc29sYXRpb247IHlvdSBuZWVkIHRvIGtub3cgd2hlcmUgaXQgcmVzaWRlcyB3aXRoaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUgaG93IEkgY2FuIGRpc2NvdmVyIHRoZSBwYXJlbnQgbWVudSBhbmQgd2hhdCBpbnNpZ2h0cyBpdCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY5NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MzEuMjc4MjkwNDI5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzcyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA0MDpcXHRcXHQgIHRoZSBzYW1lIHByb2Nlc3Mgb250byBhIHNpbmdsZSBMYXN0IExldmVsIENhY2hlIChMTEMpIGRvbWFpbiB3aGVuXFxuMTA0MTpcXHRcXHQgIHBvc3NpYmxlLiBUaGlzIGltcHJvdmVzIGNhY2hlIGxvY2FsaXR5IGJ5IGtlZXBpbmcgdGFza3MgdGhhdCBzaGFyZVxcbjEwNDI6XFx0XFx0ICByZXNvdXJjZXMgd2l0aGluIHRoZSBzYW1lIGNhY2hlIGRvbWFpbiwgcmVkdWNpbmcgY2FjaGUgbWlzc2VzIGFuZFxcbjEwNDM6XFx0XFx0ICBsb3dlcmluZyBkYXRhIGFjY2VzcyBsYXRlbmN5LlxcbjEwNDQ6XFx0XFxuMTA0NTpcXHRjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXFxuMTA0NjpcXHRcXHRib29sIFxcXCJBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudFxcXCJcXG4xMDQ3OlxcdFxcdGRlZmF1bHQgeVxcbjEwNDg6XFx0XFx0ZGVwZW5kcyBvbiBOVU1BX0JBTEFOQ0lOR1xcbjEwNDk6XFx0XFx0aGVscFxcbjEwNTA6XFx0XFx0ICBJZiBzZXQsIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyB3aWxsIGJlIGVuYWJsZWQgaWYgcnVubmluZyBvbiBhIE5VTUFcXG4xMDUxOlxcdFxcdCAgbWFjaGluZS5cXG4xMDUyOlxcdFxcbjEwNTM6XFx0Y29uZmlnIFNMQUJfT0JKX0VYVFxcbjEwNTQ6XFx0XFx0Ym9vbFxcbjEwNTU6XFx0XFxuMTA1NjpcXHRtZW51Y29uZmlnIENHUk9VUFNcXG4xMDU3OlxcdFxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG4xMDU4OlxcdFxcdHNlbGVjdCBLRVJORlNcXG4xMDU5OlxcdFxcdGhlbHBcXG4xMDYwOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBncm91cGluZyBzZXRzIG9mIHByb2Nlc3NlcyB0b2dldGhlciwgZm9yXFxuMTA2MTpcXHRcXHQgIHVzZSB3aXRoIHByb2Nlc3MgY29udHJvbCBzdWJzeXN0ZW1zIHN1Y2ggYXMgQ3B1c2V0cywgQ0ZTLCBtZW1vcnlcXG4xMDYyOlxcdFxcdCAgY29udHJvbHMgb3IgZGV2aWNlIGlzb2xhdGlvbi5cXG4xMDYzOlxcdFxcdCAgU2VlXFxuMTA2NDpcXHRcXHRcXHQtIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMucnN0XFx0KENGUylcXG4xMDY1OlxcdFxcdFxcdC0gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvIChmZWF0dXJlcyBmb3IgZ3JvdXBpbmcsIGlzb2xhdGlvblxcbjEwNjY6XFx0XFx0XFx0XFx0XFx0XFx0ICBhbmQgcmVzb3VyY2UgY29udHJvbClcXG4xMDY3OlxcdFxcbjEwNjg6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA2OTpcXHRcXG4xMDcwOlxcdGlmIENHUk9VUFNcXG4xMDcxOlxcdFxcbjEwNzI6XFx0Y29uZmlnIFBBR0VfQ09VTlRFUlxcbjEwNzM6XFx0XFx0Ym9vbFxcbjEwNzQ6XFx0XFxuMTA3NTpcXHRjb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4xMDc2OlxcdFxcdGJvb2wgXFxcIkZhdm9yIGR5bmFtaWMgbW9kaWZpY2F0aW9uIGxhdGVuY3kgcmVkdWN0aW9uIGJ5IGRlZmF1bHRcXFwiXFxuMTA3NzpcXHRcXHRoZWxwXFxuMTA3ODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFxcXCJmYXZvcmR5bm1vZHNcXFwiIG1vdW50IG9wdGlvbiBieSBkZWZhdWx0XFxuMTA3OTpcXHRcXHQgIHdoaWNoIHJlZHVjZXMgdGhlIGxhdGVuY2llcyBvZiBkeW5hbWljIGNncm91cCBtb2RpZmljYXRpb25zIHN1Y2hcXG4xMDgwOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA4MTpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwODQ6XFx0XFxuMTA4NTpcXHRjb25maWcgTUVNQ0dcXG4xMDg2OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODc6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODg6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDg5OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MzEuMjc4NDc2OTA5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5ODI3MjcxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IENHUk9VUCBDaGFyZ2luZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYE1FTUNHYCBjb2RlLCBzcGVjaWZpY2FsbHkgdW5kZXIgdGhlIGBpZiBDR1JPVVBTYCBjb25kaXRpb25hbC4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGNoYXJnaW5nIG1lY2hhbmlzbXMuIEknbSBzdGFydGluZyBieSBsb29raW5nIGF0IGZvY3VzIHN5bWJvbHMgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSBjaGFuZ2VzIGFyZSBoYXBwZW5pbmcuIEkgY2FuIHNlZSB0aGUgZnVuY3Rpb24gZGlyZWN0bHkgbW9kaWZpZWQgaXMgdGhlIHN0YXRpYyBgdHJ5X2NoYXJnZV9tZW1jZ2AuXG5cbk5vdywgbGV0J3MgZXhwbG9yZSBob3cgaXQncyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBJdCBsb29rcyBsaWtlIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBjYWxsZWQgZnJvbSBhIGZldyBwbGFjZXMuIEkgY2FuIHNlZSB0aGF0IGBfX21lbV9jZ3JvdXBfY2hhcmdlYCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCBhcmUgZGVmaW5pdGVseSBjYWxsaW5nIHRoaXMgZGlyZWN0bHkuIEkgYWxzbyBzZWUgYF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBgLCB3aGljaCBkb2Vzbid0IGRpcmVjdGx5IGNhbGwgaXQgYnV0IGluc3RlYWQgdXNlcyBgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2VgLiBBbmQgaXQgYXBwZWFycyB0aGF0IGBfX21lbWNnX21lbW9yeV9ldmVudGAgaXMgY2FsbGVkIGJ5IGB0cnlfY2hhcmdlX21lbWNnYCBpdHNlbGYuIEknbSBhbHNvIHNlZWluZyBgdHJ5X2NoYXJnZWAgaXMgZGVmaW5lZCBhcyBzdGF0aWMgaW5saW5lLCB3aGljaCBpcyB1c2VmdWwgdG8gbm90ZS5cblxuTmV4dCwgSSBuZWVkIHRvIGJyb2FkZW4gbXkgc2NvcGUgYW5kIGxvb2sgYXQgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2AgcmVsYXRlZCB0byBtZW1vcnkgY2hhcmdpbmcgaW4gZ2VuZXJhbC4gSSd2ZSBhbHJlYWR5IG5vdGVkIGBfX21lbV9jZ3JvdXBfY2hhcmdlYCwgYW5kIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAsIGJ1dCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBfX21lbWNnX21lbW9yeV9ldmVudGAuIEknbSBnb2luZyB0byBzY2FuIHRoZSByZXN0IG9mIGBtbS9tZW1jb250cm9sLmNgIGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zIG9yIGVudHJ5IHBvaW50cyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjA3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MzUuMjYxMjA3MzA5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjkwOTU4NzAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmNoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUzOjM1LjUzMDMxMDA5OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODIyMzU1NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgdHJ5X2NoYXJnZV9tZW1jZ2AgQ2FsbHMqKlxuXG5Pa2F5LCBzbyBJIHdhbnQgdG8gZ2V0IGEgaGFuZGxlIG9uIGFsbCB0aGUgcGxhY2VzIGluIGBtbS9tZW1jb250cm9sLmNgIHdoZXJlIGB0cnlfY2hhcmdlX21lbWNnYCBpcyBpbnZva2VkLiBUaGlzIGZ1bmN0aW9uIGlzIGZ1bmRhbWVudGFsIHRvIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBhbmQgY29udHJvbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgc2l0ZXMgdG8gZnVsbHkgZ3Jhc3AgaG93IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCByZWNsYWltIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgY2dyb3VwIGhpZXJhcmNoeS4gS25vd2luZyB0aGUgY2FsbCBsb2NhdGlvbnMgd2lsbCBoZWxwIG1lIHNlZSB0aGUgZmxvdyBvZiBhbGxvY2F0aW9uIHJlcXVlc3RzIHRocm91Z2ggdGhlIHN5c3RlbSBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBhY2NvdW50aW5nIGVycm9ycy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggZGlmZmVyZW50IG1lbW9yeSBhbGxvY2F0aW9uIHBhdGhzLCBsaWtlIHBhZ2UgZmF1bHRzLCBzbGFiIGFsbG9jYXRpb25zLCBhbmQgZGlyZWN0IHJlY2xhaW0gYXR0ZW1wdHMuIEknbGwgbmVlZCB0byBjb25zaWRlciBhbnkgc3VidGxldGllcyByZWdhcmRpbmcgdGhlIGxvY2sgb3JkZXJpbmcgaW4gdGhvc2UgY2FsbCBzaXRlcywgdG9vLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGVhY2ggY2FsbCwgZXNwZWNpYWxseSB0aGUgY2FsbGVyJ3MgYXJndW1lbnRzLCBpcyBjcnVjaWFsLiBUaGlzIHdpbGwgaGlnaGxpZ2h0IHdoZXJlIG1lbW9yeSBhY2NvdW50aW5nIGRlY2lzaW9ucyBhcmUgbWFkZSBhbmQgaG93IHRoZSBzeXN0ZW0gcmVhY3RzIHRvIG1lbW9yeSBwcmVzc3VyZSB3aXRoaW4gdGhlIGNncm91cCBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjU5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6MzkuMzUyNjY4ODMxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDAxMzg0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfY2hhcmdlX21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjU1NT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NDQtXFxubW0vbWVtY29udHJvbC5jOjI2NDU6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI2NDYtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yODU4PXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODYzLVxcbm1tL21lbWNvbnRyb2wuYzoyODY0OlxcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0yODY1LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMTU3PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzE2NC1cXG5tbS9tZW1jb250cm9sLmM6MzE2NTpcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzE2Ni1cXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMDU9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMTMtXFx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxcbm1tL21lbWNvbnRyb2wuYzo1MjE0OlxcdFxcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG5tbS9tZW1jb250cm9sLmMtNTIxNS1cXHRpZiAocmV0KSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTYyNT1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2MzItXFxubW0vbWVtY29udHJvbC5jOjU2MzM6XFx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xcbm1tL21lbWNvbnRyb2wuYy01NjM0LVxcdFxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1MzozOS40MzI2ODczMDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI0OTU0NTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQ2hhcmdlIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBtZW1vcnkgYWNjb3VudGluZyBpcyBoYXBwZW5pbmcgaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgY2dyb3Vwcy4gSSdtIHRoaW5raW5nIGFib3V0IHRyYWNpbmcgdGhlIGNvZGUgcGF0aHMgaW52b2x2ZWQgaW4gbWVtb3J5IGNoYXJnaW5nIG9wZXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciB0aGlzLCB3aGljaCBhcmUgYGNoYXJnZV9tZW1jZ2AgYW5kIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIGNhbGxpbmcgY29udGV4dHMsIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlciwgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkncmUgbWFuaXB1bGF0aW5nLiBUaGlzIHdpbGwgaGVscCBtZSBkZWJ1ZyBhIG1lbW9yeSBsZWFrIGlzc3VlLiBJJ20gc3VzcGVjdGluZyBhIG1pc2NhbGN1bGF0aW9uIG9yIGFuIHVuaW50ZW5kZWQgZG91YmxlLWNoYXJnZS4gVGhpcyBkZXRhaWxlZCBleGFtaW5hdGlvbiB3aWxsIGhlbHAgbWUgZmluZCB0aGUgcm9vdCBjYXVzZSwgYW5kIGZvcm11bGF0ZSBhIHZpYWJsZSBwYXRjaCBvciB3b3JrYXJvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjEwOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUzOjQxLjY4MjIzNjMzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1MjUxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhcmdlX21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjU1NT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NDQtXFxubW0vbWVtY29udHJvbC5jOjI2NDU6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI2NDYtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yODU4PXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODYzLVxcbm1tL21lbWNvbnRyb2wuYzoyODY0OlxcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0yODY1LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMTU3PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzE2NC1cXG5tbS9tZW1jb250cm9sLmM6MzE2NTpcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzE2Ni1cXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxOTA9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMDQtXFxubW0vbWVtY29udHJvbC5jOjUyMDU6c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy01MjA2LVxcdFxcdFxcdGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjEzLVxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG5tbS9tZW1jb250cm9sLmM6NTIxNDpcXHRcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTUyMTUtXFx0aWYgKHJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMjU9aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjMwLVxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XFxubW0vbWVtY29udHJvbC5jOjUyMzE6XFx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcXG5tbS9tZW1jb250cm9sLmMtNTIzMi1cXHRjc3NfcHV0KFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjQ5PWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjYyLVxcbm1tL21lbWNvbnRyb2wuYzo1MjYzOlxcdGlmIChjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApKVxcbm1tL21lbWNvbnRyb2wuYy01MjY0LVxcdFxcdHJldCA9IC1FTk9NRU07XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI4Mz1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyOTctXFxubW0vbWVtY29udHJvbC5jOjUyOTg6XFx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcXG5tbS9tZW1jb250cm9sLmMtNTI5OS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjI1PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTYzMi1cXG5tbS9tZW1jb250cm9sLmM6NTYzMzpcXHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XFxubW0vbWVtY29udHJvbC5jLTU2MzQtXFx0XFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUzOjQxLjc0MTc2NjU3MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjI2NjEzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIEFjY291bnRpbmcgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG1lbW9yeSBjZ3JvdXAgbG9naWMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdpdGggaG93IGFsbG9jYXRpb24gZmFpbHVyZXMgYXJlIGhhbmRsZWQgYWZ0ZXIgdGhpcyBwYXRjaC4gSSdtIG5vdGluZyB0aGUga2V5IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMgYXJlYTogYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBhbmQgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YC4gSSBuZWVkIHRvIGVuc3VyZSBJIGhhdmUgYWxsIG15IGJhc2VzIGNvdmVyZWQuXG5cbkZpcnN0LCBJJ20gdmVyaWZ5aW5nIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zOiBgQ0dST1VQU2AgYW5kIGBNRU1DR2AuIFRoZXkncmUgdGhlIG9idmlvdXMgY2FuZGlkYXRlcywgYW5kIEknbGwgY29uZmlybSB0aGVpciBwcmVzZW5jZSB0byBlbnN1cmUgdGhlIGNvcmUgbWVtY29udHJvbCBjb2RlIGlzIGVuYWJsZWQuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgYG1tL21lbWNvbnRyb2wuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogSXMgdGhpcyBwYXRjaCBmdXp6LXdvcnRoeT8gR2l2ZW4gdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJldHVybiBwYXRoIG9mIGB0cnlfY2hhcmdlX21lbWNnYCB0byB0cmlnZ2VyIGEgYE1FTUNHX01BWGAgZXZlbnQgb24gYWxsb2NhdGlvbiBmYWlsdXJlcywgaXQncyBwcmV0dHkgY2xlYXIgaXQgYWx0ZXJzIGNvcmUgbWVtY2cgYWNjb3VudGluZyBhbmQgZXZlbnQgbm90aWZpY2F0aW9ucy4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIGJvdGggdXNlcnNwYWNlIG1lbW9yeSBjZ3JvdXAgbG9naWMgYW5kIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCAqV29ydGhGdXp6aW5nKiBoYXMgdG8gYmUgYHRydWVgLiBJdCdzIGEgY2xlYXIgY2hhbmdlIGluIGhvdyBtZW1vcnkgcHJlc3N1cmUgaXMgc2lnbmFsZWQuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBkZWZpbmUgdGhlIHNldC1yZXN1bHRzIHBhcmFtZXRlcnMuIEnigJl2ZSBjb25maXJtZWQgYFdvcnRoRnV6emluZ2AgYXMgYHRydWVgLiBJIG5lZWQgdG8gY29uY2lzZWx5IGV4cGxhaW4gdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGNoYW5nZSwgd2hpY2ggSSdsbCBkby4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29uZmlybWVkIGFzIGBbXCJDR1JPVVBTXCIsIFwiTUVNQ0dcIl1gLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyBJIGlkZW50aWZpZWQgZWFybGllcjogYFtcIl9fbWVtX2Nncm91cF9jaGFyZ2VcIiwgXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCIsIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCIsIFwibWVtX2Nncm91cF9za19jaGFyZ2VcIiwgXCJfX21lbWNnX21lbW9yeV9ldmVudFwiXWAuIE5vdyBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMwMCwiT3V0cHV0VG9rZW5zIjoxNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTM6NDcuOTY4MzgzMDAxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMjY5OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbWVtX2Nncm91cF9jaGFyZ2VcIixcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiLFxuICAgIFwibWVtX2Nncm91cF9za19jaGFyZ2VcIixcbiAgICBcIl9fbWVtY2dfbWVtb3J5X2V2ZW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdHJ5X2NoYXJnZV9tZW1jZygpIHRvIGVuc3VyZSB0aGF0IE1FTUNHX01BWCBldmVudHMgYXJlIHByb3Blcmx5IHJhaXNlZCB2aWEgX19tZW1jZ19tZW1vcnlfZXZlbnQoKSB3aGVuIG1lbW9yeSBjZ3JvdXAgYWxsb2NhdGlvbiByZXF1ZXN0cyBhcmUgcmVqZWN0ZWQgd2l0aCAtRU5PTUVNLiBUaGlzIGFsdGVycyBjb3JlIG1lbWNnIGxpbWl0IGV2ZW50IGhhbmRsaW5nIGFuZCBtZW1vcnkgY2hhcmdpbmcgY29udHJvbCBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19tZW1fY2dyb3VwX2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiLFxuICAgIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCIsXG4gICAgXCJtZW1fY2dyb3VwX3NrX2NoYXJnZVwiLFxuICAgIFwiX19tZW1jZ19tZW1vcnlfZXZlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0cnlfY2hhcmdlX21lbWNnKCkgdG8gZW5zdXJlIHRoYXQgTUVNQ0dfTUFYIGV2ZW50cyBhcmUgcHJvcGVybHkgcmFpc2VkIHZpYSBfX21lbWNnX21lbW9yeV9ldmVudCgpIHdoZW4gbWVtb3J5IGNncm91cCBhbGxvY2F0aW9uIHJlcXVlc3RzIGFyZSByZWplY3RlZCB3aXRoIC1FTk9NRU0uIFRoaXMgYWx0ZXJzIGNvcmUgbWVtY2cgbGltaXQgZXZlbnQgaGFuZGxpbmcgYW5kIG1lbW9yeSBjaGFyZ2luZyBjb250cm9sIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUzOjQ4LjEyMDY2MTM1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTU0NjEzMjAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjUzOjQ4LjEyMTExMTMyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTk1NDU2Nzc1MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0cnlfY2hhcmdlX21lbWNnKClgIGluIGBtbS9tZW1jb250cm9sLmNgIHRvIGVuc3VyZSB0aGF0IGEgYE1FTUNHX01BWGAgbWVtb3J5IGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIGFuIGFsbG9jYXRpb24gY2hhcmdlIHJlcXVlc3QgaXMgcmVqZWN0ZWQgd2l0aCBgLUVOT01FTWAuIEl0IGludHJvZHVjZXMgYSBsb2NhbCB2YXJpYWJsZSBgcmV0ID0gMGAsIHNldHMgYHJldCA9IC1FTk9NRU1gIG9uIGZhaWx1cmUsIGFuZCByb3V0ZXMgdGhyb3VnaCBhIGNvbW1vbiBgb3V0OmAgbGFiZWwgdG8gcmFpc2UgdGhlIGV2ZW50IGJlZm9yZSByZXR1cm5pbmcgYHJldGAuXFxuXFxuS01TQU4gdnMgS0FTQU4gQXBwbGljYWJpbGl0eTpcXG4tIEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgKHN0YWNrL2hlYXAvcGFnZXMpIGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBoZXJlIGRvIG5vdCBpbnZvbHZlIGNvcHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgdG8gdXNlciBzcGFjZSwgYWxsb2NhdGluZyB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYHJldGAsIGByYWlzZWRfbWF4X2V2ZW50YCwgYG1lbV9vdmVyX2xpbWl0YCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuLSBBbnkgcG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGNvbnRyb2wgZmxvdyBidWdzLCBtZW1jZyBldmVudCBjb3VudGVyIG1hbmlwdWxhdGlvbiwgbG9ja2luZyBvciBzdGF0ZSB0cmFja2luZyBkdXJpbmcgbWVtY2cgcmVjbGFpbS9ldmVudHMpIGFyZSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLCBLQVNBTiwgYW5kIExPQ0tERVAuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ2MzY5ODNmNjVjZjEwMmMyOWU0NzQwNmE1ZTgxYThhNTY2YjlmMjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDAyOjUyOjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxMjcxZDM5MGI2MTdlLi4xNThiMDU2MmU4ZGYzIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0yNjU2LDEwICsyNjU2LDExIEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0Ym9vbCByYWlzZWRfbWF4X2V2ZW50ID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIHBmbGFncztcbiBcdGJvb2wgYWxsb3dfc3Bpbm5pbmcgPSBnZnBmbGFnc19hbGxvd19zcGlubmluZyhnZnBfbWFzayk7XG4rXHRpbnQgcmV0ID0gMDtcbiBcbiByZXRyeTpcbiBcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0aWYgKCFhbGxvd19zcGlubmluZylcbiBcdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG5AQCAtMjc3MCwxNiArMjc3MSwxMSBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdCAqIHB1dCB0aGUgYnVyZGVuIG9mIHJlY2xhaW0gb24gcmVndWxhciBhbGxvY2F0aW9uIHJlcXVlc3RzXG4gXHQgKiBhbmQgbGV0IHRoZXNlIGdvIHRocm91Z2ggYXMgcHJpdmlsZWdlZCBhbGxvY2F0aW9ucy5cbiBcdCAqL1xuLVx0aWYgKCEoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKSkpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0aWYgKCEoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKSkpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4gZm9yY2U6XG4tXHQvKlxuLVx0ICogSWYgdGhlIGFsbG9jYXRpb24gaGFzIHRvIGJlIGVuZm9yY2VkLCBkb24ndCBmb3JnZXQgdG8gcmFpc2Vcbi1cdCAqIGEgTUVNQ0dfTUFYIGV2ZW50LlxuLVx0ICovXG4tXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXG4tXHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgYWxsb2NhdGlvbiBlaXRoZXIgY2FuJ3QgZmFpbCBvciB3aWxsIGxlYWQgdG8gbW9yZSBtZW1vcnlcbiBcdCAqIGJlaW5nIGZyZWVkIHZlcnkgc29vbi4gIEFsbG93IG1lbW9yeSB1c2FnZSBnbyBvdmVyIHRoZSBsaW1pdFxuQEAgLTI3ODksNyArMjc4NSwxNSBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXG4gXHRcdHBhZ2VfY291bnRlcl9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIG5yX3BhZ2VzKTtcbiBcbi1cdHJldHVybiAwO1xuK291dDpcbitcdC8qXG4rXHQgKiBEb24ndCBmb3JnZXQgdG8gcmFpc2UgYSBNRU1DR19NQVggZXZlbnQgZm9yIGZvcmNlZCBvciByZWplY3RlZFxuK1x0ICogcmVxdWVzdHMuXG4rXHQgKi9cbitcdGlmICghcmFpc2VkX21heF9ldmVudClcbitcdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xuK1xuK1x0cmV0dXJuIHJldDtcbiBcbiBkb25lX3Jlc3RvY2s6XG4gXHRpZiAoYmF0Y2ggXHUwMDNlIG5yX3BhZ2VzKVxuQEAgLTI4NDgsNyArMjg1Miw3IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0ICAgICEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcbiBcdFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1Mzo0OC4xMjExMTI1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjUzMDk0NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHVzZXIgd2FudHMgbWUgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW4gdGhlIExpbnV4IGtlcm5lbCBuZWNlc3NpdGF0ZXMgZXh0cmEgc2NydXRpbnkuIEFscmlnaHQsIGxldCdzIGRpdmUgaW4uXG5cblRoZSBwYXRjaCBpdHNlbGYgdGFyZ2V0cyBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdHJ5X2NoYXJnZV9tZW1jZygpYCBmdW5jdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBhbmQgaG93IHRoaXMgcGF0Y2ggbW9kaWZpZXMgaXQuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBvdGVudGlhbCBtZW1vcnktcmVsYXRlZCBpc3N1ZXMgaGVyZS5cblxuSSdsbCByZWFkIHRocm91Z2ggdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDI2NTAtMjg2MCBvZiBgbW0vbWVtY29udHJvbC5jYC4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IHRvb2xzIC0gbW9zdCBsaWtlbHkgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIC0gdG8gZ2V0IHRoaXMgc2VjdGlvbiBsb2FkZWQuIEknbGwgYmUgbG9va2luZyBmb3IgY2hhbmdlcyBpbiBtZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBwb2ludGVyIG1hbmlwdWxhdGlvbiwgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBpbnZvbHZlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoaXMgY29kZSBzZWdtZW50LiBUaGVuIEknbGwgc3RhcnQgdGhpbmtpbmcgbGlrZSBLTVNBTiwgdHJ5aW5nIHRvIGlkZW50aWZ5IGFyZWFzIHdoZXJlIG1lbW9yeSBhY2Nlc3MgdmlvbGF0aW9ucyBjb3VsZCBvY2N1ciB1bmRlciBzcGVjaWZpYywgcGVyaGFwcyB1bnVzdWFsLCBjb25kaXRpb25zLiBEb2VzIHRoZSBwYXRjaCBhbHRlciB0aGUgcGF0aCB0byB0aGUgcG90ZW50aWFsIG1lbW9yeSBlcnJvcnMgb3IgY3JlYXRlIGVudGlyZWx5IG5ldyBwb3NzaWJpbGl0aWVzPyBUaGF0IGlzIHdoYXQgSSBuZWVkIHRvIHdvcmsgb3V0IHRvIGRldGVybWluZSBpZiB0aGlzIHJlcXVpcmVzIGEgc2VwYXJhdGUgZnV6emluZyBzZXNzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjkxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTQ6MDcuNzc0MjEwODQ4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI2NTA6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9vdmVyX2xpbWl0O1xcbjI2NTE6XFx0XFx0c3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjtcXG4yNjUyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkO1xcbjI2NTM6XFx0XFx0Ym9vbCBwYXNzZWRfb29tID0gZmFsc2U7XFxuMjY1NDpcXHRcXHR1bnNpZ25lZCBpbnQgcmVjbGFpbV9vcHRpb25zO1xcbjI2NTU6XFx0XFx0Ym9vbCBkcmFpbmVkID0gZmFsc2U7XFxuMjY1NjpcXHRcXHRib29sIHJhaXNlZF9tYXhfZXZlbnQgPSBmYWxzZTtcXG4yNjU3OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xcbjI2NTg6XFx0XFx0Ym9vbCBhbGxvd19zcGlubmluZyA9IGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKGdmcF9tYXNrKTtcXG4yNjU5OlxcdFxcdGludCByZXQgPSAwO1xcbjI2NjA6XFx0XFxuMjY2MTpcXHRyZXRyeTpcXG4yNjYyOlxcdFxcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXFxuMjY2MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjI2NjQ6XFx0XFxuMjY2NTpcXHRcXHRpZiAoIWFsbG93X3NwaW5uaW5nKVxcbjI2NjY6XFx0XFx0XFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXFxuMjY2NzpcXHRcXHRcXHRiYXRjaCA9IG5yX3BhZ2VzO1xcbjI2Njg6XFx0XFxuMjY2OTpcXHRcXHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xcbjI2NzA6XFx0XFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcXG4yNjcxOlxcdFxcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBiYXRjaCwgXFx1MDAyNmNvdW50ZXIpKSB7XFxuMjY3MjpcXHRcXHRcXHRpZiAocGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpXFxuMjY3MzpcXHRcXHRcXHRcXHRnb3RvIGRvbmVfcmVzdG9jaztcXG4yNjc0OlxcdFxcdFxcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXFxuMjY3NTpcXHRcXHRcXHRcXHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgYmF0Y2gpO1xcbjI2NzY6XFx0XFx0XFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpO1xcbjI2Nzc6XFx0XFx0fSBlbHNlIHtcXG4yNjc4OlxcdFxcdFxcdG1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtc3cpO1xcbjI2Nzk6XFx0XFx0XFx0cmVjbGFpbV9vcHRpb25zIFxcdTAwMjY9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQO1xcbjI2ODA6XFx0XFx0fVxcbjI2ODE6XFx0XFxuMjY4MjpcXHRcXHRpZiAoYmF0Y2ggXFx1MDAzZSBucl9wYWdlcykge1xcbjI2ODM6XFx0XFx0XFx0YmF0Y2ggPSBucl9wYWdlcztcXG4yNjg0OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjY4NTpcXHRcXHR9XFxuMjY4NjpcXHRcXG4yNjg3OlxcdFxcdC8qXFxuMjY4ODpcXHRcXHQgKiBQcmV2ZW50IHVuYm91bmRlZCByZWN1cnNpb24gd2hlbiByZWNsYWltIG9wZXJhdGlvbnMgbmVlZCB0b1xcbjI2ODk6XFx0XFx0ICogYWxsb2NhdGUgbWVtb3J5LiBUaGlzIG1pZ2h0IGV4Y2VlZCB0aGUgbGltaXRzIHRlbXBvcmFyaWx5LFxcbjI2OTA6XFx0XFx0ICogYnV0IHdlIHByZWZlciBmYWNpbGl0YXRpbmcgbWVtb3J5IHJlY2xhaW0gYW5kIGdldHRpbmcgYmFja1xcbjI2OTE6XFx0XFx0ICogdW5kZXIgdGhlIGxpbWl0IG92ZXIgdHJpZ2dlcmluZyBPT00ga2lsbHMgaW4gdGhlc2UgY2FzZXMuXFxuMjY5MjpcXHRcXHQgKi9cXG4yNjkzOlxcdFxcdGlmICh1bmxpa2VseShjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DKSlcXG4yNjk0OlxcdFxcdFxcdGdvdG8gZm9yY2U7XFxuMjY5NTpcXHRcXG4yNjk2OlxcdFxcdGlmICh1bmxpa2VseSh0YXNrX2luX21lbWNnX29vbShjdXJyZW50KSkpXFxuMjY5NzpcXHRcXHRcXHRnb3RvIG5vbWVtO1xcbjI2OTg6XFx0XFxuMjY5OTpcXHRcXHRpZiAoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcXG4yNzAwOlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjcwMTpcXHRcXG4yNzAyOlxcdFxcdC8qXFxuMjcwMzpcXHRcXHQgKiBPT00gdmljdGltIHN0aWxsIG5lZWRzIHRvIGNoYXJnZSBtZW1vcnkgdG8gZXhpdC4gT09NIHJlYXBlciBzaG91bGRcXG4yNzA0OlxcdFxcdCAqIGhlbHAgYnV0IGl0IG1pZ2h0IGZhaWwgb24gbW1hcF9sb2NrIGNvbnRlbnRpb24uIElmIHRoZSB2aWN0aW0gaXMgYVxcbjI3MDU6XFx0XFx0ICogbGFyZ2UgdGhyZWFkIGdyb3VwIHRoZW4gYWxsIGV4aXRpbmcgdGhyZWFkcyBtaWdodCBjb21wZXRlIG9uIG9vbV9sb2NrXFxuMjcwNjpcXHRcXHQgKiBqdXN0IHRvIGxlYXJuIHRoYXQgdGhlcmUgaXMgbm90aGluZyByZWFsbHkga2lsbGFibGUgYW55bW9yZS4gQmFpbFxcbjI3MDc6XFx0XFx0ICogb3V0IGVhcmx5IGFuZCBmYWlsIHRoZSBjaGFyZ2UgdG8gZXhwZWRpdGUgdGhlaXIgZXhpdC4gVGhleSBhcmVcXG4yNzA4OlxcdFxcdCAqIGNvbnNpZGVyZWQgZnVsbHkgcmVjbGFpbWVkIGJ5IHRoZSBvb20gcmVhcGVyIGFuZCB0aGV5IHNob3VsZG4ndFxcbjI3MDk6XFx0XFx0ICogY29udHJpYnV0ZSBmdXJ0aGVyIGNoYXJnZXMuXFxuMjcxMDpcXHRcXHQgKi9cXG4yNzExOlxcdFxcdGlmICh0c2tfaXNfb29tX3ZpY3RpbShjdXJyZW50KSBcXHUwMDI2XFx1MDAyNlxcbjI3MTI6XFx0XFx0ICAgIG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZW9vbV9tbSkpXFxuMjcxMzpcXHRcXHRcXHRnb3RvIG5vbWVtO1xcbjI3MTQ6XFx0XFxuMjcxNTpcXHRcXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XFxuMjcxNjpcXHRcXHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcXG4yNzE3OlxcdFxcbjI3MTg6XFx0XFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbjI3MTk6XFx0XFx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXFxuMjcyMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgZ2ZwX21hc2ssIHJlY2xhaW1fb3B0aW9ucywgTlVMTCk7XFxuMjcyMTpcXHRcXHRwc2lfbWVtc3RhbGxfbGVhdmUoXFx1MDAyNnBmbGFncyk7XFxuMjcyMjpcXHRcXG4yNzIzOlxcdFxcdGlmIChtZW1fY2dyb3VwX21hcmdpbihtZW1fb3Zlcl9saW1pdCkgXFx1MDAzZT0gbnJfcGFnZXMpXFxuMjcyNDpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjI3MjU6XFx0XFxuMjcyNjpcXHRcXHRpZiAoIWRyYWluZWQpIHtcXG4yNzI3OlxcdFxcdFxcdGRyYWluX2FsbF9zdG9jayhtZW1fb3Zlcl9saW1pdCk7XFxuMjcyODpcXHRcXHRcXHRkcmFpbmVkID0gdHJ1ZTtcXG4yNzI5OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjczMDpcXHRcXHR9XFxuMjczMTpcXHRcXG4yNzMyOlxcdFxcdGlmIChnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX05PUkVUUlkpXFxuMjczMzpcXHRcXHRcXHRnb3RvIG5vbWVtO1xcbjI3MzQ6XFx0XFx0LypcXG4yNzM1OlxcdFxcdCAqIEV2ZW4gdGhvdWdoIHRoZSBsaW1pdCBpcyBleGNlZWRlZCBhdCB0aGlzIHBvaW50LCByZWNsYWltXFxuMjczNjpcXHRcXHQgKiBtYXkgaGF2ZSBiZWVuIGFibGUgdG8gZnJlZSBzb21lIHBhZ2VzLiAgUmV0cnkgdGhlIGNoYXJnZVxcbjI3Mzc6XFx0XFx0ICogYmVmb3JlIGtpbGxpbmcgdGhlIHRhc2suXFxuMjczODpcXHRcXHQgKlxcbjI3Mzk6XFx0XFx0ICogT25seSBmb3IgcmVndWxhciBwYWdlcywgdGhvdWdoOiBodWdlIHBhZ2VzIGFyZSByYXRoZXJcXG4yNzQwOlxcdFxcdCAqIHVubGlrZWx5IHRvIHN1Y2NlZWQgc28gY2xvc2UgdG8gdGhlIGxpbWl0LCBhbmQgd2UgZmFsbCBiYWNrXFxuMjc0MTpcXHRcXHQgKiB0byByZWd1bGFyIHBhZ2VzIGFueXdheSBpbiBjYXNlIG9mIGZhaWx1cmUuXFxuMjc0MjpcXHRcXHQgKi9cXG4yNzQzOlxcdFxcdGlmIChucl9yZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgbnJfcGFnZXMgXFx1MDAzYz0gKDEgXFx1MDAzY1xcdTAwM2MgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKVxcbjI3NDQ6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yNzQ1OlxcdFxcbjI3NDY6XFx0XFx0aWYgKG5yX3JldHJpZXMtLSlcXG4yNzQ3OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjc0ODpcXHRcXG4yNzQ5OlxcdFxcdGlmIChnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX1JFVFJZX01BWUZBSUwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjU0OjA3Ljc3NDc1MzUzOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzQwMTE1MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gd2hhdGV2ZXIgZmllbGQgdGhlIG9yaWdpbmFsIHRleHQgcGVydGFpbnMgdG86XG5cbioqRGl2aW5nIERlZXBlcjogRXhwbG9yaW5nIExpbmVzIDI3NTAtMjg2MCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gQmFzZWQgb24gdGhlIGluaXRpYWwgc2NhbiwgSSdtIHRoaW5raW5nIHdlIG5lZWQgYSBtb3JlIGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG1hdGVyaWFsLiBHaXZlbiB0aGUgc2NvcGUgd2UncmUgZGVhbGluZyB3aXRoLCBJIHRoaW5rIGl0J3MgdGltZSB0byB6ZXJvIGluIG9uIGxpbmVzIDI3NTAgdGhyb3VnaCAyODYwLiBUaGlzIHNlY3Rpb24gd2FycmFudHMgY2xvc2VyIGV4YW1pbmF0aW9uLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiB1bmVhcnRoIGZyb20gdGhhdCBwYXJ0aWN1bGFyIHNlZ21lbnQuIEknbSBob3BpbmcgaXQnbGwgcHJvdmlkZSBmdXJ0aGVyIGNsYXJpdHkgb3IgbmV3IGluc2lnaHRzIG9uIHRoZSB0b3BpYyBhdCBoYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjcxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1NDowOS41MTQ4NzI4MzdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3NTA6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzUxOlxcdFxcbjI3NTI6XFx0XFx0LyogQXZvaWQgZW5kbGVzcyBsb29wIGZvciB0YXNrcyBieXBhc3NlZCBieSB0aGUgb29tIGtpbGxlciAqL1xcbjI3NTM6XFx0XFx0aWYgKHBhc3NlZF9vb20gXFx1MDAyNlxcdTAwMjYgdGFza19pc19keWluZygpKVxcbjI3NTQ6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzU1OlxcdFxcbjI3NTY6XFx0XFx0LypcXG4yNzU3OlxcdFxcdCAqIGtlZXAgcmV0cnlpbmcgYXMgbG9uZyBhcyB0aGUgbWVtY2cgb29tIGtpbGxlciBpcyBhYmxlIHRvIG1ha2VcXG4yNzU4OlxcdFxcdCAqIGEgZm9yd2FyZCBwcm9ncmVzcyBvciBieXBhc3MgdGhlIGNoYXJnZSBpZiB0aGUgb29tIGtpbGxlclxcbjI3NTk6XFx0XFx0ICogY291bGRuJ3QgbWFrZSBhbnkgcHJvZ3Jlc3MuXFxuMjc2MDpcXHRcXHQgKi9cXG4yNzYxOlxcdFxcdGlmIChtZW1fY2dyb3VwX29vbShtZW1fb3Zlcl9saW1pdCwgZ2ZwX21hc2ssXFxuMjc2MjpcXHRcXHRcXHRcXHQgICBnZXRfb3JkZXIobnJfcGFnZXMgKiBQQUdFX1NJWkUpKSkge1xcbjI3NjM6XFx0XFx0XFx0cGFzc2VkX29vbSA9IHRydWU7XFxuMjc2NDpcXHRcXHRcXHRucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG4yNzY1OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjc2NjpcXHRcXHR9XFxuMjc2NzpcXHRub21lbTpcXG4yNzY4OlxcdFxcdC8qXFxuMjc2OTpcXHRcXHQgKiBNZW1jZyBkb2Vzbid0IGhhdmUgYSBkZWRpY2F0ZWQgcmVzZXJ2ZSBmb3IgYXRvbWljXFxuMjc3MDpcXHRcXHQgKiBhbGxvY2F0aW9ucy4gQnV0IGxpa2UgdGhlIGdsb2JhbCBhdG9taWMgcG9vbCwgd2UgbmVlZCB0b1xcbjI3NzE6XFx0XFx0ICogcHV0IHRoZSBidXJkZW4gb2YgcmVjbGFpbSBvbiByZWd1bGFyIGFsbG9jYXRpb24gcmVxdWVzdHNcXG4yNzcyOlxcdFxcdCAqIGFuZCBsZXQgdGhlc2UgZ28gdGhyb3VnaCBhcyBwcml2aWxlZ2VkIGFsbG9jYXRpb25zLlxcbjI3NzM6XFx0XFx0ICovXFxuMjc3NDpcXHRcXHRpZiAoIShnZnBfbWFzayBcXHUwMDI2IChfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKSkpIHtcXG4yNzc1OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMjc3NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4yNzc3OlxcdFxcdH1cXG4yNzc4OlxcdGZvcmNlOlxcbjI3Nzk6XFx0XFx0LypcXG4yNzgwOlxcdFxcdCAqIFRoZSBhbGxvY2F0aW9uIGVpdGhlciBjYW4ndCBmYWlsIG9yIHdpbGwgbGVhZCB0byBtb3JlIG1lbW9yeVxcbjI3ODE6XFx0XFx0ICogYmVpbmcgZnJlZWQgdmVyeSBzb29uLiAgQWxsb3cgbWVtb3J5IHVzYWdlIGdvIG92ZXIgdGhlIGxpbWl0XFxuMjc4MjpcXHRcXHQgKiB0ZW1wb3JhcmlseSBieSBmb3JjZSBjaGFyZ2luZyBpdC5cXG4yNzgzOlxcdFxcdCAqL1xcbjI3ODQ6XFx0XFx0cGFnZV9jb3VudGVyX2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgbnJfcGFnZXMpO1xcbjI3ODU6XFx0XFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcXG4yNzg2OlxcdFxcdFxcdHBhZ2VfY291bnRlcl9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgbnJfcGFnZXMpO1xcbjI3ODc6XFx0XFxuMjc4ODpcXHRvdXQ6XFxuMjc4OTpcXHRcXHQvKlxcbjI3OTA6XFx0XFx0ICogRG9uJ3QgZm9yZ2V0IHRvIHJhaXNlIGEgTUVNQ0dfTUFYIGV2ZW50IGZvciBmb3JjZWQgb3IgcmVqZWN0ZWRcXG4yNzkxOlxcdFxcdCAqIHJlcXVlc3RzLlxcbjI3OTI6XFx0XFx0ICovXFxuMjc5MzpcXHRcXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXFxuMjc5NDpcXHRcXHRcXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XFxuMjc5NTpcXHRcXG4yNzk2OlxcdFxcdHJldHVybiByZXQ7XFxuMjc5NzpcXHRcXG4yNzk4OlxcdGRvbmVfcmVzdG9jazpcXG4yNzk5OlxcdFxcdGlmIChiYXRjaCBcXHUwMDNlIG5yX3BhZ2VzKVxcbjI4MDA6XFx0XFx0XFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBiYXRjaCAtIG5yX3BhZ2VzKTtcXG4yODAxOlxcdFxcbjI4MDI6XFx0XFx0LypcXG4yODAzOlxcdFxcdCAqIElmIHRoZSBoaWVyYXJjaHkgaXMgYWJvdmUgdGhlIG5vcm1hbCBjb25zdW1wdGlvbiByYW5nZSwgc2NoZWR1bGVcXG4yODA0OlxcdFxcdCAqIHJlY2xhaW0gb24gcmV0dXJuaW5nIHRvIHVzZXJsYW5kLiAgV2UgY2FuIHBlcmZvcm0gcmVjbGFpbSBoZXJlXFxuMjgwNTpcXHRcXHQgKiBpZiBfX0dGUF9SRUNMQUlNIGJ1dCBsZXQncyBhbHdheXMgcHVudCBmb3Igc2ltcGxpY2l0eSBhbmQgc28gdGhhdFxcbjI4MDY6XFx0XFx0ICogR0ZQX0tFUk5FTCBjYW4gY29uc2lzdGVudGx5IGJlIHVzZWQgZHVyaW5nIHJlY2xhaW0uICBAbWVtY2cgaXNcXG4yODA3OlxcdFxcdCAqIG5vdCByZWNvcmRlZCBhcyBpdCBtb3N0IGxpa2VseSBtYXRjaGVzIGN1cnJlbnQncyBhbmQgd29uJ3RcXG4yODA4OlxcdFxcdCAqIGNoYW5nZSBpbiB0aGUgbWVhbnRpbWUuICBBcyBoaWdoIGxpbWl0IGlzIGNoZWNrZWQgYWdhaW4gYmVmb3JlXFxuMjgwOTpcXHRcXHQgKiByZWNsYWltLCB0aGUgY29zdCBvZiBtaXNtYXRjaCBpcyBuZWdsaWdpYmxlLlxcbjI4MTA6XFx0XFx0ICovXFxuMjgxMTpcXHRcXHRkbyB7XFxuMjgxMjpcXHRcXHRcXHRib29sIG1lbV9oaWdoLCBzd2FwX2hpZ2g7XFxuMjgxMzpcXHRcXG4yODE0OlxcdFxcdFxcdG1lbV9oaWdoID0gcGFnZV9jb3VudGVyX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnkpIFxcdTAwM2VcXG4yODE1OlxcdFxcdFxcdFxcdFJFQURfT05DRShtZW1jZy1cXHUwMDNlbWVtb3J5LmhpZ2gpO1xcbjI4MTY6XFx0XFx0XFx0c3dhcF9oaWdoID0gcGFnZV9jb3VudGVyX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwKSBcXHUwMDNlXFxuMjgxNzpcXHRcXHRcXHRcXHRSRUFEX09OQ0UobWVtY2ctXFx1MDAzZXN3YXAuaGlnaCk7XFxuMjgxODpcXHRcXG4yODE5OlxcdFxcdFxcdC8qIERvbid0IGJvdGhlciBhIHJhbmRvbSBpbnRlcnJ1cHRlZCB0YXNrICovXFxuMjgyMDpcXHRcXHRcXHRpZiAoIWluX3Rhc2soKSkge1xcbjI4MjE6XFx0XFx0XFx0XFx0aWYgKG1lbV9oaWdoKSB7XFxuMjgyMjpcXHRcXHRcXHRcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZtZW1jZy1cXHUwMDNlaGlnaF93b3JrKTtcXG4yODIzOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4MjQ6XFx0XFx0XFx0XFx0fVxcbjI4MjU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjgyNjpcXHRcXHRcXHR9XFxuMjgyNzpcXHRcXG4yODI4OlxcdFxcdFxcdGlmIChtZW1faGlnaCB8fCBzd2FwX2hpZ2gpIHtcXG4yODI5OlxcdFxcdFxcdFxcdC8qXFxuMjgzMDpcXHRcXHRcXHRcXHQgKiBUaGUgYWxsb2NhdGluZyB0YXNrcyBpbiB0aGlzIGNncm91cCB3aWxsIG5lZWQgdG8gZG9cXG4yODMxOlxcdFxcdFxcdFxcdCAqIHJlY2xhaW0gb3IgYmUgdGhyb3R0bGVkIHRvIHByZXZlbnQgZnVydGhlciBncm93dGhcXG4yODMyOlxcdFxcdFxcdFxcdCAqIG9mIHRoZSBtZW1vcnkgb3Igc3dhcCBmb290cHJpbnRzLlxcbjI4MzM6XFx0XFx0XFx0XFx0ICpcXG4yODM0OlxcdFxcdFxcdFxcdCAqIFRhcmdldCBzb21lIGJlc3QtZWZmb3J0IGZhaXJuZXNzIGJldHdlZW4gdGhlIHRhc2tzLFxcbjI4MzU6XFx0XFx0XFx0XFx0ICogYW5kIGRpc3RyaWJ1dGUgcmVjbGFpbSB3b3JrIGFuZCBkZWxheSBwZW5hbHRpZXNcXG4yODM2OlxcdFxcdFxcdFxcdCAqIGJhc2VkIG9uIGhvdyBtdWNoIGVhY2ggdGFzayBpcyBhY3R1YWxseSBhbGxvY2F0aW5nLlxcbjI4Mzc6XFx0XFx0XFx0XFx0ICovXFxuMjgzODpcXHRcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2VtZW1jZ19ucl9wYWdlc19vdmVyX2hpZ2ggKz0gYmF0Y2g7XFxuMjgzOTpcXHRcXHRcXHRcXHRzZXRfbm90aWZ5X3Jlc3VtZShjdXJyZW50KTtcXG4yODQwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjI4NDE6XFx0XFx0XFx0fVxcbjI4NDI6XFx0XFx0fSB3aGlsZSAoKG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSk7XFxuMjg0MzpcXHRcXG4yODQ0OlxcdFxcdC8qXFxuMjg0NTpcXHRcXHQgKiBSZWNsYWltIGlzIHNldCB1cCBhYm92ZSB0byBiZSBjYWxsZWQgZnJvbSB0aGUgdXNlcmxhbmRcXG4yODQ2OlxcdFxcdCAqIHJldHVybiBwYXRoLiBCdXQgYWxzbyBhdHRlbXB0IHN5bmNocm9ub3VzIHJlY2xhaW0gdG8gYXZvaWRcXG4yODQ3OlxcdFxcdCAqIGV4Y2Vzc2l2ZSBvdmVycnVuIHdoaWxlIHRoZSB0YXNrIGlzIHN0aWxsIGluc2lkZSB0aGVcXG4yODQ4OlxcdFxcdCAqIGtlcm5lbC4gSWYgdGhpcyBpcyBzdWNjZXNzZnVsLCB0aGUgcmV0dXJuIHBhdGggd2lsbCBzZWUgaXRcXG4yODQ5OlxcdFxcdCAqIHdoZW4gaXQgcmVjaGVja3MgdGhlIG92ZXJhZ2UgYW5kIHNpbXBseSBiYWlsIG91dC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTQ6MDkuNTE2NTk0MjA3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg1NzE3NjMxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNRU1DR19NQVggRXZlbnQgSGFuZGxpbmcgaW4gYHRyeV9jaGFyZ2VfbWVtY2dgKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCB0aGlzIHBhdGNoLiBJdCBhcHBlYXJzIHRoZSBjb3JlIGNoYW5nZSBjZW50ZXJzIGFyb3VuZCBob3cgdGhlIGBNRU1DR19NQVhgIGV2ZW50IGlzIHJhaXNlZCB3aXRoaW4gdGhlIGB0cnlfY2hhcmdlX21lbWNnYCBmdW5jdGlvbi4gIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBhIHJldHVybiB2YXJpYWJsZSBgcmV0YCBoYXMgYmVlbiBpbnRyb2R1Y2VkIGFuZCB1dGlsaXplZCB0byBoYW5kbGUgYm90aCBzdWNjZXNzZnVsIGFuZCBmYWlsZWQgbWVtb3J5IGNoYXJnZSByZXF1ZXN0cywgYW5kIGFsc28gdG8gZW5zdXJlIHRoZSBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGNhbGwgaXNuJ3QgbWlzc2VkIHVuZGVyIGZhaWx1cmUgY29uZGl0aW9ucy4gUHJldmlvdXNseSwgaXQgc2VlbXMgdGhlIGV2ZW50IG1pZ2h0IGhhdmUgYmVlbiBza2lwcGVkIGlmIGEgcmVjbGFpbSBhdHRlbXB0IHdhcyBieXBhc3NlZCBkdWUgdG8gZmxhZ3Mgb3IgT09NIHNpdHVhdGlvbnMuXG5cblRoZSBtb3RpdmF0aW9uIHNlZW1zIGNsZWFyOiB0byBlbnN1cmUgdGhhdCB0aGUgYE1FTUNHX01BWGAgZXZlbnQgaXMgY29uc2lzdGVudGx5IHJhaXNlZCB3aGVuIGEgbWVtb3J5IGNoYXJnZSByZXF1ZXN0IGZhaWxzLCByZWdhcmRsZXNzIG9mIHRoZSBmYWlsdXJlIHBhdGggKGUuZy4sIGRpcmVjdCBmYWlsdXJlIHZpYSBgIShfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKWAgb3IgdGhyb3VnaCByZWNsYWltIGJ5cGFzcykuICBQcmV2aW91c2x5LCB0aGUgZXZlbnQgd2FzIG9ubHkgcmFpc2VkIGZvciBlbmZvcmNlZCBhbGxvY2F0aW9ucyBvciBkdXJpbmcgcmVjbGFpbSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBtaXNzZWQgZXZlbnRzIGluIHNvbWUgc2NlbmFyaW9zLlxuXG5Ob3csIGEgY3JpdGljYWwgdGhvdWdodDogY291bGQgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gIExldCdzIHNlZS4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgdW5pbml0aWFsaXplZCBkYXRhIGNhbiBsZWFkIHRvIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCBpbmNyZW1lbnRzIGV2ZW50IGNvdW50ZXJzLCB3aGljaCBzaG91bGQgYmUgc2FmZS4gSG93ZXZlciwgdGhlIGBtZW1fb3Zlcl9saW1pdGAgcG9pbnRlciBuZWVkcyBhIGNsb3NlciBsb29rLiBJcyBpdCBwb3NzaWJsZSBmb3IgaXQgdG8gYmUgdXNlZCB1bmluaXRpYWxpemVkP1xuXG5Pa2F5LCBsZXQncyBzdGVwIHRocm91Z2ggdGhlIGxvZ2ljLiAgSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgY2FyZWZ1bGx5LCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgYGdvdG8gbm9tZW1gLCBgZ290byBmb3JjZWAsIGFuZCBgZ290byBvdXRgIHN0YXRlbWVudHMuIFRoZSBpbXBvcnRhbnQgdmFyaWFibGVzIGhlcmUgYXJlIGBtZW1fb3Zlcl9saW1pdGAsIGByYWlzZWRfbWF4X2V2ZW50YCwgYGFsbG93X3NwaW5uaW5nYCwgYW5kIG9mIGNvdXJzZSBgcmV0YC4gTG9va2luZyBhdCB0aGUgY29kZSBhcm91bmQgdGhlIGByZXRyeWAgbGFiZWwsIEkgc2VlIHRoYXQgaWYgYHBhZ2VfY291bnRlcl90cnlfY2hhcmdlYCBzdWNjZWVkcywgdGhlIGZ1bmN0aW9uIGBnb3RvIGRvbmVfcmVzdG9ja2AuIEhvd2V2ZXIsIGlmIGBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZWAgZmFpbHMsIHRoZSBgbWVtX292ZXJfbGltaXRgIHBvaW50ZXIgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQsIGVpdGhlciBhdCBsaW5lIDI2NzYgb3IgMjY3OC4gVGhlIHByb2dyYW0gZWl0aGVyIGdvZXMgdG8gYGZvcmNlYCBvciBgbm9tZW1gICphZnRlciogdGhlIGBtZW1fb3Zlcl9saW1pdGAgcG9pbnRlciBpcyBzZXQuIEFsc28gYHJldGAgaXMgc2V0IHRvIGAwYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbiBhbmQgdGhlbiB0byBgLUVOT01FTWAgaW4gY2FzZSBvZiBmYWlsdXJlLlxuXG5JIGFsc28gaGF2ZSB0byBjaGVjayB0aGF0IG5vIG90aGVyIHBhdGggZXhpc3RzIHRvIGBub21lbWAsIGBmb3JjZWAsIG9yIGBvdXRgIG90aGVyIHRoYW4gdGhyb3VnaCB0aGlzIGNvZGUgcGF0aCwgc28gSSBzaG91bGQgcGVyZm9ybSBhIGZ1bGwgc2VhcmNoIG9mIGBtbS9tZW1jb250cm9sLmNgLlxuXG5CYXNlZCBvbiBteSBhbmFseXNpcywgaXQgc2VlbXMgdGhlIHBhdGNoIGlzIHNhZmUgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBgbWVtX292ZXJfbGltaXRgIGlzIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgdGhlIGV2ZW50IGhhbmRsaW5nIGxvZ2ljIGlzIHRpZ2h0ZW5lZCB1cCB0byBndWFyYW50ZWUgYSBjb25zaXN0ZW50IGBNRU1DR19NQVhgIGV2ZW50IG9uIGZhaWx1cmVzLCB3aGljaCBpcyBhIGdvb2QgdGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTQ6MTguMDg4MzYwOTZaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjMwODYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnb3RvIChub21lbXxmb3JjZXxvdXQpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MTI1OD1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9pdGVyKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTEyOTAtXFx0XFx0ZWxzZSBpZiAocmVjbGFpbS1cXHUwMDNlZ2VuZXJhdGlvbiAhPSBnZW4pXFxubW0vbWVtY29udHJvbC5jOjEyOTE6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbm1tL21lbWNvbnRyb2wuYy0xMjkyLVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE5OTI9c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZ2V0X29vbV9ncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnZpY3RpbSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMDA3LVxcdGlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxcbm1tL21lbWNvbnRyb2wuYzoyMDA4OlxcdFxcdGdvdG8gb3V0O1xcbm1tL21lbWNvbnRyb2wuYy0yMDA5LVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIwMTUtXFx0aWYgKHVubGlrZWx5KCFtZW1fY2dyb3VwX2lzX2Rlc2NlbmRhbnQobWVtY2csIG9vbV9kb21haW4pKSlcXG5tbS9tZW1jb250cm9sLmM6MjAxNjpcXHRcXHRnb3RvIG91dDtcXG5tbS9tZW1jb250cm9sLmMtMjAxNy1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNTU1PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjU3Ny1cXHRpZiAodGFza19pc19keWluZygpKVxcbm1tL21lbWNvbnRyb2wuYzoyNTc4OlxcdFxcdGdvdG8gb3V0O1xcbm1tL21lbWNvbnRyb2wuYy0yNTc5LVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2MTYtXFx0aWYgKHBlbmFsdHlfamlmZmllcyBcXHUwMDNjPSBIWiAvIDEwMClcXG5tbS9tZW1jb250cm9sLmM6MjYxNzpcXHRcXHRnb3RvIG91dDtcXG5tbS9tZW1jb250cm9sLmMtMjYxOC1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNjQ1PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2OTMtXFx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpKVxcbm1tL21lbWNvbnRyb2wuYzoyNjk0OlxcdFxcdGdvdG8gZm9yY2U7XFxubW0vbWVtY29udHJvbC5jLTI2OTUtXFxubW0vbWVtY29udHJvbC5jLTI2OTYtXFx0aWYgKHVubGlrZWx5KHRhc2tfaW5fbWVtY2dfb29tKGN1cnJlbnQpKSlcXG5tbS9tZW1jb250cm9sLmM6MjY5NzpcXHRcXHRnb3RvIG5vbWVtO1xcbm1tL21lbWNvbnRyb2wuYy0yNjk4LVxcbm1tL21lbWNvbnRyb2wuYy0yNjk5LVxcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxcbm1tL21lbWNvbnRyb2wuYzoyNzAwOlxcdFxcdGdvdG8gbm9tZW07XFxubW0vbWVtY29udHJvbC5jLTI3MDEtXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjcxMi1cXHQgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIGN1cnJlbnQtXFx1MDAzZXNpZ25hbC1cXHUwMDNlb29tX21tKSlcXG5tbS9tZW1jb250cm9sLmM6MjcxMzpcXHRcXHRnb3RvIG5vbWVtO1xcbm1tL21lbWNvbnRyb2wuYy0yNzE0LVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI3MzItXFx0aWYgKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfTk9SRVRSWSlcXG5tbS9tZW1jb250cm9sLmM6MjczMzpcXHRcXHRnb3RvIG5vbWVtO1xcbm1tL21lbWNvbnRyb2wuYy0yNzM0LVxcdC8qXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjc0OS1cXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9SRVRSWV9NQVlGQUlMKVxcbm1tL21lbWNvbnRyb2wuYzoyNzUwOlxcdFxcdGdvdG8gbm9tZW07XFxubW0vbWVtY29udHJvbC5jLTI3NTEtXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjc1My1cXHRpZiAocGFzc2VkX29vbSBcXHUwMDI2XFx1MDAyNiB0YXNrX2lzX2R5aW5nKCkpXFxubW0vbWVtY29udHJvbC5jOjI3NTQ6XFx0XFx0Z290byBub21lbTtcXG5tbS9tZW1jb250cm9sLmMtMjc1NS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNzc1LVxcdFxcdHJldCA9IC1FTk9NRU07XFxubW0vbWVtY29udHJvbC5jOjI3NzY6XFx0XFx0Z290byBvdXQ7XFxubW0vbWVtY29udHJvbC5jLTI3NzctXFx0fVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTMxNTc9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTY2LVxcdGlmIChyZXQpXFxubW0vbWVtY29udHJvbC5jOjMxNjc6XFx0XFx0Z290byBvdXQ7XFxubW0vbWVtY29udHJvbC5jLTMxNjgtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzQ1OT1zdGF0aWMgdm9pZCBfX3JlZmlsbF9vYmpfc3RvY2soc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTM0NzEtXFx0XFx0YXRvbWljX2FkZChucl9ieXRlcywgXFx1MDAyNm9iamNnLVxcdTAwM2Vucl9jaGFyZ2VkX2J5dGVzKTtcXG5tbS9tZW1jb250cm9sLmM6MzQ3MjpcXHRcXHRnb3RvIG91dDtcXG5tbS9tZW1jb250cm9sLmMtMzQ3My1cXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDg0Mj1zdGF0aWMgc3NpemVfdCBtZW1vcnlfaGlnaF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDg1OC1cXHRpZiAob2YtXFx1MDAzZWZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX05PTkJMT0NLKVxcbm1tL21lbWNvbnRyb2wuYzo0ODU5OlxcdFxcdGdvdG8gb3V0O1xcbm1tL21lbWNvbnRyb2wuYy00ODYwLVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ5MDE9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDkxNy1cXHRpZiAob2YtXFx1MDAzZWZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX05PTkJMT0NLKVxcbm1tL21lbWNvbnRyb2wuYzo0OTE4OlxcdFxcdGdvdG8gb3V0O1xcbm1tL21lbWNvbnRyb2wuYy00OTE5LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyNDk9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNjAtXFx0XFx0IW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbm1tL21lbWNvbnRyb2wuYzo1MjYxOlxcdFxcdGdvdG8gb3V0O1xcbm1tL21lbWNvbnRyb2wuYy01MjYyLVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU1Njk9dm9pZCBtZW1fY2dyb3VwX3NrX2FsbG9jKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NTgyLVxcdGlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxcbm1tL21lbWNvbnRyb2wuYzo1NTgzOlxcdFxcdGdvdG8gb3V0O1xcbm1tL21lbWNvbnRyb2wuYy01NTg0LVxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSBcXHUwMDI2XFx1MDAyNiAhbWVtY2cxX3RjcG1lbV9hY3RpdmUobWVtY2cpKVxcbm1tL21lbWNvbnRyb2wuYzo1NTg1OlxcdFxcdGdvdG8gb3V0O1xcbm1tL21lbWNvbnRyb2wuYy01NTg2LVxcdGlmIChjc3NfdHJ5Z2V0KFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDI6NTQ6MTguMjIwNjc0MTgxWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxODg0NjkxMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBDaGFyZ2UgTWVjaGFuaXNtcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgY2hhcmdpbmcgYmVoYXZpb3IsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBtZW1jZ2AgKG1lbW9yeSBjb250cm9sIGdyb3VwcykgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc3RhcnQgYnkgaW52ZXN0aWdhdGluZyB0aGUgY2FsbCBncmFwaHMgb2YgdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSSB3YW50IHRvIHNlZSAqd2hvKiBpcyBjYWxsaW5nIGB0cnlfY2hhcmdlX21lbWNnYCBhbmQgYWxzbywgaW1wb3J0YW50bHksIGB0cnlfY2hhcmdlYC4gVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gdXNhZ2UgaXMgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBmbG93IGFuZCB0aGUgcG90ZW50aWFsIHBvaW50cyB3aGVyZSBtZW1vcnkgYWNjb3VudGluZyBhbmQgbGltaXRhdGlvbnMgbWlnaHQgYmUgdHJpZ2dlcmVkLiBTZWVpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBnaXZlIG1lIHRoZSBiZXN0IGluc2lnaHQgaW50byBpdHMgdXNhZ2UuIFdoZXJlIGRvIHRoZXNlIGNoZWNrcyBoYXBwZW4/IFdoYXQga2luZCBvZiBvcGVyYXRpb25zIGFyZSBiZWluZyBwcm90ZWN0ZWQ/IEtub3dpbmcgdGhpcyB3aWxsIHNpZ25pZmljYW50bHkgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCwgcmVjbGFpbWVkLCBhbmQgcG90ZW50aWFsbHkgdGhyb3R0bGVkIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEzMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjU0OjQwLjEwNTM2ODU3MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzNDg2MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X2NoYXJnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTI1MTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2hpZ2hfZGVsYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI1NTEtICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tXFxubW0vbWVtY29udHJvbC5jOjI1NTI6ICogdHJ5X2NoYXJnZSgpIChjb250ZXh0IHBlcm1pdHRpbmcpLCBhcyB3ZWxsIGFzIGZyb20gdGhlIHVzZXJsYW5kXFxubW0vbWVtY29udHJvbC5jLTI1NTMtICogcmV0dXJuIHBhdGggd2hlcmUgcmVjbGFpbSBpcyBhbHdheXMgYWJsZSB0byBibG9jay5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNTU1PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY0NC1cXG5tbS9tZW1jb250cm9sLmM6MjY0NTpzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9tZW1jb250cm9sLmMtMjY0Ni1cXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NzAtXFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcXG5tbS9tZW1jb250cm9sLmM6MjY3MTpcXHQgICAgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSkge1xcbm1tL21lbWNvbnRyb2wuYzoyNjcyOlxcdFxcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSlcXG5tbS9tZW1jb250cm9sLmMtMjY3My1cXHRcXHRcXHRnb3RvIGRvbmVfcmVzdG9jaztcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODU3LVxcbm1tL21lbWNvbnRyb2wuYzoyODU4OnN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9tZW1jb250cm9sLmMtMjg1OS1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODYzLVxcbm1tL21lbWNvbnRyb2wuYzoyODY0OlxcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0yODY1LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMTU3PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzE2NC1cXG5tbS9tZW1jb250cm9sLmM6MzE2NTpcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzE2Ni1cXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMDU9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMTMtXFx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxcbm1tL21lbWNvbnRyb2wuYzo1MjE0OlxcdFxcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG5tbS9tZW1jb250cm9sLmMtNTIxNS1cXHRpZiAocmV0KSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTYyNT1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2MzItXFxubW0vbWVtY29udHJvbC5jOjU2MzM6XFx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xcbm1tL21lbWNvbnRyb2wuYy01NjM0LVxcdFxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU2OTE9aW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzI4LS8qKlxcbm1tL21lbWNvbnRyb2wuYzo1NzI5OiAqIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAgLSB0cnkgY2hhcmdpbmcgc3dhcCBzcGFjZSBmb3IgYSBmb2xpb1xcbm1tL21lbWNvbnRyb2wuYy01NzMwLSAqIEBmb2xpbzogZm9saW8gYmVpbmcgYWRkZWQgdG8gc3dhcFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3MzUtICovXFxubW0vbWVtY29udHJvbC5jOjU3MzY6aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9tZW1jb250cm9sLmMtNTczNy17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc2NC1cXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1jb250cm9sLmM6NTc2NTpcXHQgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFxcdTAwMjZjb3VudGVyKSkge1xcbm1tL21lbWNvbnRyb2wuYy01NzY2LVxcdFxcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwMjo1NDo0MC4xNTk3MjQ2NDdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzUwNzAzOTQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBBcHBsaWNhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBwYXRjaCB0byBgdHJ5X2NoYXJnZV9tZW1jZ2AuIFRoZSBrZXkgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB0aGUgcmV0dXJuIHBhdGggYW5kIGVycm9yIGhhbmRsaW5nLiBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGEgYHJldGAgdmFyaWFibGUgdG8gY2FwdHVyZSB0aGUgcmV0dXJuIHZhbHVlLCB0aGUgY29uc29saWRhdGlvbiBvZiB0aGUgcmV0dXJuIHBhdGhzIHRocm91Z2ggYW4gYG91dDpgIGxhYmVsLCBhbmQgdGhlIGNvbnNpc3RlbnQgY2FsbCB0byBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIHdoZW4gYSBtZW1vcnkgY2hhcmdlIGZhaWxzLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgc2VlbXMgbGlrZSBpdCBtaWdodCBiZSBsb2dpYyBjaGFuZ2VzIHRoYXQgZG8gbm90IGNhdXNlIGEgS01TQU4gY29uY2Vybi5cblxuTm93LCBsZXQncyByaWdvcm91c2x5IGdvIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhLiBGaXJzdCwgYW0gSSBkZWFsaW5nIHdpdGgga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgbm93IGV4cG9zZWQgdG8gdXNlcnNwYWNlPyBObywgdGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSB3aGF0J3MgZXhwb3NlZCB0byB1c2Vyc3BhY2UuIFNlY29uZCwgYXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IGRlcGVuZCBvbiAqdW5pbml0aWFsaXplZCogdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/IE5vLCBJJ20gY2FyZWZ1bGx5IGNoZWNraW5nIHRoZSBjb2RlIGFuZCBhbGwgdGhlIGxvY2FsIHZhcmlhYmxlcyB1c2VkIChgcmV0YCwgYHJhaXNlZF9tYXhfZXZlbnRgLCBldGMuKSBhcmUgZGVmaW5pdGVseSBpbml0aWFsaXplZCBiZWZvcmUgYW55IGV2YWx1YXRpb24gb3IgZGVyZWZlcmVuY2luZyBoYXBwZW5zLiBUaGlyZCwgYXJlIHRoZXJlIG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBtaWdodCBiZSByZWFkIGxhdGVyPyBObywgdGhpcyBpcyBwdXJlbHkgbWVtb3J5IGNncm91cCBsb2dpYy4gRm91cnRoLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBidWZmZXIgYWNjZXNzIHZpb2xhdGlvbnM/IE5vLCB0aGUgcGF0Y2ggZG9lc24ndCBtb2RpZnkgYW55IGNvZGUgdGhhdCBpbnZvbHZlcyB0aGF0IHJpc2suXG5cblNpbmNlIHRoaXMgaXMgcHVyZWx5IG1lbW9yeSBjZ3JvdXAgY2hhcmdpbmcgYW5kIGV2ZW50IHJlcG9ydGluZywgSSBhbSB2ZXJ5IGNvbmZpZGVudCB0aGF0IGFueSBidWdzIHdvdWxkIGJlIGxvZ2ljIGJ1Z3MsIGFjY291bnRpbmcgZXJyb3JzLCBvciB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGxvY2tpbmcgaXNzdWVzLiBUaG9zZSBhcmUgYWxyZWFkeSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgdGVzdGluZywgS0FTQU4sIGFuZCBMT0NLREVQLiBUaGlzIGlzIG5vdCBLTVNBTidzIGRvbWFpbi5cblxuU28sIGZvciBteSBjb250cmFzdGluZyByZWFzb25pbmcsIEkgY2FuIHN1bW1hcml6ZSB0aGUgcGF0Y2ggYXMgZW5zdXJpbmcgYSBgTUVNQ0dfTUFYYCBldmVudCBpcyByYWlzZWQgd2hlbiBhIG1lbW9yeSBjaGFyZ2UgcmVxdWVzdCBmYWlscy4gS01TQU4gdGFyZ2V0cyBhcmUgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucyBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZGF0YSBidWZmZXJzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZSB0byBjb250cm9sIGZsb3cgb3IgbG9ja2luZyBpbiBgX19tZW1jZ19tZW1vcnlfZXZlbnRgLCB3aGljaCBpcyBjb3ZlcmVkIGJ5IEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgSSBjb25jbHVkZSB0aGF0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24ndCB3YXJyYW50ZWQuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgcHJvdmlkZSBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NTYsIk91dHB1dFRva2VucyI6MjY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDAyOjU0OjQ3LjY2Njc2NjgzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdHJ5X2NoYXJnZV9tZW1jZygpYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBlbnN1cmUgdGhhdCBhIGBNRU1DR19NQVhgIG1lbW9yeSBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiBhbiBhbGxvY2F0aW9uIGNoYXJnZSByZXF1ZXN0IGlzIHJlamVjdGVkIHdpdGggYC1FTk9NRU1gLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgdmFyaWFibGUgYHJldCA9IDBgLCBzZXRzIGByZXQgPSAtRU5PTUVNYCBvbiBmYWlsdXJlLCBhbmQgcm91dGVzIHRocm91Z2ggYSBjb21tb24gYG91dDpgIGxhYmVsIHRvIHJhaXNlIHRoZSBldmVudCBiZWZvcmUgcmV0dXJuaW5nIGByZXRgLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIChzdGFjay9oZWFwL3BhZ2VzKSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIGNoYW5nZXMgaGVyZSBkbyBub3QgaW52b2x2ZSBjb3B5aW5nIGRhdGEgc3RydWN0dXJlcyBvciBidWZmZXJzIHRvIHVzZXIgc3BhY2UsIGFsbG9jYXRpbmcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGByZXRgLCBgcmFpc2VkX21heF9ldmVudGAsIGBtZW1fb3Zlcl9saW1pdGApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcbi0gQW55IHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChlLmcuLCBjb250cm9sIGZsb3cgYnVncywgbWVtY2cgZXZlbnQgY291bnRlciBtYW5pcHVsYXRpb24sIGxvY2tpbmcgb3Igc3RhdGUgdHJhY2tpbmcgZHVyaW5nIG1lbWNnIHJlY2xhaW0vZXZlbnRzKSBhcmUgd2l0aGluIHRoZSBkb21haW4gb2Ygc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scywgS0FTQU4sIGFuZCBMT0NLREVQLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdHJ5X2NoYXJnZV9tZW1jZygpYCBpbiBgbW0vbWVtY29udHJvbC5jYCB0byBlbnN1cmUgdGhhdCBhIGBNRU1DR19NQVhgIG1lbW9yeSBldmVudCBpcyBnZW5lcmF0ZWQgd2hlbiBhbiBhbGxvY2F0aW9uIGNoYXJnZSByZXF1ZXN0IGlzIHJlamVjdGVkIHdpdGggYC1FTk9NRU1gLiBJdCBpbnRyb2R1Y2VzIGEgbG9jYWwgdmFyaWFibGUgYHJldCA9IDBgLCBzZXRzIGByZXQgPSAtRU5PTUVNYCBvbiBmYWlsdXJlLCBhbmQgcm91dGVzIHRocm91Z2ggYSBjb21tb24gYG91dDpgIGxhYmVsIHRvIHJhaXNlIHRoZSBldmVudCBiZWZvcmUgcmV0dXJuaW5nIGByZXRgLlxcblxcbktNU0FOIHZzIEtBU0FOIEFwcGxpY2FiaWxpdHk6XFxuLSBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIChzdGFjay9oZWFwL3BhZ2VzKSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIGNoYW5nZXMgaGVyZSBkbyBub3QgaW52b2x2ZSBjb3B5aW5nIGRhdGEgc3RydWN0dXJlcyBvciBidWZmZXJzIHRvIHVzZXIgc3BhY2UsIGFsbG9jYXRpbmcgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGByZXRgLCBgcmFpc2VkX21heF9ldmVudGAsIGBtZW1fb3Zlcl9saW1pdGApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcbi0gQW55IHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChlLmcuLCBjb250cm9sIGZsb3cgYnVncywgbWVtY2cgZXZlbnQgY291bnRlciBtYW5pcHVsYXRpb24sIGxvY2tpbmcgb3Igc3RhdGUgdHJhY2tpbmcgZHVyaW5nIG1lbWNnIHJlY2xhaW0vZXZlbnRzKSBhcmUgd2l0aGluIHRoZSBkb21haW4gb2Ygc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scywgS0FTQU4sIGFuZCBMT0NLREVQLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2qm9[1] Phase: Succeeded StartedAt: 2026-09-01 02:55:10 +0000 UTC FinishedAt: 2026-09-01 02:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-01 02:55:10 +0000 UTC FinishedAt: 2026-09-01 02:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2] Phase: Succeeded StartedAt: 2026-09-01 02:55:10 +0000 UTC FinishedAt: 2026-09-01 06:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 02:55:10 +0000 UTC FinishedAt: 2026-09-01 06:44:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 02:55:10 +0000 UTC FinishedAt: 2026-09-01 02:55:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 02:55:10 +0000 UTC FinishedAt: 2026-09-01 02:55:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-workflowc2qm9/series-workflowc2qm9-convert-artifact-2631971814/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 02:55:20 +0000 UTC FinishedAt: 2026-09-01 03:11:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 02:55:20 +0000 UTC FinishedAt: 2026-09-01 03:11:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*65ab97ea-faa2-4b87-8748-2f1a28ec91c2,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-workflowc2qm9/series-workflowc2qm9-convert-artifact-2631971814/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": "91c67d29-4e73-465c-b656-465abd96937c", "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-workflowc2qm9/series-workflowc2qm9-build-action-1960924028/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 02:55:20 +0000 UTC FinishedAt: 2026-09-01 03:11:04 +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:*65ab97ea-faa2-4b87-8748-2f1a28ec91c2,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-workflowc2qm9/series-workflowc2qm9-convert-artifact-2631971814/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": "91c67d29-4e73-465c-b656-465abd96937c", "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-workflowc2qm9/series-workflowc2qm9-build-action-1960924028/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:11:15 +0000 UTC FinishedAt: 2026-09-01 03:11:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:11:15 +0000 UTC FinishedAt: 2026-09-01 03:11:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:11:15 +0000 UTC FinishedAt: 2026-09-01 03:11:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:11:15 +0000 UTC FinishedAt: 2026-09-01 03:11:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-workflowc2qm9/series-workflowc2qm9-convert-artifact-1395826489/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:11:25 +0000 UTC FinishedAt: 2026-09-01 03:13:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:11:25 +0000 UTC FinishedAt: 2026-09-01 03:13:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*91c67d29-4e73-465c-b656-465abd96937c,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-workflowc2qm9/series-workflowc2qm9-build-action-1960924028/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-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:13:27 +0000 UTC FinishedAt: 2026-09-01 03:13:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:13:27 +0000 UTC FinishedAt: 2026-09-01 03:13:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:13:27 +0000 UTC FinishedAt: 2026-09-01 03:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:13:27 +0000 UTC FinishedAt: 2026-09-01 03:33:46 +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:*65ab97ea-faa2-4b87-8748-2f1a28ec91c2,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-workflowc2qm9/series-workflowc2qm9-convert-artifact-1395826489/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": "783dcfac-0f8e-4fc6-8d92-cf08bb4400f3", "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-workflowc2qm9/series-workflowc2qm9-build-action-401504277/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:13:27 +0000 UTC FinishedAt: 2026-09-01 03:33:36 +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:*65ab97ea-faa2-4b87-8748-2f1a28ec91c2,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-workflowc2qm9/series-workflowc2qm9-convert-artifact-1395826489/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": "783dcfac-0f8e-4fc6-8d92-cf08bb4400f3", "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-workflowc2qm9/series-workflowc2qm9-build-action-401504277/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:33:46 +0000 UTC FinishedAt: 2026-09-01 03:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:33:46 +0000 UTC FinishedAt: 2026-09-01 03:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:33:46 +0000 UTC FinishedAt: 2026-09-01 03:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:33:46 +0000 UTC FinishedAt: 2026-09-01 03:35:28 +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:*783dcfac-0f8e-4fc6-8d92-cf08bb4400f3,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-workflowc2qm9/series-workflowc2qm9-build-action-401504277/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-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:35:42 +0000 UTC FinishedAt: 2026-09-01 06:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:35:42 +0000 UTC FinishedAt: 2026-09-01 06:44:37 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"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:*91c67d29-4e73-465c-b656-465abd96937c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*783dcfac-0f8e-4fc6-8d92-cf08bb4400f3,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-workflowc2qm9/series-workflowc2qm9-build-action-1960924028/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-workflowc2qm9/series-workflowc2qm9-build-action-401504277/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:35:42 +0000 UTC FinishedAt: 2026-09-01 03:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:35:42 +0000 UTC FinishedAt: 2026-09-01 03:35:47 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"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-workflowc2qm9/series-workflowc2qm9-convert-artifact-1512092078/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:35:42 +0000 UTC FinishedAt: 2026-09-01 03:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:35:42 +0000 UTC FinishedAt: 2026-09-01 03:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:35:42 +0000 UTC FinishedAt: 2026-09-01 03:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:35:53 +0000 UTC FinishedAt: 2026-09-01 06:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2qm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio","mem_cgroup_sk_charge","__memcg_memory_event"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ba8d93a7c61eb1a846220fd8184b94292f51afb1","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"c6c703b7-cd2d-4329-97fa-2817f9b5a56f","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-09-01 03:35:53 +0000 UTC FinishedAt: 2026-09-01 06:44:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*91c67d29-4e73-465c-b656-465abd96937c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*783dcfac-0f8e-4fc6-8d92-cf08bb4400f3,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-workflowc2qm9/series-workflowc2qm9-build-action-1960924028/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-workflowc2qm9/series-workflowc2qm9-build-action-401504277/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-workflowc2qm9/series-workflowc2qm9-convert-artifact-1512092078/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,}