Name: series-workflowdtcpv Phase: Succeeded StartedAt: 2026-08-27 23:35:25 +0000 UTC FinishedAt: 2026-08-28 03:28:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[0] Phase: Succeeded StartedAt: 2026-08-27 23:35:25 +0000 UTC FinishedAt: 2026-08-27 23:40:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 23:35:25 +0000 UTC FinishedAt: 2026-08-27 23:40:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3d83758432b5e6ed9507500a57efb0f3af41ee7d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3d83758432b5e6ed9507500a57efb0f3af41ee7d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG" ], "series_id": "9f9a8715-8ae0-42f0-9a9c-fed59f3f085d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__memcg_memory_event", "mem_cgroup_sk_charge", "__mem_cgroup_charge", "mem_cgroup_charge_hugetlb", "mem_cgroup_swapin_charge_folio" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX21lbWNnX21lbW9yeV9ldmVudCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3NrX2NoYXJnZSYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbnRyb2wgZmxvdyBpbiBgdHJ5X2NoYXJnZV9tZW1jZygpYCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2Agc28gdGhhdCB0aGUgYE1FTUNHX01BWGAgZXZlbnQgKGBfX21lbWNnX21lbW9yeV9ldmVudGApIGlzIHJlY29yZGVkIGVhcmxpZXIgd2hlbmV2ZXIgYSBtZW1vcnkgY2dyb3VwIGxpbWl0IGlzIGV4Y2VlZGVkLCBlbnN1cmluZyBpdCBpcyBhY2NvdW50ZWQgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBiYWlscyBvdXQgZWFybHkgKGUuZy4gbm9uLWJsb2NraW5nIEdGUCBtYXNrcyBvciBPT00gc2NlbmFyaW9zKS5cblxuQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoYG1lbV9vdmVyX2xpbWl0YCwgYGFsbG93X3NwaW5uaW5nYCwgYHJhaXNlZF9tYXhfZXZlbnRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucyB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZzsgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCB0ZXN0IGNvbmZpZ3VyYXRpb25zIGFyZSBhcHByb3ByaWF0ZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgKG1lbWNnKSBjaGFyZ2luZyBwYXRoIGluIHRyeV9jaGFyZ2VfbWVtY2coKSB0byByYWlzZSBNRU1DR19NQVggbWVtb3J5IGV2ZW50cyBpbW1lZGlhdGVseSB3aGVuIHRoZSBwYWdlIGNvdW50ZXIgZXhjZWVkcyB0aGUgbGltaXQsIGJlZm9yZSBhbnkgZWFybHkgYmFpbC1vdXRzIChzdWNoIGFzIG5vbi1ibG9ja2luZyBhbGxvY2F0aW9ucywgT09NIHRhc2tzLCBvciBleGl0aW5nIE9PTSB2aWN0aW1zKS4gVGhpcyBmdW5jdGlvbmFsbHkgYWZmZWN0cyBtZW1vcnkgZXZlbnQgY291bnRpbmcgYW5kIG5vdGlmaWNhdGlvbnMgZm9yIG1lbW9yeS5ldmVudHMgYW5kIG1lbW9yeS5ldmVudHMubG9jYWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5NmZlOGRmNTZhMjhkZGI3OTEyYjczMzU1ZDY2YjYwZjIyY2I3NmEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMjM6Mzc6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxMjcxZDM5MGI2MTdlLi4zOTA0ZmU5YTdiMmU5IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0yNjgzLDYgJiM0MzsyNjgzLDExIEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuJiM0MztcdGlmICghcmFpc2VkX21heF9ldmVudCkge1xuJiM0MztcdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xuJiM0MztcdFx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qXG4gXHQgKiBQcmV2ZW50IHVuYm91bmRlZCByZWN1cnNpb24gd2hlbiByZWNsYWltIG9wZXJhdGlvbnMgbmVlZCB0b1xuIFx0ICogYWxsb2NhdGUgbWVtb3J5LiBUaGlzIG1pZ2h0IGV4Y2VlZCB0aGUgbGltaXRzIHRlbXBvcmFyaWx5LFxuQEAgLTI3MTEsOSAmIzQzOzI3MTYsNiBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdCAgICBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlb29tX21tKSlcbiBcdFx0Z290byBub21lbTtcbiBcbi1cdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbi1cdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xuLVxuIFx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG4gXHRucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcyxcbiBcdFx0XHRcdFx0XHQgICAgZ2ZwX21hc2ssIHJlY2xhaW1fb3B0aW9ucywgTlVMTCk7XG5AQCAtMjc3MywxMyAmIzQzOzI3NzUsNiBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmICghKGdmcF9tYXNrIFx1MDAyNiAoX19HRlBfTk9GQUlMIHwgX19HRlBfSElHSCkpKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBmb3JjZTpcbi1cdC8qXG4tXHQgKiBJZiB0aGUgYWxsb2NhdGlvbiBoYXMgdG8gYmUgZW5mb3JjZWQsIGRvbiYjMzk7dCBmb3JnZXQgdG8gcmFpc2Vcbi1cdCAqIGEgTUVNQ0dfTUFYIGV2ZW50LlxuLVx0ICovXG4tXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXG4tXHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgYWxsb2NhdGlvbiBlaXRoZXIgY2FuJiMzOTt0IGZhaWwgb3Igd2lsbCBsZWFkIHRvIG1vcmUgbWVtb3J5XG4gXHQgKiBiZWluZyBmcmVlZCB2ZXJ5IHNvb24uICBBbGxvdyBtZW1vcnkgdXNhZ2UgZ28gb3ZlciB0aGUgbGltaXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19tZW1jZ19tZW1vcnlfZXZlbnQmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1fY2dyb3VwX2NoYXJnZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgY29udHJvbGxlciAobWVtY2cpIGNoYXJnaW5nIHBhdGggaW4gdHJ5X2NoYXJnZV9tZW1jZygpIHRvIHJhaXNlIE1FTUNHX01BWCBtZW1vcnkgZXZlbnRzIGltbWVkaWF0ZWx5IHdoZW4gdGhlIHBhZ2UgY291bnRlciBleGNlZWRzIHRoZSBsaW1pdCwgYmVmb3JlIGFueSBlYXJseSBiYWlsLW91dHMgKHN1Y2ggYXMgbm9uLWJsb2NraW5nIGFsbG9jYXRpb25zLCBPT00gdGFza3MsIG9yIGV4aXRpbmcgT09NIHZpY3RpbXMpLiBUaGlzIGZ1bmN0aW9uYWxseSBhZmZlY3RzIG1lbW9yeSBldmVudCBjb3VudGluZyBhbmQgbm90aWZpY2F0aW9ucyBmb3IgbWVtb3J5LmV2ZW50cyBhbmQgbWVtb3J5LmV2ZW50cy5sb2NhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk2ZmU4ZGY1NmEyOGRkYjc5MTJiNzMzNTVkNjZiNjBmMjJjYjc2YTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAyMzozNzozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxMjcxZDM5MGI2MTdlLi4zOTA0ZmU5YTdiMmU5IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0yNjgzLDYgJiM0MzsyNjgzLDExIEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLAogCQlnb3RvIHJldHJ5OwogCX0KIAomIzQzOwlpZiAoIXJhaXNlZF9tYXhfZXZlbnQpIHsKJiM0MzsJCV9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTsKJiM0MzsJCXJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBQcmV2ZW50IHVuYm91bmRlZCByZWN1cnNpb24gd2hlbiByZWNsYWltIG9wZXJhdGlvbnMgbmVlZCB0bwogCSAqIGFsbG9jYXRlIG1lbW9yeS4gVGhpcyBtaWdodCBleGNlZWQgdGhlIGxpbWl0cyB0ZW1wb3JhcmlseSwKQEAgLTI3MTEsOSAmIzQzOzI3MTYsNiBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzaywKIAkgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIGN1cnJlbnQtJmd0O3NpZ25hbC0mZ3Q7b29tX21tKSkKIAkJZ290byBub21lbTsKIAotCV9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTsKLQlyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTsKLQogCXBzaV9tZW1zdGFsbF9lbnRlcigmYW1wO3BmbGFncyk7CiAJbnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsCiAJCQkJCQkgICAgZ2ZwX21hc2ssIHJlY2xhaW1fb3B0aW9ucywgTlVMTCk7CkBAIC0yNzczLDEzICYjNDM7Mjc3NSw2IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLAogCWlmICghKGdmcF9tYXNrICZhbXA7IChfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKSkpCiAJCXJldHVybiAtRU5PTUVNOwogZm9yY2U6Ci0JLyoKLQkgKiBJZiB0aGUgYWxsb2NhdGlvbiBoYXMgdG8gYmUgZW5mb3JjZWQsIGRvbiYjMzk7dCBmb3JnZXQgdG8gcmFpc2UKLQkgKiBhIE1FTUNHX01BWCBldmVudC4KLQkgKi8KLQlpZiAoIXJhaXNlZF9tYXhfZXZlbnQpCi0JCV9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTsKLQogCS8qCiAJICogVGhlIGFsbG9jYXRpb24gZWl0aGVyIGNhbiYjMzk7dCBmYWlsIG9yIHdpbGwgbGVhZCB0byBtb3JlIG1lbW9yeQogCSAqIGJlaW5nIGZyZWVkIHZlcnkgc29vbi4gIEFsbG93IG1lbW9yeSB1c2FnZSBnbyBvdmVyIHRoZSBsaW1pdAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDU3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGluLgoKKipJbnNwZWN0aW5nIHRoZSBDb2RlIENoYW5nZXMqKgoKUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdHJ5X2NoYXJnZV9tZW1jZ2AgZnVuY3Rpb24uIE15IHNwaWRleS1zZW5zZSBpcyBhbHJlYWR5IHRpbmdsaW5nIGEgYml0OyBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGFuZCBjaGFyZ2luZyBpcyBjcml0aWNhbCwgYW5kIGEgY2hhbmdlIGhlcmUgd2FycmFudHMgY2FyZWZ1bCBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2hhbmdlIHdpdGhpbiBpdHMgYnJvYWRlciBjb250ZXh0LiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL21lbWNvbnRyb2wuY2AgYmVmb3JlIEkgZXZlbiB0cnkgdG8gdW5kZXJzdGFuZCB3aGF0ICp0aGlzKiBjaGFuZ2UgZG9lcy4gR2V0dGluZyB0aGUgbGF5IG9mIHRoZSBsYW5kIHdpbGwgZ2l2ZSBtZSB0aGUgcHJvcGVyIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2NjA6XHRyZXRyeTpcbjI2NjE6XHRcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4yNjYyOlx0XHRcdHJldHVybiAwO1xuMjY2MzpcdFxuMjY2NDpcdFx0aWYgKCFhbGxvd19zcGlubmluZylcbjI2NjU6XHRcdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG4yNjY2Olx0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4yNjY3Olx0XG4yNjY4Olx0XHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuMjY2OTpcdFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbjI2NzA6XHRcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG4yNjcxOlx0XHRcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIGJhdGNoLCBcdTAwMjZjb3VudGVyKSlcbjI2NzI6XHRcdFx0XHRnb3RvIGRvbmVfcmVzdG9jaztcbjI2NzM6XHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbjI2NzQ6XHRcdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIGJhdGNoKTtcbjI2NzU6XHRcdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpO1xuMjY3NjpcdFx0fSBlbHNlIHtcbjI2Nzc6XHRcdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XG4yNjc4Olx0XHRcdHJlY2xhaW1fb3B0aW9ucyBcdTAwMjY9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuMjY3OTpcdFx0fVxuMjY4MDpcdFxuMjY4MTpcdFx0aWYgKGJhdGNoIFx1MDAzZSBucl9wYWdlcykge1xuMjY4MjpcdFx0XHRiYXRjaCA9IG5yX3BhZ2VzO1xuMjY4MzpcdFx0XHRnb3RvIHJldHJ5O1xuMjY4NDpcdFx0fVxuMjY4NTpcdFxuMjY4NjpcdFx0aWYgKCFyYWlzZWRfbWF4X2V2ZW50KSB7XG4yNjg3Olx0XHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbjI2ODg6XHRcdFx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XG4yNjg5Olx0XHR9XG4yNjkwOlx0XG4yNjkxOlx0XHQvKlxuMjY5MjpcdFx0ICogUHJldmVudCB1bmJvdW5kZWQgcmVjdXJzaW9uIHdoZW4gcmVjbGFpbSBvcGVyYXRpb25zIG5lZWQgdG9cbjI2OTM6XHRcdCAqIGFsbG9jYXRlIG1lbW9yeS4gVGhpcyBtaWdodCBleGNlZWQgdGhlIGxpbWl0cyB0ZW1wb3JhcmlseSxcbjI2OTQ6XHRcdCAqIGJ1dCB3ZSBwcmVmZXIgZmFjaWxpdGF0aW5nIG1lbW9yeSByZWNsYWltIGFuZCBnZXR0aW5nIGJhY2tcbjI2OTU6XHRcdCAqIHVuZGVyIHRoZSBsaW1pdCBvdmVyIHRyaWdnZXJpbmcgT09NIGtpbGxzIGluIHRoZXNlIGNhc2VzLlxuMjY5NjpcdFx0ICovXG4yNjk3Olx0XHRpZiAodW5saWtlbHkoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpKVxuMjY5ODpcdFx0XHRnb3RvIGZvcmNlO1xuMjY5OTpcdFxuMjcwMDpcdFx0aWYgKHVubGlrZWx5KHRhc2tfaW5fbWVtY2dfb29tKGN1cnJlbnQpKSlcbjI3MDE6XHRcdFx0Z290byBub21lbTtcbjI3MDI6XHRcbjI3MDM6XHRcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxuMjcwNDpcdFx0XHRnb3RvIG5vbWVtO1xuMjcwNTpcdFxuMjcwNjpcdFx0LypcbjI3MDc6XHRcdCAqIE9PTSB2aWN0aW0gc3RpbGwgbmVlZHMgdG8gY2hhcmdlIG1lbW9yeSB0byBleGl0LiBPT00gcmVhcGVyIHNob3VsZFxuMjcwODpcdFx0ICogaGVscCBidXQgaXQgbWlnaHQgZmFpbCBvbiBtbWFwX2xvY2sgY29udGVudGlvbi4gSWYgdGhlIHZpY3RpbSBpcyBhXG4yNzA5Olx0XHQgKiBsYXJnZSB0aHJlYWQgZ3JvdXAgdGhlbiBhbGwgZXhpdGluZyB0aHJlYWRzIG1pZ2h0IGNvbXBldGUgb24gb29tX2xvY2tcbjI3MTA6XHRcdCAqIGp1c3QgdG8gbGVhcm4gdGhhdCB0aGVyZSBpcyBub3RoaW5nIHJlYWxseSBraWxsYWJsZSBhbnltb3JlLiBCYWlsXG4yNzExOlx0XHQgKiBvdXQgZWFybHkgYW5kIGZhaWwgdGhlIGNoYXJnZSB0byBleHBlZGl0ZSB0aGVpciBleGl0LiBUaGV5IGFyZVxuMjcxMjpcdFx0ICogY29uc2lkZXJlZCBmdWxseSByZWNsYWltZWQgYnkgdGhlIG9vbSByZWFwZXIgYW5kIHRoZXkgc2hvdWxkbiYjMzk7dFxuMjcxMzpcdFx0ICogY29udHJpYnV0ZSBmdXJ0aGVyIGNoYXJnZXMuXG4yNzE0Olx0XHQgKi9cbjI3MTU6XHRcdGlmICh0c2tfaXNfb29tX3ZpY3RpbShjdXJyZW50KSBcdTAwMjZcdTAwMjZcbjI3MTY6XHRcdCAgICBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlb29tX21tKSlcbjI3MTc6XHRcdFx0Z290byBub21lbTtcbjI3MTg6XHRcbjI3MTk6XHRcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuMjcyMDpcdFx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXG4yNzIxOlx0XHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuMjcyMjpcdFx0cHNpX21lbXN0YWxsX2xlYXZlKFx1MDAyNnBmbGFncyk7XG4yNzIzOlx0XG4yNzI0Olx0XHRpZiAobWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpIFx1MDAzZT0gbnJfcGFnZXMpXG4yNzI1Olx0XHRcdGdvdG8gcmV0cnk7XG4yNzI2Olx0XG4yNzI3Olx0XHRpZiAoIWRyYWluZWQpIHtcbjI3Mjg6XHRcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTtcbjI3Mjk6XHRcdFx0ZHJhaW5lZCA9IHRydWU7XG4yNzMwOlx0XHRcdGdvdG8gcmV0cnk7XG4yNzMxOlx0XHR9XG4yNzMyOlx0XG4yNzMzOlx0XHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpXG4yNzM0Olx0XHRcdGdvdG8gbm9tZW07XG4yNzM1Olx0XHQvKlxuMjczNjpcdFx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cbjI3Mzc6XHRcdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXG4yNzM4Olx0XHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cbjI3Mzk6XHRcdCAqXG4yNzQwOlx0XHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxuMjc0MTpcdFx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcbjI3NDI6XHRcdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cbjI3NDM6XHRcdCAqL1xuMjc0NDpcdFx0aWYgKG5yX3JlY2xhaW1lZCBcdTAwMjZcdTAwMjYgbnJfcGFnZXMgXHUwMDNjPSAoMSBcdTAwM2NcdTAwM2MgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKVxuMjc0NTpcdFx0XHRnb3RvIHJldHJ5O1xuMjc0NjpcdFxuMjc0NzpcdFx0aWYgKG5yX3JldHJpZXMtLSlcbjI3NDg6XHRcdFx0Z290byByZXRyeTtcbjI3NDk6XHRcbjI3NTA6XHRcdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfUkVUUllfTUFZRkFJTClcbjI3NTE6XHRcdFx0Z290byBub21lbTtcbjI3NTI6XHRcbjI3NTM6XHRcdC8qIEF2b2lkIGVuZGxlc3MgbG9vcCBmb3IgdGFza3MgYnlwYXNzZWQgYnkgdGhlIG9vbSBraWxsZXIgKi9cbjI3NTQ6XHRcdGlmIChwYXNzZWRfb29tIFx1MDAyNlx1MDAyNiB0YXNrX2lzX2R5aW5nKCkpXG4yNzU1Olx0XHRcdGdvdG8gbm9tZW07XG4yNzU2Olx0XG4yNzU3Olx0XHQvKlxuMjc1ODpcdFx0ICoga2VlcCByZXRyeWluZyBhcyBsb25nIGFzIHRoZSBtZW1jZyBvb20ga2lsbGVyIGlzIGFibGUgdG8gbWFrZVxuMjc1OTpcdFx0ICogYSBmb3J3YXJkIHByb2dyZXNzIG9yIGJ5cGFzcyB0aGUgY2hhcmdlIGlmIHRoZSBvb20ga2lsbGVyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIxNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29tbWl0KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgY29tbWl0IGlzIGF0dGVtcHRpbmcgdG8gYWNoaWV2ZS4gSSYjMzk7bGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb21taXQgaXRzZWxmIOKAkyB3aGF0IGZpbGVzIHdlcmUgY2hhbmdlZCwgYWRkZWQsIG9yIGRlbGV0ZWQ/IFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBUaGVuLCBJJiMzOTtsbCBsZXZlcmFnZSB0aGUgcG93ZXIgb2YgdGhlIGBnaXQgbG9nYCB0byBwcm92aWRlIG1vcmUgY29udGV4dC4gS25vd2luZyB0aGUgc3BlY2lmaWMgY29tbWl0IGhhc2gsIEkgY2FuIHN0YXJ0IHdpdGggYSB0YXJnZXRlZCBgZ2l0IGxvZ2AgY29tbWFuZC4gTWF5YmUgSSBjYW4gcXVpY2tseSBmaW5kIGEgaGVscGZ1bCBtZXNzYWdlIHRoZXJlLCBvciBwZXJoYXBzIEkmIzM5O2xsIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gS25vd2luZyB0aGUgc3RhdGUgb2YgdGhpbmdzIGJlZm9yZSB0aGUgY29tbWl0IGlzIGp1c3QgYXMsIGlmIG5vdCBtb3JlLCBpbXBvcnRhbnQsIHNvIEkmIzM5O2xsIHByb2JhYmx5IGxvb2sgdG8gc2VlIHdoYXQgdGhlICpwcmV2aW91cyogY29tbWl0IGRpZC4gVGhlIGxvZyB3aWxsIHRlbGwgdGhlIHN0b3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JhaXNlZF9tYXhfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI2NDU9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vbWVtY29udHJvbC5jLTI2NTUtXHRib29sIGRyYWluZWQgPSBmYWxzZTtcbm1tL21lbWNvbnRyb2wuYzoyNjU2Olx0Ym9vbCByYWlzZWRfbWF4X2V2ZW50ID0gZmFsc2U7XG5tbS9tZW1jb250cm9sLmMtMjY1Ny1cdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjg1LVxubW0vbWVtY29udHJvbC5jOjI2ODY6XHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpIHtcbm1tL21lbWNvbnRyb2wuYy0yNjg3LVx0XHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XG5tbS9tZW1jb250cm9sLmM6MjY4ODpcdFx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XG5tbS9tZW1jb250cm9sLmMtMjY4OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjY1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtY2cgTWVtb3J5IENoYXJnZSBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHRvIGB0cnlfY2hhcmdlX21lbWNnYC4gUHJldmlvdXNseSwgd2hlbiBhIG1lbW9yeSBjaGFyZ2UgZmFpbGVkIOKAkyBzYXksIGEgbGltaXQgd2FzIGhpdCDigJMgdGhlIGxvZ2ljIGZsb3cgd2FzIHByZXR0eSBzcGVjaWZpYzogaXQgY2hlY2tlZCBzZXZlcmFsIGNvbmRpdGlvbnMgYmVmb3JlIHBvdGVudGlhbGx5IHJhaXNpbmcgYSBtZW1vcnkgZXZlbnQuIEVzc2VudGlhbGx5LCBpdCBoYWQgc2V2ZXJhbCAmIzM0O2Vhcmx5IGV4aXRzJiMzNDsgdGhhdCBwcmV2ZW50ZWQgcmFpc2luZyB0aGUgZXZlbnQuIEl0IGNoZWNrZWQgaWYgYFBGX01FTUFMTE9DYCB3YXMgc2V0LCBpZiB0aGUgdGFzayB3YXMgaW4gT09NIHN0YXRlLCBpZiB0aGUgR0ZQIGZsYWdzIGFsbG93ZWQgYmxvY2tpbmcsIGFuZCBpZiBpdCBzaG91bGQgc2tpcCB0aGUgT09NIGtpbGxlci4gT25seSBpZiAqbm9uZSogb2YgdGhvc2UgY29uZGl0aW9ucyB3ZXJlIG1ldCBkaWQgaXQgY2FsbCBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGFuZCBzZXQgYHJhaXNlZF9tYXhfZXZlbnRgIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGZyZWUgbWVtb3J5LiBUaGVyZSB3YXMgYWxzbyBhIHJlZHVuZGFudCBjYWxsIHRvIHRoZSBldmVudCBoYW5kbGVyIGluIHRoZSBgZm9yY2U6YCBsYWJlbC4KCk5vdywgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBzaWduaWZpY2FudGx5IGFsdGVyaW5nIHRoYXQuIEl0JiMzOTtzIG1vdmluZyB0aGF0IGNydWNpYWwgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCBjYWxsICp1cCogaW4gdGhlIGNhbGwgY2hhaW4uIEl0JiMzOTtzIG5vdyBiZWluZyBjYWxsZWQgdW5jb25kaXRpb25hbGx5LCByaWdodCBhdCB0aGUgc3RhcnQgb2YgYHRyeV9jaGFyZ2VfbWVtY2dgLCB3aGVuZXZlciB0aGUgcGFnZSBjb3VudGVyIGNoYXJnZSBmYWlscyAoYW5kIHRoZSBgYmF0Y2hgIGNvdW50IG1hdGNoZXMgdGhlIGF0dGVtcHRlZCBhbGxvY2F0aW9uIHNpemUpLiBDcml0aWNhbGx5LCBpdCAqYWxzbyogcmVtb3ZlcyB0aGUgcmVkdW5kYW50IGNhbGwgZnJvbSBgZm9yY2U6YC4gU28sIGVzc2VudGlhbGx5LCB3ZSBub3cgZ2V0IHRoZSBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGZpcmluZyBldmVyeSB0aW1lIGEgcGFnZSBjaGFyZ2UgZmFpbHMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIHNoaWZ0LiBTcGVjaWZpY2FsbHksIHdoYXQmIzM5O3MgdGhlIHB1cnBvc2Ugb2YgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YD8gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGl0cyBkZWZpbml0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLiBUaGlzIHVuY29uZGl0aW9uYWwgdHJpZ2dlciBjb3VsZCBwb3RlbnRpYWxseSBpbXBhY3QgdGhlIHN5c3RlbSYjMzk7cyByZWFjdGlvbiB0byBtZW1vcnkgcHJlc3N1cmUsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHZhcmlvdXMgZWFybHkgZXhpdCBjb25kaXRpb25zIGl0IGJ5cGFzc2VkIGJlZm9yZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgbmV3IGJlaGF2aW9yIGRvZXNuJiMzOTt0IGludHJvZHVjZSB1bndhbnRlZCBzaWRlIGVmZmVjdHMgb3IgcmVncmVzc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1jZ19tZW1vcnlfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTE4ODA9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xODk4LVxubW0vbWVtY29udHJvbC5jOjE4OTk6dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9tZW1jb250cm9sLmMtMTkwMC1cdFx0XHQgIGVudW0gbWVtY2dfbWVtb3J5X2V2ZW50IGV2ZW50LCBib29sIGFsbG93X3NwaW5uaW5nKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xOTI3LX1cbm1tL21lbWNvbnRyb2wuYzoxOTI4OkVYUE9SVF9TWU1CT0xfR1BMKF9fbWVtY2dfbWVtb3J5X2V2ZW50KTtcbm1tL21lbWNvbnRyb2wuYy0xOTI5LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNjQ1PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjg2LVx0aWYgKCFyYWlzZWRfbWF4X2V2ZW50KSB7XG5tbS9tZW1jb250cm9sLmM6MjY4NzpcdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xubW0vbWVtY29udHJvbC5jLTI2ODgtXHRcdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gbWVtY2dfbWVtb3J5X2V2ZW50KioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIHBpdm90YWwgZm9yIGhhbmRsaW5nIG1lbW9yeSBldmVudHMgd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIChtZW1jZykgZnJhbWV3b3JrLiBNeSBmb2N1cyBoZXJlIGlzIGdvaW5nIHRvIGJlIG9uIHVuZGVyc3RhbmRpbmcgKmhvdyogdGhlc2UgZXZlbnRzIGFyZSB0cmlnZ2VyZWQsICp3aGF0KiBpbmZvcm1hdGlvbiBpcyBiZWluZyB0cmFja2VkLCBhbmQgdWx0aW1hdGVseSwgKmhvdyogdGhpcyBjb250cmlidXRlcyB0byB0aGUgYnJvYWRlciByZXNvdXJjZSBtYW5hZ2VtZW50IHN0cmF0ZWd5IG9mIHRoZSBrZXJuZWwgZm9yIG1lbW9yeS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBzY2VuYXJpb3MgdGhhdCBhcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBBcmUgd2UgdGFsa2luZyBwYWdlIGZhdWx0cz8gTWVtb3J5IHJlY2xhaW0/IE9PTSBzaXR1YXRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlciBldmVudHMuIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byB0cmFjZSBob3cgdGhlc2UgZXZlbnRzIGFyZSByZWNvcmRlZC4gV2hhdCBzdGF0cyBhcmUgdXBkYXRlZD8gQXJlIHRoZXJlIGFueSBzaWduaWZpY2FudCBzaWRlIGVmZmVjdHMgb3IgY2FzY2FkaW5nIGNoYW5nZXMgdHJpZ2dlcmVkIGJ5IHRoZSBldmVudCBoYW5kbGluZz8gV2hhdCBsb2NrcyBhcmUgaW4gcGxheSBoZXJlPyBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGxvY2sgb3JkZXIgdG8gcnVsZSBvdXQgYW55IHBvdGVudGlhbCBkZWFkbG9ja3MuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZSwgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIG1lbWNnIGFyY2hpdGVjdHVyZS4gSG93IGRvZXMgdGhpcyBldmVudCBpbnRlcnBsYXkgd2l0aCBvdGhlciBtZW1jZyBjb21wb25lbnRzLCBsaWtlIHRoZSBjb250cm9sbGVycyBmb3IgbWVtb3J5IHVzYWdlLCBzd2FwcGluZywgYW5kIHNvIG9uPyBJIHNob3VsZCBhbnRpY2lwYXRlIHRoaXMgYmVpbmcgY29tcGxleCBidXQgaG9wZWZ1bGx5IHdlbGwtc3RydWN0dXJlZC4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgbG9ja2luZywgYWNjb3VudGluZywgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBUaW1lIHRvIGdldCBzdGFydGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg5NTpcdFx0fVxuMTg5NjpcdFx0cmV0dXJuIG1heDtcbjE4OTc6XHR9XG4xODk4Olx0XG4xODk5Olx0dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4xOTAwOlx0XHRcdFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZylcbjE5MDE6XHR7XG4xOTAyOlx0XHRib29sIHN3YXBfZXZlbnQgPSBldmVudCA9PSBNRU1DR19TV0FQX0hJR0ggfHwgZXZlbnQgPT0gTUVNQ0dfU1dBUF9NQVggfHxcbjE5MDM6XHRcdFx0XHQgIGV2ZW50ID09IE1FTUNHX1NXQVBfRkFJTDtcbjE5MDQ6XHRcbjE5MDU6XHRcdC8qIEZvciBub3cgb25seSBNRU1DR19NQVggY2FuIGhhcHBlbiB3aXRoICFhbGxvd19zcGlubmluZyBjb250ZXh0LiAqL1xuMTkwNjpcdFx0Vk1fV0FSTl9PTl9PTkNFKCFhbGxvd19zcGlubmluZyBcdTAwMjZcdTAwMjYgZXZlbnQgIT0gTUVNQ0dfTUFYKTtcbjE5MDc6XHRcbjE5MDg6XHRcdGF0b21pY19sb25nX2luYyhcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnlfZXZlbnRzX2xvY2FsW2V2ZW50XSk7XG4xOTA5Olx0XHRpZiAoIXN3YXBfZXZlbnQgXHUwMDI2XHUwMDI2IGFsbG93X3NwaW5uaW5nKVxuMTkxMDpcdFx0XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2bWVtY2ctXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xuMTkxMTpcdFxuMTkxMjpcdFx0ZG8ge1xuMTkxMzpcdFx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tldmVudF0pO1xuMTkxNDpcdFx0XHRpZiAoYWxsb3dfc3Bpbm5pbmcpIHtcbjE5MTU6XHRcdFx0XHRpZiAoc3dhcF9ldmVudClcbjE5MTY6XHRcdFx0XHRcdGNncm91cF9maWxlX25vdGlmeShcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwX2V2ZW50c19maWxlKTtcbjE5MTc6XHRcdFx0XHRlbHNlXG4xOTE4Olx0XHRcdFx0XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2bWVtY2ctXHUwMDNlZXZlbnRzX2ZpbGUpO1xuMTkxOTpcdFx0XHR9XG4xOTIwOlx0XG4xOTIxOlx0XHRcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbjE5MjI6XHRcdFx0XHRicmVhaztcbjE5MjM6XHRcdFx0aWYgKGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfTE9DQUxfRVZFTlRTKVxuMTkyNDpcdFx0XHRcdGJyZWFrO1xuMTkyNTpcdFx0fSB3aGlsZSAoKG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSBcdTAwMjZcdTAwMjZcbjE5MjY6XHRcdFx0ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKTtcbjE5Mjc6XHR9XG4xOTI4Olx0RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jZ19tZW1vcnlfZXZlbnQpO1xuMTkyOTpcdFxuMTkzMDpcdHN0YXRpYyBib29sIG1lbV9jZ3JvdXBfb3V0X29mX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuMTkzMTpcdFx0XHRcdFx0ICAgICBpbnQgb3JkZXIpXG4xOTMyOlx0e1xuMTkzMzpcdFx0c3RydWN0IG9vbV9jb250cm9sIG9jID0ge1xuMTkzNDpcdFx0XHQuem9uZWxpc3QgPSBOVUxMLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODQ1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLgoKKipJbnZlc3RpZ2F0aW5nIGB0cnlfY2hhcmdlX21lbWNnYCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgdHJ5X2NoYXJnZV9tZW1jZ2AgZnVuY3Rpb24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZmlndXJpbmcgb3V0IHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIOKAkyB3aGF0IGFyZSBpdHMgY2FsbGVycz8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayB3aWxsIGdpdmUgbWUgY29udGV4dCBvbiBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsuIE9uY2UgSSBoYXZlIHRoYXQgY29udGV4dCwgSSYjMzk7bGwgdGhlbiB6ZXJvIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsIGNoYW5nZXMgbWFkZSByZWxhdGVkIHRvIGl0cyB1c2FnZS4gS25vd2luZyB0aGUgY2hhbmdlcyB3aWxsIGFsbG93IG1lIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLCBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXQuIEJhc2ljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBkaWZmZXJlbnQsIGFuZCB3aHkuIE9rYXksIGxldCYjMzk7cyBzdGFydCB3aXRoIGB0cnlfY2hhcmdlX21lbWNnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X2NoYXJnZV9tZW1jZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MjU1NT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjQ0LVxubW0vbWVtY29udHJvbC5jOjI2NDU6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9tZW1jb250cm9sLmMtMjY0Ni1cdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yODQ5PXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg1NC1cbm1tL21lbWNvbnRyb2wuYzoyODU1Olx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMjg1Ni19XG4tLVxubW0vbWVtY29udHJvbC5jPTMxNDg9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE1NS1cbm1tL21lbWNvbnRyb2wuYzozMTU2Olx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzE1Ny1cdGlmIChyZXQpXG4tLVxubW0vbWVtY29udHJvbC5jPTUxOTY9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjA0LVx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxubW0vbWVtY29udHJvbC5jOjUyMDU6XHRcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01MjA2LVx0aWYgKHJldCkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NjE2PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU2MjMtXG5tbS9tZW1jb250cm9sLmM6NTYyNDpcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcbm1tL21lbWNvbnRyb2wuYy01NjI1LVx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY0OQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG1tL21lbWNvbnRyb2wuY2AgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIHJlcXVpcmVtZW50cyBmb3IgYG1tL21lbWNvbnRyb2wuY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSByZWxhdGVkIGBNYWtlZmlsZWAgaW4gdGhlIGBtbS9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIGJ1aWxkIHJ1bGVzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MuIFRoZSBNYWtlZmlsZSBzaG91bGQgc2hlZCBsaWdodCBvbiB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBmZWF0dXJlcywgb3RoZXIgbW9kdWxlcyBvciBvcHRpb25zLCBhbmQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCB0byBpbmNsdWRlIG9yIGVuYWJsZSB0aGlzIHBhcnRpY3VsYXIgbWVtb3J5IGNvbnRyb2wgY29tcG9uZW50LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHJlZmVyZW5jZXMgdG8gYENPTkZJR19gIG9wdGlvbnMsIG9yIHBlcmhhcHMgZXZlbiBpbmRpcmVjdCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyB0aGF0IGFyZSAqcmVxdWlyZWQqIGZvciB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgdG8gZnVuY3Rpb24gcHJvcGVybHkgd2l0aGluIHRoZSBiaWdnZXIgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgTWFrZWZpbGUgaGFzIHRvIHNheS4uLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cbm1tL01ha2VmaWxlOjI4OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gblxubW0vTWFrZWZpbGU6Mjk6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXG5tbS9NYWtlZmlsZS0zMC1LQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxuLS1cbm1tL01ha2VmaWxlPTEwMz1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgJiM0Mzs9IG1lbWZkX2x1by5vXG5tbS9NYWtlZmlsZToxMDQ6b2JqLSQoQ09ORklHX01FTUNHX1YxKSAmIzQzOz0gbWVtY29udHJvbC12MS5vXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IGJwZl9tZW1jb250cm9sLm9cbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxuLS1cbm1tL2JhY2tpbmctZGV2LmM9NTgwPXN0YXRpYyB2b2lkIHdiX2V4aXQoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuLS1cbm1tL2JhY2tpbmctZGV2LmMtNTg4LVxubW0vYmFja2luZy1kZXYuYzo1ODk6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9iYWNraW5nLWRldi5jLTU5MC1cbi0tXG5tbS9icGZfbWVtY29udHJvbC5jLTctXG5tbS9icGZfbWVtY29udHJvbC5jOjg6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9icGZfbWVtY29udHJvbC5jLTktI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2Vcbi0tXG5tbS9icGZfbWVtY29udHJvbC5jPTE2Mj1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xubW0vYnBmX21lbWNvbnRyb2wuYy0xNjMtXG5tbS9icGZfbWVtY29udHJvbC5jOjE2NDpCVEZfS0ZVTkNTX1NUQVJUKGJwZl9tZW1jb250cm9sX2tmdW5jcylcbm1tL2JwZl9tZW1jb250cm9sLmMtMTY1LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X3Jvb3RfbWVtX2Nncm91cCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxuLS1cbm1tL2JwZl9tZW1jb250cm9sLmM9MTczPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbWVtX2Nncm91cF9mbHVzaF9zdGF0cywgS0ZfU0xFRVBBQkxFKVxubW0vYnBmX21lbWNvbnRyb2wuYy0xNzQtXG5tbS9icGZfbWVtY29udHJvbC5jOjE3NTpCVEZfS0ZVTkNTX0VORChicGZfbWVtY29udHJvbF9rZnVuY3MpXG5tbS9icGZfbWVtY29udHJvbC5jLTE3Ni1cbm1tL2JwZl9tZW1jb250cm9sLmM6MTc3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfbWVtY29udHJvbF9rZnVuY19zZXQgPSB7XG5tbS9icGZfbWVtY29udHJvbC5jLTE3OC1cdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxubW0vYnBmX21lbWNvbnRyb2wuYzoxNzk6XHQuc2V0ICAgICAgICAgICAgPSBcdTAwMjZicGZfbWVtY29udHJvbF9rZnVuY3MsXG5tbS9icGZfbWVtY29udHJvbC5jLTE4MC19O1xubW0vYnBmX21lbWNvbnRyb2wuYy0xODEtXG5tbS9icGZfbWVtY29udHJvbC5jOjE4MjpzdGF0aWMgaW50IF9faW5pdCBicGZfbWVtY29udHJvbF9pbml0KHZvaWQpXG5tbS9icGZfbWVtY29udHJvbC5jLTE4My17XG4tLVxubW0vYnBmX21lbWNvbnRyb2wuYy0xODYtXHRlcnIgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLFxubW0vYnBmX21lbWNvbnRyb2wuYzoxODc6XHRcdFx0XHRcdFx1MDAyNmJwZl9tZW1jb250cm9sX2tmdW5jX3NldCk7XG5tbS9icGZfbWVtY29udHJvbC5jLTE4OC1cdGlmIChlcnIpXG5tbS9icGZfbWVtY29udHJvbC5jOjE4OTpcdFx0cHJfd2FybihcJiMzNDtlcnJvciB3aGlsZSByZWdpc3RlcmluZyBicGYgbWVtY29udHJvbCBrZnVuY3M6ICVkXCYjMzQ7LCBlcnIpO1xubW0vYnBmX21lbWNvbnRyb2wuYy0xOTAtXG4tLVxubW0vYnBmX21lbWNvbnRyb2wuYy0xOTItfVxubW0vYnBmX21lbWNvbnRyb2wuYzoxOTM6bGF0ZV9pbml0Y2FsbChicGZfbWVtY29udHJvbF9pbml0KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG5tbS9kYW1vbi9jb3JlLmM6MTE6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9kYW1vbi9jb3JlLmMtMTItI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuLS1cbm1tL2RlYnVnLmMtMTEtI2luY2x1ZGUgXHUwMDNjbGludXgvdHJhY2VfZXZlbnRzLmhcdTAwM2Vcbm1tL2RlYnVnLmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9kZWJ1Zy5jLTEzLSNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9tbWZsYWdzLmhcdTAwM2Vcbi0tXG5tbS9maWxlbWFwLmMtMzctI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG5tbS9maWxlbWFwLmM6Mzg6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9maWxlbWFwLmMtMzktI2luY2x1ZGUgXHUwMDNjbGludXgvc2htZW1fZnMuaFx1MDAzZVxuLS1cbm1tL2ZvbGlvLmMtMjgtI2luY2x1ZGUgXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFx1MDAzZVxubW0vZm9saW8uYzoyOTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL2ZvbGlvLmMtMzAtI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2Vcbi0tXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlLWZsYWdzLmhcdTAwM2Vcbm1tL2h3cG9pc29uLWluamVjdC5jOjExOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vaHdwb2lzb24taW5qZWN0LmMtMTItI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxubW0vbGlzdF9scnUuYzoxNDojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL2xpc3RfbHJ1LmMtMTUtI2luY2x1ZGUgXCYjMzQ7c2xhYi5oXCYjMzQ7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTItXG5tbS9tZW1jb250cm9sLXYxLmM6MzojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL21lbWNvbnRyb2wtdjEuYy00LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXAuaFx1MDAzZVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xNy0jaW5jbHVkZSBcJiMzNDtzd2FwX3RhYmxlLmhcJiMzNDtcbm1tL21lbWNvbnRyb2wtdjEuYzoxODojaW5jbHVkZSBcJiMzNDttZW1jb250cm9sLXYxLmhcJiMzNDtcbm1tL21lbWNvbnRyb2wtdjEuYy0xOS1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmgtNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9jZ3JvdXAtZGVmcy5oXHUwMDNlXG5tbS9tZW1jb250cm9sLXYxLmg6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL21lbWNvbnRyb2wtdjEuaC04LVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG5tbS9tZW1jb250cm9sLmM6MjovKiBtZW1jb250cm9sLmMgLSBNZW1vcnkgQ29udHJvbGxlclxubW0vbWVtY29udHJvbC5jLTMtICpcbi0tXG5tbS9tZW1jb250cm9sLmMtMjktI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9jb3VudGVyLmhcdTAwM2Vcbm1tL21lbWNvbnRyb2wuYzozMDojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL21lbWNvbnRyb2wuYy0zMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9jZ3JvdXAuaFx1MDAzZVxuLS1cbm1tL21lbWNvbnRyb2wuYy03MC0jaW5jbHVkZSBcJiMzNDtzbGFiLmhcJiMzNDtcbm1tL21lbWNvbnRyb2wuYzo3MTojaW5jbHVkZSBcJiMzNDttZW1jb250cm9sLXYxLmhcJiMzNDtcbm1tL21lbWNvbnRyb2wuYy03Mi1cbi0tXG5tbS9tZW1vcnkuYy02MC0jaW5jbHVkZSBcdTAwM2NsaW51eC93cml0ZWJhY2suaFx1MDAzZVxubW0vbWVtb3J5LmM6NjE6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9tZW1vcnkuYy02Mi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbXVfbm90aWZpZXIuaFx1MDAzZVxuLS1cbm1tL21sb2NrLmMtMjQtI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG5tbS9tbG9jay5jOjI1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vbWxvY2suYy0yNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbV9pbmxpbmUuaFx1MDAzZVxuLS1cbm1tL21tYXBfbG9jay5jLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvY2dyb3VwLmhcdTAwM2Vcbm1tL21tYXBfbG9jay5jOjc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9tbWFwX2xvY2suYy04LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYXBfbG9jay5oXHUwMDNlXG4tLVxubW0vb29tX2tpbGwuYy0zNS0jaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG5tbS9vb21fa2lsbC5jOjM2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vb29tX2tpbGwuYy0zNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFx1MDAzZVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00OC0jaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX3RhYmxlX2NoZWNrLmhcdTAwM2Vcbm1tL3BhZ2VfYWxsb2MuYzo0OTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3BhZ2VfYWxsb2MuYy01MC0jaW5jbHVkZSBcdTAwM2NsaW51eC9mdHJhY2UuaFx1MDAzZVxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG5tbS9wYWdlX293bmVyLmM6MTM6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9wYWdlX293bmVyLmMtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY2xvY2suaFx1MDAzZVxuLS1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2Vcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC04LVxuLS1cbm1tL3BlcmNwdS5jLTg4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2Vcbm1tL3BlcmNwdS5jOjg5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vcGVyY3B1LmMtOTAtXG4tLVxubW0vcm1hcC5jLTY2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG5tbS9ybWFwLmM6Njc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9ybWFwLmMtNjgtI2luY2x1ZGUgXHUwMDNjbGludXgvbW11X25vdGlmaWVyLmhcdTAwM2Vcbi0tXG5tbS9zaHJpbmtlci5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm1tL3Nocmlua2VyLmM6MjojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3Nocmlua2VyLmMtMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9yd3NlbS5oXHUwMDNlXG4tLVxubW0vc2hyaW5rZXJfZGVidWcuYy02LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Nocmlua2VyLmhcdTAwM2Vcbm1tL3Nocmlua2VyX2RlYnVnLmM6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3Nocmlua2VyX2RlYnVnLmMtOC1cbi0tXG5tbS9zbGFiLmgtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxubW0vc2xhYi5oOjExOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vc2xhYi5oLTEyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2tmZW5jZS5oXHUwMDNlXG4tLVxubW0vc2xhYl9jb21tb24uYy0yOC0jaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5tbS9zbGFiX2NvbW1vbi5jOjI5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vc2xhYl9jb21tb24uYy0zMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdGFja2RlcG90LmhcdTAwM2Vcbi0tXG5tbS9zbHViLmMtNDMtI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxubW0vc2x1Yi5jOjQ0OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vc2x1Yi5jLTQ1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmRvbS5oXHUwMDNlXG4tLVxubW0vc3dhcC5oLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZSAvKiBmb3IgUEFHRV9TSElGVCAqL1xubW0vc3dhcC5oOjc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlIC8qIGZvciBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoKSAqL1xubW0vc3dhcC5oLTgtI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcC5oXHUwMDNlIC8qIGZvciBNQVhfU1dBUEZJTEVTX1NISUZULCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqL1xuLS1cbm1tL3N3YXBmaWxlLmMtMzQtI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY2FsbHMuaFx1MDAzZVxubW0vc3dhcGZpbGUuYzozNTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3N3YXBmaWxlLmMtMzYtI2luY2x1ZGUgXHUwMDNjbGludXgvcG9sbC5oXHUwMDNlXG4tLVxubW0vdm1hbGxvYy5jLTMzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2Vcbm1tL3ZtYWxsb2MuYzozNDojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3ZtYWxsb2MuYy0zNS0jaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4tLVxubW0vdm1wcmVzc3VyZS5jLTExLSAqIFRyZWUtbW9kZSAoY2dyb3VwIHYxIHVzZXJzcGFjZSBldmVudGZkKSBib29ra2VlcGluZyBsaXZlcyBpblxubW0vdm1wcmVzc3VyZS5jOjEyOiAqIG1tL21lbWNvbnRyb2wtdjEuYzsgdGhpcyBmaWxlIGhvbGRzIHRoZSBzaGFyZWQgY29kZSBhbmQgdGhlIGluLWtlcm5lbFxubW0vdm1wcmVzc3VyZS5jLTEzLSAqICh0cmVlPWZhbHNlKSBzb2NrZXQtcHJlc3N1cmUgcGF0aCB0aGF0IHJ1bnMgb24gY2dyb3VwIHYyLlxuLS1cbm1tL3Ztc2Nhbi5jLTQwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZyZWV6ZXIuaFx1MDAzZVxubW0vdm1zY2FuLmM6NDE6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS92bXNjYW4uYy00Mi0jaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlLmhcdTAwM2Vcbi0tXG5tbS93b3JraW5nc2V0LmMtNy1cbm1tL3dvcmtpbmdzZXQuYzo4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vd29ya2luZ3NldC5jLTktI2luY2x1ZGUgXHUwMDNjbGludXgvbW1faW5saW5lLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NzkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBLY29uZmlnIGZvciBNRU1DRyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gb24gc29saWQgZ3JvdW5kIHdpdGggbWVtb3J5IGNncm91cHMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyBpcyBzdGFuZGFyZCBvcGVyYXRpbmcgcHJvY2VkdXJlLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQgb3IgYXQgbGVhc3QgY29uZmlndXJhYmxlLCBhbmQgd2hhdCBpdHMgY3VycmVudCBzdGF0ZSBpcy4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpZiBJIGV2ZW4gKmhhdmUqIG1lbW9yeSBjZ3JvdXBzIHN1cHBvcnQgY29tcGlsZWQgaW4sIG9yIGlmIEkgbmVlZCB0byBkaWcgaW50byBidWlsZCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgaXQuIEkgbWlnaHQgYWxzbyBjaGVjayBmb3IgYXNzb2NpYXRlZCBvcHRpb25zIHRoYXQgY29udHJvbCBpdHMgYmVoYXZpb3IsIGxpa2UgbmVzdGVkIGNncm91cHMgb3IgYW55IHNwZWNpZmljIHJlc291cmNlIGxpbWl0cyBkZWZpbmVkLiBObyBwb2ludCBpbiB3YXN0aW5nIHRpbWUgaWYgSSYjMzk7bSBub3QgZXZlbiB3b3JraW5nIHdpdGggYSBrZXJuZWwgdGhhdCBzdXBwb3J0cyB0aGUgZnVuY3Rpb25hbGl0eSBJIG5lZWQuIFF1aWNrbHkgY2hlY2tpbmcgS2NvbmZpZyBwcm92aWRlcyBhIGZhc3Qgc2FuaXR5IGNoZWNrIGJlZm9yZSBwcm9jZWVkaW5nIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDg0LVxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA4Ni1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA5NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwMC1cbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTExMDItXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDctXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTA5LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzMzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgaW5pdC9LY29uZmlnYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlIG9mIHRoaXMgc3lzdGVtLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgaW5pdC9LY29uZmlnYCwgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBiZWdpbiBkaXNzZWN0aW5nIHRoZSBidWlsZC10aW1lIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGl0IGFyb3VuZCBsaW5lIDEwODUsIHRoYXQmIzM5O3MgZ2VuZXJhbGx5IHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgZWl0aGVyIGEgY29yZSBjb21wb25lbnQgb3IgYSBtb3JlIHNwZWNpYWxpemVkIG1vZHVsZSBkZWNsYXJhdGlvbi4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgdG8gd29yayB3aXRoLiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGNyaXRpY2FsIGRlZmluaXRpb25zIGluIHRoaXMgc2VjdGlvbiwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGVhcmx5IGJvb3QgcHJvY2VzcyBpcyBzaGFwZWQgYnkgdGhlIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODA6XHRcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXG4xMDgxOlx0XHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXG4xMDgyOlx0XG4xMDgzOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwODQ6XHRcbjEwODU6XHRjb25maWcgTUVNQ0dcbjEwODY6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODc6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODg6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDg5Olx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDkwOlx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwOTE6XHRcdGhlbHBcbjEwOTI6XHRcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxuMTA5MzpcdFxuMTA5NDpcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG4xMDk1Olx0XHRib29sXG4xMDk2Olx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMDk3Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMDk4Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5OTpcdFx0ZGVmYXVsdCB5XG4xMTAwOlx0XG4xMTAxOlx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4xMTAyOlx0XHRib29sXG4xMTAzOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTA0Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMTA1Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMTA2Olx0XHRkZWZhdWx0IHlcbjExMDc6XHRcbjExMDg6XHRjb25maWcgTUVNQ0dfVjFcbjExMDk6XHRcdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTExMDpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTExMTpcdFx0ZGVmYXVsdCBuXG4xMTEyOlx0XHRoZWxwXG4xMTEzOlx0XHQgIExlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIgd2hpY2ggaGFzIGJlZW4gZGVwcmVjYXRlZCBieVxuMTExNDpcdFx0ICBjZ3JvdXAgdjIgaW1wbGVtZW50YXRpb24uIFRoZSB2MSBpcyB0aGVyZSBmb3IgbGVnYWN5IGFwcGxpY2F0aW9uc1xuMTExNTpcdFx0ICB3aGljaCBoYXZlbiYjMzk7dCBtaWdyYXRlZCB0byB0aGUgbmV3IGNncm91cCB2MiBpbnRlcmZhY2UgeWV0LiBJZiB5b3VcbjExMTY6XHRcdCAgZG8gbm90IGhhdmUgYW55IHN1Y2ggYXBwbGljYXRpb24gdGhlbiB5b3UgYXJlIGNvbXBsZXRlbHkgZmluZSBsZWF2aW5nXG4xMTE3Olx0XHQgIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxuMTExODpcdFxuMTExOTpcdFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYGNvbmZpZyBNRU1DR2Ag4oCTIHRoYXTigJlzIGxpbmUgMTA4NSBpbiBgaW5pdC9LY29uZmlnYC4gVGltZSB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZC4gSSYjMzk7bGwgcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBsaW5lcywgc3BlY2lmaWNhbGx5IGZyb20gMTA2MCB0byAxMDg1LCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaW5mbHVlbmNpbmcgaXRzIGNvbmZpZ3VyYXRpb24uIFRoaXMgdXN1YWxseSByZXZlYWxzIHRoZSByZWxldmFudCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBhbmQgYW55IGFzc29jaWF0ZWQgY29uZGl0aW9uYWwgbG9naWMgd2l0aGluIHRoYXQgc2VnbWVudCBvZiB0aGUgS2NvbmZpZyBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY29uZGl0aW9ucyByZWxhdGVkIHRvIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzLCBvciBwZXJoYXBzIHNvbWUgcHJlcHJvY2Vzc29yIG1hY3JvcyB0aGF0IGFyZSByZWxldmFudCB0byBtZW1vcnkgY29udHJvbCBncm91cHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjA6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBncm91cGluZyBzZXRzIG9mIHByb2Nlc3NlcyB0b2dldGhlciwgZm9yXG4xMDYxOlx0XHQgIHVzZSB3aXRoIHByb2Nlc3MgY29udHJvbCBzdWJzeXN0ZW1zIHN1Y2ggYXMgQ3B1c2V0cywgQ0ZTLCBtZW1vcnlcbjEwNjI6XHRcdCAgY29udHJvbHMgb3IgZGV2aWNlIGlzb2xhdGlvbi5cbjEwNjM6XHRcdCAgU2VlXG4xMDY0Olx0XHRcdC0gRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZGVzaWduLUNGUy5yc3RcdChDRlMpXG4xMDY1Olx0XHRcdC0gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvIChmZWF0dXJlcyBmb3IgZ3JvdXBpbmcsIGlzb2xhdGlvblxuMTA2NjpcdFx0XHRcdFx0XHQgIGFuZCByZXNvdXJjZSBjb250cm9sKVxuMTA2NzpcdFxuMTA2ODpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDY5Olx0XG4xMDcwOlx0aWYgQ0dST1VQU1xuMTA3MTpcdFxuMTA3MjpcdGNvbmZpZyBQQUdFX0NPVU5URVJcbjEwNzM6XHRcdGJvb2xcbjEwNzQ6XHRcbjEwNzU6XHRjb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbjEwNzY6XHRcdGJvb2wgXCYjMzQ7RmF2b3IgZHluYW1pYyBtb2RpZmljYXRpb24gbGF0ZW5jeSByZWR1Y3Rpb24gYnkgZGVmYXVsdFwmIzM0O1xuMTA3NzpcdFx0aGVscFxuMTA3ODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBcJiMzNDtmYXZvcmR5bm1vZHNcJiMzNDsgbW91bnQgb3B0aW9uIGJ5IGRlZmF1bHRcbjEwNzk6XHRcdCAgd2hpY2ggcmVkdWNlcyB0aGUgbGF0ZW5jaWVzIG9mIGR5bmFtaWMgY2dyb3VwIG1vZGlmaWNhdGlvbnMgc3VjaFxuMTA4MDpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwODE6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwODI6XHRcbjEwODM6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA4NDpcdFxuMTA4NTpcdGNvbmZpZyBNRU1DR1xuMTA4NjpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4NzpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4ODpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODk6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3OTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWVtY2cgUGF0Y2g6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggY29uY2VybmluZyBgQ0dST1VQU2AgYW5kIGBNRU1DR2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGB0cnlfY2hhcmdlX21lbWNnYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZy4gSXQgYXBwZWFycyB0byBiZSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgYG1lbW9yeS5tYXhgIGV2ZW50cy4KCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBwcmV2aW91c2x5LCB3aGVuIGEgbm9uLWJsb2NraW5nIGFsbG9jYXRpb24gKGUuZy4sIGBHRlBfQVRPTUlDYCwgYEdGUF9OT1dBSVRgKSBoaXQgdGhlIGBtZW1vcnkubWF4YCBsaW1pdCwgdGhlIGNvZGUgd291bGQganVtcCB0byBgbm9tZW1gIGJlZm9yZSB0cmlnZ2VyaW5nIHRoZSBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGNhbGwuIFRoaXMgbWVhbnQgdGhhdCB0aGUgJiMzNDttYXgmIzM0OyBjb3VudGVyIGluIGBtZW1vcnkuZXZlbnRzYCB3YXNuJiMzOTt0IGJlaW5nIGluY3JlbWVudGVkLCB3aGljaCBzZWVtcyBsaWtlIGEgYnVnLiBTaW1pbGFybHksIHRhc2tzIGluIE9PTSBvciBleGl0aW5nIE9PTSB2aWN0aW1zIGFsc28gd291bGRuJiMzOTt0IHRyaWdnZXIgdGhlIGV2ZW50LgoKVGhlIHBhdGNoJiMzOTtzIGNvcmUgY2hhbmdlIGlzIG1vdmluZyB0aGUgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCBjYWxsICphYm92ZSogdGhlc2UgYmFpbC1vdXQgY2hlY2tzLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgZ3VhcmFudGVlcyB0aGF0ICphbnkqIGZhaWxlZCBjaGFyZ2UgYWdhaW5zdCBgbWVtb3J5Lm1heGAgKG9yIGBtZW1vcnkuc3dhcC5tYXhgKSB3aWxsIG5vdyBjb3JyZWN0bHkgaW5jcmVtZW50IHRoZSAmIzM0O21heCYjMzQ7IGNvdW50ZXIgaW4gYG1lbW9yeS5ldmVudHNgIChhbmQgYGV2ZW50cy5sb2NhbGApLiBUaGlzIHNob3VsZCBlbnN1cmUgcHJvcGVyIG5vdGlmaWNhdGlvbiB0byBsaXN0ZW5lcnMgdmlhIGlub3RpZnkvZXBvbGwgb24gY2dyb3VwIHYyLiBUaGlzIHNlZW1zIHRvIGNvcnJlY3QgYSBjbGVhciBidWcgYW5kIGltcHJvdmUgbW9uaXRvcmluZyBvZiBtZW1jZyBldmVudHMuCgpUaGUgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgbWVyaXRzIGZ1enppbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bGwgYXBwbHkgdGhlIGNyaXRlcmlhOiB0aGlzIHBhdGNoIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIChzcGVjaWZpY2FsbHksIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiBgbWVtY2dgKS4gSXQmIzM5O3MgZGlyZWN0bHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCBpdCBzYXRpc2ZpZXMgdGhlIGNvbmRpdGlvbnMgZm9yIGJlaW5nIHdvcnRoIGZ1enppbmcuCgpJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgdGhvdWdoLgpUaGUgY29kZSBwYXNzZXMgYGFsbG93X3NwaW5uaW5nYCB0byBgX19tZW1jZ19tZW1vcnlfZXZlbnRgLiBJJiMzOTtsbCBsb29rIGludG8gaXQuClRoZSBjb2RlIHVzZXMgYGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSAmYW1wOyZhbXA7ICEoY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfTUVNQUxMT0MpYCB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIHRoaXMgZmxhZy4KSSBzaG91bGQgY29uZmlybSBpdHMgdXNhZ2UgdG8gZW5zdXJlIHRoYXQgaXQmIzM5O3Mgc2FmZSB0byBjYWxsIHRoZSBtZW1jZyBldmVudCBmcm9tIGF0b21pYyBjb250ZXh0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2NDA6XHRcbjI2NDE6XHRvdXQ6XG4yNjQyOlx0XHRjc3NfcHV0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4yNjQzOlx0fVxuMjY0NDpcdFxuMjY0NTpcdHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuMjY0NjpcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4yNjQ3Olx0e1xuMjY0ODpcdFx0dW5zaWduZWQgaW50IGJhdGNoID0gbWF4KE1FTUNHX0NIQVJHRV9CQVRDSCwgbnJfcGFnZXMpO1xuMjY0OTpcdFx0aW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuMjY1MDpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9vdmVyX2xpbWl0O1xuMjY1MTpcdFx0c3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjtcbjI2NTI6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkO1xuMjY1MzpcdFx0Ym9vbCBwYXNzZWRfb29tID0gZmFsc2U7XG4yNjU0Olx0XHR1bnNpZ25lZCBpbnQgcmVjbGFpbV9vcHRpb25zO1xuMjY1NTpcdFx0Ym9vbCBkcmFpbmVkID0gZmFsc2U7XG4yNjU2Olx0XHRib29sIHJhaXNlZF9tYXhfZXZlbnQgPSBmYWxzZTtcbjI2NTc6XHRcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuMjY1ODpcdFx0Ym9vbCBhbGxvd19zcGlubmluZyA9IGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKGdmcF9tYXNrKTtcbjI2NTk6XHRcbjI2NjA6XHRyZXRyeTpcbjI2NjE6XHRcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4yNjYyOlx0XHRcdHJldHVybiAwO1xuMjY2MzpcdFxuMjY2NDpcdFx0aWYgKCFhbGxvd19zcGlubmluZylcbjI2NjU6XHRcdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG4yNjY2Olx0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4yNjY3Olx0XG4yNjY4Olx0XHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuMjY2OTpcdFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NjQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE1lbW9yeSBDb250cm9sIGluIHRoZSBMaW51eCBLZXJuZWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7dmUgZ290IGEgc2VjdGlvbiBvZiBrZXJuZWwgY29kZSByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIChgbW0vbWVtY29udHJvbC5jYCkgdGhhdCYjMzk7cyBjbGVhcmx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUga2V5IGlzIGhvdyBtZW1vcnkgbGltaXRzIGFyZSBoYW5kbGVkIGFuZCByZXBvcnRlZCB0aHJvdWdoIHRoZSBgbWVtY2dgIG1lY2hhbmlzbS4gSSBjYW4gc2VlIHRoZSBjb2RlIGZvY3VzZXMgb24gZXZlbnQgdHJhY2tpbmcgYW5kIG5vdGlmaWNhdGlvbnMgcmVsYXRlZCB0byBoaXR0aW5nIHRob3NlIGxpbWl0cywgYW5kIEkgbm90ZSB0aGF0IGl0IGFmZmVjdHMgc2V2ZXJhbCBrZXkgYXJlYXM6IG1lbWNnIGNoYXJnaW5nLCBldmVudCByZXBvcnRpbmcsIGNncm91cCBmaWxlIG5vdGlmaWNhdGlvbnMuIEdpdmVuIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLCBmaW5kaW5nIGEgdnVsbmVyYWJpbGl0eSBoZXJlIHdvdWxkIGhhdmUgc2lnbmlmaWNhbnQgY29uc2VxdWVuY2VzLiBJIGNhbiBhbHNvIHRyaWdnZXIgdGhpcyBsb2dpYyBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB3aXRob3V0IHNwZWNpYWwgaGFyZHdhcmUuCgpNeSBmaXJzdCB0aG91Z2h0LCBpcyB0aGF0IGBXb3J0aEZ1enppbmcgPSB0cnVlYCwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZW50cnlwb2ludHMgZm9yIGEgZnV6emVyIHRvIHRhcmdldC4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgQVBJIGVudHJ5cG9pbnRzIOKAkyBzcGVjaWZpY2FsbHksIGFueSBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbnMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gdGhpcyBjb2RlIHBhdGguIEkgd2lsbCBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGNvcmUgZnVuY3Rpb24gYW5kIGZpbmQgb3V0IGhvdyB0byB0cmlnZ2VyIGl0LiBJJiMzOTtsbCBsb29rIGZvciBmdW5jdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2Agb3IgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgY2FsbCBgdHJ5X2NoYXJnZV9tZW1jZ2Agb3Igc2ltaWxhciBmdW5jdGlvbnMgdGhhdCB0cmlnZ2VyIG1lbWNnIGNoYXJnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfY2dyb3VwLmM9MjU2PXN0YXRpYyBpbnQgX19odWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwKGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vaHVnZXRsYl9jZ3JvdXAuYy0yNzQtXG5tbS9odWdldGxiX2Nncm91cC5jOjI3NTpcdGlmICghcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXG5tbS9odWdldGxiX2Nncm91cC5jLTI3Ni1cdFx0ICAgIF9faHVnZXRsYl9jZ3JvdXBfY291bnRlcl9mcm9tX2Nncm91cChoX2NnLCBpZHgsIHJzdmQpLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yNTQxPWJvb2wgbWVtY2cxX2NoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjU0NS1cbm1tL21lbWNvbnRyb2wtdjEuYzoyNTQ2Olx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXRjcG1lbSwgbnJfcGFnZXMsIFx1MDAyNmZhaWwpKSB7XG5tbS9tZW1jb250cm9sLXYxLmMtMjU0Ny1cdFx0bWVtY2ctXHUwMDNldGNwbWVtX3ByZXNzdXJlID0gMDtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjUxOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfaGlnaF9kZWxheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTI1NTEtICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tXG5tbS9tZW1jb250cm9sLmM6MjU1MjogKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmRcbm1tL21lbWNvbnRyb2wuYy0yNTUzLSAqIHJldHVybiBwYXRoIHdoZXJlIHJlY2xhaW0gaXMgYWx3YXlzIGFibGUgdG8gYmxvY2suXG4tLVxubW0vbWVtY29udHJvbC5jPTI1NTU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjY0NC1cbm1tL21lbWNvbnRyb2wuYzoyNjQ1OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxubW0vbWVtY29udHJvbC5jLTI2NDYtXHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjY2OS1cdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XG5tbS9tZW1jb250cm9sLmM6MjY3MDpcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG5tbS9tZW1jb250cm9sLmM6MjY3MTpcdFx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKVxubW0vbWVtY29udHJvbC5jLTI2NzItXHRcdFx0Z290byBkb25lX3Jlc3RvY2s7XG4tLVxubW0vbWVtY29udHJvbC5jLTI4NDgtXG5tbS9tZW1jb250cm9sLmM6Mjg0OTpzdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9tZW1jb250cm9sLmMtMjg1MC1cdFx0XHQgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg1NC1cbm1tL21lbWNvbnRyb2wuYzoyODU1Olx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMjg1Ni19XG4tLVxubW0vbWVtY29udHJvbC5jPTMxNDg9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE1NS1cbm1tL21lbWNvbnRyb2wuYzozMTU2Olx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzE1Ny1cdGlmIChyZXQpXG4tLVxubW0vbWVtY29udHJvbC5jPTUxOTY9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjA0LVx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxubW0vbWVtY29udHJvbC5jOjUyMDU6XHRcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01MjA2LVx0aWYgKHJldCkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NjE2PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU2MjMtXG5tbS9tZW1jb250cm9sLmM6NTYyNDpcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcbm1tL21lbWNvbnRyb2wuYy01NjI1LVx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTY4Mj1pbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzE5LS8qKlxubW0vbWVtY29udHJvbC5jOjU3MjA6ICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTcyMS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcbi0tXG5tbS9tZW1jb250cm9sLmMtNTcyNi0gKi9cbm1tL21lbWNvbnRyb2wuYzo1NzI3OmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1jb250cm9sLmMtNTcyOC17XG4tLVxubW0vbWVtY29udHJvbC5jLTU3NTUtXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgXHUwMDI2XHUwMDI2XG5tbS9tZW1jb250cm9sLmM6NTc1NjpcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFx1MDAyNmNvdW50ZXIpKSB7XG5tbS9tZW1jb250cm9sLmMtNTc1Ny1cdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7XG4tLVxubW0vcGFnZV9jb3VudGVyLmM9NzY9dm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtMTA5LS8qKlxubW0vcGFnZV9jb3VudGVyLmM6MTEwOiAqIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlIC0gdHJ5IHRvIGhpZXJhcmNoaWNhbGx5IGNoYXJnZSBwYWdlc1xubW0vcGFnZV9jb3VudGVyLmMtMTExLSAqIEBjb3VudGVyOiBjb3VudGVyXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtMTE3LSAqL1xubW0vcGFnZV9jb3VudGVyLmM6MTE4OmJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbm1tL3BhZ2VfY291bnRlci5jLTExOS1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vcGFnZV9jb3VudGVyLmM9MTk3PWludCBwYWdlX2NvdW50ZXJfc2V0X21heChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3BhZ2VfY291bnRlci5jLTIwOC1cdFx0ICogYW5kIGFmdGVyLCBzbyB0aGUgcmVhZC1zd2FwLXJlYWQgaXMgb3JkZXJlZCBhbmRcbm1tL3BhZ2VfY291bnRlci5jOjIwOTpcdFx0ICogZW5zdXJlcyBjb2hlcmVuY3kgd2l0aCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZSgpOlxubW0vcGFnZV9jb3VudGVyLmMtMjEwLVx0XHQgKiB0aGF0IGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBjb3VudCBiZWZvcmUgY2hlY2tpbmdcbi0tXG5tbS9zd2FwZmlsZS5jPTE3NDA9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwZmlsZS5jLTE3NzctXHQvKiBOZWVkIHRvIGNhbGwgdGhpcyBldmVuIGlmIGFsbG9jYXRpb24gZmFpbGVkLCBmb3IgTUVNQ0dfU1dBUF9GQUlMLiAqL1xubW0vc3dhcGZpbGUuYzoxNzc4Olx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpXG5tbS9zd2FwZmlsZS5jLTE3NzktXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDb250cm9sIEdyb3VwIENoYXJnZSBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbWVtb3J5IGNoYXJnZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW52b2tlIGB0cnlfY2hhcmdlX21lbWNnYC4KCkl0IGxvb2tzIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGFyZTogYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCwgYGNoYXJnZV9tZW1jZ2AsIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AsIGFuZCB0aGF0IGludHJpZ3VpbmcgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YC4gSSYjMzk7bGwgd2FudCB0byBwYXkgcGFydGljdWxhcmx5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhhdCBsYXN0IG9uZSBpcyBtb2RpZmllZCBhdCBpdHMgY2FsbHNpdGUuCgpgY2hhcmdlX21lbWNnYCBzZWVtcyB0byBiZSBjZW50cmFsLCBiZWluZyBjYWxsZWQgYnkgYSBmZXcgaW1wb3J0YW50IG90aGVycyBsaWtlIGBtZW1fY2dyb3VwX2NoYXJnZWAgYW5kIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLiBOb3csIGxldCYjMzk7cyBzcGVjaWZpY2FsbHkgZXhhbWluZSB0aGUgYG1lbV9jZ3JvdXBfY2hhcmdlYCBmdW5jdGlvbiBhbmQgaXRzIGNhbGxlcnMgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGUgY29yZSBtZW1vcnkgY2hhcmdpbmcgbG9naWMgcmVzaWRlcy4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFyZ2VfbWVtY2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI1NTU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjY0NC1cbm1tL21lbWNvbnRyb2wuYzoyNjQ1OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxubW0vbWVtY29udHJvbC5jLTI2NDYtXHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjg0OT1zdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vbWVtY29udHJvbC5jLTI4NTQtXG5tbS9tZW1jb250cm9sLmM6Mjg1NTpcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTI4NTYtfVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zMTQ4PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG4tLVxubW0vbWVtY29udHJvbC5jLTMxNTUtXG5tbS9tZW1jb250cm9sLmM6MzE1NjpcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTMxNTctXHRpZiAocmV0KVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MTgxPXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTE5NS1cbm1tL21lbWNvbnRyb2wuYzo1MTk2OnN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wuYy01MTk3LVx0XHRcdGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTIwNC1cdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcbm1tL21lbWNvbnRyb2wuYzo1MjA1Olx0XHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG5tbS9tZW1jb250cm9sLmMtNTIwNi1cdGlmIChyZXQpIHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTIxNj1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjIxLVx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcbm1tL21lbWNvbnRyb2wuYzo1MjIyOlx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcbm1tL21lbWNvbnRyb2wuYy01MjIzLVx0Y3NzX3B1dChcdTAwMjZtZW1jZy1cdTAwM2Vjc3MpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MjQwPWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI1My1cbm1tL21lbWNvbnRyb2wuYzo1MjU0Olx0aWYgKGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCkpXG5tbS9tZW1jb250cm9sLmMtNTI1NS1cdFx0cmV0ID0gLUVOT01FTTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTI3ND1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01Mjg4LVxubW0vbWVtY29udHJvbC5jOjUyODk6XHRyZXQgPSBjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApO1xubW0vbWVtY29udHJvbC5jLTUyOTAtXG4tLVxubW0vbWVtY29udHJvbC5jPTU2MTY9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTYyMy1cbm1tL21lbWNvbnRyb2wuYzo1NjI0Olx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xubW0vbWVtY29udHJvbC5jLTU2MjUtXHRcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgxMQoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiA2MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IENvbnRyb2xsZXIgRnVuY3Rpb25hbGl0eSBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkga2VybmVsIGZ1bmN0aW9ucyBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZSwgZXNwZWNpYWxseSB0aG9zZSByZWxldmFudCBmb3IgZnV6emluZywga2VlcGluZyBpbiBtaW5kIHRoZSBuZWVkIHRvIGF2b2lkIGdlbmVyaWMgZnVuY3Rpb25zIGFuZCBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4KCkkmIzM5O20gc3RhcnRpbmcgYnkgbG9va2luZyBhdCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG1lbnRpb25lZDogYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCwgYWxvbmcgd2l0aCBgX19tZW1jZ19tZW1vcnlfZXZlbnRgLiBJJiMzOTttIHZlcmlmeWluZyB0aGF0IGBfX21lbWNnX21lbW9yeV9ldmVudGAgaXMgaW5kZWVkIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLgoKVGhlIGNvcmUgb2YgdGhlIG1hdHRlciBzZWVtcyB0byBiZSBpbiBgdHJ5X2NoYXJnZV9tZW1jZ2AsIHdoZXJlIHRoZSBwYXRjaCBhZmZlY3RzIHdoZW4gYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCBnZXRzIGNhbGxlZC4gVGhpcyBtYWtlcyBpdCBhIGRpcmVjdCB0YXJnZXQsIGFuZCwgYnkgZXh0ZW5zaW9uLCB0aGUgb3RoZXIgY2hhcmdlIGZ1bmN0aW9ucyB0b28sIHNvIEkmIzM5O2xsIGluY2x1ZGUgdGhlbSBpbiBteSBGb2N1c1N5bWJvbHMuCgpOb3csIGxldCYjMzk7cyBleGFtaW5lIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBjaGVja2luZyBgS2NvbmZpZ2AgZm9yIHRoZSBgTUVNQ0dgIGNvbmZpZ3VyYXRpb24sIHNpbmNlIHRoaXMgaXMgaW4gdGhlIG1lbW9yeSBjb250cm9sIG1vZHVsZS4gSSBmb3VuZCBpdCwgYW5kIGl0IGRlcGVuZHMgb24gYENHUk9VUFNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgbm8gb3RoZXIgY29uZmlncyBhcmUgbmVlZGVkLiBMb29raW5nIGF0IGBpbml0L0tjb25maWdgIGFnYWluLCBpdCBsb29rcyBsaWtlIGBNRU1DR2Agc2VsZWN0cyBgUEFHRV9DT1VOVEVSYCwgYEVWRU5URkRgLCBgU0xBQl9PQkpfRVhUYCwgYW5kIGBWTV9FVkVOVF9DT1VOVEVSU2AgYnV0IHRoZXNlIGFyZSBhbGwgc2VsZWN0ZWQgYW5kIHNob3VsZCBub3QgcmVxdWlyZSBhbnkgZnVydGhlciBjb25zaWRlcmF0aW9uLgoKU28sIGluIHN1bW1hcnksIEkmIzM5O20gc2V0dGluZyB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyB0byB0cnVlLCBhbmQgbXkgYEZvY3VzU3ltYm9sc2AgYXJlIGBfX21lbWNnX21lbW9yeV9ldmVudGAsIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAsIGBfX21lbV9jZ3JvdXBfY2hhcmdlYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBhbmQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBDR1JPVVBTYCBhbmQgYE1FTUNHYC4gTXkgcmVhc29uaW5nIGNlbnRlcnMgb24gdGhlIGNoYW5nZSBpbiBldmVudCByZXBvcnRpbmcgYmVoYXZpb3IgaW4gdGhlIG1lbW9yeSBjb250cm9sbGVyIGR1cmluZyBjaGFyZ2luZyBhZ2FpbnN0IGBtZW1vcnkubWF4YCBpbiBub24tYmxvY2tpbmcgb3IgT09NIHNjZW5hcmlvcy4gVGhpcyBpbXBhY3RzIGZ1bmN0aW9uIHJlYWNoYWJpbGl0eSBhbmQgZnVuY3Rpb25hbCBpbXBhY3QsIHdoaWNoIG1ha2VzIHRoaXMgd29ydGh3aGlsZSBmb3IgZnV6emluZy4KCkZpbmFsbHksIEkgd2lsbCBydW4gdGhlIHNldC1yZXN1bHRzIHRvb2wgZm9yIGEgc2FuaXR5IGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbWVtY2dfbWVtb3J5X2V2ZW50JiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2tfY2hhcmdlJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgKG1lbWNnKSBjaGFyZ2luZyBwYXRoIGluIHRyeV9jaGFyZ2VfbWVtY2coKSB0byByYWlzZSBNRU1DR19NQVggbWVtb3J5IGV2ZW50cyBpbW1lZGlhdGVseSB3aGVuIHRoZSBwYWdlIGNvdW50ZXIgZXhjZWVkcyB0aGUgbGltaXQsIGJlZm9yZSBhbnkgZWFybHkgYmFpbC1vdXRzIChzdWNoIGFzIG5vbi1ibG9ja2luZyBhbGxvY2F0aW9ucywgT09NIHRhc2tzLCBvciBleGl0aW5nIE9PTSB2aWN0aW1zKS4gVGhpcyBmdW5jdGlvbmFsbHkgYWZmZWN0cyBtZW1vcnkgZXZlbnQgY291bnRpbmcgYW5kIG5vdGlmaWNhdGlvbnMgZm9yIG1lbW9yeS5ldmVudHMgYW5kIG1lbW9yeS5ldmVudHMubG9jYWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX21lbWNnX21lbW9yeV9ldmVudCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3NrX2NoYXJnZSYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBjb250cm9sbGVyIChtZW1jZykgY2hhcmdpbmcgcGF0aCBpbiB0cnlfY2hhcmdlX21lbWNnKCkgdG8gcmFpc2UgTUVNQ0dfTUFYIG1lbW9yeSBldmVudHMgaW1tZWRpYXRlbHkgd2hlbiB0aGUgcGFnZSBjb3VudGVyIGV4Y2VlZHMgdGhlIGxpbWl0LCBiZWZvcmUgYW55IGVhcmx5IGJhaWwtb3V0cyAoc3VjaCBhcyBub24tYmxvY2tpbmcgYWxsb2NhdGlvbnMsIE9PTSB0YXNrcywgb3IgZXhpdGluZyBPT00gdmljdGltcykuIFRoaXMgZnVuY3Rpb25hbGx5IGFmZmVjdHMgbWVtb3J5IGV2ZW50IGNvdW50aW5nIGFuZCBub3RpZmljYXRpb25zIGZvciBtZW1vcnkuZXZlbnRzIGFuZCBtZW1vcnkuZXZlbnRzLmxvY2FsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbnRyb2wgZmxvdyBpbiBgdHJ5X2NoYXJnZV9tZW1jZygpYCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2Agc28gdGhhdCB0aGUgYE1FTUNHX01BWGAgZXZlbnQgKGBfX21lbWNnX21lbW9yeV9ldmVudGApIGlzIHJlY29yZGVkIGVhcmxpZXIgd2hlbmV2ZXIgYSBtZW1vcnkgY2dyb3VwIGxpbWl0IGlzIGV4Y2VlZGVkLCBlbnN1cmluZyBpdCBpcyBhY2NvdW50ZWQgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBiYWlscyBvdXQgZWFybHkgKGUuZy4gbm9uLWJsb2NraW5nIEdGUCBtYXNrcyBvciBPT00gc2NlbmFyaW9zKS5cblxuQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoYG1lbV9vdmVyX2xpbWl0YCwgYGFsbG93X3NwaW5uaW5nYCwgYHJhaXNlZF9tYXhfZXZlbnRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucyB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZzsgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCB0ZXN0IGNvbmZpZ3VyYXRpb25zIGFyZSBhcHByb3ByaWF0ZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTZmZThkZjU2YTI4ZGRiNzkxMmI3MzM1NWQ2NmI2MGYyMmNiNzZhMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDIzOjM3OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDEyNzFkMzkwYjYxN2UuLjM5MDRmZTlhN2IyZTkgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTI2ODMsNiAmIzQzOzI2ODMsMTEgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssCiAJCWdvdG8gcmV0cnk7CiAJfQogCiYjNDM7CWlmICghcmFpc2VkX21heF9ldmVudCkgewomIzQzOwkJX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpOwomIzQzOwkJcmFpc2VkX21heF9ldmVudCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvCiAJICogYWxsb2NhdGUgbWVtb3J5LiBUaGlzIG1pZ2h0IGV4Y2VlZCB0aGUgbGltaXRzIHRlbXBvcmFyaWx5LApAQCAtMjcxMSw5ICYjNDM7MjcxNiw2IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLAogCSAgICBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgY3VycmVudC0mZ3Q7c2lnbmFsLSZndDtvb21fbW0pKQogCQlnb3RvIG5vbWVtOwogCi0JX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpOwotCXJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlOwotCiAJcHNpX21lbXN0YWxsX2VudGVyKCZhbXA7cGZsYWdzKTsKIAlucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcywKIAkJCQkJCSAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTsKQEAgLTI3NzMsMTMgJiM0MzsyNzc1LDYgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssCiAJaWYgKCEoZ2ZwX21hc2sgJmFtcDsgKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpKSkKIAkJcmV0dXJuIC1FTk9NRU07CiBmb3JjZToKLQkvKgotCSAqIElmIHRoZSBhbGxvY2F0aW9uIGhhcyB0byBiZSBlbmZvcmNlZCwgZG9uJiMzOTt0IGZvcmdldCB0byByYWlzZQotCSAqIGEgTUVNQ0dfTUFYIGV2ZW50LgotCSAqLwotCWlmICghcmFpc2VkX21heF9ldmVudCkKLQkJX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpOwotCiAJLyoKIAkgKiBUaGUgYWxsb2NhdGlvbiBlaXRoZXIgY2FuJiMzOTt0IGZhaWwgb3Igd2lsbCBsZWFkIHRvIG1vcmUgbWVtb3J5CiAJICogYmVpbmcgZnJlZWQgdmVyeSBzb29uLiAgQWxsb3cgbWVtb3J5IHVzYWdlIGdvIG92ZXIgdGhlIGxpbWl0CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDU0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgZGlyZWN0aXZlcywgc3RydWN0dXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50IG9mIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBtbS9tZW1jb250cm9sLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBkaWZmIGFuZCBzdXJyb3VuZGluZyBjb2RlIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBzdWdnZXN0cyB0aGVyZSYjMzk7cyBzb21lIGNoYW5nZSBvciBidWcgcmVwb3J0IEkgbmVlZCB0byB1bmRlcnN0YW5kLCBhbmQgdGhpcyBmaWxlIGlzIHRoZSBmb2NhbCBwb2ludC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHdhbnQgdG8gdXNlIGByZWFkLWZpbGVgLCBsaWtlbHkgYXJvdW5kIGxpbmUgMjY4MC4gVGhhdCBsaW5lIG51bWJlciB3aWxsIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgcG9pbnQgdG8gZXhhbWluZSB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlIG9yIGlzc3VlLiBUaGlzIGlzIG15IGdvLXRvIGFwcHJvYWNoIOKAkyBjb250ZXh0IGZpcnN0LCB0aGVuIHRoZSBzcGVjaWZpYyBtb2RpZmljYXRpb24sIGhlbHBzIG1lIGdldCB0aGUgZnVsbCBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2NjA6XHRyZXRyeTpcbjI2NjE6XHRcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4yNjYyOlx0XHRcdHJldHVybiAwO1xuMjY2MzpcdFxuMjY2NDpcdFx0aWYgKCFhbGxvd19zcGlubmluZylcbjI2NjU6XHRcdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG4yNjY2Olx0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4yNjY3Olx0XG4yNjY4Olx0XHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuMjY2OTpcdFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbjI2NzA6XHRcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG4yNjcxOlx0XHRcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIGJhdGNoLCBcdTAwMjZjb3VudGVyKSlcbjI2NzI6XHRcdFx0XHRnb3RvIGRvbmVfcmVzdG9jaztcbjI2NzM6XHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbjI2NzQ6XHRcdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIGJhdGNoKTtcbjI2NzU6XHRcdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpO1xuMjY3NjpcdFx0fSBlbHNlIHtcbjI2Nzc6XHRcdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XG4yNjc4Olx0XHRcdHJlY2xhaW1fb3B0aW9ucyBcdTAwMjY9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuMjY3OTpcdFx0fVxuMjY4MDpcdFxuMjY4MTpcdFx0aWYgKGJhdGNoIFx1MDAzZSBucl9wYWdlcykge1xuMjY4MjpcdFx0XHRiYXRjaCA9IG5yX3BhZ2VzO1xuMjY4MzpcdFx0XHRnb3RvIHJldHJ5O1xuMjY4NDpcdFx0fVxuMjY4NTpcdFxuMjY4NjpcdFx0aWYgKCFyYWlzZWRfbWF4X2V2ZW50KSB7XG4yNjg3Olx0XHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbjI2ODg6XHRcdFx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XG4yNjg5Olx0XHR9XG4yNjkwOlx0XG4yNjkxOlx0XHQvKlxuMjY5MjpcdFx0ICogUHJldmVudCB1bmJvdW5kZWQgcmVjdXJzaW9uIHdoZW4gcmVjbGFpbSBvcGVyYXRpb25zIG5lZWQgdG9cbjI2OTM6XHRcdCAqIGFsbG9jYXRlIG1lbW9yeS4gVGhpcyBtaWdodCBleGNlZWQgdGhlIGxpbWl0cyB0ZW1wb3JhcmlseSxcbjI2OTQ6XHRcdCAqIGJ1dCB3ZSBwcmVmZXIgZmFjaWxpdGF0aW5nIG1lbW9yeSByZWNsYWltIGFuZCBnZXR0aW5nIGJhY2tcbjI2OTU6XHRcdCAqIHVuZGVyIHRoZSBsaW1pdCBvdmVyIHRyaWdnZXJpbmcgT09NIGtpbGxzIGluIHRoZXNlIGNhc2VzLlxuMjY5NjpcdFx0ICovXG4yNjk3Olx0XHRpZiAodW5saWtlbHkoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpKVxuMjY5ODpcdFx0XHRnb3RvIGZvcmNlO1xuMjY5OTpcdFxuMjcwMDpcdFx0aWYgKHVubGlrZWx5KHRhc2tfaW5fbWVtY2dfb29tKGN1cnJlbnQpKSlcbjI3MDE6XHRcdFx0Z290byBub21lbTtcbjI3MDI6XHRcbjI3MDM6XHRcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxuMjcwNDpcdFx0XHRnb3RvIG5vbWVtO1xuMjcwNTpcdFxuMjcwNjpcdFx0LypcbjI3MDc6XHRcdCAqIE9PTSB2aWN0aW0gc3RpbGwgbmVlZHMgdG8gY2hhcmdlIG1lbW9yeSB0byBleGl0LiBPT00gcmVhcGVyIHNob3VsZFxuMjcwODpcdFx0ICogaGVscCBidXQgaXQgbWlnaHQgZmFpbCBvbiBtbWFwX2xvY2sgY29udGVudGlvbi4gSWYgdGhlIHZpY3RpbSBpcyBhXG4yNzA5Olx0XHQgKiBsYXJnZSB0aHJlYWQgZ3JvdXAgdGhlbiBhbGwgZXhpdGluZyB0aHJlYWRzIG1pZ2h0IGNvbXBldGUgb24gb29tX2xvY2tcbjI3MTA6XHRcdCAqIGp1c3QgdG8gbGVhcm4gdGhhdCB0aGVyZSBpcyBub3RoaW5nIHJlYWxseSBraWxsYWJsZSBhbnltb3JlLiBCYWlsXG4yNzExOlx0XHQgKiBvdXQgZWFybHkgYW5kIGZhaWwgdGhlIGNoYXJnZSB0byBleHBlZGl0ZSB0aGVpciBleGl0LiBUaGV5IGFyZVxuMjcxMjpcdFx0ICogY29uc2lkZXJlZCBmdWxseSByZWNsYWltZWQgYnkgdGhlIG9vbSByZWFwZXIgYW5kIHRoZXkgc2hvdWxkbiYjMzk7dFxuMjcxMzpcdFx0ICogY29udHJpYnV0ZSBmdXJ0aGVyIGNoYXJnZXMuXG4yNzE0Olx0XHQgKi9cbjI3MTU6XHRcdGlmICh0c2tfaXNfb29tX3ZpY3RpbShjdXJyZW50KSBcdTAwMjZcdTAwMjZcbjI3MTY6XHRcdCAgICBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlb29tX21tKSlcbjI3MTc6XHRcdFx0Z290byBub21lbTtcbjI3MTg6XHRcbjI3MTk6XHRcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuMjcyMDpcdFx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXG4yNzIxOlx0XHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuMjcyMjpcdFx0cHNpX21lbXN0YWxsX2xlYXZlKFx1MDAyNnBmbGFncyk7XG4yNzIzOlx0XG4yNzI0Olx0XHRpZiAobWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpIFx1MDAzZT0gbnJfcGFnZXMpXG4yNzI1Olx0XHRcdGdvdG8gcmV0cnk7XG4yNzI2Olx0XG4yNzI3Olx0XHRpZiAoIWRyYWluZWQpIHtcbjI3Mjg6XHRcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTtcbjI3Mjk6XHRcdFx0ZHJhaW5lZCA9IHRydWU7XG4yNzMwOlx0XHRcdGdvdG8gcmV0cnk7XG4yNzMxOlx0XHR9XG4yNzMyOlx0XG4yNzMzOlx0XHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpXG4yNzM0Olx0XHRcdGdvdG8gbm9tZW07XG4yNzM1Olx0XHQvKlxuMjczNjpcdFx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cbjI3Mzc6XHRcdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXG4yNzM4Olx0XHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cbjI3Mzk6XHRcdCAqXG4yNzQwOlx0XHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxuMjc0MTpcdFx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcbjI3NDI6XHRcdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cbjI3NDM6XHRcdCAqL1xuMjc0NDpcdFx0aWYgKG5yX3JlY2xhaW1lZCBcdTAwMjZcdTAwMjYgbnJfcGFnZXMgXHUwMDNjPSAoMSBcdTAwM2NcdTAwM2MgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKVxuMjc0NTpcdFx0XHRnb3RvIHJldHJ5O1xuMjc0NjpcdFxuMjc0NzpcdFx0aWYgKG5yX3JldHJpZXMtLSlcbjI3NDg6XHRcdFx0Z290byByZXRyeTtcbjI3NDk6XHRcbjI3NTA6XHRcdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfUkVUUllfTUFZRkFJTClcbjI3NTE6XHRcdFx0Z290byBub21lbTtcbjI3NTI6XHRcbjI3NTM6XHRcdC8qIEF2b2lkIGVuZGxlc3MgbG9vcCBmb3IgdGFza3MgYnlwYXNzZWQgYnkgdGhlIG9vbSBraWxsZXIgKi9cbjI3NTQ6XHRcdGlmIChwYXNzZWRfb29tIFx1MDAyNlx1MDAyNiB0YXNrX2lzX2R5aW5nKCkpXG4yNzU1Olx0XHRcdGdvdG8gbm9tZW07XG4yNzU2Olx0XG4yNzU3Olx0XHQvKlxuMjc1ODpcdFx0ICoga2VlcCByZXRyeWluZyBhcyBsb25nIGFzIHRoZSBtZW1jZyBvb20ga2lsbGVyIGlzIGFibGUgdG8gbWFrZVxuMjc1OTpcdFx0ICogYSBmb3J3YXJkIHByb2dyZXNzIG9yIGJ5cGFzcyB0aGUgY2hhcmdlIGlmIHRoZSBvb20ga2lsbGVyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMjgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdHJ5X2NoYXJnZV9tZW1jZzogQSBEZWVwZXIgRGl2ZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzIGluIGB0cnlfY2hhcmdlX21lbWNnYC4gVGhlIHByZXZpb3VzIGNvbW1pdCBpbnRyb2R1Y2VkIHNvbWV0aGluZywgYW5kIEkmIzM5O3ZlIGdvdCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIFRoZSBiZXN0IHdheSB0byBkbyB0aGF0LCBhcyBhbHdheXMsIGlzIHRvIGZvbGxvdyB0aGUgY29kZS4gRmlyc3QsIGxldCYjMzk7cyBsb29rIGF0IHdoZXJlIGB0cnlfY2hhcmdlX21lbWNnYCBpcyB1c2VkIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlLCBpbiB0aGlzIGNvbnRleHQuIFRoZW4gSSYjMzk7bGwgbmVlZCB0byBnbyBiYWNrIGFuZCBleGFtaW5lIHRoZSBmdW5jdGlvbiYjMzk7cyBkZWZpbml0aW9uIGl0c2VsZiwgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgdGhlIGludGVybmFscy4gQ29udGV4dCBpcyBraW5nIGhlcmU7IHVuZGVyc3RhbmRpbmcgKmhvdyogaXQmIzM5O3MgYmVpbmcgdXNlZCBpcyBqdXN0IGFzIHZpdGFsIGFzIHVuZGVyc3RhbmRpbmcgKndoYXQqIGl0IGRvZXMuIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byBzZWUgdGhlIG1vZGlmaWNhdGlvbnMgYW5kIHdoeSB0aGV5IHdlcmUgbWFkZS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB3aWxsIGludm9sdmUgbG9va2luZyBhdCBtZW1vcnkgYWNjb3VudGluZywgcmVzb3VyY2UgbGltaXRpbmcsIGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUgd2l0aGluIHRoZSBjZ3JvdXAgaGllcmFyY2h5LiBSaWdodCwgbGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2MzU6XHRcdCAqIG5lZWQgdG8gYWNjb3VudCBmb3IgYW55IGlsbC1iZWdvdHRlbiBqaWZmaWVzIHRvIHBheSB0aGVtIG9mZiBsYXRlci5cbjI2MzY6XHRcdCAqL1xuMjYzNzpcdFx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG4yNjM4Olx0XHRzY2hlZHVsZV90aW1lb3V0X2tpbGxhYmxlKHBlbmFsdHlfamlmZmllcyk7XG4yNjM5Olx0XHRwc2lfbWVtc3RhbGxfbGVhdmUoXHUwMDI2cGZsYWdzKTtcbjI2NDA6XHRcbjI2NDE6XHRvdXQ6XG4yNjQyOlx0XHRjc3NfcHV0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4yNjQzOlx0fVxuMjY0NDpcdFxuMjY0NTpcdHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuMjY0NjpcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4yNjQ3Olx0e1xuMjY0ODpcdFx0dW5zaWduZWQgaW50IGJhdGNoID0gbWF4KE1FTUNHX0NIQVJHRV9CQVRDSCwgbnJfcGFnZXMpO1xuMjY0OTpcdFx0aW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuMjY1MDpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9vdmVyX2xpbWl0O1xuMjY1MTpcdFx0c3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjtcbjI2NTI6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkO1xuMjY1MzpcdFx0Ym9vbCBwYXNzZWRfb29tID0gZmFsc2U7XG4yNjU0Olx0XHR1bnNpZ25lZCBpbnQgcmVjbGFpbV9vcHRpb25zO1xuMjY1NTpcdFx0Ym9vbCBkcmFpbmVkID0gZmFsc2U7XG4yNjU2Olx0XHRib29sIHJhaXNlZF9tYXhfZXZlbnQgPSBmYWxzZTtcbjI2NTc6XHRcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuMjY1ODpcdFx0Ym9vbCBhbGxvd19zcGlubmluZyA9IGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKGdmcF9tYXNrKTtcbjI2NTk6XHRcbjI2NjA6XHRyZXRyeTpcbjI2NjE6XHRcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4yNjYyOlx0XHRcdHJldHVybiAwO1xuMjY2MzpcdFxuMjY2NDpcdFx0aWYgKCFhbGxvd19zcGlubmluZylcbjI2NjU6XHRcdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG4yNjY2Olx0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4yNjY3Olx0XG4yNjY4Olx0XHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuMjY2OTpcdFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbjI2NzA6XHRcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG4yNjcxOlx0XHRcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIGJhdGNoLCBcdTAwMjZjb3VudGVyKSlcbjI2NzI6XHRcdFx0XHRnb3RvIGRvbmVfcmVzdG9jaztcbjI2NzM6XHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbjI2NzQ6XHRcdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIGJhdGNoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE1NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBDaGFyZ2UgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlIGluIGB0cnlfY2hhcmdlX21lbWNnYC4gSXQgc2VlbXMgdGhlIGNydWNpYWwgcGFydCBsaWVzIGluIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGNvbmNlcm5pbmcgbWVtb3J5IGV2ZW50cy4gUHJldmlvdXNseSwgdGhlIGBfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7YCBjYWxsLCBhbG9uZyB3aXRoIHRoZSBgcmFpc2VkX21heF9ldmVudCA9IHRydWU7YCBmbGFnLCB3YXMgc2l0dWF0ZWQgKmFmdGVyKiB0aGUgYHBzaV9tZW1zdGFsbF9lbnRlcmAgYW5kIHdpdGhpbiB0aGUgYGZvcmNlOmAgYmxvY2suIE5vdywgdGhlIHBhdGNoIGhhcyBzaGlmdGVkIHRoaXMgY3J1Y2lhbCBjaGVjayBhbmQgY2FsbCBzaWduaWZpY2FudGx5IGVhcmxpZXIsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBgaWYgKGJhdGNoICZndDsgbnJfcGFnZXMpIC4uLmAgY29uZGl0aW9uLiBUaGlzIGlzIHBsYWNlZCBiZWZvcmUgdGhlIGBpZiAodW5saWtlbHkoY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfTUVNQUxMT0MpKWAgYW5kLCBpbXBvcnRhbnRseSwgYmVmb3JlIGFsbCB0aG9zZSBgbm9tZW1gIGNoZWNrcyDigJMgdGhlIG9uZXMgZGVhbGluZyB3aXRoIGB0YXNrX2luX21lbWNnX29vbWAsIHdoZXRoZXIgYmxvY2tpbmcgaXMgYWxsb3dlZCB3aXRoIGAhZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmdgLCBhbmQgc28gb24uIFRoZXkgYWxzbyB0b29rIG91dCB0aGUgZHVwbGljYXRlIGNhbGwgaW4gYGZvcmNlOmAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBvcnRhbnQgY2hhbmdlIGluIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgbWVtb3J5IG92ZXJjb21taXQgc2NlbmFyaW9zLgoKTm93LCBJIHdhbnQgdG8gY29uZmlybSB3aGF0IHRoaXMgZWFybHkgY2FsbCB0byBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGFjdHVhbGx5IGRvZXMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwganVzdCBncmVwIGZvciBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgZXhhY3RseSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05OTc9c3RhdGljIGlubGluZSB2b2lkIGNvdW50X21lbWNnX2V2ZW50X21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDItXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMDAzOnZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTAwNC1cdFx0XHQgIGVudW0gbWVtY2dfbWVtb3J5X2V2ZW50IGV2ZW50LCBib29sIGFsbG93X3NwaW5uaW5nKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTg4MD11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTE4OTgtXG5tbS9tZW1jb250cm9sLmM6MTg5OTp2b2lkIF9fbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wuYy0xOTAwLVx0XHRcdCAgZW51bSBtZW1jZ19tZW1vcnlfZXZlbnQgZXZlbnQsIGJvb2wgYWxsb3dfc3Bpbm5pbmcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBtbS9tZW1jb250cm9sLmNgKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBtbS9tZW1jb250cm9sLmNgIG5lYXIgbGluZSAxODk5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHNwZWNpZmljIGFyZWEgb2YgbWVtb3J5IGNvbnRyb2wgaXMgd29ya2luZy4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHNvbWUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiBvciBkYXRhIHN0cnVjdHVyZSBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIG1lbW9yeSBjZ3JvdXAgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhcm91bmQgaG93IG1lbW9yeSBhY2NvdW50aW5nIGlzIGRvbmUsIHBvc3NpYmx5IHJlbGF0aW5nIHRvIGEgc3BlY2lmaWMgbWVtb3J5IHJlc291cmNlIG9yIGV2ZW50LiBHaXZlbiB0aGUgbGluZSBudW1iZXIsIGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZSBsZXZlbCBvZiBtZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uIG9yIHRyYWNraW5nLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaW52b2x2ZXMgcGFnZSBmYXVsdHMsIHN3YXBwaW5nLCBvciBwZXJoYXBzIG1lbW9yeSBsaW1pdHMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4OTU6XHRcdH1cbjE4OTY6XHRcdHJldHVybiBtYXg7XG4xODk3Olx0fVxuMTg5ODpcdFxuMTg5OTpcdHZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuMTkwMDpcdFx0XHRcdCAgZW51bSBtZW1jZ19tZW1vcnlfZXZlbnQgZXZlbnQsIGJvb2wgYWxsb3dfc3Bpbm5pbmcpXG4xOTAxOlx0e1xuMTkwMjpcdFx0Ym9vbCBzd2FwX2V2ZW50ID0gZXZlbnQgPT0gTUVNQ0dfU1dBUF9ISUdIIHx8IGV2ZW50ID09IE1FTUNHX1NXQVBfTUFYIHx8XG4xOTAzOlx0XHRcdFx0ICBldmVudCA9PSBNRU1DR19TV0FQX0ZBSUw7XG4xOTA0Olx0XG4xOTA1Olx0XHQvKiBGb3Igbm93IG9ubHkgTUVNQ0dfTUFYIGNhbiBoYXBwZW4gd2l0aCAhYWxsb3dfc3Bpbm5pbmcgY29udGV4dC4gKi9cbjE5MDY6XHRcdFZNX1dBUk5fT05fT05DRSghYWxsb3dfc3Bpbm5pbmcgXHUwMDI2XHUwMDI2IGV2ZW50ICE9IE1FTUNHX01BWCk7XG4xOTA3Olx0XG4xOTA4Olx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c19sb2NhbFtldmVudF0pO1xuMTkwOTpcdFx0aWYgKCFzd2FwX2V2ZW50IFx1MDAyNlx1MDAyNiBhbGxvd19zcGlubmluZylcbjE5MTA6XHRcdFx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFx1MDAyNm1lbWNnLVx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcbjE5MTE6XHRcbjE5MTI6XHRcdGRvIHtcbjE5MTM6XHRcdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9ldmVudHNbZXZlbnRdKTtcbjE5MTQ6XHRcdFx0aWYgKGFsbG93X3NwaW5uaW5nKSB7XG4xOTE1Olx0XHRcdFx0aWYgKHN3YXBfZXZlbnQpXG4xOTE2Olx0XHRcdFx0XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcF9ldmVudHNfZmlsZSk7XG4xOTE3Olx0XHRcdFx0ZWxzZVxuMTkxODpcdFx0XHRcdFx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFx1MDAyNm1lbWNnLVx1MDAzZWV2ZW50c19maWxlKTtcbjE5MTk6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTcyCgkJCQkJCQlvdXRwdXQ6IDIxMAoJCQkJCQkJdGhvdWdodHM6IDU2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTi9LQVNBTiBBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IHRyeV9jaGFyZ2VfbWVtY2coKSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoLCB3aGljaCBtb2RpZmllcyBgbW0vbWVtY29udHJvbC5jOnRyeV9jaGFyZ2VfbWVtY2coKWAsIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGNoYW5nZSBpcyBjZW50ZXJlZCBhcm91bmQgd2hlbiB0aGUgYE1FTUNHX01BWGAgbWVtb3J5IGV2ZW50IGlzIHJhaXNlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiBhIGNoYXJnaW5nIGZhaWx1cmUgb2NjdXJzIGFuZCB3ZSYjMzk7cmUgb3ZlciB0aGUgbWVtb3J5IGxpbWl0IChgbWVtX292ZXJfbGltaXRgKS4gRXNzZW50aWFsbHksIGl0IG1vdmVzIHRoZSBldmVudCBub3RpZmljYXRpb24gZWFybGllciBpbiB0aGUgZXhlY3V0aW9uIHBhdGgsIGJlZm9yZSB0aGUgY29kZSBiYWlscyBvdXQgdG8gYG5vbWVtYCBvciBqdW1wcyB0byBgZm9yY2U6YC4gUHJldmlvdXNseSwgY2VydGFpbiBjb25kaXRpb25zIHdvdWxkIGJ5cGFzcyB0aGUgZXZlbnQuCgpNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgbWVtb3J5IHNhZmV0eSwgc28gSSYjMzk7bSBydW5uaW5nIHRocm91Z2ggbXkgS01TQU4vS0FTQU4gY2hlY2tsaXN0LgoKRmlyc3QsICp3aGF0IGRvZXMgaXQgdG91Y2gqPyBJdCYjMzk7cyBwcmltYXJpbHkgYWJvdXQgY29udHJvbCBmbG93IGFuZCBldmVudCByYWlzaW5nLiBJdCBsb29rcyBsaWtlIGByYWlzZWRfbWF4X2V2ZW50YCBpcyBhIGxvY2FsIGJvb2xlYW4sIGluaXRpYWxpemVkIHRvIGBmYWxzZWAuIGBtZW1fb3Zlcl9saW1pdGAgaXMgc2V0IGluIHRoZSBgaWZgIHN0YXRlbWVudCByaWdodCBhYm92ZSB0aGUgcmVsZXZhbnQgbGluZXMuIGBhbGxvd19zcGlubmluZ2AgaXMgaW5pdGlhbGl6ZWQgYXQgZnVuY3Rpb24gZW50cnkuIFNvLCBmcm9tIHRoZSBpbml0aWFsIGxvb2ssIGV2ZXJ5dGhpbmcgc2VlbXMgaW5pdGlhbGl6ZWQgYXMgZXhwZWN0ZWQuCgpUaGVuLCAqZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgbWVtb3J5IHNhZmV0eSByaXNrcyo/IEkmIzM5O20gY2hlY2tpbmcgZm9yIGFsbCB0aGUgY2xhc3NpYyBLTVNBTiBjb25jZXJuczoKCiogICAqKlVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzOioqIE5vcGUuIGByYWlzZWRfbWF4X2V2ZW50YCwgYG1lbV9vdmVyX2xpbWl0YCBhbmQgYGFsbG93X3NwaW5uaW5nYCBhcmUgYWxsIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuCiogICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIHNlbnQgdG8gdXNlcnNwYWNlOioqIERvZXNuJiMzOTt0IHNlZW0gcmVsZXZhbnQgaGVyZS4gTm8gc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXJzcGFjZS4KKiAgICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uIENvbnRyb2wgZmxvdyByZWxpZXMgb24gaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGxpa2UgYG1lbV9vdmVyX2xpbWl0YC4KKiAgICoqTWVtb3J5IGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gYnVncyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgZmllbGRzOioqIE5vdCBhIGZhY3Rvci4gVGhlIGNoYW5nZSBpcyBhdCBhbiBlYXJsaWVyIHBvaW50LCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSB1c2VkIG9yIGluaXRpYWxpemVkLgoqICAgKipCdWZmZXIgaW5kZXhpbmcvYm91bmRzIGNoYW5nZXMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlczoqKiBOb3QgaW4gcGxheSBoZXJlLgoKSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRob3NlIGNvcmUgcG9pbnRzLiBUaGVyZSBpcyBub3RoaW5nIGluIHRoaXMgcGF0Y2ggdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IGFsbCwgb3IgdGhhdCBpbnRyb2R1Y2VzIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O2xsIGdvIHRocm91Z2ggbXkgZm91ci1wb2ludCByZXZpZXc6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzOioqIFN0aWxsIG5vLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uCjMuICAqKkFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM6KiogTm90aGluZyBuZXcgaGVyZS4KNC4gICoqQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlczoqKiBObywgdGhpcyBkb2VzIG5vdCBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhhdC4KClNvLCAqbXkgY29uY2x1c2lvbj8qIFRoaXMgaXMgYWxsIEtBU0FOIHRlcnJpdG9yeS4gS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLiBTdGFuZGFyZCBLQVNBTi9MT0NLREVQIGJ1aWxkcyBzaG91bGQgYmUgc3VmZmljaWVudCB0byB2ZXJpZnkgbWVtb3J5IHNhZmV0eSBhbmQgdGhlIGxvY2sgaGFuZGxpbmcuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaW4gdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLgoqKk5lZWRzS01TQU4gPSBmYWxzZS4qKgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29udHJvbCBmbG93IGluIGB0cnlfY2hhcmdlX21lbWNnKClgIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYCBzbyB0aGF0IHRoZSBgTUVNQ0dfTUFYYCBldmVudCAoYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCkgaXMgcmVjb3JkZWQgZWFybGllciB3aGVuZXZlciBhIG1lbW9yeSBjZ3JvdXAgbGltaXQgaXMgZXhjZWVkZWQsIGVuc3VyaW5nIGl0IGlzIGFjY291bnRlZCBldmVuIGlmIHRoZSBhbGxvY2F0aW9uIGJhaWxzIG91dCBlYXJseSAoZS5nLiBub24tYmxvY2tpbmcgR0ZQIG1hc2tzIG9yIE9PTSBzY2VuYXJpb3MpLlxuXG5BbGwgdmFyaWFibGVzIGludm9sdmVkIChgbWVtX292ZXJfbGltaXRgLCBgYWxsb3dfc3Bpbm5pbmdgLCBgcmFpc2VkX21heF9ldmVudGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgY29weWluZyB0byB1c2Vyc3BhY2UsIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zIHRoYXQgY291bGQgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nOyBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIHRlc3QgY29uZmlndXJhdGlvbnMgYXJlIGFwcHJvcHJpYXRlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbnRyb2wgZmxvdyBpbiBgdHJ5X2NoYXJnZV9tZW1jZygpYCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2Agc28gdGhhdCB0aGUgYE1FTUNHX01BWGAgZXZlbnQgKGBfX21lbWNnX21lbW9yeV9ldmVudGApIGlzIHJlY29yZGVkIGVhcmxpZXIgd2hlbmV2ZXIgYSBtZW1vcnkgY2dyb3VwIGxpbWl0IGlzIGV4Y2VlZGVkLCBlbnN1cmluZyBpdCBpcyBhY2NvdW50ZWQgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBiYWlscyBvdXQgZWFybHkgKGUuZy4gbm9uLWJsb2NraW5nIEdGUCBtYXNrcyBvciBPT00gc2NlbmFyaW9zKS5cblxuQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoYG1lbV9vdmVyX2xpbWl0YCwgYGFsbG93X3NwaW5uaW5nYCwgYHJhaXNlZF9tYXhfZXZlbnRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucyB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZzsgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCB0ZXN0IGNvbmZpZ3VyYXRpb25zIGFyZSBhcHByb3ByaWF0ZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzc6MzcuMzk3MjkyODk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3ODQ2NjI5NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19tZW1jZ19tZW1vcnlfZXZlbnRcIixcbiAgICBcIm1lbV9jZ3JvdXBfc2tfY2hhcmdlXCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfY2hhcmdlXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCIsXG4gICAgXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb250cm9sIGZsb3cgaW4gYHRyeV9jaGFyZ2VfbWVtY2coKWAgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgIHNvIHRoYXQgdGhlIGBNRU1DR19NQVhgIGV2ZW50IChgX19tZW1jZ19tZW1vcnlfZXZlbnRgKSBpcyByZWNvcmRlZCBlYXJsaWVyIHdoZW5ldmVyIGEgbWVtb3J5IGNncm91cCBsaW1pdCBpcyBleGNlZWRlZCwgZW5zdXJpbmcgaXQgaXMgYWNjb3VudGVkIGV2ZW4gaWYgdGhlIGFsbG9jYXRpb24gYmFpbHMgb3V0IGVhcmx5IChlLmcuIG5vbi1ibG9ja2luZyBHRlAgbWFza3Mgb3IgT09NIHNjZW5hcmlvcykuXFxuXFxuQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoYG1lbV9vdmVyX2xpbWl0YCwgYGFsbG93X3NwaW5uaW5nYCwgYHJhaXNlZF9tYXhfZXZlbnRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucyB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nOyBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIHRlc3QgY29uZmlndXJhdGlvbnMgYXJlIGFwcHJvcHJpYXRlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBjb250cm9sbGVyIChtZW1jZykgY2hhcmdpbmcgcGF0aCBpbiB0cnlfY2hhcmdlX21lbWNnKCkgdG8gcmFpc2UgTUVNQ0dfTUFYIG1lbW9yeSBldmVudHMgaW1tZWRpYXRlbHkgd2hlbiB0aGUgcGFnZSBjb3VudGVyIGV4Y2VlZHMgdGhlIGxpbWl0LCBiZWZvcmUgYW55IGVhcmx5IGJhaWwtb3V0cyAoc3VjaCBhcyBub24tYmxvY2tpbmcgYWxsb2NhdGlvbnMsIE9PTSB0YXNrcywgb3IgZXhpdGluZyBPT00gdmljdGltcykuIFRoaXMgZnVuY3Rpb25hbGx5IGFmZmVjdHMgbWVtb3J5IGV2ZW50IGNvdW50aW5nIGFuZCBub3RpZmljYXRpb25zIGZvciBtZW1vcnkuZXZlbnRzIGFuZCBtZW1vcnkuZXZlbnRzLmxvY2FsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozNzozNy4zOTcyOTkwMDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMzI0MDc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk2ZmU4ZGY1NmEyOGRkYjc5MTJiNzMzNTVkNjZiNjBmMjJjYjc2YTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMjM6Mzc6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggMTI3MWQzOTBiNjE3ZS4uMzkwNGZlOWE3YjJlOSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtMjY4Myw2ICsyNjgzLDExIEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbiBcXHRcXHRnb3RvIHJldHJ5O1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpIHtcXG4rXFx0XFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xcbitcXHRcXHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogUHJldmVudCB1bmJvdW5kZWQgcmVjdXJzaW9uIHdoZW4gcmVjbGFpbSBvcGVyYXRpb25zIG5lZWQgdG9cXG4gXFx0ICogYWxsb2NhdGUgbWVtb3J5LiBUaGlzIG1pZ2h0IGV4Y2VlZCB0aGUgbGltaXRzIHRlbXBvcmFyaWx5LFxcbkBAIC0yNzExLDkgKzI3MTYsNiBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4gXFx0ICAgIG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZW9vbV9tbSkpXFxuIFxcdFxcdGdvdG8gbm9tZW07XFxuIFxcbi1cXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XFxuLVxcdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xcbi1cXG4gXFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbiBcXHRucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xcbkBAIC0yNzczLDEzICsyNzc1LDYgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuIFxcdGlmICghKGdmcF9tYXNrIFxcdTAwMjYgKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIGZvcmNlOlxcbi1cXHQvKlxcbi1cXHQgKiBJZiB0aGUgYWxsb2NhdGlvbiBoYXMgdG8gYmUgZW5mb3JjZWQsIGRvbid0IGZvcmdldCB0byByYWlzZVxcbi1cXHQgKiBhIE1FTUNHX01BWCBldmVudC5cXG4tXFx0ICovXFxuLVxcdGlmICghcmFpc2VkX21heF9ldmVudClcXG4tXFx0XFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xcbi1cXG4gXFx0LypcXG4gXFx0ICogVGhlIGFsbG9jYXRpb24gZWl0aGVyIGNhbid0IGZhaWwgb3Igd2lsbCBsZWFkIHRvIG1vcmUgbWVtb3J5XFxuIFxcdCAqIGJlaW5nIGZyZWVkIHZlcnkgc29vbi4gIEFsbG93IG1lbW9yeSB1c2FnZSBnbyBvdmVyIHRoZSBsaW1pdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozNzozOC4wMDExNjgzMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTE3NzUyNzcyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX21lbWNnX21lbW9yeV9ldmVudFwiLFxuICAgIFwibWVtX2Nncm91cF9za19jaGFyZ2VcIixcbiAgICBcIl9fbWVtX2Nncm91cF9jaGFyZ2VcIixcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBjb250cm9sbGVyIChtZW1jZykgY2hhcmdpbmcgcGF0aCBpbiB0cnlfY2hhcmdlX21lbWNnKCkgdG8gcmFpc2UgTUVNQ0dfTUFYIG1lbW9yeSBldmVudHMgaW1tZWRpYXRlbHkgd2hlbiB0aGUgcGFnZSBjb3VudGVyIGV4Y2VlZHMgdGhlIGxpbWl0LCBiZWZvcmUgYW55IGVhcmx5IGJhaWwtb3V0cyAoc3VjaCBhcyBub24tYmxvY2tpbmcgYWxsb2NhdGlvbnMsIE9PTSB0YXNrcywgb3IgZXhpdGluZyBPT00gdmljdGltcykuIFRoaXMgZnVuY3Rpb25hbGx5IGFmZmVjdHMgbWVtb3J5IGV2ZW50IGNvdW50aW5nIGFuZCBub3RpZmljYXRpb25zIGZvciBtZW1vcnkuZXZlbnRzIGFuZCBtZW1vcnkuZXZlbnRzLmxvY2FsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NmZlOGRmNTZhMjhkZGI3OTEyYjczMzU1ZDY2YjYwZjIyY2I3NmEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMjM6Mzc6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDEyNzFkMzkwYjYxN2UuLjM5MDRmZTlhN2IyZTkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTI2ODMsNiArMjY4MywxMSBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiBcbitcdGlmICghcmFpc2VkX21heF9ldmVudCkge1xuK1x0XHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XG4rXHRcdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xuK1x0fVxuK1xuIFx0LypcbiBcdCAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvXG4gXHQgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksXG5AQCAtMjcxMSw5ICsyNzE2LDYgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHQgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIGN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZW9vbV9tbSkpXG4gXHRcdGdvdG8gbm9tZW07XG4gXG4tXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XG4tXHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcbi1cbiBcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuIFx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXG4gXHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuQEAgLTI3NzMsMTMgKzI3NzUsNiBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmICghKGdmcF9tYXNrIFx1MDAyNiAoX19HRlBfTk9GQUlMIHwgX19HRlBfSElHSCkpKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBmb3JjZTpcbi1cdC8qXG4tXHQgKiBJZiB0aGUgYWxsb2NhdGlvbiBoYXMgdG8gYmUgZW5mb3JjZWQsIGRvbid0IGZvcmdldCB0byByYWlzZVxuLVx0ICogYSBNRU1DR19NQVggZXZlbnQuXG4tXHQgKi9cbi1cdGlmICghcmFpc2VkX21heF9ldmVudClcbi1cdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xuLVxuIFx0LypcbiBcdCAqIFRoZSBhbGxvY2F0aW9uIGVpdGhlciBjYW4ndCBmYWlsIG9yIHdpbGwgbGVhZCB0byBtb3JlIG1lbW9yeVxuIFx0ICogYmVpbmcgZnJlZWQgdmVyeSBzb29uLiAgQWxsb3cgbWVtb3J5IHVzYWdlIGdvIG92ZXIgdGhlIGxpbWl0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozNzozOC4wMDExNjk1NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMjYxNTA1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW4uXG5cbioqSW5zcGVjdGluZyB0aGUgQ29kZSBDaGFuZ2VzKipcblxuUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSBpdCdzIHRvdWNoaW5nIGBtbS9tZW1jb250cm9sLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB0cnlfY2hhcmdlX21lbWNnYCBmdW5jdGlvbi4gTXkgc3BpZGV5LXNlbnNlIGlzIGFscmVhZHkgdGluZ2xpbmcgYSBiaXQ7IGFueXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IGNvbnRyb2wgYW5kIGNoYXJnaW5nIGlzIGNyaXRpY2FsLCBhbmQgYSBjaGFuZ2UgaGVyZSB3YXJyYW50cyBjYXJlZnVsIGF0dGVudGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2Ugd2l0aGluIGl0cyBicm9hZGVyIGNvbnRleHQuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS9tZW1jb250cm9sLmNgIGJlZm9yZSBJIGV2ZW4gdHJ5IHRvIHVuZGVyc3RhbmQgd2hhdCAqdGhpcyogY2hhbmdlIGRvZXMuIEdldHRpbmcgdGhlIGxheSBvZiB0aGUgbGFuZCB3aWxsIGdpdmUgbWUgdGhlIHByb3BlciBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM3OjQ0LjEyNzMyMTk1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY2MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI2NjA6XFx0cmV0cnk6XFxuMjY2MTpcXHRcXHRpZiAoY29uc3VtZV9zdG9jayhtZW1jZywgbnJfcGFnZXMpKVxcbjI2NjI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjY2MzpcXHRcXG4yNjY0OlxcdFxcdGlmICghYWxsb3dfc3Bpbm5pbmcpXFxuMjY2NTpcXHRcXHRcXHQvKiBBdm9pZCB0aGUgcmVmaWxsIGFuZCBmbHVzaCBvZiB0aGUgb2xkZXIgc3RvY2sgKi9cXG4yNjY2OlxcdFxcdFxcdGJhdGNoID0gbnJfcGFnZXM7XFxuMjY2NzpcXHRcXG4yNjY4OlxcdFxcdHJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XFxuMjY2OTpcXHRcXHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSB8fFxcbjI2NzA6XFx0XFx0ICAgIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtc3csIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpIHtcXG4yNjcxOlxcdFxcdFxcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSlcXG4yNjcyOlxcdFxcdFxcdFxcdGdvdG8gZG9uZV9yZXN0b2NrO1xcbjI2NzM6XFx0XFx0XFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcXG4yNjc0OlxcdFxcdFxcdFxcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBiYXRjaCk7XFxuMjY3NTpcXHRcXHRcXHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbW9yeSk7XFxuMjY3NjpcXHRcXHR9IGVsc2Uge1xcbjI2Nzc6XFx0XFx0XFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XFxuMjY3ODpcXHRcXHRcXHRyZWNsYWltX29wdGlvbnMgXFx1MDAyNj0gfk1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XFxuMjY3OTpcXHRcXHR9XFxuMjY4MDpcXHRcXG4yNjgxOlxcdFxcdGlmIChiYXRjaCBcXHUwMDNlIG5yX3BhZ2VzKSB7XFxuMjY4MjpcXHRcXHRcXHRiYXRjaCA9IG5yX3BhZ2VzO1xcbjI2ODM6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yNjg0OlxcdFxcdH1cXG4yNjg1OlxcdFxcbjI2ODY6XFx0XFx0aWYgKCFyYWlzZWRfbWF4X2V2ZW50KSB7XFxuMjY4NzpcXHRcXHRcXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XFxuMjY4ODpcXHRcXHRcXHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcXG4yNjg5OlxcdFxcdH1cXG4yNjkwOlxcdFxcbjI2OTE6XFx0XFx0LypcXG4yNjkyOlxcdFxcdCAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvXFxuMjY5MzpcXHRcXHQgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksXFxuMjY5NDpcXHRcXHQgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrXFxuMjY5NTpcXHRcXHQgKiB1bmRlciB0aGUgbGltaXQgb3ZlciB0cmlnZ2VyaW5nIE9PTSBraWxscyBpbiB0aGVzZSBjYXNlcy5cXG4yNjk2OlxcdFxcdCAqL1xcbjI2OTc6XFx0XFx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpKVxcbjI2OTg6XFx0XFx0XFx0Z290byBmb3JjZTtcXG4yNjk5OlxcdFxcbjI3MDA6XFx0XFx0aWYgKHVubGlrZWx5KHRhc2tfaW5fbWVtY2dfb29tKGN1cnJlbnQpKSlcXG4yNzAxOlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjcwMjpcXHRcXG4yNzAzOlxcdFxcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxcbjI3MDQ6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzA1OlxcdFxcbjI3MDY6XFx0XFx0LypcXG4yNzA3OlxcdFxcdCAqIE9PTSB2aWN0aW0gc3RpbGwgbmVlZHMgdG8gY2hhcmdlIG1lbW9yeSB0byBleGl0LiBPT00gcmVhcGVyIHNob3VsZFxcbjI3MDg6XFx0XFx0ICogaGVscCBidXQgaXQgbWlnaHQgZmFpbCBvbiBtbWFwX2xvY2sgY29udGVudGlvbi4gSWYgdGhlIHZpY3RpbSBpcyBhXFxuMjcwOTpcXHRcXHQgKiBsYXJnZSB0aHJlYWQgZ3JvdXAgdGhlbiBhbGwgZXhpdGluZyB0aHJlYWRzIG1pZ2h0IGNvbXBldGUgb24gb29tX2xvY2tcXG4yNzEwOlxcdFxcdCAqIGp1c3QgdG8gbGVhcm4gdGhhdCB0aGVyZSBpcyBub3RoaW5nIHJlYWxseSBraWxsYWJsZSBhbnltb3JlLiBCYWlsXFxuMjcxMTpcXHRcXHQgKiBvdXQgZWFybHkgYW5kIGZhaWwgdGhlIGNoYXJnZSB0byBleHBlZGl0ZSB0aGVpciBleGl0LiBUaGV5IGFyZVxcbjI3MTI6XFx0XFx0ICogY29uc2lkZXJlZCBmdWxseSByZWNsYWltZWQgYnkgdGhlIG9vbSByZWFwZXIgYW5kIHRoZXkgc2hvdWxkbid0XFxuMjcxMzpcXHRcXHQgKiBjb250cmlidXRlIGZ1cnRoZXIgY2hhcmdlcy5cXG4yNzE0OlxcdFxcdCAqL1xcbjI3MTU6XFx0XFx0aWYgKHRza19pc19vb21fdmljdGltKGN1cnJlbnQpIFxcdTAwMjZcXHUwMDI2XFxuMjcxNjpcXHRcXHQgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIGN1cnJlbnQtXFx1MDAzZXNpZ25hbC1cXHUwMDNlb29tX21tKSlcXG4yNzE3OlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjcxODpcXHRcXG4yNzE5OlxcdFxcdHBzaV9tZW1zdGFsbF9lbnRlcihcXHUwMDI2cGZsYWdzKTtcXG4yNzIwOlxcdFxcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxcbjI3MjE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xcbjI3MjI6XFx0XFx0cHNpX21lbXN0YWxsX2xlYXZlKFxcdTAwMjZwZmxhZ3MpO1xcbjI3MjM6XFx0XFxuMjcyNDpcXHRcXHRpZiAobWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpIFxcdTAwM2U9IG5yX3BhZ2VzKVxcbjI3MjU6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yNzI2OlxcdFxcbjI3Mjc6XFx0XFx0aWYgKCFkcmFpbmVkKSB7XFxuMjcyODpcXHRcXHRcXHRkcmFpbl9hbGxfc3RvY2sobWVtX292ZXJfbGltaXQpO1xcbjI3Mjk6XFx0XFx0XFx0ZHJhaW5lZCA9IHRydWU7XFxuMjczMDpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjI3MzE6XFx0XFx0fVxcbjI3MzI6XFx0XFxuMjczMzpcXHRcXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9OT1JFVFJZKVxcbjI3MzQ6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzM1OlxcdFxcdC8qXFxuMjczNjpcXHRcXHQgKiBFdmVuIHRob3VnaCB0aGUgbGltaXQgaXMgZXhjZWVkZWQgYXQgdGhpcyBwb2ludCwgcmVjbGFpbVxcbjI3Mzc6XFx0XFx0ICogbWF5IGhhdmUgYmVlbiBhYmxlIHRvIGZyZWUgc29tZSBwYWdlcy4gIFJldHJ5IHRoZSBjaGFyZ2VcXG4yNzM4OlxcdFxcdCAqIGJlZm9yZSBraWxsaW5nIHRoZSB0YXNrLlxcbjI3Mzk6XFx0XFx0ICpcXG4yNzQwOlxcdFxcdCAqIE9ubHkgZm9yIHJlZ3VsYXIgcGFnZXMsIHRob3VnaDogaHVnZSBwYWdlcyBhcmUgcmF0aGVyXFxuMjc0MTpcXHRcXHQgKiB1bmxpa2VseSB0byBzdWNjZWVkIHNvIGNsb3NlIHRvIHRoZSBsaW1pdCwgYW5kIHdlIGZhbGwgYmFja1xcbjI3NDI6XFx0XFx0ICogdG8gcmVndWxhciBwYWdlcyBhbnl3YXkgaW4gY2FzZSBvZiBmYWlsdXJlLlxcbjI3NDM6XFx0XFx0ICovXFxuMjc0NDpcXHRcXHRpZiAobnJfcmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2IG5yX3BhZ2VzIFxcdTAwM2M9ICgxIFxcdTAwM2NcXHUwMDNjIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSlcXG4yNzQ1OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjc0NjpcXHRcXG4yNzQ3OlxcdFxcdGlmIChucl9yZXRyaWVzLS0pXFxuMjc0ODpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjI3NDk6XFx0XFxuMjc1MDpcXHRcXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9SRVRSWV9NQVlGQUlMKVxcbjI3NTE6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzUyOlxcdFxcbjI3NTM6XFx0XFx0LyogQXZvaWQgZW5kbGVzcyBsb29wIGZvciB0YXNrcyBieXBhc3NlZCBieSB0aGUgb29tIGtpbGxlciAqL1xcbjI3NTQ6XFx0XFx0aWYgKHBhc3NlZF9vb20gXFx1MDAyNlxcdTAwMjYgdGFza19pc19keWluZygpKVxcbjI3NTU6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzU2OlxcdFxcbjI3NTc6XFx0XFx0LypcXG4yNzU4OlxcdFxcdCAqIGtlZXAgcmV0cnlpbmcgYXMgbG9uZyBhcyB0aGUgbWVtY2cgb29tIGtpbGxlciBpcyBhYmxlIHRvIG1ha2VcXG4yNzU5OlxcdFxcdCAqIGEgZm9yd2FyZCBwcm9ncmVzcyBvciBieXBhc3MgdGhlIGNoYXJnZSBpZiB0aGUgb29tIGtpbGxlclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozNzo0NC4xMjc1NDgwMjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTAyNzU3NjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29tbWl0KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIGNvbW1pdCBpcyBhdHRlbXB0aW5nIHRvIGFjaGlldmUuIEknbGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb21taXQgaXRzZWxmIOKAkyB3aGF0IGZpbGVzIHdlcmUgY2hhbmdlZCwgYWRkZWQsIG9yIGRlbGV0ZWQ/IFRoYXQncyB0aGUgYmFzZWxpbmUuIFRoZW4sIEknbGwgbGV2ZXJhZ2UgdGhlIHBvd2VyIG9mIHRoZSBgZ2l0IGxvZ2AgdG8gcHJvdmlkZSBtb3JlIGNvbnRleHQuIEtub3dpbmcgdGhlIHNwZWNpZmljIGNvbW1pdCBoYXNoLCBJIGNhbiBzdGFydCB3aXRoIGEgdGFyZ2V0ZWQgYGdpdCBsb2dgIGNvbW1hbmQuIE1heWJlIEkgY2FuIHF1aWNrbHkgZmluZCBhIGhlbHBmdWwgbWVzc2FnZSB0aGVyZSwgb3IgcGVyaGFwcyBJJ2xsIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gS25vd2luZyB0aGUgc3RhdGUgb2YgdGhpbmdzIGJlZm9yZSB0aGUgY29tbWl0IGlzIGp1c3QgYXMsIGlmIG5vdCBtb3JlLCBpbXBvcnRhbnQsIHNvIEknbGwgcHJvYmFibHkgbG9vayB0byBzZWUgd2hhdCB0aGUgKnByZXZpb3VzKiBjb21taXQgZGlkLiBUaGUgbG9nIHdpbGwgdGVsbCB0aGUgc3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM3OjQ5LjIzMDMwODQ3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg3NzQ0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmFpc2VkX21heF9ldmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTI2NDU9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY1NS1cXHRib29sIGRyYWluZWQgPSBmYWxzZTtcXG5tbS9tZW1jb250cm9sLmM6MjY1NjpcXHRib29sIHJhaXNlZF9tYXhfZXZlbnQgPSBmYWxzZTtcXG5tbS9tZW1jb250cm9sLmMtMjY1Ny1cXHR1bnNpZ25lZCBsb25nIHBmbGFncztcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNjg1LVxcbm1tL21lbWNvbnRyb2wuYzoyNjg2OlxcdGlmICghcmFpc2VkX21heF9ldmVudCkge1xcbm1tL21lbWNvbnRyb2wuYy0yNjg3LVxcdFxcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcXG5tbS9tZW1jb250cm9sLmM6MjY4ODpcXHRcXHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcXG5tbS9tZW1jb250cm9sLmMtMjY4OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM3OjQ5LjM1OTA5MDU4OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMTYwOTEyOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtY2cgTWVtb3J5IENoYXJnZSBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB0byBgdHJ5X2NoYXJnZV9tZW1jZ2AuIFByZXZpb3VzbHksIHdoZW4gYSBtZW1vcnkgY2hhcmdlIGZhaWxlZCDigJMgc2F5LCBhIGxpbWl0IHdhcyBoaXQg4oCTIHRoZSBsb2dpYyBmbG93IHdhcyBwcmV0dHkgc3BlY2lmaWM6IGl0IGNoZWNrZWQgc2V2ZXJhbCBjb25kaXRpb25zIGJlZm9yZSBwb3RlbnRpYWxseSByYWlzaW5nIGEgbWVtb3J5IGV2ZW50LiBFc3NlbnRpYWxseSwgaXQgaGFkIHNldmVyYWwgXCJlYXJseSBleGl0c1wiIHRoYXQgcHJldmVudGVkIHJhaXNpbmcgdGhlIGV2ZW50LiBJdCBjaGVja2VkIGlmIGBQRl9NRU1BTExPQ2Agd2FzIHNldCwgaWYgdGhlIHRhc2sgd2FzIGluIE9PTSBzdGF0ZSwgaWYgdGhlIEdGUCBmbGFncyBhbGxvd2VkIGJsb2NraW5nLCBhbmQgaWYgaXQgc2hvdWxkIHNraXAgdGhlIE9PTSBraWxsZXIuIE9ubHkgaWYgKm5vbmUqIG9mIHRob3NlIGNvbmRpdGlvbnMgd2VyZSBtZXQgZGlkIGl0IGNhbGwgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCBhbmQgc2V0IGByYWlzZWRfbWF4X2V2ZW50YCBiZWZvcmUgYXR0ZW1wdGluZyB0byBmcmVlIG1lbW9yeS4gVGhlcmUgd2FzIGFsc28gYSByZWR1bmRhbnQgY2FsbCB0byB0aGUgZXZlbnQgaGFuZGxlciBpbiB0aGUgYGZvcmNlOmAgbGFiZWwuXG5cbk5vdywgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBzaWduaWZpY2FudGx5IGFsdGVyaW5nIHRoYXQuIEl0J3MgbW92aW5nIHRoYXQgY3J1Y2lhbCBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGNhbGwgKnVwKiBpbiB0aGUgY2FsbCBjaGFpbi4gSXQncyBub3cgYmVpbmcgY2FsbGVkIHVuY29uZGl0aW9uYWxseSwgcmlnaHQgYXQgdGhlIHN0YXJ0IG9mIGB0cnlfY2hhcmdlX21lbWNnYCwgd2hlbmV2ZXIgdGhlIHBhZ2UgY291bnRlciBjaGFyZ2UgZmFpbHMgKGFuZCB0aGUgYGJhdGNoYCBjb3VudCBtYXRjaGVzIHRoZSBhdHRlbXB0ZWQgYWxsb2NhdGlvbiBzaXplKS4gQ3JpdGljYWxseSwgaXQgKmFsc28qIHJlbW92ZXMgdGhlIHJlZHVuZGFudCBjYWxsIGZyb20gYGZvcmNlOmAuIFNvLCBlc3NlbnRpYWxseSwgd2Ugbm93IGdldCB0aGUgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCBmaXJpbmcgZXZlcnkgdGltZSBhIHBhZ2UgY2hhcmdlIGZhaWxzLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIHNoaWZ0LiBTcGVjaWZpY2FsbHksIHdoYXQncyB0aGUgcHVycG9zZSBvZiBgX19tZW1jZ19tZW1vcnlfZXZlbnRgPyBMZXQncyB0YWtlIGEgbG9vayBhdCBpdHMgZGVmaW5pdGlvbiBhbmQgc2VlIHdoYXQncyBjaGFuZ2VkIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLiBUaGlzIHVuY29uZGl0aW9uYWwgdHJpZ2dlciBjb3VsZCBwb3RlbnRpYWxseSBpbXBhY3QgdGhlIHN5c3RlbSdzIHJlYWN0aW9uIHRvIG1lbW9yeSBwcmVzc3VyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgdmFyaW91cyBlYXJseSBleGl0IGNvbmRpdGlvbnMgaXQgYnlwYXNzZWQgYmVmb3JlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBuZXcgYmVoYXZpb3IgZG9lc24ndCBpbnRyb2R1Y2UgdW53YW50ZWQgc2lkZSBlZmZlY3RzIG9yIHJlZ3Jlc3Npb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjY1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM4OjAyLjUyMDAwNTc1M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDYxMDAzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21lbWNnX21lbW9yeV9ldmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTE4ODA9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE4OTgtXFxubW0vbWVtY29udHJvbC5jOjE4OTk6dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vbWVtY29udHJvbC5jLTE5MDAtXFx0XFx0XFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xOTI3LX1cXG5tbS9tZW1jb250cm9sLmM6MTkyODpFWFBPUlRfU1lNQk9MX0dQTChfX21lbWNnX21lbW9yeV9ldmVudCk7XFxubW0vbWVtY29udHJvbC5jLTE5MjktXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjY0NT1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNjg2LVxcdGlmICghcmFpc2VkX21heF9ldmVudCkge1xcbm1tL21lbWNvbnRyb2wuYzoyNjg3OlxcdFxcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcXG5tbS9tZW1jb250cm9sLmMtMjY4OC1cXHRcXHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6MDIuNTc0NjIwNDU5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTY4NDUwMDYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gbWVtY2dfbWVtb3J5X2V2ZW50KipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgcGl2b3RhbCBmb3IgaGFuZGxpbmcgbWVtb3J5IGV2ZW50cyB3aXRoaW4gdGhlIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSBmcmFtZXdvcmsuIE15IGZvY3VzIGhlcmUgaXMgZ29pbmcgdG8gYmUgb24gdW5kZXJzdGFuZGluZyAqaG93KiB0aGVzZSBldmVudHMgYXJlIHRyaWdnZXJlZCwgKndoYXQqIGluZm9ybWF0aW9uIGlzIGJlaW5nIHRyYWNrZWQsIGFuZCB1bHRpbWF0ZWx5LCAqaG93KiB0aGlzIGNvbnRyaWJ1dGVzIHRvIHRoZSBicm9hZGVyIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ3kgb2YgdGhlIGtlcm5lbCBmb3IgbWVtb3J5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIHNjZW5hcmlvcyB0aGF0IGFyZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIEFyZSB3ZSB0YWxraW5nIHBhZ2UgZmF1bHRzPyBNZW1vcnkgcmVjbGFpbT8gT09NIHNpdHVhdGlvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyIGV2ZW50cy4gRnJvbSB0aGVyZSBJJ2xsIGJlIGFibGUgdG8gdHJhY2UgaG93IHRoZXNlIGV2ZW50cyBhcmUgcmVjb3JkZWQuIFdoYXQgc3RhdHMgYXJlIHVwZGF0ZWQ/IEFyZSB0aGVyZSBhbnkgc2lnbmlmaWNhbnQgc2lkZSBlZmZlY3RzIG9yIGNhc2NhZGluZyBjaGFuZ2VzIHRyaWdnZXJlZCBieSB0aGUgZXZlbnQgaGFuZGxpbmc/IFdoYXQgbG9ja3MgYXJlIGluIHBsYXkgaGVyZT8gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBsb2NrIG9yZGVyIHRvIHJ1bGUgb3V0IGFueSBwb3RlbnRpYWwgZGVhZGxvY2tzLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBvZiBjb3Vyc2UsIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBtZW1jZyBhcmNoaXRlY3R1cmUuIEhvdyBkb2VzIHRoaXMgZXZlbnQgaW50ZXJwbGF5IHdpdGggb3RoZXIgbWVtY2cgY29tcG9uZW50cywgbGlrZSB0aGUgY29udHJvbGxlcnMgZm9yIG1lbW9yeSB1c2FnZSwgc3dhcHBpbmcsIGFuZCBzbyBvbj8gSSBzaG91bGQgYW50aWNpcGF0ZSB0aGlzIGJlaW5nIGNvbXBsZXggYnV0IGhvcGVmdWxseSB3ZWxsLXN0cnVjdHVyZWQuIExldCdzIHNlZSBob3cgdGhleSd2ZSBoYW5kbGVkIHRoZSBsb2NraW5nLCBhY2NvdW50aW5nLCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozODoxMi4yNTkxMjM4NzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODk1OlxcdFxcdH1cXG4xODk2OlxcdFxcdHJldHVybiBtYXg7XFxuMTg5NzpcXHR9XFxuMTg5ODpcXHRcXG4xODk5OlxcdHZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbjE5MDA6XFx0XFx0XFx0XFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZylcXG4xOTAxOlxcdHtcXG4xOTAyOlxcdFxcdGJvb2wgc3dhcF9ldmVudCA9IGV2ZW50ID09IE1FTUNHX1NXQVBfSElHSCB8fCBldmVudCA9PSBNRU1DR19TV0FQX01BWCB8fFxcbjE5MDM6XFx0XFx0XFx0XFx0ICBldmVudCA9PSBNRU1DR19TV0FQX0ZBSUw7XFxuMTkwNDpcXHRcXG4xOTA1OlxcdFxcdC8qIEZvciBub3cgb25seSBNRU1DR19NQVggY2FuIGhhcHBlbiB3aXRoICFhbGxvd19zcGlubmluZyBjb250ZXh0LiAqL1xcbjE5MDY6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFhbGxvd19zcGlubmluZyBcXHUwMDI2XFx1MDAyNiBldmVudCAhPSBNRU1DR19NQVgpO1xcbjE5MDc6XFx0XFxuMTkwODpcXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfZXZlbnRzX2xvY2FsW2V2ZW50XSk7XFxuMTkwOTpcXHRcXHRpZiAoIXN3YXBfZXZlbnQgXFx1MDAyNlxcdTAwMjYgYWxsb3dfc3Bpbm5pbmcpXFxuMTkxMDpcXHRcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm1lbWNnLVxcdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XFxuMTkxMTpcXHRcXG4xOTEyOlxcdFxcdGRvIHtcXG4xOTEzOlxcdFxcdFxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNbZXZlbnRdKTtcXG4xOTE0OlxcdFxcdFxcdGlmIChhbGxvd19zcGlubmluZykge1xcbjE5MTU6XFx0XFx0XFx0XFx0aWYgKHN3YXBfZXZlbnQpXFxuMTkxNjpcXHRcXHRcXHRcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwX2V2ZW50c19maWxlKTtcXG4xOTE3OlxcdFxcdFxcdFxcdGVsc2VcXG4xOTE4OlxcdFxcdFxcdFxcdFxcdGNncm91cF9maWxlX25vdGlmeShcXHUwMDI2bWVtY2ctXFx1MDAzZWV2ZW50c19maWxlKTtcXG4xOTE5OlxcdFxcdFxcdH1cXG4xOTIwOlxcdFxcbjE5MjE6XFx0XFx0XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbjE5MjI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTkyMzpcXHRcXHRcXHRpZiAoY2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfTE9DQUxfRVZFTlRTKVxcbjE5MjQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTkyNTpcXHRcXHR9IHdoaWxlICgobWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpIFxcdTAwMjZcXHUwMDI2XFxuMTkyNjpcXHRcXHRcXHQgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpO1xcbjE5Mjc6XFx0fVxcbjE5Mjg6XFx0RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jZ19tZW1vcnlfZXZlbnQpO1xcbjE5Mjk6XFx0XFxuMTkzMDpcXHRzdGF0aWMgYm9vbCBtZW1fY2dyb3VwX291dF9vZl9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4xOTMxOlxcdFxcdFxcdFxcdFxcdCAgICAgaW50IG9yZGVyKVxcbjE5MzI6XFx0e1xcbjE5MzM6XFx0XFx0c3RydWN0IG9vbV9jb250cm9sIG9jID0ge1xcbjE5MzQ6XFx0XFx0XFx0LnpvbmVsaXN0ID0gTlVMTCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6MTIuMjU5MzgyMjIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0MjQ0NTYyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyBgdHJ5X2NoYXJnZV9tZW1jZ2AqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgdHJ5X2NoYXJnZV9tZW1jZ2AgZnVuY3Rpb24uIEknbSBnb2luZyB0byBzdGFydCBieSBmaWd1cmluZyBvdXQgd2hlcmUgaXQncyBjYWxsZWQgZnJvbSDigJMgd2hhdCBhcmUgaXRzIGNhbGxlcnM/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgd2lsbCBnaXZlIG1lIGNvbnRleHQgb24gaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBPbmNlIEkgaGF2ZSB0aGF0IGNvbnRleHQsIEknbGwgdGhlbiB6ZXJvIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsIGNoYW5nZXMgbWFkZSByZWxhdGVkIHRvIGl0cyB1c2FnZS4gS25vd2luZyB0aGUgY2hhbmdlcyB3aWxsIGFsbG93IG1lIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLCBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXQuIEJhc2ljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCdzIGRpZmZlcmVudCwgYW5kIHdoeS4gT2theSwgbGV0J3Mgc3RhcnQgd2l0aCBgdHJ5X2NoYXJnZV9tZW1jZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NDUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM4OjE3LjY4Mzg0MjA5OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyOTQzMjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV9jaGFyZ2VfbWVtY2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yNTU1PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY0NC1cXG5tbS9tZW1jb250cm9sLmM6MjY0NTpzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9tZW1jb250cm9sLmMtMjY0Ni1cXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI4NDk9c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI4NTQtXFxubW0vbWVtY29udHJvbC5jOjI4NTU6XFx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTI4NTYtfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTMxNDg9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTU1LVxcbm1tL21lbWNvbnRyb2wuYzozMTU2OlxcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0zMTU3LVxcdGlmIChyZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE5Nj1zdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTIwNC1cXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXFxubW0vbWVtY29udHJvbC5jOjUyMDU6XFx0XFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbm1tL21lbWNvbnRyb2wuYy01MjA2LVxcdGlmIChyZXQpIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjE2PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTYyMy1cXG5tbS9tZW1jb250cm9sLmM6NTYyNDpcXHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XFxubW0vbWVtY29udHJvbC5jLTU2MjUtXFx0XFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM4OjE4LjEyNjc5MTMxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDU2OTQ3NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbW0vbWVtY29udHJvbC5jYCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGFuZCByZXF1aXJlbWVudHMgZm9yIGBtbS9tZW1jb250cm9sLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgcmVsYXRlZCBgTWFrZWZpbGVgIGluIHRoZSBgbW0vYCBkaXJlY3RvcnkuIFRoYXQncyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIGJ1aWxkIHJ1bGVzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MuIFRoZSBNYWtlZmlsZSBzaG91bGQgc2hlZCBsaWdodCBvbiB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBmZWF0dXJlcywgb3RoZXIgbW9kdWxlcyBvciBvcHRpb25zLCBhbmQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCB0byBpbmNsdWRlIG9yIGVuYWJsZSB0aGlzIHBhcnRpY3VsYXIgbWVtb3J5IGNvbnRyb2wgY29tcG9uZW50LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgcmVmZXJlbmNlcyB0byBgQ09ORklHX2Agb3B0aW9ucywgb3IgcGVyaGFwcyBldmVuIGluZGlyZWN0IGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIHRoYXQgYXJlICpyZXF1aXJlZCogZm9yIHRoZSBtZW1vcnkgY29udHJvbGxlciB0byBmdW5jdGlvbiBwcm9wZXJseSB3aXRoaW4gdGhlIGJpZ2dlciBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0LiBMZXQncyBzZWUgd2hhdCB0aGF0IE1ha2VmaWxlIGhhcyB0byBzYXkuLi4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjQ5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6MjMuNTgzNzQwNzgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY5OTkxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jb250cm9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjk6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTEwMz1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cXG5tbS9NYWtlZmlsZToxMDQ6b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICs9IGJwZl9tZW1jb250cm9sLm9cXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9NTgwPXN0YXRpYyB2b2lkIHdiX2V4aXQoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxcbi0tXFxubW0vYmFja2luZy1kZXYuYy01ODgtXFxubW0vYmFja2luZy1kZXYuYzo1ODk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9iYWNraW5nLWRldi5jLTU5MC1cXG4tLVxcbm1tL2JwZl9tZW1jb250cm9sLmMtNy1cXG5tbS9icGZfbWVtY29udHJvbC5jOjg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9icGZfbWVtY29udHJvbC5jLTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYz0xNjI9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG5tbS9icGZfbWVtY29udHJvbC5jLTE2My1cXG5tbS9icGZfbWVtY29udHJvbC5jOjE2NDpCVEZfS0ZVTkNTX1NUQVJUKGJwZl9tZW1jb250cm9sX2tmdW5jcylcXG5tbS9icGZfbWVtY29udHJvbC5jLTE2NS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9yb290X21lbV9jZ3JvdXAsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTClcXG4tLVxcbm1tL2JwZl9tZW1jb250cm9sLmM9MTczPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbWVtX2Nncm91cF9mbHVzaF9zdGF0cywgS0ZfU0xFRVBBQkxFKVxcbm1tL2JwZl9tZW1jb250cm9sLmMtMTc0LVxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTc1OkJURl9LRlVOQ1NfRU5EKGJwZl9tZW1jb250cm9sX2tmdW5jcylcXG5tbS9icGZfbWVtY29udHJvbC5jLTE3Ni1cXG5tbS9icGZfbWVtY29udHJvbC5jOjE3NzpzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX21lbWNvbnRyb2xfa2Z1bmNfc2V0ID0ge1xcbm1tL2JwZl9tZW1jb250cm9sLmMtMTc4LVxcdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTc5OlxcdC5zZXQgICAgICAgICAgICA9IFxcdTAwMjZicGZfbWVtY29udHJvbF9rZnVuY3MsXFxubW0vYnBmX21lbWNvbnRyb2wuYy0xODAtfTtcXG5tbS9icGZfbWVtY29udHJvbC5jLTE4MS1cXG5tbS9icGZfbWVtY29udHJvbC5jOjE4MjpzdGF0aWMgaW50IF9faW5pdCBicGZfbWVtY29udHJvbF9pbml0KHZvaWQpXFxubW0vYnBmX21lbWNvbnRyb2wuYy0xODMte1xcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYy0xODYtXFx0ZXJyID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQyxcXG5tbS9icGZfbWVtY29udHJvbC5jOjE4NzpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2YnBmX21lbWNvbnRyb2xfa2Z1bmNfc2V0KTtcXG5tbS9icGZfbWVtY29udHJvbC5jLTE4OC1cXHRpZiAoZXJyKVxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTg5OlxcdFxcdHByX3dhcm4oXFxcImVycm9yIHdoaWxlIHJlZ2lzdGVyaW5nIGJwZiBtZW1jb250cm9sIGtmdW5jczogJWRcXFwiLCBlcnIpO1xcbm1tL2JwZl9tZW1jb250cm9sLmMtMTkwLVxcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYy0xOTItfVxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTkzOmxhdGVfaW5pdGNhbGwoYnBmX21lbWNvbnRyb2xfaW5pdCk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aHJlYWQuaFxcdTAwM2VcXG5tbS9kYW1vbi9jb3JlLmM6MTE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9kYW1vbi9jb3JlLmMtMTItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuLS1cXG5tbS9kZWJ1Zy5jLTExLSNpbmNsdWRlIFxcdTAwM2NsaW51eC90cmFjZV9ldmVudHMuaFxcdTAwM2VcXG5tbS9kZWJ1Zy5jOjEyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vZGVidWcuYy0xMy0jaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL21tZmxhZ3MuaFxcdTAwM2VcXG4tLVxcbm1tL2ZpbGVtYXAuYy0zNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvaHVnZXRsYi5oXFx1MDAzZVxcbm1tL2ZpbGVtYXAuYzozODojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL2ZpbGVtYXAuYy0zOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2htZW1fZnMuaFxcdTAwM2VcXG4tLVxcbm1tL2ZvbGlvLmMtMjgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcXHUwMDNlXFxubW0vZm9saW8uYzoyOTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL2ZvbGlvLmMtMzAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dmcC5oXFx1MDAzZVxcbi0tXFxubW0vaHdwb2lzb24taW5qZWN0LmMtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2UtZmxhZ3MuaFxcdTAwM2VcXG5tbS9od3BvaXNvbi1pbmplY3QuYzoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL2h3cG9pc29uLWluamVjdC5jLTEyLSNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbi0tXFxubW0vbGlzdF9scnUuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG5tbS9saXN0X2xydS5jOjE0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vbGlzdF9scnUuYy0xNS0jaW5jbHVkZSBcXFwic2xhYi5oXFxcIlxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTItXFxubW0vbWVtY29udHJvbC12MS5jOjM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9tZW1jb250cm9sLXYxLmMtNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3dhcC5oXFx1MDAzZVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE3LSNpbmNsdWRlIFxcXCJzd2FwX3RhYmxlLmhcXFwiXFxubW0vbWVtY29udHJvbC12MS5jOjE4OiNpbmNsdWRlIFxcXCJtZW1jb250cm9sLXYxLmhcXFwiXFxubW0vbWVtY29udHJvbC12MS5jLTE5LVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nncm91cC1kZWZzLmhcXHUwMDNlXFxubW0vbWVtY29udHJvbC12MS5oOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9tZW1jb250cm9sLXYxLmgtOC1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxubW0vbWVtY29udHJvbC5jOjI6LyogbWVtY29udHJvbC5jIC0gTWVtb3J5IENvbnRyb2xsZXJcXG5tbS9tZW1jb250cm9sLmMtMy0gKlxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX2NvdW50ZXIuaFxcdTAwM2VcXG5tbS9tZW1jb250cm9sLmM6MzA6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9tZW1jb250cm9sLmMtMzEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nncm91cC5oXFx1MDAzZVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTcwLSNpbmNsdWRlIFxcXCJzbGFiLmhcXFwiXFxubW0vbWVtY29udHJvbC5jOjcxOiNpbmNsdWRlIFxcXCJtZW1jb250cm9sLXYxLmhcXFwiXFxubW0vbWVtY29udHJvbC5jLTcyLVxcbi0tXFxubW0vbWVtb3J5LmMtNjAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXFx1MDAzZVxcbm1tL21lbW9yeS5jOjYxOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vbWVtb3J5LmMtNjItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tdV9ub3RpZmllci5oXFx1MDAzZVxcbi0tXFxubW0vbWxvY2suYy0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvaHVnZXRsYi5oXFx1MDAzZVxcbm1tL21sb2NrLmM6MjU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9tbG9jay5jLTI2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbV9pbmxpbmUuaFxcdTAwM2VcXG4tLVxcbm1tL21tYXBfbG9jay5jLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nncm91cC5oXFx1MDAzZVxcbm1tL21tYXBfbG9jay5jOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9tbWFwX2xvY2suYy04LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWFwX2xvY2suaFxcdTAwM2VcXG4tLVxcbm1tL29vbV9raWxsLmMtMzUtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxubW0vb29tX2tpbGwuYzozNjojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL29vbV9raWxsLmMtMzctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXFx1MDAzZVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQ4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX3RhYmxlX2NoZWNrLmhcXHUwMDNlXFxubW0vcGFnZV9hbGxvYy5jOjQ5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vcGFnZV9hbGxvYy5jLTUwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mdHJhY2UuaFxcdTAwM2VcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2VxX2ZpbGUuaFxcdTAwM2VcXG5tbS9wYWdlX293bmVyLmM6MTM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9wYWdlX293bmVyLmMtMTQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL2Nsb2NrLmhcXHUwMDNlXFxuLS1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC02LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJjcHUuaFxcdTAwM2VcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDo3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vcGVyY3B1LWludGVybmFsLmgtOC1cXG4tLVxcbm1tL3BlcmNwdS5jLTg4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9tbS5oXFx1MDAzZVxcbm1tL3BlcmNwdS5jOjg5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vcGVyY3B1LmMtOTAtXFxuLS1cXG5tbS9ybWFwLmMtNjYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbm1tL3JtYXAuYzo2NzojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL3JtYXAuYy02OC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW11X25vdGlmaWVyLmhcXHUwMDNlXFxuLS1cXG5tbS9zaHJpbmtlci5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5tbS9zaHJpbmtlci5jOjI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9zaHJpbmtlci5jLTMtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J3c2VtLmhcXHUwMDNlXFxuLS1cXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Nocmlua2VyLmhcXHUwMDNlXFxubW0vc2hyaW5rZXJfZGVidWcuYzo3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vc2hyaW5rZXJfZGVidWcuYy04LVxcbi0tXFxubW0vc2xhYi5oLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9tbS5oXFx1MDAzZVxcbm1tL3NsYWIuaDoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL3NsYWIuaC0xMi0jaW5jbHVkZSBcXHUwMDNjbGludXgva2ZlbmNlLmhcXHUwMDNlXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTI4LSNpbmNsdWRlIFxcdTAwM2Nhc20vcGFnZS5oXFx1MDAzZVxcbm1tL3NsYWJfY29tbW9uLmM6Mjk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9zbGFiX2NvbW1vbi5jLTMwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdGFja2RlcG90LmhcXHUwMDNlXFxuLS1cXG5tbS9zbHViLmMtNDMtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcXHUwMDNlXFxubW0vc2x1Yi5jOjQ0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vc2x1Yi5jLTQ1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYW5kb20uaFxcdTAwM2VcXG4tLVxcbm1tL3N3YXAuaC02LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZSAvKiBmb3IgUEFHRV9TSElGVCAqL1xcbm1tL3N3YXAuaDo3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlIC8qIGZvciBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoKSAqL1xcbm1tL3N3YXAuaC04LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zd2FwLmhcXHUwMDNlIC8qIGZvciBNQVhfU1dBUEZJTEVTX1NISUZULCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqL1xcbi0tXFxubW0vc3dhcGZpbGUuYy0zNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY2FsbHMuaFxcdTAwM2VcXG5tbS9zd2FwZmlsZS5jOjM1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vc3dhcGZpbGUuYy0zNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvcG9sbC5oXFx1MDAzZVxcbi0tXFxubW0vdm1hbGxvYy5jLTMzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZVxcbm1tL3ZtYWxsb2MuYzozNDojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL3ZtYWxsb2MuYy0zNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4tLVxcbm1tL3ZtcHJlc3N1cmUuYy0xMS0gKiBUcmVlLW1vZGUgKGNncm91cCB2MSB1c2Vyc3BhY2UgZXZlbnRmZCkgYm9va2tlZXBpbmcgbGl2ZXMgaW5cXG5tbS92bXByZXNzdXJlLmM6MTI6ICogbW0vbWVtY29udHJvbC12MS5jOyB0aGlzIGZpbGUgaG9sZHMgdGhlIHNoYXJlZCBjb2RlIGFuZCB0aGUgaW4ta2VybmVsXFxubW0vdm1wcmVzc3VyZS5jLTEzLSAqICh0cmVlPWZhbHNlKSBzb2NrZXQtcHJlc3N1cmUgcGF0aCB0aGF0IHJ1bnMgb24gY2dyb3VwIHYyLlxcbi0tXFxubW0vdm1zY2FuLmMtNDAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZyZWV6ZXIuaFxcdTAwM2VcXG5tbS92bXNjYW4uYzo0MTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL3Ztc2Nhbi5jLTQyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9taWdyYXRlLmhcXHUwMDNlXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNy1cXG5tbS93b3JraW5nc2V0LmM6ODojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL3dvcmtpbmdzZXQuYy05LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbV9pbmxpbmUuaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6MjMuNjM2NDQ1MjQ4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NjA2ODgwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIEtjb25maWcgZm9yIE1FTUNHKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBvbiBzb2xpZCBncm91bmQgd2l0aCBtZW1vcnkgY2dyb3Vwcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkIG9yIGF0IGxlYXN0IGNvbmZpZ3VyYWJsZSwgYW5kIHdoYXQgaXRzIGN1cnJlbnQgc3RhdGUgaXMuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaWYgSSBldmVuICpoYXZlKiBtZW1vcnkgY2dyb3VwcyBzdXBwb3J0IGNvbXBpbGVkIGluLCBvciBpZiBJIG5lZWQgdG8gZGlnIGludG8gYnVpbGQgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIGl0LiBJIG1pZ2h0IGFsc28gY2hlY2sgZm9yIGFzc29jaWF0ZWQgb3B0aW9ucyB0aGF0IGNvbnRyb2wgaXRzIGJlaGF2aW9yLCBsaWtlIG5lc3RlZCBjZ3JvdXBzIG9yIGFueSBzcGVjaWZpYyByZXNvdXJjZSBsaW1pdHMgZGVmaW5lZC4gTm8gcG9pbnQgaW4gd2FzdGluZyB0aW1lIGlmIEknbSBub3QgZXZlbiB3b3JraW5nIHdpdGggYSBrZXJuZWwgdGhhdCBzdXBwb3J0cyB0aGUgZnVuY3Rpb25hbGl0eSBJIG5lZWQuIFF1aWNrbHkgY2hlY2tpbmcgS2NvbmZpZyBwcm92aWRlcyBhIGZhc3Qgc2FuaXR5IGNoZWNrIGJlZm9yZSBwcm9jZWVkaW5nIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODc5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6MjYuMzk3MTM2NjEzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk3MTk2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA4NC1cXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA4Ni1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkzLVxcbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwOTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDAtXFxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTExMDItXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDctXFxuaW5pdC9LY29uZmlnOjExMDg6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDktXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6MjYuNDQ1MTEyNzRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU4Nzk3NTkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgaW5pdC9LY29uZmlnYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2Ugb2YgdGhpcyBzeXN0ZW0uIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGluaXQvS2NvbmZpZ2AsIHRoYXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBiZWdpbiBkaXNzZWN0aW5nIHRoZSBidWlsZC10aW1lIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgaXQgYXJvdW5kIGxpbmUgMTA4NSwgdGhhdCdzIGdlbmVyYWxseSB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgZWl0aGVyIGEgY29yZSBjb21wb25lbnQgb3IgYSBtb3JlIHNwZWNpYWxpemVkIG1vZHVsZSBkZWNsYXJhdGlvbi4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgdG8gd29yayB3aXRoLiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgY3JpdGljYWwgZGVmaW5pdGlvbnMgaW4gdGhpcyBzZWN0aW9uLCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZWFybHkgYm9vdCBwcm9jZXNzIGlzIHNoYXBlZCBieSB0aGUgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMzMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM4OjI5LjAzMzA5MDUyOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcXG4xMDgxOlxcdFxcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cXG4xMDgyOlxcdFxcbjEwODM6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA4NDpcXHRcXG4xMDg1OlxcdGNvbmZpZyBNRU1DR1xcbjEwODY6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4NzpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4ODpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODk6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwOTA6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA5MTpcXHRcXHRoZWxwXFxuMTA5MjpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDkzOlxcdFxcbjEwOTQ6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDk1OlxcdFxcdGJvb2xcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDk4OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk5OlxcdFxcdGRlZmF1bHQgeVxcbjExMDA6XFx0XFxuMTEwMTpcXHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4xMTAyOlxcdFxcdGJvb2xcXG4xMTAzOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTA0OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMTA1OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjExMDY6XFx0XFx0ZGVmYXVsdCB5XFxuMTEwNzpcXHRcXG4xMTA4OlxcdGNvbmZpZyBNRU1DR19WMVxcbjExMDk6XFx0XFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMTEwOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTExOlxcdFxcdGRlZmF1bHQgblxcbjExMTI6XFx0XFx0aGVscFxcbjExMTM6XFx0XFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcXG4xMTE0OlxcdFxcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcXG4xMTE1OlxcdFxcdCAgd2hpY2ggaGF2ZW4ndCBtaWdyYXRlZCB0byB0aGUgbmV3IGNncm91cCB2MiBpbnRlcmZhY2UgeWV0LiBJZiB5b3VcXG4xMTE2OlxcdFxcdCAgZG8gbm90IGhhdmUgYW55IHN1Y2ggYXBwbGljYXRpb24gdGhlbiB5b3UgYXJlIGNvbXBsZXRlbHkgZmluZSBsZWF2aW5nXFxuMTExNzpcXHRcXHQgIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxcbjExMTg6XFx0XFxuMTExOTpcXHRcXHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6MjkuMDMzMjQ3MDQ4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NDU4OTM5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgY29uZmlnIE1FTUNHYCDigJMgdGhhdOKAmXMgbGluZSAxMDg1IGluIGBpbml0L0tjb25maWdgLiBUaW1lIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLiBJJ2xsIHF1aWNrbHkgc2NhbiB0aGUgc3Vycm91bmRpbmcgbGluZXMsIHNwZWNpZmljYWxseSBmcm9tIDEwNjAgdG8gMTA4NSwgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaW5mbHVlbmNpbmcgaXRzIGNvbmZpZ3VyYXRpb24uIFRoaXMgdXN1YWxseSByZXZlYWxzIHRoZSByZWxldmFudCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBhbmQgYW55IGFzc29jaWF0ZWQgY29uZGl0aW9uYWwgbG9naWMgd2l0aGluIHRoYXQgc2VnbWVudCBvZiB0aGUgS2NvbmZpZyBmaWxlLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gb3RoZXIga2VybmVsIGZlYXR1cmVzLCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MsIG9yIHBlcmhhcHMgc29tZSBwcmVwcm9jZXNzb3IgbWFjcm9zIHRoYXQgYXJlIHJlbGV2YW50IHRvIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTMyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozODozMy44NzkxNDMzNjlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDYwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDYwOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBncm91cGluZyBzZXRzIG9mIHByb2Nlc3NlcyB0b2dldGhlciwgZm9yXFxuMTA2MTpcXHRcXHQgIHVzZSB3aXRoIHByb2Nlc3MgY29udHJvbCBzdWJzeXN0ZW1zIHN1Y2ggYXMgQ3B1c2V0cywgQ0ZTLCBtZW1vcnlcXG4xMDYyOlxcdFxcdCAgY29udHJvbHMgb3IgZGV2aWNlIGlzb2xhdGlvbi5cXG4xMDYzOlxcdFxcdCAgU2VlXFxuMTA2NDpcXHRcXHRcXHQtIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMucnN0XFx0KENGUylcXG4xMDY1OlxcdFxcdFxcdC0gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvIChmZWF0dXJlcyBmb3IgZ3JvdXBpbmcsIGlzb2xhdGlvblxcbjEwNjY6XFx0XFx0XFx0XFx0XFx0XFx0ICBhbmQgcmVzb3VyY2UgY29udHJvbClcXG4xMDY3OlxcdFxcbjEwNjg6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA2OTpcXHRcXG4xMDcwOlxcdGlmIENHUk9VUFNcXG4xMDcxOlxcdFxcbjEwNzI6XFx0Y29uZmlnIFBBR0VfQ09VTlRFUlxcbjEwNzM6XFx0XFx0Ym9vbFxcbjEwNzQ6XFx0XFxuMTA3NTpcXHRjb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4xMDc2OlxcdFxcdGJvb2wgXFxcIkZhdm9yIGR5bmFtaWMgbW9kaWZpY2F0aW9uIGxhdGVuY3kgcmVkdWN0aW9uIGJ5IGRlZmF1bHRcXFwiXFxuMTA3NzpcXHRcXHRoZWxwXFxuMTA3ODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFxcXCJmYXZvcmR5bm1vZHNcXFwiIG1vdW50IG9wdGlvbiBieSBkZWZhdWx0XFxuMTA3OTpcXHRcXHQgIHdoaWNoIHJlZHVjZXMgdGhlIGxhdGVuY2llcyBvZiBkeW5hbWljIGNncm91cCBtb2RpZmljYXRpb25zIHN1Y2hcXG4xMDgwOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA4MTpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwODQ6XFx0XFxuMTA4NTpcXHRjb25maWcgTUVNQ0dcXG4xMDg2OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODc6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODg6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDg5OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6MzMuODc5MzQ0MzA5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzOTUzMjM0MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtZW1jZyBQYXRjaDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggY29uY2VybmluZyBgQ0dST1VQU2AgYW5kIGBNRU1DR2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGB0cnlfY2hhcmdlX21lbWNnYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZy4gSXQgYXBwZWFycyB0byBiZSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgYG1lbW9yeS5tYXhgIGV2ZW50cy5cblxuTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHByZXZpb3VzbHksIHdoZW4gYSBub24tYmxvY2tpbmcgYWxsb2NhdGlvbiAoZS5nLiwgYEdGUF9BVE9NSUNgLCBgR0ZQX05PV0FJVGApIGhpdCB0aGUgYG1lbW9yeS5tYXhgIGxpbWl0LCB0aGUgY29kZSB3b3VsZCBqdW1wIHRvIGBub21lbWAgYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGBfX21lbWNnX21lbW9yeV9ldmVudGAgY2FsbC4gVGhpcyBtZWFudCB0aGF0IHRoZSBcIm1heFwiIGNvdW50ZXIgaW4gYG1lbW9yeS5ldmVudHNgIHdhc24ndCBiZWluZyBpbmNyZW1lbnRlZCwgd2hpY2ggc2VlbXMgbGlrZSBhIGJ1Zy4gU2ltaWxhcmx5LCB0YXNrcyBpbiBPT00gb3IgZXhpdGluZyBPT00gdmljdGltcyBhbHNvIHdvdWxkbid0IHRyaWdnZXIgdGhlIGV2ZW50LlxuXG5UaGUgcGF0Y2gncyBjb3JlIGNoYW5nZSBpcyBtb3ZpbmcgdGhlIGBfX21lbWNnX21lbW9yeV9ldmVudGAgY2FsbCAqYWJvdmUqIHRoZXNlIGJhaWwtb3V0IGNoZWNrcy4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IGd1YXJhbnRlZXMgdGhhdCAqYW55KiBmYWlsZWQgY2hhcmdlIGFnYWluc3QgYG1lbW9yeS5tYXhgIChvciBgbWVtb3J5LnN3YXAubWF4YCkgd2lsbCBub3cgY29ycmVjdGx5IGluY3JlbWVudCB0aGUgXCJtYXhcIiBjb3VudGVyIGluIGBtZW1vcnkuZXZlbnRzYCAoYW5kIGBldmVudHMubG9jYWxgKS4gVGhpcyBzaG91bGQgZW5zdXJlIHByb3BlciBub3RpZmljYXRpb24gdG8gbGlzdGVuZXJzIHZpYSBpbm90aWZ5L2Vwb2xsIG9uIGNncm91cCB2Mi4gVGhpcyBzZWVtcyB0byBjb3JyZWN0IGEgY2xlYXIgYnVnIGFuZCBpbXByb3ZlIG1vbml0b3Jpbmcgb2YgbWVtY2cgZXZlbnRzLlxuXG5UaGUgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgbWVyaXRzIGZ1enppbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdsbCBhcHBseSB0aGUgY3JpdGVyaWE6IHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgKHNwZWNpZmljYWxseSwgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIGBtZW1jZ2ApLiBJdCdzIGRpcmVjdGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgaXQgc2F0aXNmaWVzIHRoZSBjb25kaXRpb25zIGZvciBiZWluZyB3b3J0aCBmdXp6aW5nLlxuXG5JIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgdGhvdWdoLlxuVGhlIGNvZGUgcGFzc2VzIGBhbGxvd19zcGlubmluZ2AgdG8gYF9fbWVtY2dfbWVtb3J5X2V2ZW50YC4gSSdsbCBsb29rIGludG8gaXQuXG5UaGUgY29kZSB1c2VzIGBnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykgXHUwMDI2XHUwMDI2ICEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpYCB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIHRoaXMgZmxhZy5cbkkgc2hvdWxkIGNvbmZpcm0gaXRzIHVzYWdlIHRvIGVuc3VyZSB0aGF0IGl0J3Mgc2FmZSB0byBjYWxsIHRoZSBtZW1jZyBldmVudCBmcm9tIGF0b21pYyBjb250ZXh0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3OTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6NDAuMjc0NjY5NDI1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY0MDpcXHRcXG4yNjQxOlxcdG91dDpcXG4yNjQyOlxcdFxcdGNzc19wdXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vjc3MpO1xcbjI2NDM6XFx0fVxcbjI2NDQ6XFx0XFxuMjY0NTpcXHRzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4yNjQ2OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuMjY0NzpcXHR7XFxuMjY0ODpcXHRcXHR1bnNpZ25lZCBpbnQgYmF0Y2ggPSBtYXgoTUVNQ0dfQ0hBUkdFX0JBVENILCBucl9wYWdlcyk7XFxuMjY0OTpcXHRcXHRpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuMjY1MDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX292ZXJfbGltaXQ7XFxuMjY1MTpcXHRcXHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xcbjI2NTI6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XFxuMjY1MzpcXHRcXHRib29sIHBhc3NlZF9vb20gPSBmYWxzZTtcXG4yNjU0OlxcdFxcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XFxuMjY1NTpcXHRcXHRib29sIGRyYWluZWQgPSBmYWxzZTtcXG4yNjU2OlxcdFxcdGJvb2wgcmFpc2VkX21heF9ldmVudCA9IGZhbHNlO1xcbjI2NTc6XFx0XFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XFxuMjY1ODpcXHRcXHRib29sIGFsbG93X3NwaW5uaW5nID0gZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZ2ZwX21hc2spO1xcbjI2NTk6XFx0XFxuMjY2MDpcXHRyZXRyeTpcXG4yNjYxOlxcdFxcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXFxuMjY2MjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yNjYzOlxcdFxcbjI2NjQ6XFx0XFx0aWYgKCFhbGxvd19zcGlubmluZylcXG4yNjY1OlxcdFxcdFxcdC8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqL1xcbjI2NjY6XFx0XFx0XFx0YmF0Y2ggPSBucl9wYWdlcztcXG4yNjY3OlxcdFxcbjI2Njg6XFx0XFx0cmVjbGFpbV9vcHRpb25zID0gTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUDtcXG4yNjY5OlxcdFxcdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM4OjQwLjI3NTEyMTkyNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODQ5NTM1Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNZW1vcnkgQ29udHJvbCBpbiB0aGUgTGludXggS2VybmVsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ3ZlIGdvdCBhIHNlY3Rpb24gb2Yga2VybmVsIGNvZGUgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCAoYG1tL21lbWNvbnRyb2wuY2ApIHRoYXQncyBjbGVhcmx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUga2V5IGlzIGhvdyBtZW1vcnkgbGltaXRzIGFyZSBoYW5kbGVkIGFuZCByZXBvcnRlZCB0aHJvdWdoIHRoZSBgbWVtY2dgIG1lY2hhbmlzbS4gSSBjYW4gc2VlIHRoZSBjb2RlIGZvY3VzZXMgb24gZXZlbnQgdHJhY2tpbmcgYW5kIG5vdGlmaWNhdGlvbnMgcmVsYXRlZCB0byBoaXR0aW5nIHRob3NlIGxpbWl0cywgYW5kIEkgbm90ZSB0aGF0IGl0IGFmZmVjdHMgc2V2ZXJhbCBrZXkgYXJlYXM6IG1lbWNnIGNoYXJnaW5nLCBldmVudCByZXBvcnRpbmcsIGNncm91cCBmaWxlIG5vdGlmaWNhdGlvbnMuIEdpdmVuIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLCBmaW5kaW5nIGEgdnVsbmVyYWJpbGl0eSBoZXJlIHdvdWxkIGhhdmUgc2lnbmlmaWNhbnQgY29uc2VxdWVuY2VzLiBJIGNhbiBhbHNvIHRyaWdnZXIgdGhpcyBsb2dpYyBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB3aXRob3V0IHNwZWNpYWwgaGFyZHdhcmUuXG5cbk15IGZpcnN0IHRob3VnaHQsIGlzIHRoYXQgYFdvcnRoRnV6emluZyA9IHRydWVgLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgYEZvY3VzU3ltYm9sc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBlbnRyeXBvaW50cyBmb3IgYSBmdXp6ZXIgdG8gdGFyZ2V0LiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IEFQSSBlbnRyeXBvaW50cyDigJMgc3BlY2lmaWNhbGx5LCBhbnkgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zIHRoYXQgYXJlIGludm9sdmVkIGluIHRoaXMgY29kZSBwYXRoLiBJIHdpbGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBjb3JlIGZ1bmN0aW9uIGFuZCBmaW5kIG91dCBob3cgdG8gdHJpZ2dlciBpdC4gSSdsbCBsb29rIGZvciBmdW5jdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2Agb3IgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgY2FsbCBgdHJ5X2NoYXJnZV9tZW1jZ2Agb3Igc2ltaWxhciBmdW5jdGlvbnMgdGhhdCB0cmlnZ2VyIG1lbWNnIGNoYXJnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg2NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM4OjQ0LjEyNDY2MDMwOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4OTEwMDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV9jaGFyZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGJfY2dyb3VwLmM9MjU2PXN0YXRpYyBpbnQgX19odWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwKGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9odWdldGxiX2Nncm91cC5jLTI3NC1cXG5tbS9odWdldGxiX2Nncm91cC5jOjI3NTpcXHRpZiAoIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcbm1tL2h1Z2V0bGJfY2dyb3VwLmMtMjc2LVxcdFxcdCAgICBfX2h1Z2V0bGJfY2dyb3VwX2NvdW50ZXJfZnJvbV9jZ3JvdXAoaF9jZywgaWR4LCByc3ZkKSxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0yNTQxPWJvb2wgbWVtY2cxX2NoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNTQ1LVxcbm1tL21lbWNvbnRyb2wtdjEuYzoyNTQ2OlxcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZXRjcG1lbSwgbnJfcGFnZXMsIFxcdTAwMjZmYWlsKSkge1xcbm1tL21lbWNvbnRyb2wtdjEuYy0yNTQ3LVxcdFxcdG1lbWNnLVxcdTAwM2V0Y3BtZW1fcHJlc3N1cmUgPSAwO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI1MTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2hpZ2hfZGVsYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI1NTEtICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tXFxubW0vbWVtY29udHJvbC5jOjI1NTI6ICogdHJ5X2NoYXJnZSgpIChjb250ZXh0IHBlcm1pdHRpbmcpLCBhcyB3ZWxsIGFzIGZyb20gdGhlIHVzZXJsYW5kXFxubW0vbWVtY29udHJvbC5jLTI1NTMtICogcmV0dXJuIHBhdGggd2hlcmUgcmVjbGFpbSBpcyBhbHdheXMgYWJsZSB0byBibG9jay5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNTU1PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY0NC1cXG5tbS9tZW1jb250cm9sLmM6MjY0NTpzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9tZW1jb250cm9sLmMtMjY0Ni1cXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NjktXFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcXG5tbS9tZW1jb250cm9sLmM6MjY3MDpcXHQgICAgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSkge1xcbm1tL21lbWNvbnRyb2wuYzoyNjcxOlxcdFxcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSlcXG5tbS9tZW1jb250cm9sLmMtMjY3Mi1cXHRcXHRcXHRnb3RvIGRvbmVfcmVzdG9jaztcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODQ4LVxcbm1tL21lbWNvbnRyb2wuYzoyODQ5OnN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9tZW1jb250cm9sLmMtMjg1MC1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODU0LVxcbm1tL21lbWNvbnRyb2wuYzoyODU1OlxcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0yODU2LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMTQ4PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzE1NS1cXG5tbS9tZW1jb250cm9sLmM6MzE1NjpcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzE1Ny1cXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxOTY9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMDQtXFx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxcbm1tL21lbWNvbnRyb2wuYzo1MjA1OlxcdFxcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG5tbS9tZW1jb250cm9sLmMtNTIwNi1cXHRpZiAocmV0KSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTYxNj1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2MjMtXFxubW0vbWVtY29udHJvbC5jOjU2MjQ6XFx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xcbm1tL21lbWNvbnRyb2wuYy01NjI1LVxcdFxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU2ODI9aW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzE5LS8qKlxcbm1tL21lbWNvbnRyb2wuYzo1NzIwOiAqIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAgLSB0cnkgY2hhcmdpbmcgc3dhcCBzcGFjZSBmb3IgYSBmb2xpb1xcbm1tL21lbWNvbnRyb2wuYy01NzIxLSAqIEBmb2xpbzogZm9saW8gYmVpbmcgYWRkZWQgdG8gc3dhcFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3MjYtICovXFxubW0vbWVtY29udHJvbC5jOjU3Mjc6aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9tZW1jb250cm9sLmMtNTcyOC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc1NS1cXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1jb250cm9sLmM6NTc1NjpcXHQgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFxcdTAwMjZjb3VudGVyKSkge1xcbm1tL21lbWNvbnRyb2wuYy01NzU3LVxcdFxcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpO1xcbi0tXFxubW0vcGFnZV9jb3VudGVyLmM9NzY9dm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS9wYWdlX2NvdW50ZXIuYy0xMDktLyoqXFxubW0vcGFnZV9jb3VudGVyLmM6MTEwOiAqIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlIC0gdHJ5IHRvIGhpZXJhcmNoaWNhbGx5IGNoYXJnZSBwYWdlc1xcbm1tL3BhZ2VfY291bnRlci5jLTExMS0gKiBAY291bnRlcjogY291bnRlclxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtMTE3LSAqL1xcbm1tL3BhZ2VfY291bnRlci5jOjExODpib29sIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXFxubW0vcGFnZV9jb3VudGVyLmMtMTE5LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jPTE5Nz1pbnQgcGFnZV9jb3VudGVyX3NldF9tYXgoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jLTIwOC1cXHRcXHQgKiBhbmQgYWZ0ZXIsIHNvIHRoZSByZWFkLXN3YXAtcmVhZCBpcyBvcmRlcmVkIGFuZFxcbm1tL3BhZ2VfY291bnRlci5jOjIwOTpcXHRcXHQgKiBlbnN1cmVzIGNvaGVyZW5jeSB3aXRoIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKCk6XFxubW0vcGFnZV9jb3VudGVyLmMtMjEwLVxcdFxcdCAqIHRoYXQgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGNvdW50IGJlZm9yZSBjaGVja2luZ1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xNzQwPWludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE3NzctXFx0LyogTmVlZCB0byBjYWxsIHRoaXMgZXZlbiBpZiBhbGxvY2F0aW9uIGZhaWxlZCwgZm9yIE1FTUNHX1NXQVBfRkFJTC4gKi9cXG5tbS9zd2FwZmlsZS5jOjE3Nzg6XFx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpXFxubW0vc3dhcGZpbGUuYy0xNzc5LVxcdFxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6NDQuMjQzNTc1MzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI4NzA1MDI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ2hhcmdlIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbWVtb3J5IGNoYXJnZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW52b2tlIGB0cnlfY2hhcmdlX21lbWNnYC5cblxuSXQgbG9va3MgbGlrZSB0aGUga2V5IHBsYXllcnMgYXJlOiBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgY2hhcmdlX21lbWNnYCwgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCwgYW5kIHRoYXQgaW50cmlndWluZyBgX19tZW1jZ19tZW1vcnlfZXZlbnRgLiBJJ2xsIHdhbnQgdG8gcGF5IHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoYXQgbGFzdCBvbmUgaXMgbW9kaWZpZWQgYXQgaXRzIGNhbGxzaXRlLlxuXG5gY2hhcmdlX21lbWNnYCBzZWVtcyB0byBiZSBjZW50cmFsLCBiZWluZyBjYWxsZWQgYnkgYSBmZXcgaW1wb3J0YW50IG90aGVycyBsaWtlIGBtZW1fY2dyb3VwX2NoYXJnZWAgYW5kIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLiBOb3csIGxldCdzIHNwZWNpZmljYWxseSBleGFtaW5lIHRoZSBgbWVtX2Nncm91cF9jaGFyZ2VgIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbGVycyB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBwcmV0dHkgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIHRoZSBjb3JlIG1lbW9yeSBjaGFyZ2luZyBsb2dpYyByZXNpZGVzLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDU5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM4OjUwLjUzMDYyODI2NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgwMjMzMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhcmdlX21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjU1NT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NDQtXFxubW0vbWVtY29udHJvbC5jOjI2NDU6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI2NDYtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yODQ5PXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODU0LVxcbm1tL21lbWNvbnRyb2wuYzoyODU1OlxcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0yODU2LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMTQ4PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzE1NS1cXG5tbS9tZW1jb250cm9sLmM6MzE1NjpcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzE1Ny1cXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxODE9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxOTUtXFxubW0vbWVtY29udHJvbC5jOjUxOTY6c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy01MTk3LVxcdFxcdFxcdGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjA0LVxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG5tbS9tZW1jb250cm9sLmM6NTIwNTpcXHRcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTUyMDYtXFx0aWYgKHJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMTY9aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjIxLVxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XFxubW0vbWVtY29udHJvbC5jOjUyMjI6XFx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcXG5tbS9tZW1jb250cm9sLmMtNTIyMy1cXHRjc3NfcHV0KFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjQwPWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjUzLVxcbm1tL21lbWNvbnRyb2wuYzo1MjU0OlxcdGlmIChjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApKVxcbm1tL21lbWNvbnRyb2wuYy01MjU1LVxcdFxcdHJldCA9IC1FTk9NRU07XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI3ND1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyODgtXFxubW0vbWVtY29udHJvbC5jOjUyODk6XFx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcXG5tbS9tZW1jb250cm9sLmMtNTI5MC1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjE2PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTYyMy1cXG5tbS9tZW1jb250cm9sLmM6NTYyNDpcXHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XFxubW0vbWVtY29udHJvbC5jLTU2MjUtXFx0XFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM4OjUwLjU5ODY1NTM2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDk3NzU0ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBDb250cm9sbGVyIEZ1bmN0aW9uYWxpdHkgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBrZXJuZWwgZnVuY3Rpb25zIGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLCBlc3BlY2lhbGx5IHRob3NlIHJlbGV2YW50IGZvciBmdXp6aW5nLCBrZWVwaW5nIGluIG1pbmQgdGhlIG5lZWQgdG8gYXZvaWQgZ2VuZXJpYyBmdW5jdGlvbnMgYW5kIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLlxuXG5JJ20gc3RhcnRpbmcgYnkgbG9va2luZyBhdCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG1lbnRpb25lZDogYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCwgYWxvbmcgd2l0aCBgX19tZW1jZ19tZW1vcnlfZXZlbnRgLiBJJ20gdmVyaWZ5aW5nIHRoYXQgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCBpcyBpbmRlZWQgbm9uLXN0YXRpYyBhbmQgZXhwb3J0ZWQuXG5cblRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgc2VlbXMgdG8gYmUgaW4gYHRyeV9jaGFyZ2VfbWVtY2dgLCB3aGVyZSB0aGUgcGF0Y2ggYWZmZWN0cyB3aGVuIGBfX21lbWNnX21lbW9yeV9ldmVudGAgZ2V0cyBjYWxsZWQuIFRoaXMgbWFrZXMgaXQgYSBkaXJlY3QgdGFyZ2V0LCBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIG90aGVyIGNoYXJnZSBmdW5jdGlvbnMgdG9vLCBzbyBJJ2xsIGluY2x1ZGUgdGhlbSBpbiBteSBGb2N1c1N5bWJvbHMuXG5cbk5vdywgbGV0J3MgZXhhbWluZSBkZXBlbmRlbmNpZXMuIEknbSBjaGVja2luZyBgS2NvbmZpZ2AgZm9yIHRoZSBgTUVNQ0dgIGNvbmZpZ3VyYXRpb24sIHNpbmNlIHRoaXMgaXMgaW4gdGhlIG1lbW9yeSBjb250cm9sIG1vZHVsZS4gSSBmb3VuZCBpdCwgYW5kIGl0IGRlcGVuZHMgb24gYENHUk9VUFNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgbm8gb3RoZXIgY29uZmlncyBhcmUgbmVlZGVkLiBMb29raW5nIGF0IGBpbml0L0tjb25maWdgIGFnYWluLCBpdCBsb29rcyBsaWtlIGBNRU1DR2Agc2VsZWN0cyBgUEFHRV9DT1VOVEVSYCwgYEVWRU5URkRgLCBgU0xBQl9PQkpfRVhUYCwgYW5kIGBWTV9FVkVOVF9DT1VOVEVSU2AgYnV0IHRoZXNlIGFyZSBhbGwgc2VsZWN0ZWQgYW5kIHNob3VsZCBub3QgcmVxdWlyZSBhbnkgZnVydGhlciBjb25zaWRlcmF0aW9uLlxuXG5TbywgaW4gc3VtbWFyeSwgSSdtIHNldHRpbmcgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgdG8gdHJ1ZSwgYW5kIG15IGBGb2N1c1N5bWJvbHNgIGFyZSBgX19tZW1jZ19tZW1vcnlfZXZlbnRgLCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgX19tZW1fY2dyb3VwX2NoYXJnZWAsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgQ0dST1VQU2AgYW5kIGBNRU1DR2AuIE15IHJlYXNvbmluZyBjZW50ZXJzIG9uIHRoZSBjaGFuZ2UgaW4gZXZlbnQgcmVwb3J0aW5nIGJlaGF2aW9yIGluIHRoZSBtZW1vcnkgY29udHJvbGxlciBkdXJpbmcgY2hhcmdpbmcgYWdhaW5zdCBgbWVtb3J5Lm1heGAgaW4gbm9uLWJsb2NraW5nIG9yIE9PTSBzY2VuYXJpb3MuIFRoaXMgaW1wYWN0cyBmdW5jdGlvbiByZWFjaGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWwgaW1wYWN0LCB3aGljaCBtYWtlcyB0aGlzIHdvcnRod2hpbGUgZm9yIGZ1enppbmcuXG5cbkZpbmFsbHksIEkgd2lsbCBydW4gdGhlIHNldC1yZXN1bHRzIHRvb2wgZm9yIGEgc2FuaXR5IGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgxMSwiT3V0cHV0VG9rZW5zIjoxNzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzk6MDkuNjk2NDEyODU0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAwMzAxMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19tZW1jZ19tZW1vcnlfZXZlbnRcIixcbiAgICBcIm1lbV9jZ3JvdXBfc2tfY2hhcmdlXCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfY2hhcmdlXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCIsXG4gICAgXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgY29udHJvbGxlciAobWVtY2cpIGNoYXJnaW5nIHBhdGggaW4gdHJ5X2NoYXJnZV9tZW1jZygpIHRvIHJhaXNlIE1FTUNHX01BWCBtZW1vcnkgZXZlbnRzIGltbWVkaWF0ZWx5IHdoZW4gdGhlIHBhZ2UgY291bnRlciBleGNlZWRzIHRoZSBsaW1pdCwgYmVmb3JlIGFueSBlYXJseSBiYWlsLW91dHMgKHN1Y2ggYXMgbm9uLWJsb2NraW5nIGFsbG9jYXRpb25zLCBPT00gdGFza3MsIG9yIGV4aXRpbmcgT09NIHZpY3RpbXMpLiBUaGlzIGZ1bmN0aW9uYWxseSBhZmZlY3RzIG1lbW9yeSBldmVudCBjb3VudGluZyBhbmQgbm90aWZpY2F0aW9ucyBmb3IgbWVtb3J5LmV2ZW50cyBhbmQgbWVtb3J5LmV2ZW50cy5sb2NhbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbWVtY2dfbWVtb3J5X2V2ZW50XCIsXG4gICAgXCJtZW1fY2dyb3VwX3NrX2NoYXJnZVwiLFxuICAgIFwiX19tZW1fY2dyb3VwX2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiLFxuICAgIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgKG1lbWNnKSBjaGFyZ2luZyBwYXRoIGluIHRyeV9jaGFyZ2VfbWVtY2coKSB0byByYWlzZSBNRU1DR19NQVggbWVtb3J5IGV2ZW50cyBpbW1lZGlhdGVseSB3aGVuIHRoZSBwYWdlIGNvdW50ZXIgZXhjZWVkcyB0aGUgbGltaXQsIGJlZm9yZSBhbnkgZWFybHkgYmFpbC1vdXRzIChzdWNoIGFzIG5vbi1ibG9ja2luZyBhbGxvY2F0aW9ucywgT09NIHRhc2tzLCBvciBleGl0aW5nIE9PTSB2aWN0aW1zKS4gVGhpcyBmdW5jdGlvbmFsbHkgYWZmZWN0cyBtZW1vcnkgZXZlbnQgY291bnRpbmcgYW5kIG5vdGlmaWNhdGlvbnMgZm9yIG1lbW9yeS5ldmVudHMgYW5kIG1lbW9yeS5ldmVudHMubG9jYWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM5OjA5Ljc3NjQ0OTIzOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0Njc0NjMzMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozOTowOS43NzY5NTYzMThaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTQ2Njk1MTQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbnRyb2wgZmxvdyBpbiBgdHJ5X2NoYXJnZV9tZW1jZygpYCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2Agc28gdGhhdCB0aGUgYE1FTUNHX01BWGAgZXZlbnQgKGBfX21lbWNnX21lbW9yeV9ldmVudGApIGlzIHJlY29yZGVkIGVhcmxpZXIgd2hlbmV2ZXIgYSBtZW1vcnkgY2dyb3VwIGxpbWl0IGlzIGV4Y2VlZGVkLCBlbnN1cmluZyBpdCBpcyBhY2NvdW50ZWQgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBiYWlscyBvdXQgZWFybHkgKGUuZy4gbm9uLWJsb2NraW5nIEdGUCBtYXNrcyBvciBPT00gc2NlbmFyaW9zKS5cXG5cXG5BbGwgdmFyaWFibGVzIGludm9sdmVkIChgbWVtX292ZXJfbGltaXRgLCBgYWxsb3dfc3Bpbm5pbmdgLCBgcmFpc2VkX21heF9ldmVudGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgY29weWluZyB0byB1c2Vyc3BhY2UsIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zIHRoYXQgY291bGQgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxcblxcblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmc7IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgdGVzdCBjb25maWd1cmF0aW9ucyBhcmUgYXBwcm9wcmlhdGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTZmZThkZjU2YTI4ZGRiNzkxMmI3MzM1NWQ2NmI2MGYyMmNiNzZhM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDIzOjM3OjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxMjcxZDM5MGI2MTdlLi4zOTA0ZmU5YTdiMmU5IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0yNjgzLDYgKzI2ODMsMTEgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdGdvdG8gcmV0cnk7XG4gXHR9XG4gXG4rXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpIHtcbitcdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xuK1x0XHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBQcmV2ZW50IHVuYm91bmRlZCByZWN1cnNpb24gd2hlbiByZWNsYWltIG9wZXJhdGlvbnMgbmVlZCB0b1xuIFx0ICogYWxsb2NhdGUgbWVtb3J5LiBUaGlzIG1pZ2h0IGV4Y2VlZCB0aGUgbGltaXRzIHRlbXBvcmFyaWx5LFxuQEAgLTI3MTEsOSArMjcxNiw2IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0ICAgIG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2Vvb21fbW0pKVxuIFx0XHRnb3RvIG5vbWVtO1xuIFxuLVx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xuLVx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XG4tXG4gXHRwc2lfbWVtc3RhbGxfZW50ZXIoXHUwMDI2cGZsYWdzKTtcbiBcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxuIFx0XHRcdFx0XHRcdCAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTtcbkBAIC0yNzczLDEzICsyNzc1LDYgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRpZiAoIShnZnBfbWFzayBcdTAwMjYgKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpKSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gZm9yY2U6XG4tXHQvKlxuLVx0ICogSWYgdGhlIGFsbG9jYXRpb24gaGFzIHRvIGJlIGVuZm9yY2VkLCBkb24ndCBmb3JnZXQgdG8gcmFpc2Vcbi1cdCAqIGEgTUVNQ0dfTUFYIGV2ZW50LlxuLVx0ICovXG4tXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXG4tXHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgYWxsb2NhdGlvbiBlaXRoZXIgY2FuJ3QgZmFpbCBvciB3aWxsIGxlYWQgdG8gbW9yZSBtZW1vcnlcbiBcdCAqIGJlaW5nIGZyZWVkIHZlcnkgc29vbi4gIEFsbG93IG1lbW9yeSB1c2FnZSBnbyBvdmVyIHRoZSBsaW1pdFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzk6MDkuNzc2OTU3MjE4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0ODAyMjE0OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgZGlyZWN0aXZlcywgc3RydWN0dXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50IG9mIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG1tL21lbWNvbnRyb2wuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBkaWZmIGFuZCBzdXJyb3VuZGluZyBjb2RlIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBzdWdnZXN0cyB0aGVyZSdzIHNvbWUgY2hhbmdlIG9yIGJ1ZyByZXBvcnQgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIGFuZCB0aGlzIGZpbGUgaXMgdGhlIGZvY2FsIHBvaW50LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJJ2xsIHdhbnQgdG8gdXNlIGByZWFkLWZpbGVgLCBsaWtlbHkgYXJvdW5kIGxpbmUgMjY4MC4gVGhhdCBsaW5lIG51bWJlciB3aWxsIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgcG9pbnQgdG8gZXhhbWluZSB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlIG9yIGlzc3VlLiBUaGlzIGlzIG15IGdvLXRvIGFwcHJvYWNoIOKAkyBjb250ZXh0IGZpcnN0LCB0aGVuIHRoZSBzcGVjaWZpYyBtb2RpZmljYXRpb24sIGhlbHBzIG1lIGdldCB0aGUgZnVsbCBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM5OjI0LjU3OTE3NTEyMloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2NjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjYwOlxcdHJldHJ5OlxcbjI2NjE6XFx0XFx0aWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSlcXG4yNjYyOlxcdFxcdFxcdHJldHVybiAwO1xcbjI2NjM6XFx0XFxuMjY2NDpcXHRcXHRpZiAoIWFsbG93X3NwaW5uaW5nKVxcbjI2NjU6XFx0XFx0XFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXFxuMjY2NjpcXHRcXHRcXHRiYXRjaCA9IG5yX3BhZ2VzO1xcbjI2Njc6XFx0XFxuMjY2ODpcXHRcXHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xcbjI2Njk6XFx0XFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcXG4yNjcwOlxcdFxcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBiYXRjaCwgXFx1MDAyNmNvdW50ZXIpKSB7XFxuMjY3MTpcXHRcXHRcXHRpZiAocGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpXFxuMjY3MjpcXHRcXHRcXHRcXHRnb3RvIGRvbmVfcmVzdG9jaztcXG4yNjczOlxcdFxcdFxcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXFxuMjY3NDpcXHRcXHRcXHRcXHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgYmF0Y2gpO1xcbjI2NzU6XFx0XFx0XFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpO1xcbjI2NzY6XFx0XFx0fSBlbHNlIHtcXG4yNjc3OlxcdFxcdFxcdG1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtc3cpO1xcbjI2Nzg6XFx0XFx0XFx0cmVjbGFpbV9vcHRpb25zIFxcdTAwMjY9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQO1xcbjI2Nzk6XFx0XFx0fVxcbjI2ODA6XFx0XFxuMjY4MTpcXHRcXHRpZiAoYmF0Y2ggXFx1MDAzZSBucl9wYWdlcykge1xcbjI2ODI6XFx0XFx0XFx0YmF0Y2ggPSBucl9wYWdlcztcXG4yNjgzOlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjY4NDpcXHRcXHR9XFxuMjY4NTpcXHRcXG4yNjg2OlxcdFxcdGlmICghcmFpc2VkX21heF9ldmVudCkge1xcbjI2ODc6XFx0XFx0XFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xcbjI2ODg6XFx0XFx0XFx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XFxuMjY4OTpcXHRcXHR9XFxuMjY5MDpcXHRcXG4yNjkxOlxcdFxcdC8qXFxuMjY5MjpcXHRcXHQgKiBQcmV2ZW50IHVuYm91bmRlZCByZWN1cnNpb24gd2hlbiByZWNsYWltIG9wZXJhdGlvbnMgbmVlZCB0b1xcbjI2OTM6XFx0XFx0ICogYWxsb2NhdGUgbWVtb3J5LiBUaGlzIG1pZ2h0IGV4Y2VlZCB0aGUgbGltaXRzIHRlbXBvcmFyaWx5LFxcbjI2OTQ6XFx0XFx0ICogYnV0IHdlIHByZWZlciBmYWNpbGl0YXRpbmcgbWVtb3J5IHJlY2xhaW0gYW5kIGdldHRpbmcgYmFja1xcbjI2OTU6XFx0XFx0ICogdW5kZXIgdGhlIGxpbWl0IG92ZXIgdHJpZ2dlcmluZyBPT00ga2lsbHMgaW4gdGhlc2UgY2FzZXMuXFxuMjY5NjpcXHRcXHQgKi9cXG4yNjk3OlxcdFxcdGlmICh1bmxpa2VseShjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DKSlcXG4yNjk4OlxcdFxcdFxcdGdvdG8gZm9yY2U7XFxuMjY5OTpcXHRcXG4yNzAwOlxcdFxcdGlmICh1bmxpa2VseSh0YXNrX2luX21lbWNnX29vbShjdXJyZW50KSkpXFxuMjcwMTpcXHRcXHRcXHRnb3RvIG5vbWVtO1xcbjI3MDI6XFx0XFxuMjcwMzpcXHRcXHRpZiAoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcXG4yNzA0OlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjcwNTpcXHRcXG4yNzA2OlxcdFxcdC8qXFxuMjcwNzpcXHRcXHQgKiBPT00gdmljdGltIHN0aWxsIG5lZWRzIHRvIGNoYXJnZSBtZW1vcnkgdG8gZXhpdC4gT09NIHJlYXBlciBzaG91bGRcXG4yNzA4OlxcdFxcdCAqIGhlbHAgYnV0IGl0IG1pZ2h0IGZhaWwgb24gbW1hcF9sb2NrIGNvbnRlbnRpb24uIElmIHRoZSB2aWN0aW0gaXMgYVxcbjI3MDk6XFx0XFx0ICogbGFyZ2UgdGhyZWFkIGdyb3VwIHRoZW4gYWxsIGV4aXRpbmcgdGhyZWFkcyBtaWdodCBjb21wZXRlIG9uIG9vbV9sb2NrXFxuMjcxMDpcXHRcXHQgKiBqdXN0IHRvIGxlYXJuIHRoYXQgdGhlcmUgaXMgbm90aGluZyByZWFsbHkga2lsbGFibGUgYW55bW9yZS4gQmFpbFxcbjI3MTE6XFx0XFx0ICogb3V0IGVhcmx5IGFuZCBmYWlsIHRoZSBjaGFyZ2UgdG8gZXhwZWRpdGUgdGhlaXIgZXhpdC4gVGhleSBhcmVcXG4yNzEyOlxcdFxcdCAqIGNvbnNpZGVyZWQgZnVsbHkgcmVjbGFpbWVkIGJ5IHRoZSBvb20gcmVhcGVyIGFuZCB0aGV5IHNob3VsZG4ndFxcbjI3MTM6XFx0XFx0ICogY29udHJpYnV0ZSBmdXJ0aGVyIGNoYXJnZXMuXFxuMjcxNDpcXHRcXHQgKi9cXG4yNzE1OlxcdFxcdGlmICh0c2tfaXNfb29tX3ZpY3RpbShjdXJyZW50KSBcXHUwMDI2XFx1MDAyNlxcbjI3MTY6XFx0XFx0ICAgIG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZW9vbV9tbSkpXFxuMjcxNzpcXHRcXHRcXHRnb3RvIG5vbWVtO1xcbjI3MTg6XFx0XFxuMjcxOTpcXHRcXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxuMjcyMDpcXHRcXHRucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcyxcXG4yNzIxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTtcXG4yNzIyOlxcdFxcdHBzaV9tZW1zdGFsbF9sZWF2ZShcXHUwMDI2cGZsYWdzKTtcXG4yNzIzOlxcdFxcbjI3MjQ6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfbWFyZ2luKG1lbV9vdmVyX2xpbWl0KSBcXHUwMDNlPSBucl9wYWdlcylcXG4yNzI1OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjcyNjpcXHRcXG4yNzI3OlxcdFxcdGlmICghZHJhaW5lZCkge1xcbjI3Mjg6XFx0XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTtcXG4yNzI5OlxcdFxcdFxcdGRyYWluZWQgPSB0cnVlO1xcbjI3MzA6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yNzMxOlxcdFxcdH1cXG4yNzMyOlxcdFxcbjI3MzM6XFx0XFx0aWYgKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfTk9SRVRSWSlcXG4yNzM0OlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjczNTpcXHRcXHQvKlxcbjI3MzY6XFx0XFx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cXG4yNzM3OlxcdFxcdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXFxuMjczODpcXHRcXHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cXG4yNzM5OlxcdFxcdCAqXFxuMjc0MDpcXHRcXHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxcbjI3NDE6XFx0XFx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcXG4yNzQyOlxcdFxcdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cXG4yNzQzOlxcdFxcdCAqL1xcbjI3NDQ6XFx0XFx0aWYgKG5yX3JlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiBucl9wYWdlcyBcXHUwMDNjPSAoMSBcXHUwMDNjXFx1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikpXFxuMjc0NTpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjI3NDY6XFx0XFxuMjc0NzpcXHRcXHRpZiAobnJfcmV0cmllcy0tKVxcbjI3NDg6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yNzQ5OlxcdFxcbjI3NTA6XFx0XFx0aWYgKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfUkVUUllfTUFZRkFJTClcXG4yNzUxOlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjc1MjpcXHRcXG4yNzUzOlxcdFxcdC8qIEF2b2lkIGVuZGxlc3MgbG9vcCBmb3IgdGFza3MgYnlwYXNzZWQgYnkgdGhlIG9vbSBraWxsZXIgKi9cXG4yNzU0OlxcdFxcdGlmIChwYXNzZWRfb29tIFxcdTAwMjZcXHUwMDI2IHRhc2tfaXNfZHlpbmcoKSlcXG4yNzU1OlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjc1NjpcXHRcXG4yNzU3OlxcdFxcdC8qXFxuMjc1ODpcXHRcXHQgKiBrZWVwIHJldHJ5aW5nIGFzIGxvbmcgYXMgdGhlIG1lbWNnIG9vbSBraWxsZXIgaXMgYWJsZSB0byBtYWtlXFxuMjc1OTpcXHRcXHQgKiBhIGZvcndhcmQgcHJvZ3Jlc3Mgb3IgYnlwYXNzIHRoZSBjaGFyZ2UgaWYgdGhlIG9vbSBraWxsZXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzk6MjQuNTc5Njg0NTgxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwODQyMTU2NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdHJ5X2NoYXJnZV9tZW1jZzogQSBEZWVwZXIgRGl2ZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgaW4gYHRyeV9jaGFyZ2VfbWVtY2dgLiBUaGUgcHJldmlvdXMgY29tbWl0IGludHJvZHVjZWQgc29tZXRoaW5nLCBhbmQgSSd2ZSBnb3QgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCwgYXMgYWx3YXlzLCBpcyB0byBmb2xsb3cgdGhlIGNvZGUuIEZpcnN0LCBsZXQncyBsb29rIGF0IHdoZXJlIGB0cnlfY2hhcmdlX21lbWNnYCBpcyB1c2VkIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlLCBpbiB0aGlzIGNvbnRleHQuIFRoZW4gSSdsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbiBpdHNlbGYsIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgYW5kIHRoZSBpbnRlcm5hbHMuIENvbnRleHQgaXMga2luZyBoZXJlOyB1bmRlcnN0YW5kaW5nICpob3cqIGl0J3MgYmVpbmcgdXNlZCBpcyBqdXN0IGFzIHZpdGFsIGFzIHVuZGVyc3RhbmRpbmcgKndoYXQqIGl0IGRvZXMuIEZyb20gdGhlcmUgSSdsbCBiZSBhYmxlIHRvIHNlZSB0aGUgbW9kaWZpY2F0aW9ucyBhbmQgd2h5IHRoZXkgd2VyZSBtYWRlLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBpbnZvbHZlIGxvb2tpbmcgYXQgbWVtb3J5IGFjY291bnRpbmcsIHJlc291cmNlIGxpbWl0aW5nLCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lIHdpdGhpbiB0aGUgY2dyb3VwIGhpZXJhcmNoeS4gUmlnaHQsIGxldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzk6MzUuNDIxODQ0NjQ2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjYzNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjYzNTpcXHRcXHQgKiBuZWVkIHRvIGFjY291bnQgZm9yIGFueSBpbGwtYmVnb3R0ZW4gamlmZmllcyB0byBwYXkgdGhlbSBvZmYgbGF0ZXIuXFxuMjYzNjpcXHRcXHQgKi9cXG4yNjM3OlxcdFxcdHBzaV9tZW1zdGFsbF9lbnRlcihcXHUwMDI2cGZsYWdzKTtcXG4yNjM4OlxcdFxcdHNjaGVkdWxlX3RpbWVvdXRfa2lsbGFibGUocGVuYWx0eV9qaWZmaWVzKTtcXG4yNjM5OlxcdFxcdHBzaV9tZW1zdGFsbF9sZWF2ZShcXHUwMDI2cGZsYWdzKTtcXG4yNjQwOlxcdFxcbjI2NDE6XFx0b3V0OlxcbjI2NDI6XFx0XFx0Y3NzX3B1dChcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcyk7XFxuMjY0MzpcXHR9XFxuMjY0NDpcXHRcXG4yNjQ1OlxcdHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbjI2NDY6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4yNjQ3OlxcdHtcXG4yNjQ4OlxcdFxcdHVuc2lnbmVkIGludCBiYXRjaCA9IG1heChNRU1DR19DSEFSR0VfQkFUQ0gsIG5yX3BhZ2VzKTtcXG4yNjQ5OlxcdFxcdGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG4yNjUwOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1fb3Zlcl9saW1pdDtcXG4yNjUxOlxcdFxcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7XFxuMjY1MjpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcXG4yNjUzOlxcdFxcdGJvb2wgcGFzc2VkX29vbSA9IGZhbHNlO1xcbjI2NTQ6XFx0XFx0dW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucztcXG4yNjU1OlxcdFxcdGJvb2wgZHJhaW5lZCA9IGZhbHNlO1xcbjI2NTY6XFx0XFx0Ym9vbCByYWlzZWRfbWF4X2V2ZW50ID0gZmFsc2U7XFxuMjY1NzpcXHRcXHR1bnNpZ25lZCBsb25nIHBmbGFncztcXG4yNjU4OlxcdFxcdGJvb2wgYWxsb3dfc3Bpbm5pbmcgPSBnZnBmbGFnc19hbGxvd19zcGlubmluZyhnZnBfbWFzayk7XFxuMjY1OTpcXHRcXG4yNjYwOlxcdHJldHJ5OlxcbjI2NjE6XFx0XFx0aWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSlcXG4yNjYyOlxcdFxcdFxcdHJldHVybiAwO1xcbjI2NjM6XFx0XFxuMjY2NDpcXHRcXHRpZiAoIWFsbG93X3NwaW5uaW5nKVxcbjI2NjU6XFx0XFx0XFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXFxuMjY2NjpcXHRcXHRcXHRiYXRjaCA9IG5yX3BhZ2VzO1xcbjI2Njc6XFx0XFxuMjY2ODpcXHRcXHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xcbjI2Njk6XFx0XFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcXG4yNjcwOlxcdFxcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBiYXRjaCwgXFx1MDAyNmNvdW50ZXIpKSB7XFxuMjY3MTpcXHRcXHRcXHRpZiAocGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpXFxuMjY3MjpcXHRcXHRcXHRcXHRnb3RvIGRvbmVfcmVzdG9jaztcXG4yNjczOlxcdFxcdFxcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXFxuMjY3NDpcXHRcXHRcXHRcXHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgYmF0Y2gpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozOTozNS40MjIwNzE5ODZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA1MTkyODMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBDaGFyZ2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZSBpbiBgdHJ5X2NoYXJnZV9tZW1jZ2AuIEl0IHNlZW1zIHRoZSBjcnVjaWFsIHBhcnQgbGllcyBpbiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBjb25jZXJuaW5nIG1lbW9yeSBldmVudHMuIFByZXZpb3VzbHksIHRoZSBgX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO2AgY2FsbCwgYWxvbmcgd2l0aCB0aGUgYHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO2AgZmxhZywgd2FzIHNpdHVhdGVkICphZnRlciogdGhlIGBwc2lfbWVtc3RhbGxfZW50ZXJgIGFuZCB3aXRoaW4gdGhlIGBmb3JjZTpgIGJsb2NrLiBOb3csIHRoZSBwYXRjaCBoYXMgc2hpZnRlZCB0aGlzIGNydWNpYWwgY2hlY2sgYW5kIGNhbGwgc2lnbmlmaWNhbnRseSBlYXJsaWVyLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgYGlmIChiYXRjaCBcdTAwM2UgbnJfcGFnZXMpIC4uLmAgY29uZGl0aW9uLiBUaGlzIGlzIHBsYWNlZCBiZWZvcmUgdGhlIGBpZiAodW5saWtlbHkoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpKWAgYW5kLCBpbXBvcnRhbnRseSwgYmVmb3JlIGFsbCB0aG9zZSBgbm9tZW1gIGNoZWNrcyDigJMgdGhlIG9uZXMgZGVhbGluZyB3aXRoIGB0YXNrX2luX21lbWNnX29vbWAsIHdoZXRoZXIgYmxvY2tpbmcgaXMgYWxsb3dlZCB3aXRoIGAhZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmdgLCBhbmQgc28gb24uIFRoZXkgYWxzbyB0b29rIG91dCB0aGUgZHVwbGljYXRlIGNhbGwgaW4gYGZvcmNlOmAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBvcnRhbnQgY2hhbmdlIGluIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgbWVtb3J5IG92ZXJjb21taXQgc2NlbmFyaW9zLlxuXG5Ob3csIEkgd2FudCB0byBjb25maXJtIHdoYXQgdGhpcyBlYXJseSBjYWxsIHRvIGBfX21lbWNnX21lbW9yeV9ldmVudGAgYWN0dWFsbHkgZG9lcy4gTGV0J3Mgc2VlLi4uIEknbGwganVzdCBncmVwIGZvciBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgZXhhY3RseSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTU1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzk6MzguNDc0MDAyNDhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTY4NDIyODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBfX21lbWNnX21lbW9yeV9ldmVudFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05OTc9c3RhdGljIGlubGluZSB2b2lkIGNvdW50X21lbWNnX2V2ZW50X21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTAwMi1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMDAzOnZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDQtXFx0XFx0XFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZyk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTg4MD11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTg5OC1cXG5tbS9tZW1jb250cm9sLmM6MTg5OTp2b2lkIF9fbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLmMtMTkwMC1cXHRcXHRcXHQgIGVudW0gbWVtY2dfbWVtb3J5X2V2ZW50IGV2ZW50LCBib29sIGFsbG93X3NwaW5uaW5nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozOTo0MC4zNzA4NTU0MDlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI3MDg4NzA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbW0vbWVtY29udHJvbC5jYCoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gYG1tL21lbWNvbnRyb2wuY2AgbmVhciBsaW5lIDE4OTkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgc3BlY2lmaWMgYXJlYSBvZiBtZW1vcnkgY29udHJvbCBpcyB3b3JraW5nLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBzb21lIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24gb3IgZGF0YSBzdHJ1Y3R1cmUgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIGltcGxlbWVudGF0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhcm91bmQgaG93IG1lbW9yeSBhY2NvdW50aW5nIGlzIGRvbmUsIHBvc3NpYmx5IHJlbGF0aW5nIHRvIGEgc3BlY2lmaWMgbWVtb3J5IHJlc291cmNlIG9yIGV2ZW50LiBHaXZlbiB0aGUgbGluZSBudW1iZXIsIGl0J3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21lIGxldmVsIG9mIG1lbW9yeSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24gb3IgdHJhY2tpbmcuIExldCdzIHNlZSBpZiB0aGlzIGludm9sdmVzIHBhZ2UgZmF1bHRzLCBzd2FwcGluZywgb3IgcGVyaGFwcyBtZW1vcnkgbGltaXRzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk0MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM5OjQ0LjY0MTc0NDc1MloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjEyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4OTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4OTU6XFx0XFx0fVxcbjE4OTY6XFx0XFx0cmV0dXJuIG1heDtcXG4xODk3OlxcdH1cXG4xODk4OlxcdFxcbjE4OTk6XFx0dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuMTkwMDpcXHRcXHRcXHRcXHQgIGVudW0gbWVtY2dfbWVtb3J5X2V2ZW50IGV2ZW50LCBib29sIGFsbG93X3NwaW5uaW5nKVxcbjE5MDE6XFx0e1xcbjE5MDI6XFx0XFx0Ym9vbCBzd2FwX2V2ZW50ID0gZXZlbnQgPT0gTUVNQ0dfU1dBUF9ISUdIIHx8IGV2ZW50ID09IE1FTUNHX1NXQVBfTUFYIHx8XFxuMTkwMzpcXHRcXHRcXHRcXHQgIGV2ZW50ID09IE1FTUNHX1NXQVBfRkFJTDtcXG4xOTA0OlxcdFxcbjE5MDU6XFx0XFx0LyogRm9yIG5vdyBvbmx5IE1FTUNHX01BWCBjYW4gaGFwcGVuIHdpdGggIWFsbG93X3NwaW5uaW5nIGNvbnRleHQuICovXFxuMTkwNjpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIWFsbG93X3NwaW5uaW5nIFxcdTAwMjZcXHUwMDI2IGV2ZW50ICE9IE1FTUNHX01BWCk7XFxuMTkwNzpcXHRcXG4xOTA4OlxcdFxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNfbG9jYWxbZXZlbnRdKTtcXG4xOTA5OlxcdFxcdGlmICghc3dhcF9ldmVudCBcXHUwMDI2XFx1MDAyNiBhbGxvd19zcGlubmluZylcXG4xOTEwOlxcdFxcdFxcdGNncm91cF9maWxlX25vdGlmeShcXHUwMDI2bWVtY2ctXFx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcXG4xOTExOlxcdFxcbjE5MTI6XFx0XFx0ZG8ge1xcbjE5MTM6XFx0XFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c1tldmVudF0pO1xcbjE5MTQ6XFx0XFx0XFx0aWYgKGFsbG93X3NwaW5uaW5nKSB7XFxuMTkxNTpcXHRcXHRcXHRcXHRpZiAoc3dhcF9ldmVudClcXG4xOTE2OlxcdFxcdFxcdFxcdFxcdGNncm91cF9maWxlX25vdGlmeShcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXBfZXZlbnRzX2ZpbGUpO1xcbjE5MTc6XFx0XFx0XFx0XFx0ZWxzZVxcbjE5MTg6XFx0XFx0XFx0XFx0XFx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFxcdTAwMjZtZW1jZy1cXHUwMDNlZXZlbnRzX2ZpbGUpO1xcbjE5MTk6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozOTo0NC42NDE5Njg5NjJaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA2MDE5MTczMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4vS0FTQU4gQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiB0cnlfY2hhcmdlX21lbWNnKCkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWNoIG1vZGlmaWVzIGBtbS9tZW1jb250cm9sLmM6dHJ5X2NoYXJnZV9tZW1jZygpYCwgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY2hhbmdlIGlzIGNlbnRlcmVkIGFyb3VuZCB3aGVuIHRoZSBgTUVNQ0dfTUFYYCBtZW1vcnkgZXZlbnQgaXMgcmFpc2VkIHdpdGhpbiB0aGUgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGEgY2hhcmdpbmcgZmFpbHVyZSBvY2N1cnMgYW5kIHdlJ3JlIG92ZXIgdGhlIG1lbW9yeSBsaW1pdCAoYG1lbV9vdmVyX2xpbWl0YCkuIEVzc2VudGlhbGx5LCBpdCBtb3ZlcyB0aGUgZXZlbnQgbm90aWZpY2F0aW9uIGVhcmxpZXIgaW4gdGhlIGV4ZWN1dGlvbiBwYXRoLCBiZWZvcmUgdGhlIGNvZGUgYmFpbHMgb3V0IHRvIGBub21lbWAgb3IganVtcHMgdG8gYGZvcmNlOmAuIFByZXZpb3VzbHksIGNlcnRhaW4gY29uZGl0aW9ucyB3b3VsZCBieXBhc3MgdGhlIGV2ZW50LlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgbWVtb3J5IHNhZmV0eSwgc28gSSdtIHJ1bm5pbmcgdGhyb3VnaCBteSBLTVNBTi9LQVNBTiBjaGVja2xpc3QuXG5cbkZpcnN0LCAqd2hhdCBkb2VzIGl0IHRvdWNoKj8gSXQncyBwcmltYXJpbHkgYWJvdXQgY29udHJvbCBmbG93IGFuZCBldmVudCByYWlzaW5nLiBJdCBsb29rcyBsaWtlIGByYWlzZWRfbWF4X2V2ZW50YCBpcyBhIGxvY2FsIGJvb2xlYW4sIGluaXRpYWxpemVkIHRvIGBmYWxzZWAuIGBtZW1fb3Zlcl9saW1pdGAgaXMgc2V0IGluIHRoZSBgaWZgIHN0YXRlbWVudCByaWdodCBhYm92ZSB0aGUgcmVsZXZhbnQgbGluZXMuIGBhbGxvd19zcGlubmluZ2AgaXMgaW5pdGlhbGl6ZWQgYXQgZnVuY3Rpb24gZW50cnkuIFNvLCBmcm9tIHRoZSBpbml0aWFsIGxvb2ssIGV2ZXJ5dGhpbmcgc2VlbXMgaW5pdGlhbGl6ZWQgYXMgZXhwZWN0ZWQuXG5cblRoZW4sICpkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBtZW1vcnkgc2FmZXR5IHJpc2tzKj8gSSdtIGNoZWNraW5nIGZvciBhbGwgdGhlIGNsYXNzaWMgS01TQU4gY29uY2VybnM6XG5cbiogICAqKlVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzOioqIE5vcGUuIGByYWlzZWRfbWF4X2V2ZW50YCwgYG1lbV9vdmVyX2xpbWl0YCBhbmQgYGFsbG93X3NwaW5uaW5nYCBhcmUgYWxsIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG4qICAgKipLZXJuZWwgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBzZW50IHRvIHVzZXJzcGFjZToqKiBEb2Vzbid0IHNlZW0gcmVsZXZhbnQgaGVyZS4gTm8gc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXJzcGFjZS5cbiogICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vLiBDb250cm9sIGZsb3cgcmVsaWVzIG9uIGluaXRpYWxpemVkIHZhcmlhYmxlcyBsaWtlIGBtZW1fb3Zlcl9saW1pdGAuXG4qICAgKipNZW1vcnkgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBidWdzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBmaWVsZHM6KiogTm90IGEgZmFjdG9yLiBUaGUgY2hhbmdlIGlzIGF0IGFuIGVhcmxpZXIgcG9pbnQsIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgdXNlZCBvciBpbml0aWFsaXplZC5cbiogICAqKkJ1ZmZlciBpbmRleGluZy9ib3VuZHMgY2hhbmdlcyBleHBvc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzOioqIE5vdCBpbiBwbGF5IGhlcmUuXG5cbkkndmUgZ29uZSB0aHJvdWdoIHRob3NlIGNvcmUgcG9pbnRzLiBUaGVyZSBpcyBub3RoaW5nIGluIHRoaXMgcGF0Y2ggdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IGFsbCwgb3IgdGhhdCBpbnRyb2R1Y2VzIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBnbyB0aHJvdWdoIG15IGZvdXItcG9pbnQgcmV2aWV3OlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzOioqIFN0aWxsIG5vLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vLlxuMy4gICoqQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkczoqKiBOb3RoaW5nIG5ldyBoZXJlLlxuNC4gICoqQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlczoqKiBObywgdGhpcyBkb2VzIG5vdCBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhhdC5cblxuU28sICpteSBjb25jbHVzaW9uPyogVGhpcyBpcyBhbGwgS0FTQU4gdGVycml0b3J5LiBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuIFN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIHZlcmlmeSBtZW1vcnkgc2FmZXR5IGFuZCB0aGUgbG9jayBoYW5kbGluZy4gVGhlcmUncyBub3RoaW5nIGluIHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy5cbioqTmVlZHNLTVNBTiA9IGZhbHNlLioqXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NzIsIk91dHB1dFRva2VucyI6MjEwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzk6NTUuMjQzODg4ODA0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29udHJvbCBmbG93IGluIGB0cnlfY2hhcmdlX21lbWNnKClgIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYCBzbyB0aGF0IHRoZSBgTUVNQ0dfTUFYYCBldmVudCAoYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCkgaXMgcmVjb3JkZWQgZWFybGllciB3aGVuZXZlciBhIG1lbW9yeSBjZ3JvdXAgbGltaXQgaXMgZXhjZWVkZWQsIGVuc3VyaW5nIGl0IGlzIGFjY291bnRlZCBldmVuIGlmIHRoZSBhbGxvY2F0aW9uIGJhaWxzIG91dCBlYXJseSAoZS5nLiBub24tYmxvY2tpbmcgR0ZQIG1hc2tzIG9yIE9PTSBzY2VuYXJpb3MpLlxcblxcbkFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKGBtZW1fb3Zlcl9saW1pdGAsIGBhbGxvd19zcGlubmluZ2AsIGByYWlzZWRfbWF4X2V2ZW50YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBjb3B5aW5nIHRvIHVzZXJzcGFjZSwgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHN0cnVjdCBpbml0aWFsaXphdGlvbnMgdGhhdCBjb3VsZCByZXN1bHQgaW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZzsgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCB0ZXN0IGNvbmZpZ3VyYXRpb25zIGFyZSBhcHByb3ByaWF0ZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29udHJvbCBmbG93IGluIGB0cnlfY2hhcmdlX21lbWNnKClgIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYCBzbyB0aGF0IHRoZSBgTUVNQ0dfTUFYYCBldmVudCAoYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCkgaXMgcmVjb3JkZWQgZWFybGllciB3aGVuZXZlciBhIG1lbW9yeSBjZ3JvdXAgbGltaXQgaXMgZXhjZWVkZWQsIGVuc3VyaW5nIGl0IGlzIGFjY291bnRlZCBldmVuIGlmIHRoZSBhbGxvY2F0aW9uIGJhaWxzIG91dCBlYXJseSAoZS5nLiBub24tYmxvY2tpbmcgR0ZQIG1hc2tzIG9yIE9PTSBzY2VuYXJpb3MpLlxcblxcbkFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKGBtZW1fb3Zlcl9saW1pdGAsIGBhbGxvd19zcGlubmluZ2AsIGByYWlzZWRfbWF4X2V2ZW50YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBjb3B5aW5nIHRvIHVzZXJzcGFjZSwgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHN0cnVjdCBpbml0aWFsaXphdGlvbnMgdGhhdCBjb3VsZCByZXN1bHQgaW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZzsgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCB0ZXN0IGNvbmZpZ3VyYXRpb25zIGFyZSBhcHByb3ByaWF0ZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowdtcpv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 23:35:25 +0000 UTC FinishedAt: 2026-08-27 23:39:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3d83758432b5e6ed9507500a57efb0f3af41ee7d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3d83758432b5e6ed9507500a57efb0f3af41ee7d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG" ], "series_id": "9f9a8715-8ae0-42f0-9a9c-fed59f3f085d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__memcg_memory_event", "mem_cgroup_sk_charge", "__mem_cgroup_charge", "mem_cgroup_charge_hugetlb", "mem_cgroup_swapin_charge_folio" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX21lbWNnX21lbW9yeV9ldmVudCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3NrX2NoYXJnZSYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbnRyb2wgZmxvdyBpbiBgdHJ5X2NoYXJnZV9tZW1jZygpYCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2Agc28gdGhhdCB0aGUgYE1FTUNHX01BWGAgZXZlbnQgKGBfX21lbWNnX21lbW9yeV9ldmVudGApIGlzIHJlY29yZGVkIGVhcmxpZXIgd2hlbmV2ZXIgYSBtZW1vcnkgY2dyb3VwIGxpbWl0IGlzIGV4Y2VlZGVkLCBlbnN1cmluZyBpdCBpcyBhY2NvdW50ZWQgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBiYWlscyBvdXQgZWFybHkgKGUuZy4gbm9uLWJsb2NraW5nIEdGUCBtYXNrcyBvciBPT00gc2NlbmFyaW9zKS5cblxuQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoYG1lbV9vdmVyX2xpbWl0YCwgYGFsbG93X3NwaW5uaW5nYCwgYHJhaXNlZF9tYXhfZXZlbnRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucyB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZzsgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCB0ZXN0IGNvbmZpZ3VyYXRpb25zIGFyZSBhcHByb3ByaWF0ZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgKG1lbWNnKSBjaGFyZ2luZyBwYXRoIGluIHRyeV9jaGFyZ2VfbWVtY2coKSB0byByYWlzZSBNRU1DR19NQVggbWVtb3J5IGV2ZW50cyBpbW1lZGlhdGVseSB3aGVuIHRoZSBwYWdlIGNvdW50ZXIgZXhjZWVkcyB0aGUgbGltaXQsIGJlZm9yZSBhbnkgZWFybHkgYmFpbC1vdXRzIChzdWNoIGFzIG5vbi1ibG9ja2luZyBhbGxvY2F0aW9ucywgT09NIHRhc2tzLCBvciBleGl0aW5nIE9PTSB2aWN0aW1zKS4gVGhpcyBmdW5jdGlvbmFsbHkgYWZmZWN0cyBtZW1vcnkgZXZlbnQgY291bnRpbmcgYW5kIG5vdGlmaWNhdGlvbnMgZm9yIG1lbW9yeS5ldmVudHMgYW5kIG1lbW9yeS5ldmVudHMubG9jYWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5NmZlOGRmNTZhMjhkZGI3OTEyYjczMzU1ZDY2YjYwZjIyY2I3NmEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMjM6Mzc6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxMjcxZDM5MGI2MTdlLi4zOTA0ZmU5YTdiMmU5IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0yNjgzLDYgJiM0MzsyNjgzLDExIEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuJiM0MztcdGlmICghcmFpc2VkX21heF9ldmVudCkge1xuJiM0MztcdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xuJiM0MztcdFx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qXG4gXHQgKiBQcmV2ZW50IHVuYm91bmRlZCByZWN1cnNpb24gd2hlbiByZWNsYWltIG9wZXJhdGlvbnMgbmVlZCB0b1xuIFx0ICogYWxsb2NhdGUgbWVtb3J5LiBUaGlzIG1pZ2h0IGV4Y2VlZCB0aGUgbGltaXRzIHRlbXBvcmFyaWx5LFxuQEAgLTI3MTEsOSAmIzQzOzI3MTYsNiBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdCAgICBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlb29tX21tKSlcbiBcdFx0Z290byBub21lbTtcbiBcbi1cdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbi1cdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xuLVxuIFx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG4gXHRucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcyxcbiBcdFx0XHRcdFx0XHQgICAgZ2ZwX21hc2ssIHJlY2xhaW1fb3B0aW9ucywgTlVMTCk7XG5AQCAtMjc3MywxMyAmIzQzOzI3NzUsNiBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmICghKGdmcF9tYXNrIFx1MDAyNiAoX19HRlBfTk9GQUlMIHwgX19HRlBfSElHSCkpKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBmb3JjZTpcbi1cdC8qXG4tXHQgKiBJZiB0aGUgYWxsb2NhdGlvbiBoYXMgdG8gYmUgZW5mb3JjZWQsIGRvbiYjMzk7dCBmb3JnZXQgdG8gcmFpc2Vcbi1cdCAqIGEgTUVNQ0dfTUFYIGV2ZW50LlxuLVx0ICovXG4tXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXG4tXHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgYWxsb2NhdGlvbiBlaXRoZXIgY2FuJiMzOTt0IGZhaWwgb3Igd2lsbCBsZWFkIHRvIG1vcmUgbWVtb3J5XG4gXHQgKiBiZWluZyBmcmVlZCB2ZXJ5IHNvb24uICBBbGxvdyBtZW1vcnkgdXNhZ2UgZ28gb3ZlciB0aGUgbGltaXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDR1JPVVBTJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19tZW1jZ19tZW1vcnlfZXZlbnQmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9za19jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1fY2dyb3VwX2NoYXJnZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgY29udHJvbGxlciAobWVtY2cpIGNoYXJnaW5nIHBhdGggaW4gdHJ5X2NoYXJnZV9tZW1jZygpIHRvIHJhaXNlIE1FTUNHX01BWCBtZW1vcnkgZXZlbnRzIGltbWVkaWF0ZWx5IHdoZW4gdGhlIHBhZ2UgY291bnRlciBleGNlZWRzIHRoZSBsaW1pdCwgYmVmb3JlIGFueSBlYXJseSBiYWlsLW91dHMgKHN1Y2ggYXMgbm9uLWJsb2NraW5nIGFsbG9jYXRpb25zLCBPT00gdGFza3MsIG9yIGV4aXRpbmcgT09NIHZpY3RpbXMpLiBUaGlzIGZ1bmN0aW9uYWxseSBhZmZlY3RzIG1lbW9yeSBldmVudCBjb3VudGluZyBhbmQgbm90aWZpY2F0aW9ucyBmb3IgbWVtb3J5LmV2ZW50cyBhbmQgbWVtb3J5LmV2ZW50cy5sb2NhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk2ZmU4ZGY1NmEyOGRkYjc5MTJiNzMzNTVkNjZiNjBmMjJjYjc2YTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAyMzozNzozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxMjcxZDM5MGI2MTdlLi4zOTA0ZmU5YTdiMmU5IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0yNjgzLDYgJiM0MzsyNjgzLDExIEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLAogCQlnb3RvIHJldHJ5OwogCX0KIAomIzQzOwlpZiAoIXJhaXNlZF9tYXhfZXZlbnQpIHsKJiM0MzsJCV9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTsKJiM0MzsJCXJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBQcmV2ZW50IHVuYm91bmRlZCByZWN1cnNpb24gd2hlbiByZWNsYWltIG9wZXJhdGlvbnMgbmVlZCB0bwogCSAqIGFsbG9jYXRlIG1lbW9yeS4gVGhpcyBtaWdodCBleGNlZWQgdGhlIGxpbWl0cyB0ZW1wb3JhcmlseSwKQEAgLTI3MTEsOSAmIzQzOzI3MTYsNiBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzaywKIAkgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIGN1cnJlbnQtJmd0O3NpZ25hbC0mZ3Q7b29tX21tKSkKIAkJZ290byBub21lbTsKIAotCV9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTsKLQlyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTsKLQogCXBzaV9tZW1zdGFsbF9lbnRlcigmYW1wO3BmbGFncyk7CiAJbnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsCiAJCQkJCQkgICAgZ2ZwX21hc2ssIHJlY2xhaW1fb3B0aW9ucywgTlVMTCk7CkBAIC0yNzczLDEzICYjNDM7Mjc3NSw2IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLAogCWlmICghKGdmcF9tYXNrICZhbXA7IChfX0dGUF9OT0ZBSUwgfCBfX0dGUF9ISUdIKSkpCiAJCXJldHVybiAtRU5PTUVNOwogZm9yY2U6Ci0JLyoKLQkgKiBJZiB0aGUgYWxsb2NhdGlvbiBoYXMgdG8gYmUgZW5mb3JjZWQsIGRvbiYjMzk7dCBmb3JnZXQgdG8gcmFpc2UKLQkgKiBhIE1FTUNHX01BWCBldmVudC4KLQkgKi8KLQlpZiAoIXJhaXNlZF9tYXhfZXZlbnQpCi0JCV9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTsKLQogCS8qCiAJICogVGhlIGFsbG9jYXRpb24gZWl0aGVyIGNhbiYjMzk7dCBmYWlsIG9yIHdpbGwgbGVhZCB0byBtb3JlIG1lbW9yeQogCSAqIGJlaW5nIGZyZWVkIHZlcnkgc29vbi4gIEFsbG93IG1lbW9yeSB1c2FnZSBnbyBvdmVyIHRoZSBsaW1pdAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDU3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGluLgoKKipJbnNwZWN0aW5nIHRoZSBDb2RlIENoYW5nZXMqKgoKUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdHJ5X2NoYXJnZV9tZW1jZ2AgZnVuY3Rpb24uIE15IHNwaWRleS1zZW5zZSBpcyBhbHJlYWR5IHRpbmdsaW5nIGEgYml0OyBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGFuZCBjaGFyZ2luZyBpcyBjcml0aWNhbCwgYW5kIGEgY2hhbmdlIGhlcmUgd2FycmFudHMgY2FyZWZ1bCBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY2hhbmdlIHdpdGhpbiBpdHMgYnJvYWRlciBjb250ZXh0LiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL21lbWNvbnRyb2wuY2AgYmVmb3JlIEkgZXZlbiB0cnkgdG8gdW5kZXJzdGFuZCB3aGF0ICp0aGlzKiBjaGFuZ2UgZG9lcy4gR2V0dGluZyB0aGUgbGF5IG9mIHRoZSBsYW5kIHdpbGwgZ2l2ZSBtZSB0aGUgcHJvcGVyIGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2NjA6XHRyZXRyeTpcbjI2NjE6XHRcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4yNjYyOlx0XHRcdHJldHVybiAwO1xuMjY2MzpcdFxuMjY2NDpcdFx0aWYgKCFhbGxvd19zcGlubmluZylcbjI2NjU6XHRcdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG4yNjY2Olx0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4yNjY3Olx0XG4yNjY4Olx0XHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuMjY2OTpcdFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbjI2NzA6XHRcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG4yNjcxOlx0XHRcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIGJhdGNoLCBcdTAwMjZjb3VudGVyKSlcbjI2NzI6XHRcdFx0XHRnb3RvIGRvbmVfcmVzdG9jaztcbjI2NzM6XHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbjI2NzQ6XHRcdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIGJhdGNoKTtcbjI2NzU6XHRcdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpO1xuMjY3NjpcdFx0fSBlbHNlIHtcbjI2Nzc6XHRcdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XG4yNjc4Olx0XHRcdHJlY2xhaW1fb3B0aW9ucyBcdTAwMjY9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuMjY3OTpcdFx0fVxuMjY4MDpcdFxuMjY4MTpcdFx0aWYgKGJhdGNoIFx1MDAzZSBucl9wYWdlcykge1xuMjY4MjpcdFx0XHRiYXRjaCA9IG5yX3BhZ2VzO1xuMjY4MzpcdFx0XHRnb3RvIHJldHJ5O1xuMjY4NDpcdFx0fVxuMjY4NTpcdFxuMjY4NjpcdFx0aWYgKCFyYWlzZWRfbWF4X2V2ZW50KSB7XG4yNjg3Olx0XHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbjI2ODg6XHRcdFx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XG4yNjg5Olx0XHR9XG4yNjkwOlx0XG4yNjkxOlx0XHQvKlxuMjY5MjpcdFx0ICogUHJldmVudCB1bmJvdW5kZWQgcmVjdXJzaW9uIHdoZW4gcmVjbGFpbSBvcGVyYXRpb25zIG5lZWQgdG9cbjI2OTM6XHRcdCAqIGFsbG9jYXRlIG1lbW9yeS4gVGhpcyBtaWdodCBleGNlZWQgdGhlIGxpbWl0cyB0ZW1wb3JhcmlseSxcbjI2OTQ6XHRcdCAqIGJ1dCB3ZSBwcmVmZXIgZmFjaWxpdGF0aW5nIG1lbW9yeSByZWNsYWltIGFuZCBnZXR0aW5nIGJhY2tcbjI2OTU6XHRcdCAqIHVuZGVyIHRoZSBsaW1pdCBvdmVyIHRyaWdnZXJpbmcgT09NIGtpbGxzIGluIHRoZXNlIGNhc2VzLlxuMjY5NjpcdFx0ICovXG4yNjk3Olx0XHRpZiAodW5saWtlbHkoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpKVxuMjY5ODpcdFx0XHRnb3RvIGZvcmNlO1xuMjY5OTpcdFxuMjcwMDpcdFx0aWYgKHVubGlrZWx5KHRhc2tfaW5fbWVtY2dfb29tKGN1cnJlbnQpKSlcbjI3MDE6XHRcdFx0Z290byBub21lbTtcbjI3MDI6XHRcbjI3MDM6XHRcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxuMjcwNDpcdFx0XHRnb3RvIG5vbWVtO1xuMjcwNTpcdFxuMjcwNjpcdFx0LypcbjI3MDc6XHRcdCAqIE9PTSB2aWN0aW0gc3RpbGwgbmVlZHMgdG8gY2hhcmdlIG1lbW9yeSB0byBleGl0LiBPT00gcmVhcGVyIHNob3VsZFxuMjcwODpcdFx0ICogaGVscCBidXQgaXQgbWlnaHQgZmFpbCBvbiBtbWFwX2xvY2sgY29udGVudGlvbi4gSWYgdGhlIHZpY3RpbSBpcyBhXG4yNzA5Olx0XHQgKiBsYXJnZSB0aHJlYWQgZ3JvdXAgdGhlbiBhbGwgZXhpdGluZyB0aHJlYWRzIG1pZ2h0IGNvbXBldGUgb24gb29tX2xvY2tcbjI3MTA6XHRcdCAqIGp1c3QgdG8gbGVhcm4gdGhhdCB0aGVyZSBpcyBub3RoaW5nIHJlYWxseSBraWxsYWJsZSBhbnltb3JlLiBCYWlsXG4yNzExOlx0XHQgKiBvdXQgZWFybHkgYW5kIGZhaWwgdGhlIGNoYXJnZSB0byBleHBlZGl0ZSB0aGVpciBleGl0LiBUaGV5IGFyZVxuMjcxMjpcdFx0ICogY29uc2lkZXJlZCBmdWxseSByZWNsYWltZWQgYnkgdGhlIG9vbSByZWFwZXIgYW5kIHRoZXkgc2hvdWxkbiYjMzk7dFxuMjcxMzpcdFx0ICogY29udHJpYnV0ZSBmdXJ0aGVyIGNoYXJnZXMuXG4yNzE0Olx0XHQgKi9cbjI3MTU6XHRcdGlmICh0c2tfaXNfb29tX3ZpY3RpbShjdXJyZW50KSBcdTAwMjZcdTAwMjZcbjI3MTY6XHRcdCAgICBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlb29tX21tKSlcbjI3MTc6XHRcdFx0Z290byBub21lbTtcbjI3MTg6XHRcbjI3MTk6XHRcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuMjcyMDpcdFx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXG4yNzIxOlx0XHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuMjcyMjpcdFx0cHNpX21lbXN0YWxsX2xlYXZlKFx1MDAyNnBmbGFncyk7XG4yNzIzOlx0XG4yNzI0Olx0XHRpZiAobWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpIFx1MDAzZT0gbnJfcGFnZXMpXG4yNzI1Olx0XHRcdGdvdG8gcmV0cnk7XG4yNzI2Olx0XG4yNzI3Olx0XHRpZiAoIWRyYWluZWQpIHtcbjI3Mjg6XHRcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTtcbjI3Mjk6XHRcdFx0ZHJhaW5lZCA9IHRydWU7XG4yNzMwOlx0XHRcdGdvdG8gcmV0cnk7XG4yNzMxOlx0XHR9XG4yNzMyOlx0XG4yNzMzOlx0XHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpXG4yNzM0Olx0XHRcdGdvdG8gbm9tZW07XG4yNzM1Olx0XHQvKlxuMjczNjpcdFx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cbjI3Mzc6XHRcdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXG4yNzM4Olx0XHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cbjI3Mzk6XHRcdCAqXG4yNzQwOlx0XHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxuMjc0MTpcdFx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcbjI3NDI6XHRcdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cbjI3NDM6XHRcdCAqL1xuMjc0NDpcdFx0aWYgKG5yX3JlY2xhaW1lZCBcdTAwMjZcdTAwMjYgbnJfcGFnZXMgXHUwMDNjPSAoMSBcdTAwM2NcdTAwM2MgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKVxuMjc0NTpcdFx0XHRnb3RvIHJldHJ5O1xuMjc0NjpcdFxuMjc0NzpcdFx0aWYgKG5yX3JldHJpZXMtLSlcbjI3NDg6XHRcdFx0Z290byByZXRyeTtcbjI3NDk6XHRcbjI3NTA6XHRcdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfUkVUUllfTUFZRkFJTClcbjI3NTE6XHRcdFx0Z290byBub21lbTtcbjI3NTI6XHRcbjI3NTM6XHRcdC8qIEF2b2lkIGVuZGxlc3MgbG9vcCBmb3IgdGFza3MgYnlwYXNzZWQgYnkgdGhlIG9vbSBraWxsZXIgKi9cbjI3NTQ6XHRcdGlmIChwYXNzZWRfb29tIFx1MDAyNlx1MDAyNiB0YXNrX2lzX2R5aW5nKCkpXG4yNzU1Olx0XHRcdGdvdG8gbm9tZW07XG4yNzU2Olx0XG4yNzU3Olx0XHQvKlxuMjc1ODpcdFx0ICoga2VlcCByZXRyeWluZyBhcyBsb25nIGFzIHRoZSBtZW1jZyBvb20ga2lsbGVyIGlzIGFibGUgdG8gbWFrZVxuMjc1OTpcdFx0ICogYSBmb3J3YXJkIHByb2dyZXNzIG9yIGJ5cGFzcyB0aGUgY2hhcmdlIGlmIHRoZSBvb20ga2lsbGVyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIxNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29tbWl0KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgY29tbWl0IGlzIGF0dGVtcHRpbmcgdG8gYWNoaWV2ZS4gSSYjMzk7bGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb21taXQgaXRzZWxmIOKAkyB3aGF0IGZpbGVzIHdlcmUgY2hhbmdlZCwgYWRkZWQsIG9yIGRlbGV0ZWQ/IFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBUaGVuLCBJJiMzOTtsbCBsZXZlcmFnZSB0aGUgcG93ZXIgb2YgdGhlIGBnaXQgbG9nYCB0byBwcm92aWRlIG1vcmUgY29udGV4dC4gS25vd2luZyB0aGUgc3BlY2lmaWMgY29tbWl0IGhhc2gsIEkgY2FuIHN0YXJ0IHdpdGggYSB0YXJnZXRlZCBgZ2l0IGxvZ2AgY29tbWFuZC4gTWF5YmUgSSBjYW4gcXVpY2tseSBmaW5kIGEgaGVscGZ1bCBtZXNzYWdlIHRoZXJlLCBvciBwZXJoYXBzIEkmIzM5O2xsIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gS25vd2luZyB0aGUgc3RhdGUgb2YgdGhpbmdzIGJlZm9yZSB0aGUgY29tbWl0IGlzIGp1c3QgYXMsIGlmIG5vdCBtb3JlLCBpbXBvcnRhbnQsIHNvIEkmIzM5O2xsIHByb2JhYmx5IGxvb2sgdG8gc2VlIHdoYXQgdGhlICpwcmV2aW91cyogY29tbWl0IGRpZC4gVGhlIGxvZyB3aWxsIHRlbGwgdGhlIHN0b3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JhaXNlZF9tYXhfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI2NDU9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vbWVtY29udHJvbC5jLTI2NTUtXHRib29sIGRyYWluZWQgPSBmYWxzZTtcbm1tL21lbWNvbnRyb2wuYzoyNjU2Olx0Ym9vbCByYWlzZWRfbWF4X2V2ZW50ID0gZmFsc2U7XG5tbS9tZW1jb250cm9sLmMtMjY1Ny1cdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjg1LVxubW0vbWVtY29udHJvbC5jOjI2ODY6XHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpIHtcbm1tL21lbWNvbnRyb2wuYy0yNjg3LVx0XHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XG5tbS9tZW1jb250cm9sLmM6MjY4ODpcdFx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XG5tbS9tZW1jb250cm9sLmMtMjY4OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjY1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtY2cgTWVtb3J5IENoYXJnZSBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHRvIGB0cnlfY2hhcmdlX21lbWNnYC4gUHJldmlvdXNseSwgd2hlbiBhIG1lbW9yeSBjaGFyZ2UgZmFpbGVkIOKAkyBzYXksIGEgbGltaXQgd2FzIGhpdCDigJMgdGhlIGxvZ2ljIGZsb3cgd2FzIHByZXR0eSBzcGVjaWZpYzogaXQgY2hlY2tlZCBzZXZlcmFsIGNvbmRpdGlvbnMgYmVmb3JlIHBvdGVudGlhbGx5IHJhaXNpbmcgYSBtZW1vcnkgZXZlbnQuIEVzc2VudGlhbGx5LCBpdCBoYWQgc2V2ZXJhbCAmIzM0O2Vhcmx5IGV4aXRzJiMzNDsgdGhhdCBwcmV2ZW50ZWQgcmFpc2luZyB0aGUgZXZlbnQuIEl0IGNoZWNrZWQgaWYgYFBGX01FTUFMTE9DYCB3YXMgc2V0LCBpZiB0aGUgdGFzayB3YXMgaW4gT09NIHN0YXRlLCBpZiB0aGUgR0ZQIGZsYWdzIGFsbG93ZWQgYmxvY2tpbmcsIGFuZCBpZiBpdCBzaG91bGQgc2tpcCB0aGUgT09NIGtpbGxlci4gT25seSBpZiAqbm9uZSogb2YgdGhvc2UgY29uZGl0aW9ucyB3ZXJlIG1ldCBkaWQgaXQgY2FsbCBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGFuZCBzZXQgYHJhaXNlZF9tYXhfZXZlbnRgIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGZyZWUgbWVtb3J5LiBUaGVyZSB3YXMgYWxzbyBhIHJlZHVuZGFudCBjYWxsIHRvIHRoZSBldmVudCBoYW5kbGVyIGluIHRoZSBgZm9yY2U6YCBsYWJlbC4KCk5vdywgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBzaWduaWZpY2FudGx5IGFsdGVyaW5nIHRoYXQuIEl0JiMzOTtzIG1vdmluZyB0aGF0IGNydWNpYWwgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCBjYWxsICp1cCogaW4gdGhlIGNhbGwgY2hhaW4uIEl0JiMzOTtzIG5vdyBiZWluZyBjYWxsZWQgdW5jb25kaXRpb25hbGx5LCByaWdodCBhdCB0aGUgc3RhcnQgb2YgYHRyeV9jaGFyZ2VfbWVtY2dgLCB3aGVuZXZlciB0aGUgcGFnZSBjb3VudGVyIGNoYXJnZSBmYWlscyAoYW5kIHRoZSBgYmF0Y2hgIGNvdW50IG1hdGNoZXMgdGhlIGF0dGVtcHRlZCBhbGxvY2F0aW9uIHNpemUpLiBDcml0aWNhbGx5LCBpdCAqYWxzbyogcmVtb3ZlcyB0aGUgcmVkdW5kYW50IGNhbGwgZnJvbSBgZm9yY2U6YC4gU28sIGVzc2VudGlhbGx5LCB3ZSBub3cgZ2V0IHRoZSBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGZpcmluZyBldmVyeSB0aW1lIGEgcGFnZSBjaGFyZ2UgZmFpbHMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIHNoaWZ0LiBTcGVjaWZpY2FsbHksIHdoYXQmIzM5O3MgdGhlIHB1cnBvc2Ugb2YgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YD8gTGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGl0cyBkZWZpbml0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLiBUaGlzIHVuY29uZGl0aW9uYWwgdHJpZ2dlciBjb3VsZCBwb3RlbnRpYWxseSBpbXBhY3QgdGhlIHN5c3RlbSYjMzk7cyByZWFjdGlvbiB0byBtZW1vcnkgcHJlc3N1cmUsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHZhcmlvdXMgZWFybHkgZXhpdCBjb25kaXRpb25zIGl0IGJ5cGFzc2VkIGJlZm9yZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgbmV3IGJlaGF2aW9yIGRvZXNuJiMzOTt0IGludHJvZHVjZSB1bndhbnRlZCBzaWRlIGVmZmVjdHMgb3IgcmVncmVzc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1jZ19tZW1vcnlfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTE4ODA9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xODk4LVxubW0vbWVtY29udHJvbC5jOjE4OTk6dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9tZW1jb250cm9sLmMtMTkwMC1cdFx0XHQgIGVudW0gbWVtY2dfbWVtb3J5X2V2ZW50IGV2ZW50LCBib29sIGFsbG93X3NwaW5uaW5nKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xOTI3LX1cbm1tL21lbWNvbnRyb2wuYzoxOTI4OkVYUE9SVF9TWU1CT0xfR1BMKF9fbWVtY2dfbWVtb3J5X2V2ZW50KTtcbm1tL21lbWNvbnRyb2wuYy0xOTI5LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNjQ1PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjg2LVx0aWYgKCFyYWlzZWRfbWF4X2V2ZW50KSB7XG5tbS9tZW1jb250cm9sLmM6MjY4NzpcdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xubW0vbWVtY29udHJvbC5jLTI2ODgtXHRcdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gbWVtY2dfbWVtb3J5X2V2ZW50KioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIHBpdm90YWwgZm9yIGhhbmRsaW5nIG1lbW9yeSBldmVudHMgd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIChtZW1jZykgZnJhbWV3b3JrLiBNeSBmb2N1cyBoZXJlIGlzIGdvaW5nIHRvIGJlIG9uIHVuZGVyc3RhbmRpbmcgKmhvdyogdGhlc2UgZXZlbnRzIGFyZSB0cmlnZ2VyZWQsICp3aGF0KiBpbmZvcm1hdGlvbiBpcyBiZWluZyB0cmFja2VkLCBhbmQgdWx0aW1hdGVseSwgKmhvdyogdGhpcyBjb250cmlidXRlcyB0byB0aGUgYnJvYWRlciByZXNvdXJjZSBtYW5hZ2VtZW50IHN0cmF0ZWd5IG9mIHRoZSBrZXJuZWwgZm9yIG1lbW9yeS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBzY2VuYXJpb3MgdGhhdCBhcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBBcmUgd2UgdGFsa2luZyBwYWdlIGZhdWx0cz8gTWVtb3J5IHJlY2xhaW0/IE9PTSBzaXR1YXRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlciBldmVudHMuIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byB0cmFjZSBob3cgdGhlc2UgZXZlbnRzIGFyZSByZWNvcmRlZC4gV2hhdCBzdGF0cyBhcmUgdXBkYXRlZD8gQXJlIHRoZXJlIGFueSBzaWduaWZpY2FudCBzaWRlIGVmZmVjdHMgb3IgY2FzY2FkaW5nIGNoYW5nZXMgdHJpZ2dlcmVkIGJ5IHRoZSBldmVudCBoYW5kbGluZz8gV2hhdCBsb2NrcyBhcmUgaW4gcGxheSBoZXJlPyBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGxvY2sgb3JkZXIgdG8gcnVsZSBvdXQgYW55IHBvdGVudGlhbCBkZWFkbG9ja3MuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIG9mIGNvdXJzZSwgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIG1lbWNnIGFyY2hpdGVjdHVyZS4gSG93IGRvZXMgdGhpcyBldmVudCBpbnRlcnBsYXkgd2l0aCBvdGhlciBtZW1jZyBjb21wb25lbnRzLCBsaWtlIHRoZSBjb250cm9sbGVycyBmb3IgbWVtb3J5IHVzYWdlLCBzd2FwcGluZywgYW5kIHNvIG9uPyBJIHNob3VsZCBhbnRpY2lwYXRlIHRoaXMgYmVpbmcgY29tcGxleCBidXQgaG9wZWZ1bGx5IHdlbGwtc3RydWN0dXJlZC4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgbG9ja2luZywgYWNjb3VudGluZywgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBUaW1lIHRvIGdldCBzdGFydGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg5NTpcdFx0fVxuMTg5NjpcdFx0cmV0dXJuIG1heDtcbjE4OTc6XHR9XG4xODk4Olx0XG4xODk5Olx0dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4xOTAwOlx0XHRcdFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZylcbjE5MDE6XHR7XG4xOTAyOlx0XHRib29sIHN3YXBfZXZlbnQgPSBldmVudCA9PSBNRU1DR19TV0FQX0hJR0ggfHwgZXZlbnQgPT0gTUVNQ0dfU1dBUF9NQVggfHxcbjE5MDM6XHRcdFx0XHQgIGV2ZW50ID09IE1FTUNHX1NXQVBfRkFJTDtcbjE5MDQ6XHRcbjE5MDU6XHRcdC8qIEZvciBub3cgb25seSBNRU1DR19NQVggY2FuIGhhcHBlbiB3aXRoICFhbGxvd19zcGlubmluZyBjb250ZXh0LiAqL1xuMTkwNjpcdFx0Vk1fV0FSTl9PTl9PTkNFKCFhbGxvd19zcGlubmluZyBcdTAwMjZcdTAwMjYgZXZlbnQgIT0gTUVNQ0dfTUFYKTtcbjE5MDc6XHRcbjE5MDg6XHRcdGF0b21pY19sb25nX2luYyhcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnlfZXZlbnRzX2xvY2FsW2V2ZW50XSk7XG4xOTA5Olx0XHRpZiAoIXN3YXBfZXZlbnQgXHUwMDI2XHUwMDI2IGFsbG93X3NwaW5uaW5nKVxuMTkxMDpcdFx0XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2bWVtY2ctXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xuMTkxMTpcdFxuMTkxMjpcdFx0ZG8ge1xuMTkxMzpcdFx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tldmVudF0pO1xuMTkxNDpcdFx0XHRpZiAoYWxsb3dfc3Bpbm5pbmcpIHtcbjE5MTU6XHRcdFx0XHRpZiAoc3dhcF9ldmVudClcbjE5MTY6XHRcdFx0XHRcdGNncm91cF9maWxlX25vdGlmeShcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwX2V2ZW50c19maWxlKTtcbjE5MTc6XHRcdFx0XHRlbHNlXG4xOTE4Olx0XHRcdFx0XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2bWVtY2ctXHUwMDNlZXZlbnRzX2ZpbGUpO1xuMTkxOTpcdFx0XHR9XG4xOTIwOlx0XG4xOTIxOlx0XHRcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbjE5MjI6XHRcdFx0XHRicmVhaztcbjE5MjM6XHRcdFx0aWYgKGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfTE9DQUxfRVZFTlRTKVxuMTkyNDpcdFx0XHRcdGJyZWFrO1xuMTkyNTpcdFx0fSB3aGlsZSAoKG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSBcdTAwMjZcdTAwMjZcbjE5MjY6XHRcdFx0ICFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKTtcbjE5Mjc6XHR9XG4xOTI4Olx0RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jZ19tZW1vcnlfZXZlbnQpO1xuMTkyOTpcdFxuMTkzMDpcdHN0YXRpYyBib29sIG1lbV9jZ3JvdXBfb3V0X29mX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuMTkzMTpcdFx0XHRcdFx0ICAgICBpbnQgb3JkZXIpXG4xOTMyOlx0e1xuMTkzMzpcdFx0c3RydWN0IG9vbV9jb250cm9sIG9jID0ge1xuMTkzNDpcdFx0XHQuem9uZWxpc3QgPSBOVUxMLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODQ1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLgoKKipJbnZlc3RpZ2F0aW5nIGB0cnlfY2hhcmdlX21lbWNnYCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgdHJ5X2NoYXJnZV9tZW1jZ2AgZnVuY3Rpb24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZmlndXJpbmcgb3V0IHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIOKAkyB3aGF0IGFyZSBpdHMgY2FsbGVycz8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayB3aWxsIGdpdmUgbWUgY29udGV4dCBvbiBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsuIE9uY2UgSSBoYXZlIHRoYXQgY29udGV4dCwgSSYjMzk7bGwgdGhlbiB6ZXJvIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsIGNoYW5nZXMgbWFkZSByZWxhdGVkIHRvIGl0cyB1c2FnZS4gS25vd2luZyB0aGUgY2hhbmdlcyB3aWxsIGFsbG93IG1lIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLCBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXQuIEJhc2ljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBkaWZmZXJlbnQsIGFuZCB3aHkuIE9rYXksIGxldCYjMzk7cyBzdGFydCB3aXRoIGB0cnlfY2hhcmdlX21lbWNnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X2NoYXJnZV9tZW1jZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MjU1NT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjQ0LVxubW0vbWVtY29udHJvbC5jOjI2NDU6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9tZW1jb250cm9sLmMtMjY0Ni1cdFx0XHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yODQ5PXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg1NC1cbm1tL21lbWNvbnRyb2wuYzoyODU1Olx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMjg1Ni19XG4tLVxubW0vbWVtY29udHJvbC5jPTMxNDg9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE1NS1cbm1tL21lbWNvbnRyb2wuYzozMTU2Olx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzE1Ny1cdGlmIChyZXQpXG4tLVxubW0vbWVtY29udHJvbC5jPTUxOTY9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjA0LVx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxubW0vbWVtY29udHJvbC5jOjUyMDU6XHRcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01MjA2LVx0aWYgKHJldCkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NjE2PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU2MjMtXG5tbS9tZW1jb250cm9sLmM6NTYyNDpcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcbm1tL21lbWNvbnRyb2wuYy01NjI1LVx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY0OQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG1tL21lbWNvbnRyb2wuY2AgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIHJlcXVpcmVtZW50cyBmb3IgYG1tL21lbWNvbnRyb2wuY2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSByZWxhdGVkIGBNYWtlZmlsZWAgaW4gdGhlIGBtbS9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIGJ1aWxkIHJ1bGVzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MuIFRoZSBNYWtlZmlsZSBzaG91bGQgc2hlZCBsaWdodCBvbiB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBmZWF0dXJlcywgb3RoZXIgbW9kdWxlcyBvciBvcHRpb25zLCBhbmQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCB0byBpbmNsdWRlIG9yIGVuYWJsZSB0aGlzIHBhcnRpY3VsYXIgbWVtb3J5IGNvbnRyb2wgY29tcG9uZW50LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHJlZmVyZW5jZXMgdG8gYENPTkZJR19gIG9wdGlvbnMsIG9yIHBlcmhhcHMgZXZlbiBpbmRpcmVjdCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyB0aGF0IGFyZSAqcmVxdWlyZWQqIGZvciB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgdG8gZnVuY3Rpb24gcHJvcGVybHkgd2l0aGluIHRoZSBiaWdnZXIgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgTWFrZWZpbGUgaGFzIHRvIHNheS4uLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cbm1tL01ha2VmaWxlOjI4OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLm8gOj0gblxubW0vTWFrZWZpbGU6Mjk6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXG5tbS9NYWtlZmlsZS0zMC1LQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxuLS1cbm1tL01ha2VmaWxlPTEwMz1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgJiM0Mzs9IG1lbWZkX2x1by5vXG5tbS9NYWtlZmlsZToxMDQ6b2JqLSQoQ09ORklHX01FTUNHX1YxKSAmIzQzOz0gbWVtY29udHJvbC12MS5vXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IGJwZl9tZW1jb250cm9sLm9cbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxuLS1cbm1tL2JhY2tpbmctZGV2LmM9NTgwPXN0YXRpYyB2b2lkIHdiX2V4aXQoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxuLS1cbm1tL2JhY2tpbmctZGV2LmMtNTg4LVxubW0vYmFja2luZy1kZXYuYzo1ODk6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9iYWNraW5nLWRldi5jLTU5MC1cbi0tXG5tbS9icGZfbWVtY29udHJvbC5jLTctXG5tbS9icGZfbWVtY29udHJvbC5jOjg6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9icGZfbWVtY29udHJvbC5jLTktI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2Vcbi0tXG5tbS9icGZfbWVtY29udHJvbC5jPTE2Mj1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xubW0vYnBmX21lbWNvbnRyb2wuYy0xNjMtXG5tbS9icGZfbWVtY29udHJvbC5jOjE2NDpCVEZfS0ZVTkNTX1NUQVJUKGJwZl9tZW1jb250cm9sX2tmdW5jcylcbm1tL2JwZl9tZW1jb250cm9sLmMtMTY1LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X3Jvb3RfbWVtX2Nncm91cCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMKVxuLS1cbm1tL2JwZl9tZW1jb250cm9sLmM9MTczPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbWVtX2Nncm91cF9mbHVzaF9zdGF0cywgS0ZfU0xFRVBBQkxFKVxubW0vYnBmX21lbWNvbnRyb2wuYy0xNzQtXG5tbS9icGZfbWVtY29udHJvbC5jOjE3NTpCVEZfS0ZVTkNTX0VORChicGZfbWVtY29udHJvbF9rZnVuY3MpXG5tbS9icGZfbWVtY29udHJvbC5jLTE3Ni1cbm1tL2JwZl9tZW1jb250cm9sLmM6MTc3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfbWVtY29udHJvbF9rZnVuY19zZXQgPSB7XG5tbS9icGZfbWVtY29udHJvbC5jLTE3OC1cdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxubW0vYnBmX21lbWNvbnRyb2wuYzoxNzk6XHQuc2V0ICAgICAgICAgICAgPSBcdTAwMjZicGZfbWVtY29udHJvbF9rZnVuY3MsXG5tbS9icGZfbWVtY29udHJvbC5jLTE4MC19O1xubW0vYnBmX21lbWNvbnRyb2wuYy0xODEtXG5tbS9icGZfbWVtY29udHJvbC5jOjE4MjpzdGF0aWMgaW50IF9faW5pdCBicGZfbWVtY29udHJvbF9pbml0KHZvaWQpXG5tbS9icGZfbWVtY29udHJvbC5jLTE4My17XG4tLVxubW0vYnBmX21lbWNvbnRyb2wuYy0xODYtXHRlcnIgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfVU5TUEVDLFxubW0vYnBmX21lbWNvbnRyb2wuYzoxODc6XHRcdFx0XHRcdFx1MDAyNmJwZl9tZW1jb250cm9sX2tmdW5jX3NldCk7XG5tbS9icGZfbWVtY29udHJvbC5jLTE4OC1cdGlmIChlcnIpXG5tbS9icGZfbWVtY29udHJvbC5jOjE4OTpcdFx0cHJfd2FybihcJiMzNDtlcnJvciB3aGlsZSByZWdpc3RlcmluZyBicGYgbWVtY29udHJvbCBrZnVuY3M6ICVkXCYjMzQ7LCBlcnIpO1xubW0vYnBmX21lbWNvbnRyb2wuYy0xOTAtXG4tLVxubW0vYnBmX21lbWNvbnRyb2wuYy0xOTItfVxubW0vYnBmX21lbWNvbnRyb2wuYzoxOTM6bGF0ZV9pbml0Y2FsbChicGZfbWVtY29udHJvbF9pbml0KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG5tbS9kYW1vbi9jb3JlLmM6MTE6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9kYW1vbi9jb3JlLmMtMTItI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuLS1cbm1tL2RlYnVnLmMtMTEtI2luY2x1ZGUgXHUwMDNjbGludXgvdHJhY2VfZXZlbnRzLmhcdTAwM2Vcbm1tL2RlYnVnLmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9kZWJ1Zy5jLTEzLSNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9tbWZsYWdzLmhcdTAwM2Vcbi0tXG5tbS9maWxlbWFwLmMtMzctI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG5tbS9maWxlbWFwLmM6Mzg6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9maWxlbWFwLmMtMzktI2luY2x1ZGUgXHUwMDNjbGludXgvc2htZW1fZnMuaFx1MDAzZVxuLS1cbm1tL2ZvbGlvLmMtMjgtI2luY2x1ZGUgXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFx1MDAzZVxubW0vZm9saW8uYzoyOTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL2ZvbGlvLmMtMzAtI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2Vcbi0tXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlLWZsYWdzLmhcdTAwM2Vcbm1tL2h3cG9pc29uLWluamVjdC5jOjExOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vaHdwb2lzb24taW5qZWN0LmMtMTItI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuLS1cbm1tL2xpc3RfbHJ1LmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxubW0vbGlzdF9scnUuYzoxNDojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL2xpc3RfbHJ1LmMtMTUtI2luY2x1ZGUgXCYjMzQ7c2xhYi5oXCYjMzQ7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTItXG5tbS9tZW1jb250cm9sLXYxLmM6MzojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL21lbWNvbnRyb2wtdjEuYy00LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXAuaFx1MDAzZVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xNy0jaW5jbHVkZSBcJiMzNDtzd2FwX3RhYmxlLmhcJiMzNDtcbm1tL21lbWNvbnRyb2wtdjEuYzoxODojaW5jbHVkZSBcJiMzNDttZW1jb250cm9sLXYxLmhcJiMzNDtcbm1tL21lbWNvbnRyb2wtdjEuYy0xOS1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmgtNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9jZ3JvdXAtZGVmcy5oXHUwMDNlXG5tbS9tZW1jb250cm9sLXYxLmg6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL21lbWNvbnRyb2wtdjEuaC04LVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG5tbS9tZW1jb250cm9sLmM6MjovKiBtZW1jb250cm9sLmMgLSBNZW1vcnkgQ29udHJvbGxlclxubW0vbWVtY29udHJvbC5jLTMtICpcbi0tXG5tbS9tZW1jb250cm9sLmMtMjktI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9jb3VudGVyLmhcdTAwM2Vcbm1tL21lbWNvbnRyb2wuYzozMDojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL21lbWNvbnRyb2wuYy0zMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9jZ3JvdXAuaFx1MDAzZVxuLS1cbm1tL21lbWNvbnRyb2wuYy03MC0jaW5jbHVkZSBcJiMzNDtzbGFiLmhcJiMzNDtcbm1tL21lbWNvbnRyb2wuYzo3MTojaW5jbHVkZSBcJiMzNDttZW1jb250cm9sLXYxLmhcJiMzNDtcbm1tL21lbWNvbnRyb2wuYy03Mi1cbi0tXG5tbS9tZW1vcnkuYy02MC0jaW5jbHVkZSBcdTAwM2NsaW51eC93cml0ZWJhY2suaFx1MDAzZVxubW0vbWVtb3J5LmM6NjE6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9tZW1vcnkuYy02Mi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbXVfbm90aWZpZXIuaFx1MDAzZVxuLS1cbm1tL21sb2NrLmMtMjQtI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG5tbS9tbG9jay5jOjI1OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vbWxvY2suYy0yNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbV9pbmxpbmUuaFx1MDAzZVxuLS1cbm1tL21tYXBfbG9jay5jLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvY2dyb3VwLmhcdTAwM2Vcbm1tL21tYXBfbG9jay5jOjc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9tbWFwX2xvY2suYy04LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYXBfbG9jay5oXHUwMDNlXG4tLVxubW0vb29tX2tpbGwuYy0zNS0jaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG5tbS9vb21fa2lsbC5jOjM2OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vb29tX2tpbGwuYy0zNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFx1MDAzZVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00OC0jaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX3RhYmxlX2NoZWNrLmhcdTAwM2Vcbm1tL3BhZ2VfYWxsb2MuYzo0OTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3BhZ2VfYWxsb2MuYy01MC0jaW5jbHVkZSBcdTAwM2NsaW51eC9mdHJhY2UuaFx1MDAzZVxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG5tbS9wYWdlX293bmVyLmM6MTM6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9wYWdlX293bmVyLmMtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY2xvY2suaFx1MDAzZVxuLS1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2Vcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC04LVxuLS1cbm1tL3BlcmNwdS5jLTg4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2Vcbm1tL3BlcmNwdS5jOjg5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vcGVyY3B1LmMtOTAtXG4tLVxubW0vcm1hcC5jLTY2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG5tbS9ybWFwLmM6Njc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS9ybWFwLmMtNjgtI2luY2x1ZGUgXHUwMDNjbGludXgvbW11X25vdGlmaWVyLmhcdTAwM2Vcbi0tXG5tbS9zaHJpbmtlci5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm1tL3Nocmlua2VyLmM6MjojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3Nocmlua2VyLmMtMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9yd3NlbS5oXHUwMDNlXG4tLVxubW0vc2hyaW5rZXJfZGVidWcuYy02LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Nocmlua2VyLmhcdTAwM2Vcbm1tL3Nocmlua2VyX2RlYnVnLmM6NzojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3Nocmlua2VyX2RlYnVnLmMtOC1cbi0tXG5tbS9zbGFiLmgtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxubW0vc2xhYi5oOjExOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vc2xhYi5oLTEyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2tmZW5jZS5oXHUwMDNlXG4tLVxubW0vc2xhYl9jb21tb24uYy0yOC0jaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5tbS9zbGFiX2NvbW1vbi5jOjI5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vc2xhYl9jb21tb24uYy0zMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zdGFja2RlcG90LmhcdTAwM2Vcbi0tXG5tbS9zbHViLmMtNDMtI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxubW0vc2x1Yi5jOjQ0OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vc2x1Yi5jLTQ1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmRvbS5oXHUwMDNlXG4tLVxubW0vc3dhcC5oLTYtI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZSAvKiBmb3IgUEFHRV9TSElGVCAqL1xubW0vc3dhcC5oOjc6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlIC8qIGZvciBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoKSAqL1xubW0vc3dhcC5oLTgtI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcC5oXHUwMDNlIC8qIGZvciBNQVhfU1dBUEZJTEVTX1NISUZULCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqL1xuLS1cbm1tL3N3YXBmaWxlLmMtMzQtI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY2FsbHMuaFx1MDAzZVxubW0vc3dhcGZpbGUuYzozNTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3N3YXBmaWxlLmMtMzYtI2luY2x1ZGUgXHUwMDNjbGludXgvcG9sbC5oXHUwMDNlXG4tLVxubW0vdm1hbGxvYy5jLTMzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2Vcbm1tL3ZtYWxsb2MuYzozNDojaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2Vcbm1tL3ZtYWxsb2MuYy0zNS0jaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4tLVxubW0vdm1wcmVzc3VyZS5jLTExLSAqIFRyZWUtbW9kZSAoY2dyb3VwIHYxIHVzZXJzcGFjZSBldmVudGZkKSBib29ra2VlcGluZyBsaXZlcyBpblxubW0vdm1wcmVzc3VyZS5jOjEyOiAqIG1tL21lbWNvbnRyb2wtdjEuYzsgdGhpcyBmaWxlIGhvbGRzIHRoZSBzaGFyZWQgY29kZSBhbmQgdGhlIGluLWtlcm5lbFxubW0vdm1wcmVzc3VyZS5jLTEzLSAqICh0cmVlPWZhbHNlKSBzb2NrZXQtcHJlc3N1cmUgcGF0aCB0aGF0IHJ1bnMgb24gY2dyb3VwIHYyLlxuLS1cbm1tL3Ztc2Nhbi5jLTQwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZyZWV6ZXIuaFx1MDAzZVxubW0vdm1zY2FuLmM6NDE6I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG5tbS92bXNjYW4uYy00Mi0jaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlLmhcdTAwM2Vcbi0tXG5tbS93b3JraW5nc2V0LmMtNy1cbm1tL3dvcmtpbmdzZXQuYzo4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxubW0vd29ya2luZ3NldC5jLTktI2luY2x1ZGUgXHUwMDNjbGludXgvbW1faW5saW5lLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NzkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBLY29uZmlnIGZvciBNRU1DRyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gb24gc29saWQgZ3JvdW5kIHdpdGggbWVtb3J5IGNncm91cHMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyBpcyBzdGFuZGFyZCBvcGVyYXRpbmcgcHJvY2VkdXJlLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQgb3IgYXQgbGVhc3QgY29uZmlndXJhYmxlLCBhbmQgd2hhdCBpdHMgY3VycmVudCBzdGF0ZSBpcy4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpZiBJIGV2ZW4gKmhhdmUqIG1lbW9yeSBjZ3JvdXBzIHN1cHBvcnQgY29tcGlsZWQgaW4sIG9yIGlmIEkgbmVlZCB0byBkaWcgaW50byBidWlsZCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgaXQuIEkgbWlnaHQgYWxzbyBjaGVjayBmb3IgYXNzb2NpYXRlZCBvcHRpb25zIHRoYXQgY29udHJvbCBpdHMgYmVoYXZpb3IsIGxpa2UgbmVzdGVkIGNncm91cHMgb3IgYW55IHNwZWNpZmljIHJlc291cmNlIGxpbWl0cyBkZWZpbmVkLiBObyBwb2ludCBpbiB3YXN0aW5nIHRpbWUgaWYgSSYjMzk7bSBub3QgZXZlbiB3b3JraW5nIHdpdGggYSBrZXJuZWwgdGhhdCBzdXBwb3J0cyB0aGUgZnVuY3Rpb25hbGl0eSBJIG5lZWQuIFF1aWNrbHkgY2hlY2tpbmcgS2NvbmZpZyBwcm92aWRlcyBhIGZhc3Qgc2FuaXR5IGNoZWNrIGJlZm9yZSBwcm9jZWVkaW5nIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDg0LVxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA4Ni1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA5NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwMC1cbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTExMDItXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDctXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTA5LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzMzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgaW5pdC9LY29uZmlnYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlIG9mIHRoaXMgc3lzdGVtLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgaW5pdC9LY29uZmlnYCwgdGhhdCYjMzk7cyB0aGUgb2J2aW91cyBwbGFjZSB0byBiZWdpbiBkaXNzZWN0aW5nIHRoZSBidWlsZC10aW1lIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGl0IGFyb3VuZCBsaW5lIDEwODUsIHRoYXQmIzM5O3MgZ2VuZXJhbGx5IHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgZWl0aGVyIGEgY29yZSBjb21wb25lbnQgb3IgYSBtb3JlIHNwZWNpYWxpemVkIG1vZHVsZSBkZWNsYXJhdGlvbi4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgdG8gd29yayB3aXRoLiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGNyaXRpY2FsIGRlZmluaXRpb25zIGluIHRoaXMgc2VjdGlvbiwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGVhcmx5IGJvb3QgcHJvY2VzcyBpcyBzaGFwZWQgYnkgdGhlIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODA6XHRcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXG4xMDgxOlx0XHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXG4xMDgyOlx0XG4xMDgzOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwODQ6XHRcbjEwODU6XHRjb25maWcgTUVNQ0dcbjEwODY6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODc6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODg6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDg5Olx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDkwOlx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwOTE6XHRcdGhlbHBcbjEwOTI6XHRcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxuMTA5MzpcdFxuMTA5NDpcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG4xMDk1Olx0XHRib29sXG4xMDk2Olx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMDk3Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMDk4Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5OTpcdFx0ZGVmYXVsdCB5XG4xMTAwOlx0XG4xMTAxOlx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4xMTAyOlx0XHRib29sXG4xMTAzOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTA0Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMTA1Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMTA2Olx0XHRkZWZhdWx0IHlcbjExMDc6XHRcbjExMDg6XHRjb25maWcgTUVNQ0dfVjFcbjExMDk6XHRcdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTExMDpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTExMTpcdFx0ZGVmYXVsdCBuXG4xMTEyOlx0XHRoZWxwXG4xMTEzOlx0XHQgIExlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIgd2hpY2ggaGFzIGJlZW4gZGVwcmVjYXRlZCBieVxuMTExNDpcdFx0ICBjZ3JvdXAgdjIgaW1wbGVtZW50YXRpb24uIFRoZSB2MSBpcyB0aGVyZSBmb3IgbGVnYWN5IGFwcGxpY2F0aW9uc1xuMTExNTpcdFx0ICB3aGljaCBoYXZlbiYjMzk7dCBtaWdyYXRlZCB0byB0aGUgbmV3IGNncm91cCB2MiBpbnRlcmZhY2UgeWV0LiBJZiB5b3VcbjExMTY6XHRcdCAgZG8gbm90IGhhdmUgYW55IHN1Y2ggYXBwbGljYXRpb24gdGhlbiB5b3UgYXJlIGNvbXBsZXRlbHkgZmluZSBsZWF2aW5nXG4xMTE3Olx0XHQgIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxuMTExODpcdFxuMTExOTpcdFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYGNvbmZpZyBNRU1DR2Ag4oCTIHRoYXTigJlzIGxpbmUgMTA4NSBpbiBgaW5pdC9LY29uZmlnYC4gVGltZSB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZC4gSSYjMzk7bGwgcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBsaW5lcywgc3BlY2lmaWNhbGx5IGZyb20gMTA2MCB0byAxMDg1LCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaW5mbHVlbmNpbmcgaXRzIGNvbmZpZ3VyYXRpb24uIFRoaXMgdXN1YWxseSByZXZlYWxzIHRoZSByZWxldmFudCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBhbmQgYW55IGFzc29jaWF0ZWQgY29uZGl0aW9uYWwgbG9naWMgd2l0aGluIHRoYXQgc2VnbWVudCBvZiB0aGUgS2NvbmZpZyBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY29uZGl0aW9ucyByZWxhdGVkIHRvIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzLCBvciBwZXJoYXBzIHNvbWUgcHJlcHJvY2Vzc29yIG1hY3JvcyB0aGF0IGFyZSByZWxldmFudCB0byBtZW1vcnkgY29udHJvbCBncm91cHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjA6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBncm91cGluZyBzZXRzIG9mIHByb2Nlc3NlcyB0b2dldGhlciwgZm9yXG4xMDYxOlx0XHQgIHVzZSB3aXRoIHByb2Nlc3MgY29udHJvbCBzdWJzeXN0ZW1zIHN1Y2ggYXMgQ3B1c2V0cywgQ0ZTLCBtZW1vcnlcbjEwNjI6XHRcdCAgY29udHJvbHMgb3IgZGV2aWNlIGlzb2xhdGlvbi5cbjEwNjM6XHRcdCAgU2VlXG4xMDY0Olx0XHRcdC0gRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZGVzaWduLUNGUy5yc3RcdChDRlMpXG4xMDY1Olx0XHRcdC0gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvIChmZWF0dXJlcyBmb3IgZ3JvdXBpbmcsIGlzb2xhdGlvblxuMTA2NjpcdFx0XHRcdFx0XHQgIGFuZCByZXNvdXJjZSBjb250cm9sKVxuMTA2NzpcdFxuMTA2ODpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDY5Olx0XG4xMDcwOlx0aWYgQ0dST1VQU1xuMTA3MTpcdFxuMTA3MjpcdGNvbmZpZyBQQUdFX0NPVU5URVJcbjEwNzM6XHRcdGJvb2xcbjEwNzQ6XHRcbjEwNzU6XHRjb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbjEwNzY6XHRcdGJvb2wgXCYjMzQ7RmF2b3IgZHluYW1pYyBtb2RpZmljYXRpb24gbGF0ZW5jeSByZWR1Y3Rpb24gYnkgZGVmYXVsdFwmIzM0O1xuMTA3NzpcdFx0aGVscFxuMTA3ODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBcJiMzNDtmYXZvcmR5bm1vZHNcJiMzNDsgbW91bnQgb3B0aW9uIGJ5IGRlZmF1bHRcbjEwNzk6XHRcdCAgd2hpY2ggcmVkdWNlcyB0aGUgbGF0ZW5jaWVzIG9mIGR5bmFtaWMgY2dyb3VwIG1vZGlmaWNhdGlvbnMgc3VjaFxuMTA4MDpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwODE6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwODI6XHRcbjEwODM6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA4NDpcdFxuMTA4NTpcdGNvbmZpZyBNRU1DR1xuMTA4NjpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4NzpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4ODpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODk6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3OTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbWVtY2cgUGF0Y2g6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggY29uY2VybmluZyBgQ0dST1VQU2AgYW5kIGBNRU1DR2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGB0cnlfY2hhcmdlX21lbWNnYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZy4gSXQgYXBwZWFycyB0byBiZSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgYG1lbW9yeS5tYXhgIGV2ZW50cy4KCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBwcmV2aW91c2x5LCB3aGVuIGEgbm9uLWJsb2NraW5nIGFsbG9jYXRpb24gKGUuZy4sIGBHRlBfQVRPTUlDYCwgYEdGUF9OT1dBSVRgKSBoaXQgdGhlIGBtZW1vcnkubWF4YCBsaW1pdCwgdGhlIGNvZGUgd291bGQganVtcCB0byBgbm9tZW1gIGJlZm9yZSB0cmlnZ2VyaW5nIHRoZSBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGNhbGwuIFRoaXMgbWVhbnQgdGhhdCB0aGUgJiMzNDttYXgmIzM0OyBjb3VudGVyIGluIGBtZW1vcnkuZXZlbnRzYCB3YXNuJiMzOTt0IGJlaW5nIGluY3JlbWVudGVkLCB3aGljaCBzZWVtcyBsaWtlIGEgYnVnLiBTaW1pbGFybHksIHRhc2tzIGluIE9PTSBvciBleGl0aW5nIE9PTSB2aWN0aW1zIGFsc28gd291bGRuJiMzOTt0IHRyaWdnZXIgdGhlIGV2ZW50LgoKVGhlIHBhdGNoJiMzOTtzIGNvcmUgY2hhbmdlIGlzIG1vdmluZyB0aGUgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCBjYWxsICphYm92ZSogdGhlc2UgYmFpbC1vdXQgY2hlY2tzLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgZ3VhcmFudGVlcyB0aGF0ICphbnkqIGZhaWxlZCBjaGFyZ2UgYWdhaW5zdCBgbWVtb3J5Lm1heGAgKG9yIGBtZW1vcnkuc3dhcC5tYXhgKSB3aWxsIG5vdyBjb3JyZWN0bHkgaW5jcmVtZW50IHRoZSAmIzM0O21heCYjMzQ7IGNvdW50ZXIgaW4gYG1lbW9yeS5ldmVudHNgIChhbmQgYGV2ZW50cy5sb2NhbGApLiBUaGlzIHNob3VsZCBlbnN1cmUgcHJvcGVyIG5vdGlmaWNhdGlvbiB0byBsaXN0ZW5lcnMgdmlhIGlub3RpZnkvZXBvbGwgb24gY2dyb3VwIHYyLiBUaGlzIHNlZW1zIHRvIGNvcnJlY3QgYSBjbGVhciBidWcgYW5kIGltcHJvdmUgbW9uaXRvcmluZyBvZiBtZW1jZyBldmVudHMuCgpUaGUgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgbWVyaXRzIGZ1enppbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bGwgYXBwbHkgdGhlIGNyaXRlcmlhOiB0aGlzIHBhdGNoIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIChzcGVjaWZpY2FsbHksIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiBgbWVtY2dgKS4gSXQmIzM5O3MgZGlyZWN0bHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCBpdCBzYXRpc2ZpZXMgdGhlIGNvbmRpdGlvbnMgZm9yIGJlaW5nIHdvcnRoIGZ1enppbmcuCgpJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgdGhvdWdoLgpUaGUgY29kZSBwYXNzZXMgYGFsbG93X3NwaW5uaW5nYCB0byBgX19tZW1jZ19tZW1vcnlfZXZlbnRgLiBJJiMzOTtsbCBsb29rIGludG8gaXQuClRoZSBjb2RlIHVzZXMgYGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSAmYW1wOyZhbXA7ICEoY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfTUVNQUxMT0MpYCB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIHRoaXMgZmxhZy4KSSBzaG91bGQgY29uZmlybSBpdHMgdXNhZ2UgdG8gZW5zdXJlIHRoYXQgaXQmIzM5O3Mgc2FmZSB0byBjYWxsIHRoZSBtZW1jZyBldmVudCBmcm9tIGF0b21pYyBjb250ZXh0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2NDA6XHRcbjI2NDE6XHRvdXQ6XG4yNjQyOlx0XHRjc3NfcHV0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4yNjQzOlx0fVxuMjY0NDpcdFxuMjY0NTpcdHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuMjY0NjpcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4yNjQ3Olx0e1xuMjY0ODpcdFx0dW5zaWduZWQgaW50IGJhdGNoID0gbWF4KE1FTUNHX0NIQVJHRV9CQVRDSCwgbnJfcGFnZXMpO1xuMjY0OTpcdFx0aW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuMjY1MDpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9vdmVyX2xpbWl0O1xuMjY1MTpcdFx0c3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjtcbjI2NTI6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkO1xuMjY1MzpcdFx0Ym9vbCBwYXNzZWRfb29tID0gZmFsc2U7XG4yNjU0Olx0XHR1bnNpZ25lZCBpbnQgcmVjbGFpbV9vcHRpb25zO1xuMjY1NTpcdFx0Ym9vbCBkcmFpbmVkID0gZmFsc2U7XG4yNjU2Olx0XHRib29sIHJhaXNlZF9tYXhfZXZlbnQgPSBmYWxzZTtcbjI2NTc6XHRcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuMjY1ODpcdFx0Ym9vbCBhbGxvd19zcGlubmluZyA9IGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKGdmcF9tYXNrKTtcbjI2NTk6XHRcbjI2NjA6XHRyZXRyeTpcbjI2NjE6XHRcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4yNjYyOlx0XHRcdHJldHVybiAwO1xuMjY2MzpcdFxuMjY2NDpcdFx0aWYgKCFhbGxvd19zcGlubmluZylcbjI2NjU6XHRcdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG4yNjY2Olx0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4yNjY3Olx0XG4yNjY4Olx0XHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuMjY2OTpcdFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NjQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE1lbW9yeSBDb250cm9sIGluIHRoZSBMaW51eCBLZXJuZWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7dmUgZ290IGEgc2VjdGlvbiBvZiBrZXJuZWwgY29kZSByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIChgbW0vbWVtY29udHJvbC5jYCkgdGhhdCYjMzk7cyBjbGVhcmx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUga2V5IGlzIGhvdyBtZW1vcnkgbGltaXRzIGFyZSBoYW5kbGVkIGFuZCByZXBvcnRlZCB0aHJvdWdoIHRoZSBgbWVtY2dgIG1lY2hhbmlzbS4gSSBjYW4gc2VlIHRoZSBjb2RlIGZvY3VzZXMgb24gZXZlbnQgdHJhY2tpbmcgYW5kIG5vdGlmaWNhdGlvbnMgcmVsYXRlZCB0byBoaXR0aW5nIHRob3NlIGxpbWl0cywgYW5kIEkgbm90ZSB0aGF0IGl0IGFmZmVjdHMgc2V2ZXJhbCBrZXkgYXJlYXM6IG1lbWNnIGNoYXJnaW5nLCBldmVudCByZXBvcnRpbmcsIGNncm91cCBmaWxlIG5vdGlmaWNhdGlvbnMuIEdpdmVuIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLCBmaW5kaW5nIGEgdnVsbmVyYWJpbGl0eSBoZXJlIHdvdWxkIGhhdmUgc2lnbmlmaWNhbnQgY29uc2VxdWVuY2VzLiBJIGNhbiBhbHNvIHRyaWdnZXIgdGhpcyBsb2dpYyBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB3aXRob3V0IHNwZWNpYWwgaGFyZHdhcmUuCgpNeSBmaXJzdCB0aG91Z2h0LCBpcyB0aGF0IGBXb3J0aEZ1enppbmcgPSB0cnVlYCwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZW50cnlwb2ludHMgZm9yIGEgZnV6emVyIHRvIHRhcmdldC4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgQVBJIGVudHJ5cG9pbnRzIOKAkyBzcGVjaWZpY2FsbHksIGFueSBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbnMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gdGhpcyBjb2RlIHBhdGguIEkgd2lsbCBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGNvcmUgZnVuY3Rpb24gYW5kIGZpbmQgb3V0IGhvdyB0byB0cmlnZ2VyIGl0LiBJJiMzOTtsbCBsb29rIGZvciBmdW5jdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2Agb3IgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgY2FsbCBgdHJ5X2NoYXJnZV9tZW1jZ2Agb3Igc2ltaWxhciBmdW5jdGlvbnMgdGhhdCB0cmlnZ2VyIG1lbWNnIGNoYXJnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfY2dyb3VwLmM9MjU2PXN0YXRpYyBpbnQgX19odWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwKGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vaHVnZXRsYl9jZ3JvdXAuYy0yNzQtXG5tbS9odWdldGxiX2Nncm91cC5jOjI3NTpcdGlmICghcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXG5tbS9odWdldGxiX2Nncm91cC5jLTI3Ni1cdFx0ICAgIF9faHVnZXRsYl9jZ3JvdXBfY291bnRlcl9mcm9tX2Nncm91cChoX2NnLCBpZHgsIHJzdmQpLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yNTQxPWJvb2wgbWVtY2cxX2NoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjU0NS1cbm1tL21lbWNvbnRyb2wtdjEuYzoyNTQ2Olx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXRjcG1lbSwgbnJfcGFnZXMsIFx1MDAyNmZhaWwpKSB7XG5tbS9tZW1jb250cm9sLXYxLmMtMjU0Ny1cdFx0bWVtY2ctXHUwMDNldGNwbWVtX3ByZXNzdXJlID0gMDtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjUxOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfaGlnaF9kZWxheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTI1NTEtICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tXG5tbS9tZW1jb250cm9sLmM6MjU1MjogKiB0cnlfY2hhcmdlKCkgKGNvbnRleHQgcGVybWl0dGluZyksIGFzIHdlbGwgYXMgZnJvbSB0aGUgdXNlcmxhbmRcbm1tL21lbWNvbnRyb2wuYy0yNTUzLSAqIHJldHVybiBwYXRoIHdoZXJlIHJlY2xhaW0gaXMgYWx3YXlzIGFibGUgdG8gYmxvY2suXG4tLVxubW0vbWVtY29udHJvbC5jPTI1NTU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjY0NC1cbm1tL21lbWNvbnRyb2wuYzoyNjQ1OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxubW0vbWVtY29udHJvbC5jLTI2NDYtXHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjY2OS1cdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XG5tbS9tZW1jb250cm9sLmM6MjY3MDpcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG5tbS9tZW1jb250cm9sLmM6MjY3MTpcdFx0aWYgKHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKVxubW0vbWVtY29udHJvbC5jLTI2NzItXHRcdFx0Z290byBkb25lX3Jlc3RvY2s7XG4tLVxubW0vbWVtY29udHJvbC5jLTI4NDgtXG5tbS9tZW1jb250cm9sLmM6Mjg0OTpzdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9tZW1jb250cm9sLmMtMjg1MC1cdFx0XHQgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjg1NC1cbm1tL21lbWNvbnRyb2wuYzoyODU1Olx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMjg1Ni19XG4tLVxubW0vbWVtY29udHJvbC5jPTMxNDg9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE1NS1cbm1tL21lbWNvbnRyb2wuYzozMTU2Olx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBucl9wYWdlcyk7XG5tbS9tZW1jb250cm9sLmMtMzE1Ny1cdGlmIChyZXQpXG4tLVxubW0vbWVtY29udHJvbC5jPTUxOTY9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjA0LVx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxubW0vbWVtY29udHJvbC5jOjUyMDU6XHRcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbm1tL21lbWNvbnRyb2wuYy01MjA2LVx0aWYgKHJldCkge1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NjE2PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU2MjMtXG5tbS9tZW1jb250cm9sLmM6NTYyNDpcdGlmICh0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpID09IDApIHtcbm1tL21lbWNvbnRyb2wuYy01NjI1LVx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NPQ0ssIG5yX3BhZ2VzKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTY4Mj1pbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NzE5LS8qKlxubW0vbWVtY29udHJvbC5jOjU3MjA6ICogX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcCAtIHRyeSBjaGFyZ2luZyBzd2FwIHNwYWNlIGZvciBhIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTcyMS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcbi0tXG5tbS9tZW1jb250cm9sLmMtNTcyNi0gKi9cbm1tL21lbWNvbnRyb2wuYzo1NzI3OmludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9tZW1jb250cm9sLmMtNTcyOC17XG4tLVxubW0vbWVtY29udHJvbC5jLTU3NTUtXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgXHUwMDI2XHUwMDI2XG5tbS9tZW1jb250cm9sLmM6NTc1NjpcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFx1MDAyNmNvdW50ZXIpKSB7XG5tbS9tZW1jb250cm9sLmMtNTc1Ny1cdFx0bWVtY2dfbWVtb3J5X2V2ZW50KG1lbWNnLCBNRU1DR19TV0FQX01BWCk7XG4tLVxubW0vcGFnZV9jb3VudGVyLmM9NzY9dm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtMTA5LS8qKlxubW0vcGFnZV9jb3VudGVyLmM6MTEwOiAqIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlIC0gdHJ5IHRvIGhpZXJhcmNoaWNhbGx5IGNoYXJnZSBwYWdlc1xubW0vcGFnZV9jb3VudGVyLmMtMTExLSAqIEBjb3VudGVyOiBjb3VudGVyXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtMTE3LSAqL1xubW0vcGFnZV9jb3VudGVyLmM6MTE4OmJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbm1tL3BhZ2VfY291bnRlci5jLTExOS1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vcGFnZV9jb3VudGVyLmM9MTk3PWludCBwYWdlX2NvdW50ZXJfc2V0X21heChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3BhZ2VfY291bnRlci5jLTIwOC1cdFx0ICogYW5kIGFmdGVyLCBzbyB0aGUgcmVhZC1zd2FwLXJlYWQgaXMgb3JkZXJlZCBhbmRcbm1tL3BhZ2VfY291bnRlci5jOjIwOTpcdFx0ICogZW5zdXJlcyBjb2hlcmVuY3kgd2l0aCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZSgpOlxubW0vcGFnZV9jb3VudGVyLmMtMjEwLVx0XHQgKiB0aGF0IGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBjb3VudCBiZWZvcmUgY2hlY2tpbmdcbi0tXG5tbS9zd2FwZmlsZS5jPTE3NDA9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwZmlsZS5jLTE3NzctXHQvKiBOZWVkIHRvIGNhbGwgdGhpcyBldmVuIGlmIGFsbG9jYXRpb24gZmFpbGVkLCBmb3IgTUVNQ0dfU1dBUF9GQUlMLiAqL1xubW0vc3dhcGZpbGUuYzoxNzc4Olx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpXG5tbS9zd2FwZmlsZS5jLTE3NzktXHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDb250cm9sIEdyb3VwIENoYXJnZSBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbWVtb3J5IGNoYXJnZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW52b2tlIGB0cnlfY2hhcmdlX21lbWNnYC4KCkl0IGxvb2tzIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGFyZTogYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCwgYGNoYXJnZV9tZW1jZ2AsIGBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlc2AsIGFuZCB0aGF0IGludHJpZ3VpbmcgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YC4gSSYjMzk7bGwgd2FudCB0byBwYXkgcGFydGljdWxhcmx5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhhdCBsYXN0IG9uZSBpcyBtb2RpZmllZCBhdCBpdHMgY2FsbHNpdGUuCgpgY2hhcmdlX21lbWNnYCBzZWVtcyB0byBiZSBjZW50cmFsLCBiZWluZyBjYWxsZWQgYnkgYSBmZXcgaW1wb3J0YW50IG90aGVycyBsaWtlIGBtZW1fY2dyb3VwX2NoYXJnZWAgYW5kIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLiBOb3csIGxldCYjMzk7cyBzcGVjaWZpY2FsbHkgZXhhbWluZSB0aGUgYG1lbV9jZ3JvdXBfY2hhcmdlYCBmdW5jdGlvbiBhbmQgaXRzIGNhbGxlcnMgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGUgY29yZSBtZW1vcnkgY2hhcmdpbmcgbG9naWMgcmVzaWRlcy4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFyZ2VfbWVtY2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTI1NTU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjY0NC1cbm1tL21lbWNvbnRyb2wuYzoyNjQ1OnN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxubW0vbWVtY29udHJvbC5jLTI2NDYtXHRcdFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjg0OT1zdGF0aWMgaW5saW5lIGludCB0cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vbWVtY29udHJvbC5jLTI4NTQtXG5tbS9tZW1jb250cm9sLmM6Mjg1NTpcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTI4NTYtfVxuLS1cbm1tL21lbWNvbnRyb2wuYz0zMTQ4PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXG4tLVxubW0vbWVtY29udHJvbC5jLTMxNTUtXG5tbS9tZW1jb250cm9sLmM6MzE1NjpcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC5jLTMxNTctXHRpZiAocmV0KVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MTgxPXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTE5NS1cbm1tL21lbWNvbnRyb2wuYzo1MTk2OnN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wuYy01MTk3LVx0XHRcdGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTIwNC1cdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcbm1tL21lbWNvbnRyb2wuYzo1MjA1Olx0XHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG5tbS9tZW1jb250cm9sLmMtNTIwNi1cdGlmIChyZXQpIHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTIxNj1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjIxLVx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcbm1tL21lbWNvbnRyb2wuYzo1MjIyOlx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcbm1tL21lbWNvbnRyb2wuYy01MjIzLVx0Y3NzX3B1dChcdTAwMjZtZW1jZy1cdTAwM2Vjc3MpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MjQwPWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI1My1cbm1tL21lbWNvbnRyb2wuYzo1MjU0Olx0aWYgKGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCkpXG5tbS9tZW1jb250cm9sLmMtNTI1NS1cdFx0cmV0ID0gLUVOT01FTTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTI3ND1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01Mjg4LVxubW0vbWVtY29udHJvbC5jOjUyODk6XHRyZXQgPSBjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApO1xubW0vbWVtY29udHJvbC5jLTUyOTAtXG4tLVxubW0vbWVtY29udHJvbC5jPTU2MTY9Ym9vbCBtZW1fY2dyb3VwX3NrX2NoYXJnZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTYyMy1cbm1tL21lbWNvbnRyb2wuYzo1NjI0Olx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xubW0vbWVtY29udHJvbC5jLTU2MjUtXHRcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgxMQoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiA2MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IENvbnRyb2xsZXIgRnVuY3Rpb25hbGl0eSBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkga2VybmVsIGZ1bmN0aW9ucyBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZSwgZXNwZWNpYWxseSB0aG9zZSByZWxldmFudCBmb3IgZnV6emluZywga2VlcGluZyBpbiBtaW5kIHRoZSBuZWVkIHRvIGF2b2lkIGdlbmVyaWMgZnVuY3Rpb25zIGFuZCBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4KCkkmIzM5O20gc3RhcnRpbmcgYnkgbG9va2luZyBhdCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG1lbnRpb25lZDogYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCwgYWxvbmcgd2l0aCBgX19tZW1jZ19tZW1vcnlfZXZlbnRgLiBJJiMzOTttIHZlcmlmeWluZyB0aGF0IGBfX21lbWNnX21lbW9yeV9ldmVudGAgaXMgaW5kZWVkIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkLgoKVGhlIGNvcmUgb2YgdGhlIG1hdHRlciBzZWVtcyB0byBiZSBpbiBgdHJ5X2NoYXJnZV9tZW1jZ2AsIHdoZXJlIHRoZSBwYXRjaCBhZmZlY3RzIHdoZW4gYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCBnZXRzIGNhbGxlZC4gVGhpcyBtYWtlcyBpdCBhIGRpcmVjdCB0YXJnZXQsIGFuZCwgYnkgZXh0ZW5zaW9uLCB0aGUgb3RoZXIgY2hhcmdlIGZ1bmN0aW9ucyB0b28sIHNvIEkmIzM5O2xsIGluY2x1ZGUgdGhlbSBpbiBteSBGb2N1c1N5bWJvbHMuCgpOb3csIGxldCYjMzk7cyBleGFtaW5lIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBjaGVja2luZyBgS2NvbmZpZ2AgZm9yIHRoZSBgTUVNQ0dgIGNvbmZpZ3VyYXRpb24sIHNpbmNlIHRoaXMgaXMgaW4gdGhlIG1lbW9yeSBjb250cm9sIG1vZHVsZS4gSSBmb3VuZCBpdCwgYW5kIGl0IGRlcGVuZHMgb24gYENHUk9VUFNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgbm8gb3RoZXIgY29uZmlncyBhcmUgbmVlZGVkLiBMb29raW5nIGF0IGBpbml0L0tjb25maWdgIGFnYWluLCBpdCBsb29rcyBsaWtlIGBNRU1DR2Agc2VsZWN0cyBgUEFHRV9DT1VOVEVSYCwgYEVWRU5URkRgLCBgU0xBQl9PQkpfRVhUYCwgYW5kIGBWTV9FVkVOVF9DT1VOVEVSU2AgYnV0IHRoZXNlIGFyZSBhbGwgc2VsZWN0ZWQgYW5kIHNob3VsZCBub3QgcmVxdWlyZSBhbnkgZnVydGhlciBjb25zaWRlcmF0aW9uLgoKU28sIGluIHN1bW1hcnksIEkmIzM5O20gc2V0dGluZyB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyB0byB0cnVlLCBhbmQgbXkgYEZvY3VzU3ltYm9sc2AgYXJlIGBfX21lbWNnX21lbW9yeV9ldmVudGAsIGBtZW1fY2dyb3VwX3NrX2NoYXJnZWAsIGBfX21lbV9jZ3JvdXBfY2hhcmdlYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBhbmQgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBDR1JPVVBTYCBhbmQgYE1FTUNHYC4gTXkgcmVhc29uaW5nIGNlbnRlcnMgb24gdGhlIGNoYW5nZSBpbiBldmVudCByZXBvcnRpbmcgYmVoYXZpb3IgaW4gdGhlIG1lbW9yeSBjb250cm9sbGVyIGR1cmluZyBjaGFyZ2luZyBhZ2FpbnN0IGBtZW1vcnkubWF4YCBpbiBub24tYmxvY2tpbmcgb3IgT09NIHNjZW5hcmlvcy4gVGhpcyBpbXBhY3RzIGZ1bmN0aW9uIHJlYWNoYWJpbGl0eSBhbmQgZnVuY3Rpb25hbCBpbXBhY3QsIHdoaWNoIG1ha2VzIHRoaXMgd29ydGh3aGlsZSBmb3IgZnV6emluZy4KCkZpbmFsbHksIEkgd2lsbCBydW4gdGhlIHNldC1yZXN1bHRzIHRvb2wgZm9yIGEgc2FuaXR5IGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbWVtY2dfbWVtb3J5X2V2ZW50JiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2tfY2hhcmdlJiMzNDssCiAgICAmIzM0O19fbWVtX2Nncm91cF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgKG1lbWNnKSBjaGFyZ2luZyBwYXRoIGluIHRyeV9jaGFyZ2VfbWVtY2coKSB0byByYWlzZSBNRU1DR19NQVggbWVtb3J5IGV2ZW50cyBpbW1lZGlhdGVseSB3aGVuIHRoZSBwYWdlIGNvdW50ZXIgZXhjZWVkcyB0aGUgbGltaXQsIGJlZm9yZSBhbnkgZWFybHkgYmFpbC1vdXRzIChzdWNoIGFzIG5vbi1ibG9ja2luZyBhbGxvY2F0aW9ucywgT09NIHRhc2tzLCBvciBleGl0aW5nIE9PTSB2aWN0aW1zKS4gVGhpcyBmdW5jdGlvbmFsbHkgYWZmZWN0cyBtZW1vcnkgZXZlbnQgY291bnRpbmcgYW5kIG5vdGlmaWNhdGlvbnMgZm9yIG1lbW9yeS5ldmVudHMgYW5kIG1lbW9yeS5ldmVudHMubG9jYWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX21lbWNnX21lbW9yeV9ldmVudCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3NrX2NoYXJnZSYjMzQ7LAogICAgJiMzNDtfX21lbV9jZ3JvdXBfY2hhcmdlJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGImIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBjb250cm9sbGVyIChtZW1jZykgY2hhcmdpbmcgcGF0aCBpbiB0cnlfY2hhcmdlX21lbWNnKCkgdG8gcmFpc2UgTUVNQ0dfTUFYIG1lbW9yeSBldmVudHMgaW1tZWRpYXRlbHkgd2hlbiB0aGUgcGFnZSBjb3VudGVyIGV4Y2VlZHMgdGhlIGxpbWl0LCBiZWZvcmUgYW55IGVhcmx5IGJhaWwtb3V0cyAoc3VjaCBhcyBub24tYmxvY2tpbmcgYWxsb2NhdGlvbnMsIE9PTSB0YXNrcywgb3IgZXhpdGluZyBPT00gdmljdGltcykuIFRoaXMgZnVuY3Rpb25hbGx5IGFmZmVjdHMgbWVtb3J5IGV2ZW50IGNvdW50aW5nIGFuZCBub3RpZmljYXRpb25zIGZvciBtZW1vcnkuZXZlbnRzIGFuZCBtZW1vcnkuZXZlbnRzLmxvY2FsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbnRyb2wgZmxvdyBpbiBgdHJ5X2NoYXJnZV9tZW1jZygpYCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2Agc28gdGhhdCB0aGUgYE1FTUNHX01BWGAgZXZlbnQgKGBfX21lbWNnX21lbW9yeV9ldmVudGApIGlzIHJlY29yZGVkIGVhcmxpZXIgd2hlbmV2ZXIgYSBtZW1vcnkgY2dyb3VwIGxpbWl0IGlzIGV4Y2VlZGVkLCBlbnN1cmluZyBpdCBpcyBhY2NvdW50ZWQgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBiYWlscyBvdXQgZWFybHkgKGUuZy4gbm9uLWJsb2NraW5nIEdGUCBtYXNrcyBvciBPT00gc2NlbmFyaW9zKS5cblxuQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoYG1lbV9vdmVyX2xpbWl0YCwgYGFsbG93X3NwaW5uaW5nYCwgYHJhaXNlZF9tYXhfZXZlbnRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucyB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZzsgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCB0ZXN0IGNvbmZpZ3VyYXRpb25zIGFyZSBhcHByb3ByaWF0ZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTZmZThkZjU2YTI4ZGRiNzkxMmI3MzM1NWQ2NmI2MGYyMmNiNzZhMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDIzOjM3OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDEyNzFkMzkwYjYxN2UuLjM5MDRmZTlhN2IyZTkgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTI2ODMsNiAmIzQzOzI2ODMsMTEgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssCiAJCWdvdG8gcmV0cnk7CiAJfQogCiYjNDM7CWlmICghcmFpc2VkX21heF9ldmVudCkgewomIzQzOwkJX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpOwomIzQzOwkJcmFpc2VkX21heF9ldmVudCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvCiAJICogYWxsb2NhdGUgbWVtb3J5LiBUaGlzIG1pZ2h0IGV4Y2VlZCB0aGUgbGltaXRzIHRlbXBvcmFyaWx5LApAQCAtMjcxMSw5ICYjNDM7MjcxNiw2IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLAogCSAgICBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgY3VycmVudC0mZ3Q7c2lnbmFsLSZndDtvb21fbW0pKQogCQlnb3RvIG5vbWVtOwogCi0JX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpOwotCXJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlOwotCiAJcHNpX21lbXN0YWxsX2VudGVyKCZhbXA7cGZsYWdzKTsKIAlucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcywKIAkJCQkJCSAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTsKQEAgLTI3NzMsMTMgJiM0MzsyNzc1LDYgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssCiAJaWYgKCEoZ2ZwX21hc2sgJmFtcDsgKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpKSkKIAkJcmV0dXJuIC1FTk9NRU07CiBmb3JjZToKLQkvKgotCSAqIElmIHRoZSBhbGxvY2F0aW9uIGhhcyB0byBiZSBlbmZvcmNlZCwgZG9uJiMzOTt0IGZvcmdldCB0byByYWlzZQotCSAqIGEgTUVNQ0dfTUFYIGV2ZW50LgotCSAqLwotCWlmICghcmFpc2VkX21heF9ldmVudCkKLQkJX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpOwotCiAJLyoKIAkgKiBUaGUgYWxsb2NhdGlvbiBlaXRoZXIgY2FuJiMzOTt0IGZhaWwgb3Igd2lsbCBsZWFkIHRvIG1vcmUgbWVtb3J5CiAJICogYmVpbmcgZnJlZWQgdmVyeSBzb29uLiAgQWxsb3cgbWVtb3J5IHVzYWdlIGdvIG92ZXIgdGhlIGxpbWl0CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDU0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgZGlyZWN0aXZlcywgc3RydWN0dXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50IG9mIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBtbS9tZW1jb250cm9sLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBkaWZmIGFuZCBzdXJyb3VuZGluZyBjb2RlIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBzdWdnZXN0cyB0aGVyZSYjMzk7cyBzb21lIGNoYW5nZSBvciBidWcgcmVwb3J0IEkgbmVlZCB0byB1bmRlcnN0YW5kLCBhbmQgdGhpcyBmaWxlIGlzIHRoZSBmb2NhbCBwb2ludC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHdhbnQgdG8gdXNlIGByZWFkLWZpbGVgLCBsaWtlbHkgYXJvdW5kIGxpbmUgMjY4MC4gVGhhdCBsaW5lIG51bWJlciB3aWxsIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgcG9pbnQgdG8gZXhhbWluZSB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlIG9yIGlzc3VlLiBUaGlzIGlzIG15IGdvLXRvIGFwcHJvYWNoIOKAkyBjb250ZXh0IGZpcnN0LCB0aGVuIHRoZSBzcGVjaWZpYyBtb2RpZmljYXRpb24sIGhlbHBzIG1lIGdldCB0aGUgZnVsbCBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2NjA6XHRyZXRyeTpcbjI2NjE6XHRcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4yNjYyOlx0XHRcdHJldHVybiAwO1xuMjY2MzpcdFxuMjY2NDpcdFx0aWYgKCFhbGxvd19zcGlubmluZylcbjI2NjU6XHRcdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG4yNjY2Olx0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4yNjY3Olx0XG4yNjY4Olx0XHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuMjY2OTpcdFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbjI2NzA6XHRcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG4yNjcxOlx0XHRcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIGJhdGNoLCBcdTAwMjZjb3VudGVyKSlcbjI2NzI6XHRcdFx0XHRnb3RvIGRvbmVfcmVzdG9jaztcbjI2NzM6XHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbjI2NzQ6XHRcdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIGJhdGNoKTtcbjI2NzU6XHRcdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpO1xuMjY3NjpcdFx0fSBlbHNlIHtcbjI2Nzc6XHRcdFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XG4yNjc4Olx0XHRcdHJlY2xhaW1fb3B0aW9ucyBcdTAwMjY9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuMjY3OTpcdFx0fVxuMjY4MDpcdFxuMjY4MTpcdFx0aWYgKGJhdGNoIFx1MDAzZSBucl9wYWdlcykge1xuMjY4MjpcdFx0XHRiYXRjaCA9IG5yX3BhZ2VzO1xuMjY4MzpcdFx0XHRnb3RvIHJldHJ5O1xuMjY4NDpcdFx0fVxuMjY4NTpcdFxuMjY4NjpcdFx0aWYgKCFyYWlzZWRfbWF4X2V2ZW50KSB7XG4yNjg3Olx0XHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbjI2ODg6XHRcdFx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XG4yNjg5Olx0XHR9XG4yNjkwOlx0XG4yNjkxOlx0XHQvKlxuMjY5MjpcdFx0ICogUHJldmVudCB1bmJvdW5kZWQgcmVjdXJzaW9uIHdoZW4gcmVjbGFpbSBvcGVyYXRpb25zIG5lZWQgdG9cbjI2OTM6XHRcdCAqIGFsbG9jYXRlIG1lbW9yeS4gVGhpcyBtaWdodCBleGNlZWQgdGhlIGxpbWl0cyB0ZW1wb3JhcmlseSxcbjI2OTQ6XHRcdCAqIGJ1dCB3ZSBwcmVmZXIgZmFjaWxpdGF0aW5nIG1lbW9yeSByZWNsYWltIGFuZCBnZXR0aW5nIGJhY2tcbjI2OTU6XHRcdCAqIHVuZGVyIHRoZSBsaW1pdCBvdmVyIHRyaWdnZXJpbmcgT09NIGtpbGxzIGluIHRoZXNlIGNhc2VzLlxuMjY5NjpcdFx0ICovXG4yNjk3Olx0XHRpZiAodW5saWtlbHkoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpKVxuMjY5ODpcdFx0XHRnb3RvIGZvcmNlO1xuMjY5OTpcdFxuMjcwMDpcdFx0aWYgKHVubGlrZWx5KHRhc2tfaW5fbWVtY2dfb29tKGN1cnJlbnQpKSlcbjI3MDE6XHRcdFx0Z290byBub21lbTtcbjI3MDI6XHRcbjI3MDM6XHRcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxuMjcwNDpcdFx0XHRnb3RvIG5vbWVtO1xuMjcwNTpcdFxuMjcwNjpcdFx0LypcbjI3MDc6XHRcdCAqIE9PTSB2aWN0aW0gc3RpbGwgbmVlZHMgdG8gY2hhcmdlIG1lbW9yeSB0byBleGl0LiBPT00gcmVhcGVyIHNob3VsZFxuMjcwODpcdFx0ICogaGVscCBidXQgaXQgbWlnaHQgZmFpbCBvbiBtbWFwX2xvY2sgY29udGVudGlvbi4gSWYgdGhlIHZpY3RpbSBpcyBhXG4yNzA5Olx0XHQgKiBsYXJnZSB0aHJlYWQgZ3JvdXAgdGhlbiBhbGwgZXhpdGluZyB0aHJlYWRzIG1pZ2h0IGNvbXBldGUgb24gb29tX2xvY2tcbjI3MTA6XHRcdCAqIGp1c3QgdG8gbGVhcm4gdGhhdCB0aGVyZSBpcyBub3RoaW5nIHJlYWxseSBraWxsYWJsZSBhbnltb3JlLiBCYWlsXG4yNzExOlx0XHQgKiBvdXQgZWFybHkgYW5kIGZhaWwgdGhlIGNoYXJnZSB0byBleHBlZGl0ZSB0aGVpciBleGl0LiBUaGV5IGFyZVxuMjcxMjpcdFx0ICogY29uc2lkZXJlZCBmdWxseSByZWNsYWltZWQgYnkgdGhlIG9vbSByZWFwZXIgYW5kIHRoZXkgc2hvdWxkbiYjMzk7dFxuMjcxMzpcdFx0ICogY29udHJpYnV0ZSBmdXJ0aGVyIGNoYXJnZXMuXG4yNzE0Olx0XHQgKi9cbjI3MTU6XHRcdGlmICh0c2tfaXNfb29tX3ZpY3RpbShjdXJyZW50KSBcdTAwMjZcdTAwMjZcbjI3MTY6XHRcdCAgICBtbV9mbGFnc190ZXN0KE1NRl9PT01fU0tJUCwgY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlb29tX21tKSlcbjI3MTc6XHRcdFx0Z290byBub21lbTtcbjI3MTg6XHRcbjI3MTk6XHRcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuMjcyMDpcdFx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXG4yNzIxOlx0XHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuMjcyMjpcdFx0cHNpX21lbXN0YWxsX2xlYXZlKFx1MDAyNnBmbGFncyk7XG4yNzIzOlx0XG4yNzI0Olx0XHRpZiAobWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpIFx1MDAzZT0gbnJfcGFnZXMpXG4yNzI1Olx0XHRcdGdvdG8gcmV0cnk7XG4yNzI2Olx0XG4yNzI3Olx0XHRpZiAoIWRyYWluZWQpIHtcbjI3Mjg6XHRcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTtcbjI3Mjk6XHRcdFx0ZHJhaW5lZCA9IHRydWU7XG4yNzMwOlx0XHRcdGdvdG8gcmV0cnk7XG4yNzMxOlx0XHR9XG4yNzMyOlx0XG4yNzMzOlx0XHRpZiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpXG4yNzM0Olx0XHRcdGdvdG8gbm9tZW07XG4yNzM1Olx0XHQvKlxuMjczNjpcdFx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cbjI3Mzc6XHRcdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXG4yNzM4Olx0XHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cbjI3Mzk6XHRcdCAqXG4yNzQwOlx0XHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxuMjc0MTpcdFx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcbjI3NDI6XHRcdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cbjI3NDM6XHRcdCAqL1xuMjc0NDpcdFx0aWYgKG5yX3JlY2xhaW1lZCBcdTAwMjZcdTAwMjYgbnJfcGFnZXMgXHUwMDNjPSAoMSBcdTAwM2NcdTAwM2MgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKVxuMjc0NTpcdFx0XHRnb3RvIHJldHJ5O1xuMjc0NjpcdFxuMjc0NzpcdFx0aWYgKG5yX3JldHJpZXMtLSlcbjI3NDg6XHRcdFx0Z290byByZXRyeTtcbjI3NDk6XHRcbjI3NTA6XHRcdGlmIChnZnBfbWFzayBcdTAwMjYgX19HRlBfUkVUUllfTUFZRkFJTClcbjI3NTE6XHRcdFx0Z290byBub21lbTtcbjI3NTI6XHRcbjI3NTM6XHRcdC8qIEF2b2lkIGVuZGxlc3MgbG9vcCBmb3IgdGFza3MgYnlwYXNzZWQgYnkgdGhlIG9vbSBraWxsZXIgKi9cbjI3NTQ6XHRcdGlmIChwYXNzZWRfb29tIFx1MDAyNlx1MDAyNiB0YXNrX2lzX2R5aW5nKCkpXG4yNzU1Olx0XHRcdGdvdG8gbm9tZW07XG4yNzU2Olx0XG4yNzU3Olx0XHQvKlxuMjc1ODpcdFx0ICoga2VlcCByZXRyeWluZyBhcyBsb25nIGFzIHRoZSBtZW1jZyBvb20ga2lsbGVyIGlzIGFibGUgdG8gbWFrZVxuMjc1OTpcdFx0ICogYSBmb3J3YXJkIHByb2dyZXNzIG9yIGJ5cGFzcyB0aGUgY2hhcmdlIGlmIHRoZSBvb20ga2lsbGVyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMjgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdHJ5X2NoYXJnZV9tZW1jZzogQSBEZWVwZXIgRGl2ZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzIGluIGB0cnlfY2hhcmdlX21lbWNnYC4gVGhlIHByZXZpb3VzIGNvbW1pdCBpbnRyb2R1Y2VkIHNvbWV0aGluZywgYW5kIEkmIzM5O3ZlIGdvdCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIFRoZSBiZXN0IHdheSB0byBkbyB0aGF0LCBhcyBhbHdheXMsIGlzIHRvIGZvbGxvdyB0aGUgY29kZS4gRmlyc3QsIGxldCYjMzk7cyBsb29rIGF0IHdoZXJlIGB0cnlfY2hhcmdlX21lbWNnYCBpcyB1c2VkIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlLCBpbiB0aGlzIGNvbnRleHQuIFRoZW4gSSYjMzk7bGwgbmVlZCB0byBnbyBiYWNrIGFuZCBleGFtaW5lIHRoZSBmdW5jdGlvbiYjMzk7cyBkZWZpbml0aW9uIGl0c2VsZiwgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgdGhlIGludGVybmFscy4gQ29udGV4dCBpcyBraW5nIGhlcmU7IHVuZGVyc3RhbmRpbmcgKmhvdyogaXQmIzM5O3MgYmVpbmcgdXNlZCBpcyBqdXN0IGFzIHZpdGFsIGFzIHVuZGVyc3RhbmRpbmcgKndoYXQqIGl0IGRvZXMuIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byBzZWUgdGhlIG1vZGlmaWNhdGlvbnMgYW5kIHdoeSB0aGV5IHdlcmUgbWFkZS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB3aWxsIGludm9sdmUgbG9va2luZyBhdCBtZW1vcnkgYWNjb3VudGluZywgcmVzb3VyY2UgbGltaXRpbmcsIGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUgd2l0aGluIHRoZSBjZ3JvdXAgaGllcmFyY2h5LiBSaWdodCwgbGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2MzU6XHRcdCAqIG5lZWQgdG8gYWNjb3VudCBmb3IgYW55IGlsbC1iZWdvdHRlbiBqaWZmaWVzIHRvIHBheSB0aGVtIG9mZiBsYXRlci5cbjI2MzY6XHRcdCAqL1xuMjYzNzpcdFx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG4yNjM4Olx0XHRzY2hlZHVsZV90aW1lb3V0X2tpbGxhYmxlKHBlbmFsdHlfamlmZmllcyk7XG4yNjM5Olx0XHRwc2lfbWVtc3RhbGxfbGVhdmUoXHUwMDI2cGZsYWdzKTtcbjI2NDA6XHRcbjI2NDE6XHRvdXQ6XG4yNjQyOlx0XHRjc3NfcHV0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4yNjQzOlx0fVxuMjY0NDpcdFxuMjY0NTpcdHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuMjY0NjpcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4yNjQ3Olx0e1xuMjY0ODpcdFx0dW5zaWduZWQgaW50IGJhdGNoID0gbWF4KE1FTUNHX0NIQVJHRV9CQVRDSCwgbnJfcGFnZXMpO1xuMjY0OTpcdFx0aW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuMjY1MDpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9vdmVyX2xpbWl0O1xuMjY1MTpcdFx0c3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjtcbjI2NTI6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkO1xuMjY1MzpcdFx0Ym9vbCBwYXNzZWRfb29tID0gZmFsc2U7XG4yNjU0Olx0XHR1bnNpZ25lZCBpbnQgcmVjbGFpbV9vcHRpb25zO1xuMjY1NTpcdFx0Ym9vbCBkcmFpbmVkID0gZmFsc2U7XG4yNjU2Olx0XHRib29sIHJhaXNlZF9tYXhfZXZlbnQgPSBmYWxzZTtcbjI2NTc6XHRcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuMjY1ODpcdFx0Ym9vbCBhbGxvd19zcGlubmluZyA9IGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKGdmcF9tYXNrKTtcbjI2NTk6XHRcbjI2NjA6XHRyZXRyeTpcbjI2NjE6XHRcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXG4yNjYyOlx0XHRcdHJldHVybiAwO1xuMjY2MzpcdFxuMjY2NDpcdFx0aWYgKCFhbGxvd19zcGlubmluZylcbjI2NjU6XHRcdFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXG4yNjY2Olx0XHRcdGJhdGNoID0gbnJfcGFnZXM7XG4yNjY3Olx0XG4yNjY4Olx0XHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xuMjY2OTpcdFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcbjI2NzA6XHRcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1zdywgYmF0Y2gsIFx1MDAyNmNvdW50ZXIpKSB7XG4yNjcxOlx0XHRcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIGJhdGNoLCBcdTAwMjZjb3VudGVyKSlcbjI2NzI6XHRcdFx0XHRnb3RvIGRvbmVfcmVzdG9jaztcbjI2NzM6XHRcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbjI2NzQ6XHRcdFx0XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlbWVtc3csIGJhdGNoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE1NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBDaGFyZ2UgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlIGluIGB0cnlfY2hhcmdlX21lbWNnYC4gSXQgc2VlbXMgdGhlIGNydWNpYWwgcGFydCBsaWVzIGluIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGNvbmNlcm5pbmcgbWVtb3J5IGV2ZW50cy4gUHJldmlvdXNseSwgdGhlIGBfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7YCBjYWxsLCBhbG9uZyB3aXRoIHRoZSBgcmFpc2VkX21heF9ldmVudCA9IHRydWU7YCBmbGFnLCB3YXMgc2l0dWF0ZWQgKmFmdGVyKiB0aGUgYHBzaV9tZW1zdGFsbF9lbnRlcmAgYW5kIHdpdGhpbiB0aGUgYGZvcmNlOmAgYmxvY2suIE5vdywgdGhlIHBhdGNoIGhhcyBzaGlmdGVkIHRoaXMgY3J1Y2lhbCBjaGVjayBhbmQgY2FsbCBzaWduaWZpY2FudGx5IGVhcmxpZXIsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBgaWYgKGJhdGNoICZndDsgbnJfcGFnZXMpIC4uLmAgY29uZGl0aW9uLiBUaGlzIGlzIHBsYWNlZCBiZWZvcmUgdGhlIGBpZiAodW5saWtlbHkoY3VycmVudC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfTUVNQUxMT0MpKWAgYW5kLCBpbXBvcnRhbnRseSwgYmVmb3JlIGFsbCB0aG9zZSBgbm9tZW1gIGNoZWNrcyDigJMgdGhlIG9uZXMgZGVhbGluZyB3aXRoIGB0YXNrX2luX21lbWNnX29vbWAsIHdoZXRoZXIgYmxvY2tpbmcgaXMgYWxsb3dlZCB3aXRoIGAhZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmdgLCBhbmQgc28gb24uIFRoZXkgYWxzbyB0b29rIG91dCB0aGUgZHVwbGljYXRlIGNhbGwgaW4gYGZvcmNlOmAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBvcnRhbnQgY2hhbmdlIGluIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgbWVtb3J5IG92ZXJjb21taXQgc2NlbmFyaW9zLgoKTm93LCBJIHdhbnQgdG8gY29uZmlybSB3aGF0IHRoaXMgZWFybHkgY2FsbCB0byBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGFjdHVhbGx5IGRvZXMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwganVzdCBncmVwIGZvciBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgZXhhY3RseSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05OTc9c3RhdGljIGlubGluZSB2b2lkIGNvdW50X21lbWNnX2V2ZW50X21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDItXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMDAzOnZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTAwNC1cdFx0XHQgIGVudW0gbWVtY2dfbWVtb3J5X2V2ZW50IGV2ZW50LCBib29sIGFsbG93X3NwaW5uaW5nKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTg4MD11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTE4OTgtXG5tbS9tZW1jb250cm9sLmM6MTg5OTp2b2lkIF9fbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wuYy0xOTAwLVx0XHRcdCAgZW51bSBtZW1jZ19tZW1vcnlfZXZlbnQgZXZlbnQsIGJvb2wgYWxsb3dfc3Bpbm5pbmcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBtbS9tZW1jb250cm9sLmNgKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBtbS9tZW1jb250cm9sLmNgIG5lYXIgbGluZSAxODk5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHNwZWNpZmljIGFyZWEgb2YgbWVtb3J5IGNvbnRyb2wgaXMgd29ya2luZy4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHNvbWUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiBvciBkYXRhIHN0cnVjdHVyZSBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIG1lbW9yeSBjZ3JvdXAgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhcm91bmQgaG93IG1lbW9yeSBhY2NvdW50aW5nIGlzIGRvbmUsIHBvc3NpYmx5IHJlbGF0aW5nIHRvIGEgc3BlY2lmaWMgbWVtb3J5IHJlc291cmNlIG9yIGV2ZW50LiBHaXZlbiB0aGUgbGluZSBudW1iZXIsIGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZSBsZXZlbCBvZiBtZW1vcnkgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uIG9yIHRyYWNraW5nLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaW52b2x2ZXMgcGFnZSBmYXVsdHMsIHN3YXBwaW5nLCBvciBwZXJoYXBzIG1lbW9yeSBsaW1pdHMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4OTU6XHRcdH1cbjE4OTY6XHRcdHJldHVybiBtYXg7XG4xODk3Olx0fVxuMTg5ODpcdFxuMTg5OTpcdHZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuMTkwMDpcdFx0XHRcdCAgZW51bSBtZW1jZ19tZW1vcnlfZXZlbnQgZXZlbnQsIGJvb2wgYWxsb3dfc3Bpbm5pbmcpXG4xOTAxOlx0e1xuMTkwMjpcdFx0Ym9vbCBzd2FwX2V2ZW50ID0gZXZlbnQgPT0gTUVNQ0dfU1dBUF9ISUdIIHx8IGV2ZW50ID09IE1FTUNHX1NXQVBfTUFYIHx8XG4xOTAzOlx0XHRcdFx0ICBldmVudCA9PSBNRU1DR19TV0FQX0ZBSUw7XG4xOTA0Olx0XG4xOTA1Olx0XHQvKiBGb3Igbm93IG9ubHkgTUVNQ0dfTUFYIGNhbiBoYXBwZW4gd2l0aCAhYWxsb3dfc3Bpbm5pbmcgY29udGV4dC4gKi9cbjE5MDY6XHRcdFZNX1dBUk5fT05fT05DRSghYWxsb3dfc3Bpbm5pbmcgXHUwMDI2XHUwMDI2IGV2ZW50ICE9IE1FTUNHX01BWCk7XG4xOTA3Olx0XG4xOTA4Olx0XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c19sb2NhbFtldmVudF0pO1xuMTkwOTpcdFx0aWYgKCFzd2FwX2V2ZW50IFx1MDAyNlx1MDAyNiBhbGxvd19zcGlubmluZylcbjE5MTA6XHRcdFx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFx1MDAyNm1lbWNnLVx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcbjE5MTE6XHRcbjE5MTI6XHRcdGRvIHtcbjE5MTM6XHRcdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9ldmVudHNbZXZlbnRdKTtcbjE5MTQ6XHRcdFx0aWYgKGFsbG93X3NwaW5uaW5nKSB7XG4xOTE1Olx0XHRcdFx0aWYgKHN3YXBfZXZlbnQpXG4xOTE2Olx0XHRcdFx0XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcF9ldmVudHNfZmlsZSk7XG4xOTE3Olx0XHRcdFx0ZWxzZVxuMTkxODpcdFx0XHRcdFx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFx1MDAyNm1lbWNnLVx1MDAzZWV2ZW50c19maWxlKTtcbjE5MTk6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTcyCgkJCQkJCQlvdXRwdXQ6IDIxMAoJCQkJCQkJdGhvdWdodHM6IDU2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTi9LQVNBTiBBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IHRyeV9jaGFyZ2VfbWVtY2coKSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoLCB3aGljaCBtb2RpZmllcyBgbW0vbWVtY29udHJvbC5jOnRyeV9jaGFyZ2VfbWVtY2coKWAsIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGNoYW5nZSBpcyBjZW50ZXJlZCBhcm91bmQgd2hlbiB0aGUgYE1FTUNHX01BWGAgbWVtb3J5IGV2ZW50IGlzIHJhaXNlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiBhIGNoYXJnaW5nIGZhaWx1cmUgb2NjdXJzIGFuZCB3ZSYjMzk7cmUgb3ZlciB0aGUgbWVtb3J5IGxpbWl0IChgbWVtX292ZXJfbGltaXRgKS4gRXNzZW50aWFsbHksIGl0IG1vdmVzIHRoZSBldmVudCBub3RpZmljYXRpb24gZWFybGllciBpbiB0aGUgZXhlY3V0aW9uIHBhdGgsIGJlZm9yZSB0aGUgY29kZSBiYWlscyBvdXQgdG8gYG5vbWVtYCBvciBqdW1wcyB0byBgZm9yY2U6YC4gUHJldmlvdXNseSwgY2VydGFpbiBjb25kaXRpb25zIHdvdWxkIGJ5cGFzcyB0aGUgZXZlbnQuCgpNeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgbWVtb3J5IHNhZmV0eSwgc28gSSYjMzk7bSBydW5uaW5nIHRocm91Z2ggbXkgS01TQU4vS0FTQU4gY2hlY2tsaXN0LgoKRmlyc3QsICp3aGF0IGRvZXMgaXQgdG91Y2gqPyBJdCYjMzk7cyBwcmltYXJpbHkgYWJvdXQgY29udHJvbCBmbG93IGFuZCBldmVudCByYWlzaW5nLiBJdCBsb29rcyBsaWtlIGByYWlzZWRfbWF4X2V2ZW50YCBpcyBhIGxvY2FsIGJvb2xlYW4sIGluaXRpYWxpemVkIHRvIGBmYWxzZWAuIGBtZW1fb3Zlcl9saW1pdGAgaXMgc2V0IGluIHRoZSBgaWZgIHN0YXRlbWVudCByaWdodCBhYm92ZSB0aGUgcmVsZXZhbnQgbGluZXMuIGBhbGxvd19zcGlubmluZ2AgaXMgaW5pdGlhbGl6ZWQgYXQgZnVuY3Rpb24gZW50cnkuIFNvLCBmcm9tIHRoZSBpbml0aWFsIGxvb2ssIGV2ZXJ5dGhpbmcgc2VlbXMgaW5pdGlhbGl6ZWQgYXMgZXhwZWN0ZWQuCgpUaGVuLCAqZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgbWVtb3J5IHNhZmV0eSByaXNrcyo/IEkmIzM5O20gY2hlY2tpbmcgZm9yIGFsbCB0aGUgY2xhc3NpYyBLTVNBTiBjb25jZXJuczoKCiogICAqKlVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzOioqIE5vcGUuIGByYWlzZWRfbWF4X2V2ZW50YCwgYG1lbV9vdmVyX2xpbWl0YCBhbmQgYGFsbG93X3NwaW5uaW5nYCBhcmUgYWxsIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuCiogICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIHNlbnQgdG8gdXNlcnNwYWNlOioqIERvZXNuJiMzOTt0IHNlZW0gcmVsZXZhbnQgaGVyZS4gTm8gc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXJzcGFjZS4KKiAgICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uIENvbnRyb2wgZmxvdyByZWxpZXMgb24gaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGxpa2UgYG1lbV9vdmVyX2xpbWl0YC4KKiAgICoqTWVtb3J5IGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gYnVncyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgZmllbGRzOioqIE5vdCBhIGZhY3Rvci4gVGhlIGNoYW5nZSBpcyBhdCBhbiBlYXJsaWVyIHBvaW50LCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSB1c2VkIG9yIGluaXRpYWxpemVkLgoqICAgKipCdWZmZXIgaW5kZXhpbmcvYm91bmRzIGNoYW5nZXMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlczoqKiBOb3QgaW4gcGxheSBoZXJlLgoKSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRob3NlIGNvcmUgcG9pbnRzLiBUaGVyZSBpcyBub3RoaW5nIGluIHRoaXMgcGF0Y2ggdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IGFsbCwgb3IgdGhhdCBpbnRyb2R1Y2VzIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O2xsIGdvIHRocm91Z2ggbXkgZm91ci1wb2ludCByZXZpZXc6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzOioqIFN0aWxsIG5vLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uCjMuICAqKkFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM6KiogTm90aGluZyBuZXcgaGVyZS4KNC4gICoqQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlczoqKiBObywgdGhpcyBkb2VzIG5vdCBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhhdC4KClNvLCAqbXkgY29uY2x1c2lvbj8qIFRoaXMgaXMgYWxsIEtBU0FOIHRlcnJpdG9yeS4gS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLiBTdGFuZGFyZCBLQVNBTi9MT0NLREVQIGJ1aWxkcyBzaG91bGQgYmUgc3VmZmljaWVudCB0byB2ZXJpZnkgbWVtb3J5IHNhZmV0eSBhbmQgdGhlIGxvY2sgaGFuZGxpbmcuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaW4gdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLgoqKk5lZWRzS01TQU4gPSBmYWxzZS4qKgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29udHJvbCBmbG93IGluIGB0cnlfY2hhcmdlX21lbWNnKClgIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYCBzbyB0aGF0IHRoZSBgTUVNQ0dfTUFYYCBldmVudCAoYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCkgaXMgcmVjb3JkZWQgZWFybGllciB3aGVuZXZlciBhIG1lbW9yeSBjZ3JvdXAgbGltaXQgaXMgZXhjZWVkZWQsIGVuc3VyaW5nIGl0IGlzIGFjY291bnRlZCBldmVuIGlmIHRoZSBhbGxvY2F0aW9uIGJhaWxzIG91dCBlYXJseSAoZS5nLiBub24tYmxvY2tpbmcgR0ZQIG1hc2tzIG9yIE9PTSBzY2VuYXJpb3MpLlxuXG5BbGwgdmFyaWFibGVzIGludm9sdmVkIChgbWVtX292ZXJfbGltaXRgLCBgYWxsb3dfc3Bpbm5pbmdgLCBgcmFpc2VkX21heF9ldmVudGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgY29weWluZyB0byB1c2Vyc3BhY2UsIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zIHRoYXQgY291bGQgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nOyBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIHRlc3QgY29uZmlndXJhdGlvbnMgYXJlIGFwcHJvcHJpYXRlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbnRyb2wgZmxvdyBpbiBgdHJ5X2NoYXJnZV9tZW1jZygpYCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2Agc28gdGhhdCB0aGUgYE1FTUNHX01BWGAgZXZlbnQgKGBfX21lbWNnX21lbW9yeV9ldmVudGApIGlzIHJlY29yZGVkIGVhcmxpZXIgd2hlbmV2ZXIgYSBtZW1vcnkgY2dyb3VwIGxpbWl0IGlzIGV4Y2VlZGVkLCBlbnN1cmluZyBpdCBpcyBhY2NvdW50ZWQgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBiYWlscyBvdXQgZWFybHkgKGUuZy4gbm9uLWJsb2NraW5nIEdGUCBtYXNrcyBvciBPT00gc2NlbmFyaW9zKS5cblxuQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoYG1lbV9vdmVyX2xpbWl0YCwgYGFsbG93X3NwaW5uaW5nYCwgYHJhaXNlZF9tYXhfZXZlbnRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucyB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZzsgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCB0ZXN0IGNvbmZpZ3VyYXRpb25zIGFyZSBhcHByb3ByaWF0ZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzc6MzcuMzk3MjkyODk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3ODQ2NjI5NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19tZW1jZ19tZW1vcnlfZXZlbnRcIixcbiAgICBcIm1lbV9jZ3JvdXBfc2tfY2hhcmdlXCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfY2hhcmdlXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCIsXG4gICAgXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb250cm9sIGZsb3cgaW4gYHRyeV9jaGFyZ2VfbWVtY2coKWAgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgIHNvIHRoYXQgdGhlIGBNRU1DR19NQVhgIGV2ZW50IChgX19tZW1jZ19tZW1vcnlfZXZlbnRgKSBpcyByZWNvcmRlZCBlYXJsaWVyIHdoZW5ldmVyIGEgbWVtb3J5IGNncm91cCBsaW1pdCBpcyBleGNlZWRlZCwgZW5zdXJpbmcgaXQgaXMgYWNjb3VudGVkIGV2ZW4gaWYgdGhlIGFsbG9jYXRpb24gYmFpbHMgb3V0IGVhcmx5IChlLmcuIG5vbi1ibG9ja2luZyBHRlAgbWFza3Mgb3IgT09NIHNjZW5hcmlvcykuXFxuXFxuQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoYG1lbV9vdmVyX2xpbWl0YCwgYGFsbG93X3NwaW5uaW5nYCwgYHJhaXNlZF9tYXhfZXZlbnRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucyB0aGF0IGNvdWxkIHJlc3VsdCBpbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nOyBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIHRlc3QgY29uZmlndXJhdGlvbnMgYXJlIGFwcHJvcHJpYXRlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBjb250cm9sbGVyIChtZW1jZykgY2hhcmdpbmcgcGF0aCBpbiB0cnlfY2hhcmdlX21lbWNnKCkgdG8gcmFpc2UgTUVNQ0dfTUFYIG1lbW9yeSBldmVudHMgaW1tZWRpYXRlbHkgd2hlbiB0aGUgcGFnZSBjb3VudGVyIGV4Y2VlZHMgdGhlIGxpbWl0LCBiZWZvcmUgYW55IGVhcmx5IGJhaWwtb3V0cyAoc3VjaCBhcyBub24tYmxvY2tpbmcgYWxsb2NhdGlvbnMsIE9PTSB0YXNrcywgb3IgZXhpdGluZyBPT00gdmljdGltcykuIFRoaXMgZnVuY3Rpb25hbGx5IGFmZmVjdHMgbWVtb3J5IGV2ZW50IGNvdW50aW5nIGFuZCBub3RpZmljYXRpb25zIGZvciBtZW1vcnkuZXZlbnRzIGFuZCBtZW1vcnkuZXZlbnRzLmxvY2FsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozNzozNy4zOTcyOTkwMDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMzI0MDc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk2ZmU4ZGY1NmEyOGRkYjc5MTJiNzMzNTVkNjZiNjBmMjJjYjc2YTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMjM6Mzc6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggMTI3MWQzOTBiNjE3ZS4uMzkwNGZlOWE3YjJlOSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtMjY4Myw2ICsyNjgzLDExIEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbiBcXHRcXHRnb3RvIHJldHJ5O1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpIHtcXG4rXFx0XFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xcbitcXHRcXHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogUHJldmVudCB1bmJvdW5kZWQgcmVjdXJzaW9uIHdoZW4gcmVjbGFpbSBvcGVyYXRpb25zIG5lZWQgdG9cXG4gXFx0ICogYWxsb2NhdGUgbWVtb3J5LiBUaGlzIG1pZ2h0IGV4Y2VlZCB0aGUgbGltaXRzIHRlbXBvcmFyaWx5LFxcbkBAIC0yNzExLDkgKzI3MTYsNiBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4gXFx0ICAgIG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZW9vbV9tbSkpXFxuIFxcdFxcdGdvdG8gbm9tZW07XFxuIFxcbi1cXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XFxuLVxcdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xcbi1cXG4gXFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbiBcXHRucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xcbkBAIC0yNzczLDEzICsyNzc1LDYgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuIFxcdGlmICghKGdmcF9tYXNrIFxcdTAwMjYgKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIGZvcmNlOlxcbi1cXHQvKlxcbi1cXHQgKiBJZiB0aGUgYWxsb2NhdGlvbiBoYXMgdG8gYmUgZW5mb3JjZWQsIGRvbid0IGZvcmdldCB0byByYWlzZVxcbi1cXHQgKiBhIE1FTUNHX01BWCBldmVudC5cXG4tXFx0ICovXFxuLVxcdGlmICghcmFpc2VkX21heF9ldmVudClcXG4tXFx0XFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xcbi1cXG4gXFx0LypcXG4gXFx0ICogVGhlIGFsbG9jYXRpb24gZWl0aGVyIGNhbid0IGZhaWwgb3Igd2lsbCBsZWFkIHRvIG1vcmUgbWVtb3J5XFxuIFxcdCAqIGJlaW5nIGZyZWVkIHZlcnkgc29vbi4gIEFsbG93IG1lbW9yeSB1c2FnZSBnbyBvdmVyIHRoZSBsaW1pdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozNzozOC4wMDExNjgzMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTE3NzUyNzcyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX21lbWNnX21lbW9yeV9ldmVudFwiLFxuICAgIFwibWVtX2Nncm91cF9za19jaGFyZ2VcIixcbiAgICBcIl9fbWVtX2Nncm91cF9jaGFyZ2VcIixcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIixcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIG1lbW9yeSBjb250cm9sbGVyIChtZW1jZykgY2hhcmdpbmcgcGF0aCBpbiB0cnlfY2hhcmdlX21lbWNnKCkgdG8gcmFpc2UgTUVNQ0dfTUFYIG1lbW9yeSBldmVudHMgaW1tZWRpYXRlbHkgd2hlbiB0aGUgcGFnZSBjb3VudGVyIGV4Y2VlZHMgdGhlIGxpbWl0LCBiZWZvcmUgYW55IGVhcmx5IGJhaWwtb3V0cyAoc3VjaCBhcyBub24tYmxvY2tpbmcgYWxsb2NhdGlvbnMsIE9PTSB0YXNrcywgb3IgZXhpdGluZyBPT00gdmljdGltcykuIFRoaXMgZnVuY3Rpb25hbGx5IGFmZmVjdHMgbWVtb3J5IGV2ZW50IGNvdW50aW5nIGFuZCBub3RpZmljYXRpb25zIGZvciBtZW1vcnkuZXZlbnRzIGFuZCBtZW1vcnkuZXZlbnRzLmxvY2FsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NmZlOGRmNTZhMjhkZGI3OTEyYjczMzU1ZDY2YjYwZjIyY2I3NmEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMjM6Mzc6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDEyNzFkMzkwYjYxN2UuLjM5MDRmZTlhN2IyZTkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTI2ODMsNiArMjY4MywxMSBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiBcbitcdGlmICghcmFpc2VkX21heF9ldmVudCkge1xuK1x0XHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XG4rXHRcdHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO1xuK1x0fVxuK1xuIFx0LypcbiBcdCAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvXG4gXHQgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksXG5AQCAtMjcxMSw5ICsyNzE2LDYgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHQgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIGN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZW9vbV9tbSkpXG4gXHRcdGdvdG8gbm9tZW07XG4gXG4tXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XG4tXHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcbi1cbiBcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xuIFx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXG4gXHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuQEAgLTI3NzMsMTMgKzI3NzUsNiBAQCBzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmICghKGdmcF9tYXNrIFx1MDAyNiAoX19HRlBfTk9GQUlMIHwgX19HRlBfSElHSCkpKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBmb3JjZTpcbi1cdC8qXG4tXHQgKiBJZiB0aGUgYWxsb2NhdGlvbiBoYXMgdG8gYmUgZW5mb3JjZWQsIGRvbid0IGZvcmdldCB0byByYWlzZVxuLVx0ICogYSBNRU1DR19NQVggZXZlbnQuXG4tXHQgKi9cbi1cdGlmICghcmFpc2VkX21heF9ldmVudClcbi1cdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xuLVxuIFx0LypcbiBcdCAqIFRoZSBhbGxvY2F0aW9uIGVpdGhlciBjYW4ndCBmYWlsIG9yIHdpbGwgbGVhZCB0byBtb3JlIG1lbW9yeVxuIFx0ICogYmVpbmcgZnJlZWQgdmVyeSBzb29uLiAgQWxsb3cgbWVtb3J5IHVzYWdlIGdvIG92ZXIgdGhlIGxpbWl0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozNzozOC4wMDExNjk1NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMjYxNTA1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW4uXG5cbioqSW5zcGVjdGluZyB0aGUgQ29kZSBDaGFuZ2VzKipcblxuUmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSBpdCdzIHRvdWNoaW5nIGBtbS9tZW1jb250cm9sLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB0cnlfY2hhcmdlX21lbWNnYCBmdW5jdGlvbi4gTXkgc3BpZGV5LXNlbnNlIGlzIGFscmVhZHkgdGluZ2xpbmcgYSBiaXQ7IGFueXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IGNvbnRyb2wgYW5kIGNoYXJnaW5nIGlzIGNyaXRpY2FsLCBhbmQgYSBjaGFuZ2UgaGVyZSB3YXJyYW50cyBjYXJlZnVsIGF0dGVudGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2Ugd2l0aGluIGl0cyBicm9hZGVyIGNvbnRleHQuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS9tZW1jb250cm9sLmNgIGJlZm9yZSBJIGV2ZW4gdHJ5IHRvIHVuZGVyc3RhbmQgd2hhdCAqdGhpcyogY2hhbmdlIGRvZXMuIEdldHRpbmcgdGhlIGxheSBvZiB0aGUgbGFuZCB3aWxsIGdpdmUgbWUgdGhlIHByb3BlciBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM3OjQ0LjEyNzMyMTk1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY2MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI2NjA6XFx0cmV0cnk6XFxuMjY2MTpcXHRcXHRpZiAoY29uc3VtZV9zdG9jayhtZW1jZywgbnJfcGFnZXMpKVxcbjI2NjI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjY2MzpcXHRcXG4yNjY0OlxcdFxcdGlmICghYWxsb3dfc3Bpbm5pbmcpXFxuMjY2NTpcXHRcXHRcXHQvKiBBdm9pZCB0aGUgcmVmaWxsIGFuZCBmbHVzaCBvZiB0aGUgb2xkZXIgc3RvY2sgKi9cXG4yNjY2OlxcdFxcdFxcdGJhdGNoID0gbnJfcGFnZXM7XFxuMjY2NzpcXHRcXG4yNjY4OlxcdFxcdHJlY2xhaW1fb3B0aW9ucyA9IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XFxuMjY2OTpcXHRcXHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSB8fFxcbjI2NzA6XFx0XFx0ICAgIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtc3csIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpIHtcXG4yNjcxOlxcdFxcdFxcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSlcXG4yNjcyOlxcdFxcdFxcdFxcdGdvdG8gZG9uZV9yZXN0b2NrO1xcbjI2NzM6XFx0XFx0XFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcXG4yNjc0OlxcdFxcdFxcdFxcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBiYXRjaCk7XFxuMjY3NTpcXHRcXHRcXHRtZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbW9yeSk7XFxuMjY3NjpcXHRcXHR9IGVsc2Uge1xcbjI2Nzc6XFx0XFx0XFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1zdyk7XFxuMjY3ODpcXHRcXHRcXHRyZWNsYWltX29wdGlvbnMgXFx1MDAyNj0gfk1FTUNHX1JFQ0xBSU1fTUFZX1NXQVA7XFxuMjY3OTpcXHRcXHR9XFxuMjY4MDpcXHRcXG4yNjgxOlxcdFxcdGlmIChiYXRjaCBcXHUwMDNlIG5yX3BhZ2VzKSB7XFxuMjY4MjpcXHRcXHRcXHRiYXRjaCA9IG5yX3BhZ2VzO1xcbjI2ODM6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yNjg0OlxcdFxcdH1cXG4yNjg1OlxcdFxcbjI2ODY6XFx0XFx0aWYgKCFyYWlzZWRfbWF4X2V2ZW50KSB7XFxuMjY4NzpcXHRcXHRcXHRfX21lbWNnX21lbW9yeV9ldmVudChtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfTUFYLCBhbGxvd19zcGlubmluZyk7XFxuMjY4ODpcXHRcXHRcXHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcXG4yNjg5OlxcdFxcdH1cXG4yNjkwOlxcdFxcbjI2OTE6XFx0XFx0LypcXG4yNjkyOlxcdFxcdCAqIFByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiB3aGVuIHJlY2xhaW0gb3BlcmF0aW9ucyBuZWVkIHRvXFxuMjY5MzpcXHRcXHQgKiBhbGxvY2F0ZSBtZW1vcnkuIFRoaXMgbWlnaHQgZXhjZWVkIHRoZSBsaW1pdHMgdGVtcG9yYXJpbHksXFxuMjY5NDpcXHRcXHQgKiBidXQgd2UgcHJlZmVyIGZhY2lsaXRhdGluZyBtZW1vcnkgcmVjbGFpbSBhbmQgZ2V0dGluZyBiYWNrXFxuMjY5NTpcXHRcXHQgKiB1bmRlciB0aGUgbGltaXQgb3ZlciB0cmlnZ2VyaW5nIE9PTSBraWxscyBpbiB0aGVzZSBjYXNlcy5cXG4yNjk2OlxcdFxcdCAqL1xcbjI2OTc6XFx0XFx0aWYgKHVubGlrZWx5KGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpKVxcbjI2OTg6XFx0XFx0XFx0Z290byBmb3JjZTtcXG4yNjk5OlxcdFxcbjI3MDA6XFx0XFx0aWYgKHVubGlrZWx5KHRhc2tfaW5fbWVtY2dfb29tKGN1cnJlbnQpKSlcXG4yNzAxOlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjcwMjpcXHRcXG4yNzAzOlxcdFxcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spKVxcbjI3MDQ6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzA1OlxcdFxcbjI3MDY6XFx0XFx0LypcXG4yNzA3OlxcdFxcdCAqIE9PTSB2aWN0aW0gc3RpbGwgbmVlZHMgdG8gY2hhcmdlIG1lbW9yeSB0byBleGl0LiBPT00gcmVhcGVyIHNob3VsZFxcbjI3MDg6XFx0XFx0ICogaGVscCBidXQgaXQgbWlnaHQgZmFpbCBvbiBtbWFwX2xvY2sgY29udGVudGlvbi4gSWYgdGhlIHZpY3RpbSBpcyBhXFxuMjcwOTpcXHRcXHQgKiBsYXJnZSB0aHJlYWQgZ3JvdXAgdGhlbiBhbGwgZXhpdGluZyB0aHJlYWRzIG1pZ2h0IGNvbXBldGUgb24gb29tX2xvY2tcXG4yNzEwOlxcdFxcdCAqIGp1c3QgdG8gbGVhcm4gdGhhdCB0aGVyZSBpcyBub3RoaW5nIHJlYWxseSBraWxsYWJsZSBhbnltb3JlLiBCYWlsXFxuMjcxMTpcXHRcXHQgKiBvdXQgZWFybHkgYW5kIGZhaWwgdGhlIGNoYXJnZSB0byBleHBlZGl0ZSB0aGVpciBleGl0LiBUaGV5IGFyZVxcbjI3MTI6XFx0XFx0ICogY29uc2lkZXJlZCBmdWxseSByZWNsYWltZWQgYnkgdGhlIG9vbSByZWFwZXIgYW5kIHRoZXkgc2hvdWxkbid0XFxuMjcxMzpcXHRcXHQgKiBjb250cmlidXRlIGZ1cnRoZXIgY2hhcmdlcy5cXG4yNzE0OlxcdFxcdCAqL1xcbjI3MTU6XFx0XFx0aWYgKHRza19pc19vb21fdmljdGltKGN1cnJlbnQpIFxcdTAwMjZcXHUwMDI2XFxuMjcxNjpcXHRcXHQgICAgbW1fZmxhZ3NfdGVzdChNTUZfT09NX1NLSVAsIGN1cnJlbnQtXFx1MDAzZXNpZ25hbC1cXHUwMDNlb29tX21tKSlcXG4yNzE3OlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjcxODpcXHRcXG4yNzE5OlxcdFxcdHBzaV9tZW1zdGFsbF9lbnRlcihcXHUwMDI2cGZsYWdzKTtcXG4yNzIwOlxcdFxcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxcbjI3MjE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xcbjI3MjI6XFx0XFx0cHNpX21lbXN0YWxsX2xlYXZlKFxcdTAwMjZwZmxhZ3MpO1xcbjI3MjM6XFx0XFxuMjcyNDpcXHRcXHRpZiAobWVtX2Nncm91cF9tYXJnaW4obWVtX292ZXJfbGltaXQpIFxcdTAwM2U9IG5yX3BhZ2VzKVxcbjI3MjU6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yNzI2OlxcdFxcbjI3Mjc6XFx0XFx0aWYgKCFkcmFpbmVkKSB7XFxuMjcyODpcXHRcXHRcXHRkcmFpbl9hbGxfc3RvY2sobWVtX292ZXJfbGltaXQpO1xcbjI3Mjk6XFx0XFx0XFx0ZHJhaW5lZCA9IHRydWU7XFxuMjczMDpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjI3MzE6XFx0XFx0fVxcbjI3MzI6XFx0XFxuMjczMzpcXHRcXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9OT1JFVFJZKVxcbjI3MzQ6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzM1OlxcdFxcdC8qXFxuMjczNjpcXHRcXHQgKiBFdmVuIHRob3VnaCB0aGUgbGltaXQgaXMgZXhjZWVkZWQgYXQgdGhpcyBwb2ludCwgcmVjbGFpbVxcbjI3Mzc6XFx0XFx0ICogbWF5IGhhdmUgYmVlbiBhYmxlIHRvIGZyZWUgc29tZSBwYWdlcy4gIFJldHJ5IHRoZSBjaGFyZ2VcXG4yNzM4OlxcdFxcdCAqIGJlZm9yZSBraWxsaW5nIHRoZSB0YXNrLlxcbjI3Mzk6XFx0XFx0ICpcXG4yNzQwOlxcdFxcdCAqIE9ubHkgZm9yIHJlZ3VsYXIgcGFnZXMsIHRob3VnaDogaHVnZSBwYWdlcyBhcmUgcmF0aGVyXFxuMjc0MTpcXHRcXHQgKiB1bmxpa2VseSB0byBzdWNjZWVkIHNvIGNsb3NlIHRvIHRoZSBsaW1pdCwgYW5kIHdlIGZhbGwgYmFja1xcbjI3NDI6XFx0XFx0ICogdG8gcmVndWxhciBwYWdlcyBhbnl3YXkgaW4gY2FzZSBvZiBmYWlsdXJlLlxcbjI3NDM6XFx0XFx0ICovXFxuMjc0NDpcXHRcXHRpZiAobnJfcmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2IG5yX3BhZ2VzIFxcdTAwM2M9ICgxIFxcdTAwM2NcXHUwMDNjIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSlcXG4yNzQ1OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjc0NjpcXHRcXG4yNzQ3OlxcdFxcdGlmIChucl9yZXRyaWVzLS0pXFxuMjc0ODpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjI3NDk6XFx0XFxuMjc1MDpcXHRcXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9SRVRSWV9NQVlGQUlMKVxcbjI3NTE6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzUyOlxcdFxcbjI3NTM6XFx0XFx0LyogQXZvaWQgZW5kbGVzcyBsb29wIGZvciB0YXNrcyBieXBhc3NlZCBieSB0aGUgb29tIGtpbGxlciAqL1xcbjI3NTQ6XFx0XFx0aWYgKHBhc3NlZF9vb20gXFx1MDAyNlxcdTAwMjYgdGFza19pc19keWluZygpKVxcbjI3NTU6XFx0XFx0XFx0Z290byBub21lbTtcXG4yNzU2OlxcdFxcbjI3NTc6XFx0XFx0LypcXG4yNzU4OlxcdFxcdCAqIGtlZXAgcmV0cnlpbmcgYXMgbG9uZyBhcyB0aGUgbWVtY2cgb29tIGtpbGxlciBpcyBhYmxlIHRvIG1ha2VcXG4yNzU5OlxcdFxcdCAqIGEgZm9yd2FyZCBwcm9ncmVzcyBvciBieXBhc3MgdGhlIGNoYXJnZSBpZiB0aGUgb29tIGtpbGxlclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozNzo0NC4xMjc1NDgwMjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTAyNzU3NjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29tbWl0KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIGNvbW1pdCBpcyBhdHRlbXB0aW5nIHRvIGFjaGlldmUuIEknbGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb21taXQgaXRzZWxmIOKAkyB3aGF0IGZpbGVzIHdlcmUgY2hhbmdlZCwgYWRkZWQsIG9yIGRlbGV0ZWQ/IFRoYXQncyB0aGUgYmFzZWxpbmUuIFRoZW4sIEknbGwgbGV2ZXJhZ2UgdGhlIHBvd2VyIG9mIHRoZSBgZ2l0IGxvZ2AgdG8gcHJvdmlkZSBtb3JlIGNvbnRleHQuIEtub3dpbmcgdGhlIHNwZWNpZmljIGNvbW1pdCBoYXNoLCBJIGNhbiBzdGFydCB3aXRoIGEgdGFyZ2V0ZWQgYGdpdCBsb2dgIGNvbW1hbmQuIE1heWJlIEkgY2FuIHF1aWNrbHkgZmluZCBhIGhlbHBmdWwgbWVzc2FnZSB0aGVyZSwgb3IgcGVyaGFwcyBJJ2xsIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gS25vd2luZyB0aGUgc3RhdGUgb2YgdGhpbmdzIGJlZm9yZSB0aGUgY29tbWl0IGlzIGp1c3QgYXMsIGlmIG5vdCBtb3JlLCBpbXBvcnRhbnQsIHNvIEknbGwgcHJvYmFibHkgbG9vayB0byBzZWUgd2hhdCB0aGUgKnByZXZpb3VzKiBjb21taXQgZGlkLiBUaGUgbG9nIHdpbGwgdGVsbCB0aGUgc3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM3OjQ5LjIzMDMwODQ3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg3NzQ0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmFpc2VkX21heF9ldmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTI2NDU9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY1NS1cXHRib29sIGRyYWluZWQgPSBmYWxzZTtcXG5tbS9tZW1jb250cm9sLmM6MjY1NjpcXHRib29sIHJhaXNlZF9tYXhfZXZlbnQgPSBmYWxzZTtcXG5tbS9tZW1jb250cm9sLmMtMjY1Ny1cXHR1bnNpZ25lZCBsb25nIHBmbGFncztcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNjg1LVxcbm1tL21lbWNvbnRyb2wuYzoyNjg2OlxcdGlmICghcmFpc2VkX21heF9ldmVudCkge1xcbm1tL21lbWNvbnRyb2wuYy0yNjg3LVxcdFxcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcXG5tbS9tZW1jb250cm9sLmM6MjY4ODpcXHRcXHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcXG5tbS9tZW1jb250cm9sLmMtMjY4OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM3OjQ5LjM1OTA5MDU4OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMTYwOTEyOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtY2cgTWVtb3J5IENoYXJnZSBDaGFuZ2UqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB0byBgdHJ5X2NoYXJnZV9tZW1jZ2AuIFByZXZpb3VzbHksIHdoZW4gYSBtZW1vcnkgY2hhcmdlIGZhaWxlZCDigJMgc2F5LCBhIGxpbWl0IHdhcyBoaXQg4oCTIHRoZSBsb2dpYyBmbG93IHdhcyBwcmV0dHkgc3BlY2lmaWM6IGl0IGNoZWNrZWQgc2V2ZXJhbCBjb25kaXRpb25zIGJlZm9yZSBwb3RlbnRpYWxseSByYWlzaW5nIGEgbWVtb3J5IGV2ZW50LiBFc3NlbnRpYWxseSwgaXQgaGFkIHNldmVyYWwgXCJlYXJseSBleGl0c1wiIHRoYXQgcHJldmVudGVkIHJhaXNpbmcgdGhlIGV2ZW50LiBJdCBjaGVja2VkIGlmIGBQRl9NRU1BTExPQ2Agd2FzIHNldCwgaWYgdGhlIHRhc2sgd2FzIGluIE9PTSBzdGF0ZSwgaWYgdGhlIEdGUCBmbGFncyBhbGxvd2VkIGJsb2NraW5nLCBhbmQgaWYgaXQgc2hvdWxkIHNraXAgdGhlIE9PTSBraWxsZXIuIE9ubHkgaWYgKm5vbmUqIG9mIHRob3NlIGNvbmRpdGlvbnMgd2VyZSBtZXQgZGlkIGl0IGNhbGwgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCBhbmQgc2V0IGByYWlzZWRfbWF4X2V2ZW50YCBiZWZvcmUgYXR0ZW1wdGluZyB0byBmcmVlIG1lbW9yeS4gVGhlcmUgd2FzIGFsc28gYSByZWR1bmRhbnQgY2FsbCB0byB0aGUgZXZlbnQgaGFuZGxlciBpbiB0aGUgYGZvcmNlOmAgbGFiZWwuXG5cbk5vdywgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBzaWduaWZpY2FudGx5IGFsdGVyaW5nIHRoYXQuIEl0J3MgbW92aW5nIHRoYXQgY3J1Y2lhbCBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGNhbGwgKnVwKiBpbiB0aGUgY2FsbCBjaGFpbi4gSXQncyBub3cgYmVpbmcgY2FsbGVkIHVuY29uZGl0aW9uYWxseSwgcmlnaHQgYXQgdGhlIHN0YXJ0IG9mIGB0cnlfY2hhcmdlX21lbWNnYCwgd2hlbmV2ZXIgdGhlIHBhZ2UgY291bnRlciBjaGFyZ2UgZmFpbHMgKGFuZCB0aGUgYGJhdGNoYCBjb3VudCBtYXRjaGVzIHRoZSBhdHRlbXB0ZWQgYWxsb2NhdGlvbiBzaXplKS4gQ3JpdGljYWxseSwgaXQgKmFsc28qIHJlbW92ZXMgdGhlIHJlZHVuZGFudCBjYWxsIGZyb20gYGZvcmNlOmAuIFNvLCBlc3NlbnRpYWxseSwgd2Ugbm93IGdldCB0aGUgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCBmaXJpbmcgZXZlcnkgdGltZSBhIHBhZ2UgY2hhcmdlIGZhaWxzLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIHNoaWZ0LiBTcGVjaWZpY2FsbHksIHdoYXQncyB0aGUgcHVycG9zZSBvZiBgX19tZW1jZ19tZW1vcnlfZXZlbnRgPyBMZXQncyB0YWtlIGEgbG9vayBhdCBpdHMgZGVmaW5pdGlvbiBhbmQgc2VlIHdoYXQncyBjaGFuZ2VkIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLiBUaGlzIHVuY29uZGl0aW9uYWwgdHJpZ2dlciBjb3VsZCBwb3RlbnRpYWxseSBpbXBhY3QgdGhlIHN5c3RlbSdzIHJlYWN0aW9uIHRvIG1lbW9yeSBwcmVzc3VyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgdmFyaW91cyBlYXJseSBleGl0IGNvbmRpdGlvbnMgaXQgYnlwYXNzZWQgYmVmb3JlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBuZXcgYmVoYXZpb3IgZG9lc24ndCBpbnRyb2R1Y2UgdW53YW50ZWQgc2lkZSBlZmZlY3RzIG9yIHJlZ3Jlc3Npb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjY1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM4OjAyLjUyMDAwNTc1M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDYxMDAzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21lbWNnX21lbW9yeV9ldmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTE4ODA9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE4OTgtXFxubW0vbWVtY29udHJvbC5jOjE4OTk6dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vbWVtY29udHJvbC5jLTE5MDAtXFx0XFx0XFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xOTI3LX1cXG5tbS9tZW1jb250cm9sLmM6MTkyODpFWFBPUlRfU1lNQk9MX0dQTChfX21lbWNnX21lbW9yeV9ldmVudCk7XFxubW0vbWVtY29udHJvbC5jLTE5MjktXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjY0NT1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNjg2LVxcdGlmICghcmFpc2VkX21heF9ldmVudCkge1xcbm1tL21lbWNvbnRyb2wuYzoyNjg3OlxcdFxcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcXG5tbS9tZW1jb250cm9sLmMtMjY4OC1cXHRcXHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6MDIuNTc0NjIwNDU5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTY4NDUwMDYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gbWVtY2dfbWVtb3J5X2V2ZW50KipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgcGl2b3RhbCBmb3IgaGFuZGxpbmcgbWVtb3J5IGV2ZW50cyB3aXRoaW4gdGhlIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSBmcmFtZXdvcmsuIE15IGZvY3VzIGhlcmUgaXMgZ29pbmcgdG8gYmUgb24gdW5kZXJzdGFuZGluZyAqaG93KiB0aGVzZSBldmVudHMgYXJlIHRyaWdnZXJlZCwgKndoYXQqIGluZm9ybWF0aW9uIGlzIGJlaW5nIHRyYWNrZWQsIGFuZCB1bHRpbWF0ZWx5LCAqaG93KiB0aGlzIGNvbnRyaWJ1dGVzIHRvIHRoZSBicm9hZGVyIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ3kgb2YgdGhlIGtlcm5lbCBmb3IgbWVtb3J5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIHNjZW5hcmlvcyB0aGF0IGFyZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIEFyZSB3ZSB0YWxraW5nIHBhZ2UgZmF1bHRzPyBNZW1vcnkgcmVjbGFpbT8gT09NIHNpdHVhdGlvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyIGV2ZW50cy4gRnJvbSB0aGVyZSBJJ2xsIGJlIGFibGUgdG8gdHJhY2UgaG93IHRoZXNlIGV2ZW50cyBhcmUgcmVjb3JkZWQuIFdoYXQgc3RhdHMgYXJlIHVwZGF0ZWQ/IEFyZSB0aGVyZSBhbnkgc2lnbmlmaWNhbnQgc2lkZSBlZmZlY3RzIG9yIGNhc2NhZGluZyBjaGFuZ2VzIHRyaWdnZXJlZCBieSB0aGUgZXZlbnQgaGFuZGxpbmc/IFdoYXQgbG9ja3MgYXJlIGluIHBsYXkgaGVyZT8gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBsb2NrIG9yZGVyIHRvIHJ1bGUgb3V0IGFueSBwb3RlbnRpYWwgZGVhZGxvY2tzLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBvZiBjb3Vyc2UsIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBtZW1jZyBhcmNoaXRlY3R1cmUuIEhvdyBkb2VzIHRoaXMgZXZlbnQgaW50ZXJwbGF5IHdpdGggb3RoZXIgbWVtY2cgY29tcG9uZW50cywgbGlrZSB0aGUgY29udHJvbGxlcnMgZm9yIG1lbW9yeSB1c2FnZSwgc3dhcHBpbmcsIGFuZCBzbyBvbj8gSSBzaG91bGQgYW50aWNpcGF0ZSB0aGlzIGJlaW5nIGNvbXBsZXggYnV0IGhvcGVmdWxseSB3ZWxsLXN0cnVjdHVyZWQuIExldCdzIHNlZSBob3cgdGhleSd2ZSBoYW5kbGVkIHRoZSBsb2NraW5nLCBhY2NvdW50aW5nLCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozODoxMi4yNTkxMjM4NzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODk1OlxcdFxcdH1cXG4xODk2OlxcdFxcdHJldHVybiBtYXg7XFxuMTg5NzpcXHR9XFxuMTg5ODpcXHRcXG4xODk5OlxcdHZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbjE5MDA6XFx0XFx0XFx0XFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZylcXG4xOTAxOlxcdHtcXG4xOTAyOlxcdFxcdGJvb2wgc3dhcF9ldmVudCA9IGV2ZW50ID09IE1FTUNHX1NXQVBfSElHSCB8fCBldmVudCA9PSBNRU1DR19TV0FQX01BWCB8fFxcbjE5MDM6XFx0XFx0XFx0XFx0ICBldmVudCA9PSBNRU1DR19TV0FQX0ZBSUw7XFxuMTkwNDpcXHRcXG4xOTA1OlxcdFxcdC8qIEZvciBub3cgb25seSBNRU1DR19NQVggY2FuIGhhcHBlbiB3aXRoICFhbGxvd19zcGlubmluZyBjb250ZXh0LiAqL1xcbjE5MDY6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFhbGxvd19zcGlubmluZyBcXHUwMDI2XFx1MDAyNiBldmVudCAhPSBNRU1DR19NQVgpO1xcbjE5MDc6XFx0XFxuMTkwODpcXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfZXZlbnRzX2xvY2FsW2V2ZW50XSk7XFxuMTkwOTpcXHRcXHRpZiAoIXN3YXBfZXZlbnQgXFx1MDAyNlxcdTAwMjYgYWxsb3dfc3Bpbm5pbmcpXFxuMTkxMDpcXHRcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm1lbWNnLVxcdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XFxuMTkxMTpcXHRcXG4xOTEyOlxcdFxcdGRvIHtcXG4xOTEzOlxcdFxcdFxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNbZXZlbnRdKTtcXG4xOTE0OlxcdFxcdFxcdGlmIChhbGxvd19zcGlubmluZykge1xcbjE5MTU6XFx0XFx0XFx0XFx0aWYgKHN3YXBfZXZlbnQpXFxuMTkxNjpcXHRcXHRcXHRcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwX2V2ZW50c19maWxlKTtcXG4xOTE3OlxcdFxcdFxcdFxcdGVsc2VcXG4xOTE4OlxcdFxcdFxcdFxcdFxcdGNncm91cF9maWxlX25vdGlmeShcXHUwMDI2bWVtY2ctXFx1MDAzZWV2ZW50c19maWxlKTtcXG4xOTE5OlxcdFxcdFxcdH1cXG4xOTIwOlxcdFxcbjE5MjE6XFx0XFx0XFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbjE5MjI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTkyMzpcXHRcXHRcXHRpZiAoY2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfTE9DQUxfRVZFTlRTKVxcbjE5MjQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTkyNTpcXHRcXHR9IHdoaWxlICgobWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpIFxcdTAwMjZcXHUwMDI2XFxuMTkyNjpcXHRcXHRcXHQgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpO1xcbjE5Mjc6XFx0fVxcbjE5Mjg6XFx0RVhQT1JUX1NZTUJPTF9HUEwoX19tZW1jZ19tZW1vcnlfZXZlbnQpO1xcbjE5Mjk6XFx0XFxuMTkzMDpcXHRzdGF0aWMgYm9vbCBtZW1fY2dyb3VwX291dF9vZl9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4xOTMxOlxcdFxcdFxcdFxcdFxcdCAgICAgaW50IG9yZGVyKVxcbjE5MzI6XFx0e1xcbjE5MzM6XFx0XFx0c3RydWN0IG9vbV9jb250cm9sIG9jID0ge1xcbjE5MzQ6XFx0XFx0XFx0LnpvbmVsaXN0ID0gTlVMTCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6MTIuMjU5MzgyMjIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0MjQ0NTYyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyBgdHJ5X2NoYXJnZV9tZW1jZ2AqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgdHJ5X2NoYXJnZV9tZW1jZ2AgZnVuY3Rpb24uIEknbSBnb2luZyB0byBzdGFydCBieSBmaWd1cmluZyBvdXQgd2hlcmUgaXQncyBjYWxsZWQgZnJvbSDigJMgd2hhdCBhcmUgaXRzIGNhbGxlcnM/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgd2lsbCBnaXZlIG1lIGNvbnRleHQgb24gaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLiBPbmNlIEkgaGF2ZSB0aGF0IGNvbnRleHQsIEknbGwgdGhlbiB6ZXJvIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsIGNoYW5nZXMgbWFkZSByZWxhdGVkIHRvIGl0cyB1c2FnZS4gS25vd2luZyB0aGUgY2hhbmdlcyB3aWxsIGFsbG93IG1lIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLCBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgaXQuIEJhc2ljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCdzIGRpZmZlcmVudCwgYW5kIHdoeS4gT2theSwgbGV0J3Mgc3RhcnQgd2l0aCBgdHJ5X2NoYXJnZV9tZW1jZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NDUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM4OjE3LjY4Mzg0MjA5OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyOTQzMjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV9jaGFyZ2VfbWVtY2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yNTU1PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY0NC1cXG5tbS9tZW1jb250cm9sLmM6MjY0NTpzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9tZW1jb250cm9sLmMtMjY0Ni1cXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI4NDk9c3RhdGljIGlubGluZSBpbnQgdHJ5X2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI4NTQtXFxubW0vbWVtY29udHJvbC5jOjI4NTU6XFx0cmV0dXJuIHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC5jLTI4NTYtfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTMxNDg9c3RhdGljIGludCBvYmpfY2dyb3VwX2NoYXJnZV9wYWdlcyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIGdmcF90IGdmcCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0zMTU1LVxcbm1tL21lbWNvbnRyb2wuYzozMTU2OlxcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0zMTU3LVxcdGlmIChyZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE5Nj1zdGF0aWMgaW50IGNoYXJnZV9tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTIwNC1cXHRpZiAoIW9ial9jZ3JvdXBfaXNfcm9vdChvYmpjZykpXFxubW0vbWVtY29udHJvbC5jOjUyMDU6XFx0XFx0cmV0ID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbm1tL21lbWNvbnRyb2wuYy01MjA2LVxcdGlmIChyZXQpIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjE2PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTYyMy1cXG5tbS9tZW1jb250cm9sLmM6NTYyNDpcXHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XFxubW0vbWVtY29udHJvbC5jLTU2MjUtXFx0XFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM4OjE4LjEyNjc5MTMxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDU2OTQ3NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbW0vbWVtY29udHJvbC5jYCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGFuZCByZXF1aXJlbWVudHMgZm9yIGBtbS9tZW1jb250cm9sLmNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgcmVsYXRlZCBgTWFrZWZpbGVgIGluIHRoZSBgbW0vYCBkaXJlY3RvcnkuIFRoYXQncyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIGJ1aWxkIHJ1bGVzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MuIFRoZSBNYWtlZmlsZSBzaG91bGQgc2hlZCBsaWdodCBvbiB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBmZWF0dXJlcywgb3RoZXIgbW9kdWxlcyBvciBvcHRpb25zLCBhbmQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCB0byBpbmNsdWRlIG9yIGVuYWJsZSB0aGlzIHBhcnRpY3VsYXIgbWVtb3J5IGNvbnRyb2wgY29tcG9uZW50LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgcmVmZXJlbmNlcyB0byBgQ09ORklHX2Agb3B0aW9ucywgb3IgcGVyaGFwcyBldmVuIGluZGlyZWN0IGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIHRoYXQgYXJlICpyZXF1aXJlZCogZm9yIHRoZSBtZW1vcnkgY29udHJvbGxlciB0byBmdW5jdGlvbiBwcm9wZXJseSB3aXRoaW4gdGhlIGJpZ2dlciBtZW1vcnkgbWFuYWdlbWVudCBjb250ZXh0LiBMZXQncyBzZWUgd2hhdCB0aGF0IE1ha2VmaWxlIGhhcyB0byBzYXkuLi4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjQ5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6MjMuNTgzNzQwNzgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY5OTkxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jb250cm9sXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjk6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTEwMz1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cXG5tbS9NYWtlZmlsZToxMDQ6b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICs9IGJwZl9tZW1jb250cm9sLm9cXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcXG4tLVxcbm1tL2JhY2tpbmctZGV2LmM9NTgwPXN0YXRpYyB2b2lkIHdiX2V4aXQoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKVxcbi0tXFxubW0vYmFja2luZy1kZXYuYy01ODgtXFxubW0vYmFja2luZy1kZXYuYzo1ODk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9iYWNraW5nLWRldi5jLTU5MC1cXG4tLVxcbm1tL2JwZl9tZW1jb250cm9sLmMtNy1cXG5tbS9icGZfbWVtY29udHJvbC5jOjg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9icGZfbWVtY29udHJvbC5jLTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYz0xNjI9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG5tbS9icGZfbWVtY29udHJvbC5jLTE2My1cXG5tbS9icGZfbWVtY29udHJvbC5jOjE2NDpCVEZfS0ZVTkNTX1NUQVJUKGJwZl9tZW1jb250cm9sX2tmdW5jcylcXG5tbS9icGZfbWVtY29udHJvbC5jLTE2NS1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9yb290X21lbV9jZ3JvdXAsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTClcXG4tLVxcbm1tL2JwZl9tZW1jb250cm9sLmM9MTczPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbWVtX2Nncm91cF9mbHVzaF9zdGF0cywgS0ZfU0xFRVBBQkxFKVxcbm1tL2JwZl9tZW1jb250cm9sLmMtMTc0LVxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTc1OkJURl9LRlVOQ1NfRU5EKGJwZl9tZW1jb250cm9sX2tmdW5jcylcXG5tbS9icGZfbWVtY29udHJvbC5jLTE3Ni1cXG5tbS9icGZfbWVtY29udHJvbC5jOjE3NzpzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX21lbWNvbnRyb2xfa2Z1bmNfc2V0ID0ge1xcbm1tL2JwZl9tZW1jb250cm9sLmMtMTc4LVxcdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTc5OlxcdC5zZXQgICAgICAgICAgICA9IFxcdTAwMjZicGZfbWVtY29udHJvbF9rZnVuY3MsXFxubW0vYnBmX21lbWNvbnRyb2wuYy0xODAtfTtcXG5tbS9icGZfbWVtY29udHJvbC5jLTE4MS1cXG5tbS9icGZfbWVtY29udHJvbC5jOjE4MjpzdGF0aWMgaW50IF9faW5pdCBicGZfbWVtY29udHJvbF9pbml0KHZvaWQpXFxubW0vYnBmX21lbWNvbnRyb2wuYy0xODMte1xcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYy0xODYtXFx0ZXJyID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1VOU1BFQyxcXG5tbS9icGZfbWVtY29udHJvbC5jOjE4NzpcXHRcXHRcXHRcXHRcXHRcXHUwMDI2YnBmX21lbWNvbnRyb2xfa2Z1bmNfc2V0KTtcXG5tbS9icGZfbWVtY29udHJvbC5jLTE4OC1cXHRpZiAoZXJyKVxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTg5OlxcdFxcdHByX3dhcm4oXFxcImVycm9yIHdoaWxlIHJlZ2lzdGVyaW5nIGJwZiBtZW1jb250cm9sIGtmdW5jczogJWRcXFwiLCBlcnIpO1xcbm1tL2JwZl9tZW1jb250cm9sLmMtMTkwLVxcbi0tXFxubW0vYnBmX21lbWNvbnRyb2wuYy0xOTItfVxcbm1tL2JwZl9tZW1jb250cm9sLmM6MTkzOmxhdGVfaW5pdGNhbGwoYnBmX21lbWNvbnRyb2xfaW5pdCk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aHJlYWQuaFxcdTAwM2VcXG5tbS9kYW1vbi9jb3JlLmM6MTE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9kYW1vbi9jb3JlLmMtMTItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuLS1cXG5tbS9kZWJ1Zy5jLTExLSNpbmNsdWRlIFxcdTAwM2NsaW51eC90cmFjZV9ldmVudHMuaFxcdTAwM2VcXG5tbS9kZWJ1Zy5jOjEyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vZGVidWcuYy0xMy0jaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL21tZmxhZ3MuaFxcdTAwM2VcXG4tLVxcbm1tL2ZpbGVtYXAuYy0zNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvaHVnZXRsYi5oXFx1MDAzZVxcbm1tL2ZpbGVtYXAuYzozODojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL2ZpbGVtYXAuYy0zOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2htZW1fZnMuaFxcdTAwM2VcXG4tLVxcbm1tL2ZvbGlvLmMtMjgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcXHUwMDNlXFxubW0vZm9saW8uYzoyOTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL2ZvbGlvLmMtMzAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dmcC5oXFx1MDAzZVxcbi0tXFxubW0vaHdwb2lzb24taW5qZWN0LmMtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2UtZmxhZ3MuaFxcdTAwM2VcXG5tbS9od3BvaXNvbi1pbmplY3QuYzoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL2h3cG9pc29uLWluamVjdC5jLTEyLSNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbi0tXFxubW0vbGlzdF9scnUuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG5tbS9saXN0X2xydS5jOjE0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vbGlzdF9scnUuYy0xNS0jaW5jbHVkZSBcXFwic2xhYi5oXFxcIlxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTItXFxubW0vbWVtY29udHJvbC12MS5jOjM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9tZW1jb250cm9sLXYxLmMtNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3dhcC5oXFx1MDAzZVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE3LSNpbmNsdWRlIFxcXCJzd2FwX3RhYmxlLmhcXFwiXFxubW0vbWVtY29udHJvbC12MS5jOjE4OiNpbmNsdWRlIFxcXCJtZW1jb250cm9sLXYxLmhcXFwiXFxubW0vbWVtY29udHJvbC12MS5jLTE5LVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nncm91cC1kZWZzLmhcXHUwMDNlXFxubW0vbWVtY29udHJvbC12MS5oOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9tZW1jb250cm9sLXYxLmgtOC1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxubW0vbWVtY29udHJvbC5jOjI6LyogbWVtY29udHJvbC5jIC0gTWVtb3J5IENvbnRyb2xsZXJcXG5tbS9tZW1jb250cm9sLmMtMy0gKlxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI5LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX2NvdW50ZXIuaFxcdTAwM2VcXG5tbS9tZW1jb250cm9sLmM6MzA6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9tZW1jb250cm9sLmMtMzEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nncm91cC5oXFx1MDAzZVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTcwLSNpbmNsdWRlIFxcXCJzbGFiLmhcXFwiXFxubW0vbWVtY29udHJvbC5jOjcxOiNpbmNsdWRlIFxcXCJtZW1jb250cm9sLXYxLmhcXFwiXFxubW0vbWVtY29udHJvbC5jLTcyLVxcbi0tXFxubW0vbWVtb3J5LmMtNjAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXFx1MDAzZVxcbm1tL21lbW9yeS5jOjYxOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vbWVtb3J5LmMtNjItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tdV9ub3RpZmllci5oXFx1MDAzZVxcbi0tXFxubW0vbWxvY2suYy0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvaHVnZXRsYi5oXFx1MDAzZVxcbm1tL21sb2NrLmM6MjU6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9tbG9jay5jLTI2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbV9pbmxpbmUuaFxcdTAwM2VcXG4tLVxcbm1tL21tYXBfbG9jay5jLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nncm91cC5oXFx1MDAzZVxcbm1tL21tYXBfbG9jay5jOjc6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9tbWFwX2xvY2suYy04LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWFwX2xvY2suaFxcdTAwM2VcXG4tLVxcbm1tL29vbV9raWxsLmMtMzUtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxubW0vb29tX2tpbGwuYzozNjojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL29vbV9raWxsLmMtMzctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXFx1MDAzZVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQ4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX3RhYmxlX2NoZWNrLmhcXHUwMDNlXFxubW0vcGFnZV9hbGxvYy5jOjQ5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vcGFnZV9hbGxvYy5jLTUwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mdHJhY2UuaFxcdTAwM2VcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0xMi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2VxX2ZpbGUuaFxcdTAwM2VcXG5tbS9wYWdlX293bmVyLmM6MTM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9wYWdlX293bmVyLmMtMTQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL2Nsb2NrLmhcXHUwMDNlXFxuLS1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC02LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJjcHUuaFxcdTAwM2VcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDo3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vcGVyY3B1LWludGVybmFsLmgtOC1cXG4tLVxcbm1tL3BlcmNwdS5jLTg4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9tbS5oXFx1MDAzZVxcbm1tL3BlcmNwdS5jOjg5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vcGVyY3B1LmMtOTAtXFxuLS1cXG5tbS9ybWFwLmMtNjYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbm1tL3JtYXAuYzo2NzojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL3JtYXAuYy02OC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW11X25vdGlmaWVyLmhcXHUwMDNlXFxuLS1cXG5tbS9zaHJpbmtlci5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5tbS9zaHJpbmtlci5jOjI6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9zaHJpbmtlci5jLTMtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J3c2VtLmhcXHUwMDNlXFxuLS1cXG5tbS9zaHJpbmtlcl9kZWJ1Zy5jLTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Nocmlua2VyLmhcXHUwMDNlXFxubW0vc2hyaW5rZXJfZGVidWcuYzo3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vc2hyaW5rZXJfZGVidWcuYy04LVxcbi0tXFxubW0vc2xhYi5oLTEwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9tbS5oXFx1MDAzZVxcbm1tL3NsYWIuaDoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL3NsYWIuaC0xMi0jaW5jbHVkZSBcXHUwMDNjbGludXgva2ZlbmNlLmhcXHUwMDNlXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTI4LSNpbmNsdWRlIFxcdTAwM2Nhc20vcGFnZS5oXFx1MDAzZVxcbm1tL3NsYWJfY29tbW9uLmM6Mjk6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG5tbS9zbGFiX2NvbW1vbi5jLTMwLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdGFja2RlcG90LmhcXHUwMDNlXFxuLS1cXG5tbS9zbHViLmMtNDMtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcXHUwMDNlXFxubW0vc2x1Yi5jOjQ0OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vc2x1Yi5jLTQ1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYW5kb20uaFxcdTAwM2VcXG4tLVxcbm1tL3N3YXAuaC02LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZSAvKiBmb3IgUEFHRV9TSElGVCAqL1xcbm1tL3N3YXAuaDo3OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlIC8qIGZvciBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoKSAqL1xcbm1tL3N3YXAuaC04LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zd2FwLmhcXHUwMDNlIC8qIGZvciBNQVhfU1dBUEZJTEVTX1NISUZULCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqL1xcbi0tXFxubW0vc3dhcGZpbGUuYy0zNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY2FsbHMuaFxcdTAwM2VcXG5tbS9zd2FwZmlsZS5jOjM1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxubW0vc3dhcGZpbGUuYy0zNi0jaW5jbHVkZSBcXHUwMDNjbGludXgvcG9sbC5oXFx1MDAzZVxcbi0tXFxubW0vdm1hbGxvYy5jLTMzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZVxcbm1tL3ZtYWxsb2MuYzozNDojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL3ZtYWxsb2MuYy0zNS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4tLVxcbm1tL3ZtcHJlc3N1cmUuYy0xMS0gKiBUcmVlLW1vZGUgKGNncm91cCB2MSB1c2Vyc3BhY2UgZXZlbnRmZCkgYm9va2tlZXBpbmcgbGl2ZXMgaW5cXG5tbS92bXByZXNzdXJlLmM6MTI6ICogbW0vbWVtY29udHJvbC12MS5jOyB0aGlzIGZpbGUgaG9sZHMgdGhlIHNoYXJlZCBjb2RlIGFuZCB0aGUgaW4ta2VybmVsXFxubW0vdm1wcmVzc3VyZS5jLTEzLSAqICh0cmVlPWZhbHNlKSBzb2NrZXQtcHJlc3N1cmUgcGF0aCB0aGF0IHJ1bnMgb24gY2dyb3VwIHYyLlxcbi0tXFxubW0vdm1zY2FuLmMtNDAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZyZWV6ZXIuaFxcdTAwM2VcXG5tbS92bXNjYW4uYzo0MTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL3Ztc2Nhbi5jLTQyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9taWdyYXRlLmhcXHUwMDNlXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNy1cXG5tbS93b3JraW5nc2V0LmM6ODojaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbm1tL3dvcmtpbmdzZXQuYy05LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbV9pbmxpbmUuaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6MjMuNjM2NDQ1MjQ4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NjA2ODgwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIEtjb25maWcgZm9yIE1FTUNHKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBvbiBzb2xpZCBncm91bmQgd2l0aCBtZW1vcnkgY2dyb3Vwcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkIG9yIGF0IGxlYXN0IGNvbmZpZ3VyYWJsZSwgYW5kIHdoYXQgaXRzIGN1cnJlbnQgc3RhdGUgaXMuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaWYgSSBldmVuICpoYXZlKiBtZW1vcnkgY2dyb3VwcyBzdXBwb3J0IGNvbXBpbGVkIGluLCBvciBpZiBJIG5lZWQgdG8gZGlnIGludG8gYnVpbGQgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIGl0LiBJIG1pZ2h0IGFsc28gY2hlY2sgZm9yIGFzc29jaWF0ZWQgb3B0aW9ucyB0aGF0IGNvbnRyb2wgaXRzIGJlaGF2aW9yLCBsaWtlIG5lc3RlZCBjZ3JvdXBzIG9yIGFueSBzcGVjaWZpYyByZXNvdXJjZSBsaW1pdHMgZGVmaW5lZC4gTm8gcG9pbnQgaW4gd2FzdGluZyB0aW1lIGlmIEknbSBub3QgZXZlbiB3b3JraW5nIHdpdGggYSBrZXJuZWwgdGhhdCBzdXBwb3J0cyB0aGUgZnVuY3Rpb25hbGl0eSBJIG5lZWQuIFF1aWNrbHkgY2hlY2tpbmcgS2NvbmZpZyBwcm92aWRlcyBhIGZhc3Qgc2FuaXR5IGNoZWNrIGJlZm9yZSBwcm9jZWVkaW5nIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODc5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6MjYuMzk3MTM2NjEzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk3MTk2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA4NC1cXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA4Ni1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkzLVxcbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwOTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDAtXFxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTExMDItXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDctXFxuaW5pdC9LY29uZmlnOjExMDg6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDktXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6MjYuNDQ1MTEyNzRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU4Nzk3NTkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgaW5pdC9LY29uZmlnYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2Ugb2YgdGhpcyBzeXN0ZW0uIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGluaXQvS2NvbmZpZ2AsIHRoYXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBiZWdpbiBkaXNzZWN0aW5nIHRoZSBidWlsZC10aW1lIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgaXQgYXJvdW5kIGxpbmUgMTA4NSwgdGhhdCdzIGdlbmVyYWxseSB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgZWl0aGVyIGEgY29yZSBjb21wb25lbnQgb3IgYSBtb3JlIHNwZWNpYWxpemVkIG1vZHVsZSBkZWNsYXJhdGlvbi4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgdG8gd29yayB3aXRoLiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgY3JpdGljYWwgZGVmaW5pdGlvbnMgaW4gdGhpcyBzZWN0aW9uLCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZWFybHkgYm9vdCBwcm9jZXNzIGlzIHNoYXBlZCBieSB0aGUgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMzMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM4OjI5LjAzMzA5MDUyOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcXG4xMDgxOlxcdFxcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cXG4xMDgyOlxcdFxcbjEwODM6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA4NDpcXHRcXG4xMDg1OlxcdGNvbmZpZyBNRU1DR1xcbjEwODY6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4NzpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4ODpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODk6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwOTA6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA5MTpcXHRcXHRoZWxwXFxuMTA5MjpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDkzOlxcdFxcbjEwOTQ6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDk1OlxcdFxcdGJvb2xcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDk4OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk5OlxcdFxcdGRlZmF1bHQgeVxcbjExMDA6XFx0XFxuMTEwMTpcXHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4xMTAyOlxcdFxcdGJvb2xcXG4xMTAzOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTA0OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMTA1OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjExMDY6XFx0XFx0ZGVmYXVsdCB5XFxuMTEwNzpcXHRcXG4xMTA4OlxcdGNvbmZpZyBNRU1DR19WMVxcbjExMDk6XFx0XFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMTEwOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTExOlxcdFxcdGRlZmF1bHQgblxcbjExMTI6XFx0XFx0aGVscFxcbjExMTM6XFx0XFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcXG4xMTE0OlxcdFxcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcXG4xMTE1OlxcdFxcdCAgd2hpY2ggaGF2ZW4ndCBtaWdyYXRlZCB0byB0aGUgbmV3IGNncm91cCB2MiBpbnRlcmZhY2UgeWV0LiBJZiB5b3VcXG4xMTE2OlxcdFxcdCAgZG8gbm90IGhhdmUgYW55IHN1Y2ggYXBwbGljYXRpb24gdGhlbiB5b3UgYXJlIGNvbXBsZXRlbHkgZmluZSBsZWF2aW5nXFxuMTExNzpcXHRcXHQgIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxcbjExMTg6XFx0XFxuMTExOTpcXHRcXHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6MjkuMDMzMjQ3MDQ4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NDU4OTM5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgY29uZmlnIE1FTUNHYCDigJMgdGhhdOKAmXMgbGluZSAxMDg1IGluIGBpbml0L0tjb25maWdgLiBUaW1lIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLiBJJ2xsIHF1aWNrbHkgc2NhbiB0aGUgc3Vycm91bmRpbmcgbGluZXMsIHNwZWNpZmljYWxseSBmcm9tIDEwNjAgdG8gMTA4NSwgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaW5mbHVlbmNpbmcgaXRzIGNvbmZpZ3VyYXRpb24uIFRoaXMgdXN1YWxseSByZXZlYWxzIHRoZSByZWxldmFudCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBhbmQgYW55IGFzc29jaWF0ZWQgY29uZGl0aW9uYWwgbG9naWMgd2l0aGluIHRoYXQgc2VnbWVudCBvZiB0aGUgS2NvbmZpZyBmaWxlLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gb3RoZXIga2VybmVsIGZlYXR1cmVzLCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MsIG9yIHBlcmhhcHMgc29tZSBwcmVwcm9jZXNzb3IgbWFjcm9zIHRoYXQgYXJlIHJlbGV2YW50IHRvIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTMyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozODozMy44NzkxNDMzNjlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDYwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDYwOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBncm91cGluZyBzZXRzIG9mIHByb2Nlc3NlcyB0b2dldGhlciwgZm9yXFxuMTA2MTpcXHRcXHQgIHVzZSB3aXRoIHByb2Nlc3MgY29udHJvbCBzdWJzeXN0ZW1zIHN1Y2ggYXMgQ3B1c2V0cywgQ0ZTLCBtZW1vcnlcXG4xMDYyOlxcdFxcdCAgY29udHJvbHMgb3IgZGV2aWNlIGlzb2xhdGlvbi5cXG4xMDYzOlxcdFxcdCAgU2VlXFxuMTA2NDpcXHRcXHRcXHQtIERvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMucnN0XFx0KENGUylcXG4xMDY1OlxcdFxcdFxcdC0gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjEvIChmZWF0dXJlcyBmb3IgZ3JvdXBpbmcsIGlzb2xhdGlvblxcbjEwNjY6XFx0XFx0XFx0XFx0XFx0XFx0ICBhbmQgcmVzb3VyY2UgY29udHJvbClcXG4xMDY3OlxcdFxcbjEwNjg6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA2OTpcXHRcXG4xMDcwOlxcdGlmIENHUk9VUFNcXG4xMDcxOlxcdFxcbjEwNzI6XFx0Y29uZmlnIFBBR0VfQ09VTlRFUlxcbjEwNzM6XFx0XFx0Ym9vbFxcbjEwNzQ6XFx0XFxuMTA3NTpcXHRjb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4xMDc2OlxcdFxcdGJvb2wgXFxcIkZhdm9yIGR5bmFtaWMgbW9kaWZpY2F0aW9uIGxhdGVuY3kgcmVkdWN0aW9uIGJ5IGRlZmF1bHRcXFwiXFxuMTA3NzpcXHRcXHRoZWxwXFxuMTA3ODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFxcXCJmYXZvcmR5bm1vZHNcXFwiIG1vdW50IG9wdGlvbiBieSBkZWZhdWx0XFxuMTA3OTpcXHRcXHQgIHdoaWNoIHJlZHVjZXMgdGhlIGxhdGVuY2llcyBvZiBkeW5hbWljIGNncm91cCBtb2RpZmljYXRpb25zIHN1Y2hcXG4xMDgwOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA4MTpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwODQ6XFx0XFxuMTA4NTpcXHRjb25maWcgTUVNQ0dcXG4xMDg2OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODc6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODg6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDg5OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6MzMuODc5MzQ0MzA5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzOTUzMjM0MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtZW1jZyBQYXRjaDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggY29uY2VybmluZyBgQ0dST1VQU2AgYW5kIGBNRU1DR2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGB0cnlfY2hhcmdlX21lbWNnYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZy4gSXQgYXBwZWFycyB0byBiZSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgYG1lbW9yeS5tYXhgIGV2ZW50cy5cblxuTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHByZXZpb3VzbHksIHdoZW4gYSBub24tYmxvY2tpbmcgYWxsb2NhdGlvbiAoZS5nLiwgYEdGUF9BVE9NSUNgLCBgR0ZQX05PV0FJVGApIGhpdCB0aGUgYG1lbW9yeS5tYXhgIGxpbWl0LCB0aGUgY29kZSB3b3VsZCBqdW1wIHRvIGBub21lbWAgYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGBfX21lbWNnX21lbW9yeV9ldmVudGAgY2FsbC4gVGhpcyBtZWFudCB0aGF0IHRoZSBcIm1heFwiIGNvdW50ZXIgaW4gYG1lbW9yeS5ldmVudHNgIHdhc24ndCBiZWluZyBpbmNyZW1lbnRlZCwgd2hpY2ggc2VlbXMgbGlrZSBhIGJ1Zy4gU2ltaWxhcmx5LCB0YXNrcyBpbiBPT00gb3IgZXhpdGluZyBPT00gdmljdGltcyBhbHNvIHdvdWxkbid0IHRyaWdnZXIgdGhlIGV2ZW50LlxuXG5UaGUgcGF0Y2gncyBjb3JlIGNoYW5nZSBpcyBtb3ZpbmcgdGhlIGBfX21lbWNnX21lbW9yeV9ldmVudGAgY2FsbCAqYWJvdmUqIHRoZXNlIGJhaWwtb3V0IGNoZWNrcy4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IGd1YXJhbnRlZXMgdGhhdCAqYW55KiBmYWlsZWQgY2hhcmdlIGFnYWluc3QgYG1lbW9yeS5tYXhgIChvciBgbWVtb3J5LnN3YXAubWF4YCkgd2lsbCBub3cgY29ycmVjdGx5IGluY3JlbWVudCB0aGUgXCJtYXhcIiBjb3VudGVyIGluIGBtZW1vcnkuZXZlbnRzYCAoYW5kIGBldmVudHMubG9jYWxgKS4gVGhpcyBzaG91bGQgZW5zdXJlIHByb3BlciBub3RpZmljYXRpb24gdG8gbGlzdGVuZXJzIHZpYSBpbm90aWZ5L2Vwb2xsIG9uIGNncm91cCB2Mi4gVGhpcyBzZWVtcyB0byBjb3JyZWN0IGEgY2xlYXIgYnVnIGFuZCBpbXByb3ZlIG1vbml0b3Jpbmcgb2YgbWVtY2cgZXZlbnRzLlxuXG5UaGUgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgbWVyaXRzIGZ1enppbmcuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdsbCBhcHBseSB0aGUgY3JpdGVyaWE6IHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgKHNwZWNpZmljYWxseSwgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIGBtZW1jZ2ApLiBJdCdzIGRpcmVjdGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgaXQgc2F0aXNmaWVzIHRoZSBjb25kaXRpb25zIGZvciBiZWluZyB3b3J0aCBmdXp6aW5nLlxuXG5JIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgdGhvdWdoLlxuVGhlIGNvZGUgcGFzc2VzIGBhbGxvd19zcGlubmluZ2AgdG8gYF9fbWVtY2dfbWVtb3J5X2V2ZW50YC4gSSdsbCBsb29rIGludG8gaXQuXG5UaGUgY29kZSB1c2VzIGBnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykgXHUwMDI2XHUwMDI2ICEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpYCB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIHRoaXMgZmxhZy5cbkkgc2hvdWxkIGNvbmZpcm0gaXRzIHVzYWdlIHRvIGVuc3VyZSB0aGF0IGl0J3Mgc2FmZSB0byBjYWxsIHRoZSBtZW1jZyBldmVudCBmcm9tIGF0b21pYyBjb250ZXh0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3OTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6NDAuMjc0NjY5NDI1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY0MDpcXHRcXG4yNjQxOlxcdG91dDpcXG4yNjQyOlxcdFxcdGNzc19wdXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vjc3MpO1xcbjI2NDM6XFx0fVxcbjI2NDQ6XFx0XFxuMjY0NTpcXHRzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4yNjQ2OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuMjY0NzpcXHR7XFxuMjY0ODpcXHRcXHR1bnNpZ25lZCBpbnQgYmF0Y2ggPSBtYXgoTUVNQ0dfQ0hBUkdFX0JBVENILCBucl9wYWdlcyk7XFxuMjY0OTpcXHRcXHRpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuMjY1MDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX292ZXJfbGltaXQ7XFxuMjY1MTpcXHRcXHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xcbjI2NTI6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7XFxuMjY1MzpcXHRcXHRib29sIHBhc3NlZF9vb20gPSBmYWxzZTtcXG4yNjU0OlxcdFxcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XFxuMjY1NTpcXHRcXHRib29sIGRyYWluZWQgPSBmYWxzZTtcXG4yNjU2OlxcdFxcdGJvb2wgcmFpc2VkX21heF9ldmVudCA9IGZhbHNlO1xcbjI2NTc6XFx0XFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XFxuMjY1ODpcXHRcXHRib29sIGFsbG93X3NwaW5uaW5nID0gZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoZ2ZwX21hc2spO1xcbjI2NTk6XFx0XFxuMjY2MDpcXHRyZXRyeTpcXG4yNjYxOlxcdFxcdGlmIChjb25zdW1lX3N0b2NrKG1lbWNnLCBucl9wYWdlcykpXFxuMjY2MjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yNjYzOlxcdFxcbjI2NjQ6XFx0XFx0aWYgKCFhbGxvd19zcGlubmluZylcXG4yNjY1OlxcdFxcdFxcdC8qIEF2b2lkIHRoZSByZWZpbGwgYW5kIGZsdXNoIG9mIHRoZSBvbGRlciBzdG9jayAqL1xcbjI2NjY6XFx0XFx0XFx0YmF0Y2ggPSBucl9wYWdlcztcXG4yNjY3OlxcdFxcbjI2Njg6XFx0XFx0cmVjbGFpbV9vcHRpb25zID0gTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUDtcXG4yNjY5OlxcdFxcdGlmICghZG9fbWVtc3dfYWNjb3VudCgpIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM4OjQwLjI3NTEyMTkyNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODQ5NTM1Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNZW1vcnkgQ29udHJvbCBpbiB0aGUgTGludXggS2VybmVsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ3ZlIGdvdCBhIHNlY3Rpb24gb2Yga2VybmVsIGNvZGUgcmVsYXRlZCB0byBtZW1vcnkgY29udHJvbCAoYG1tL21lbWNvbnRyb2wuY2ApIHRoYXQncyBjbGVhcmx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUga2V5IGlzIGhvdyBtZW1vcnkgbGltaXRzIGFyZSBoYW5kbGVkIGFuZCByZXBvcnRlZCB0aHJvdWdoIHRoZSBgbWVtY2dgIG1lY2hhbmlzbS4gSSBjYW4gc2VlIHRoZSBjb2RlIGZvY3VzZXMgb24gZXZlbnQgdHJhY2tpbmcgYW5kIG5vdGlmaWNhdGlvbnMgcmVsYXRlZCB0byBoaXR0aW5nIHRob3NlIGxpbWl0cywgYW5kIEkgbm90ZSB0aGF0IGl0IGFmZmVjdHMgc2V2ZXJhbCBrZXkgYXJlYXM6IG1lbWNnIGNoYXJnaW5nLCBldmVudCByZXBvcnRpbmcsIGNncm91cCBmaWxlIG5vdGlmaWNhdGlvbnMuIEdpdmVuIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLCBmaW5kaW5nIGEgdnVsbmVyYWJpbGl0eSBoZXJlIHdvdWxkIGhhdmUgc2lnbmlmaWNhbnQgY29uc2VxdWVuY2VzLiBJIGNhbiBhbHNvIHRyaWdnZXIgdGhpcyBsb2dpYyBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB3aXRob3V0IHNwZWNpYWwgaGFyZHdhcmUuXG5cbk15IGZpcnN0IHRob3VnaHQsIGlzIHRoYXQgYFdvcnRoRnV6emluZyA9IHRydWVgLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgYEZvY3VzU3ltYm9sc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBlbnRyeXBvaW50cyBmb3IgYSBmdXp6ZXIgdG8gdGFyZ2V0LiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IEFQSSBlbnRyeXBvaW50cyDigJMgc3BlY2lmaWNhbGx5LCBhbnkgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zIHRoYXQgYXJlIGludm9sdmVkIGluIHRoaXMgY29kZSBwYXRoLiBJIHdpbGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBjb3JlIGZ1bmN0aW9uIGFuZCBmaW5kIG91dCBob3cgdG8gdHJpZ2dlciBpdC4gSSdsbCBsb29rIGZvciBmdW5jdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2Agb3IgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgY2FsbCBgdHJ5X2NoYXJnZV9tZW1jZ2Agb3Igc2ltaWxhciBmdW5jdGlvbnMgdGhhdCB0cmlnZ2VyIG1lbWNnIGNoYXJnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg2NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM4OjQ0LjEyNDY2MDMwOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4OTEwMDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV9jaGFyZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGJfY2dyb3VwLmM9MjU2PXN0YXRpYyBpbnQgX19odWdldGxiX2Nncm91cF9jaGFyZ2VfY2dyb3VwKGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9odWdldGxiX2Nncm91cC5jLTI3NC1cXG5tbS9odWdldGxiX2Nncm91cC5jOjI3NTpcXHRpZiAoIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcbm1tL2h1Z2V0bGJfY2dyb3VwLmMtMjc2LVxcdFxcdCAgICBfX2h1Z2V0bGJfY2dyb3VwX2NvdW50ZXJfZnJvbV9jZ3JvdXAoaF9jZywgaWR4LCByc3ZkKSxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0yNTQxPWJvb2wgbWVtY2cxX2NoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNTQ1LVxcbm1tL21lbWNvbnRyb2wtdjEuYzoyNTQ2OlxcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZXRjcG1lbSwgbnJfcGFnZXMsIFxcdTAwMjZmYWlsKSkge1xcbm1tL21lbWNvbnRyb2wtdjEuYy0yNTQ3LVxcdFxcdG1lbWNnLVxcdTAwM2V0Y3BtZW1fcHJlc3N1cmUgPSAwO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI1MTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX2hpZ2hfZGVsYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI1NTEtICogUmVjbGFpbXMgbWVtb3J5IG92ZXIgdGhlIGhpZ2ggbGltaXQuIENhbGxlZCBkaXJlY3RseSBmcm9tXFxubW0vbWVtY29udHJvbC5jOjI1NTI6ICogdHJ5X2NoYXJnZSgpIChjb250ZXh0IHBlcm1pdHRpbmcpLCBhcyB3ZWxsIGFzIGZyb20gdGhlIHVzZXJsYW5kXFxubW0vbWVtY29udHJvbC5jLTI1NTMtICogcmV0dXJuIHBhdGggd2hlcmUgcmVjbGFpbSBpcyBhbHdheXMgYWJsZSB0byBibG9jay5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNTU1PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY0NC1cXG5tbS9tZW1jb250cm9sLmM6MjY0NTpzdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9tZW1jb250cm9sLmMtMjY0Ni1cXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NjktXFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcXG5tbS9tZW1jb250cm9sLmM6MjY3MDpcXHQgICAgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSkge1xcbm1tL21lbWNvbnRyb2wuYzoyNjcxOlxcdFxcdGlmIChwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgYmF0Y2gsIFxcdTAwMjZjb3VudGVyKSlcXG5tbS9tZW1jb250cm9sLmMtMjY3Mi1cXHRcXHRcXHRnb3RvIGRvbmVfcmVzdG9jaztcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODQ4LVxcbm1tL21lbWNvbnRyb2wuYzoyODQ5OnN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9tZW1jb250cm9sLmMtMjg1MC1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODU0LVxcbm1tL21lbWNvbnRyb2wuYzoyODU1OlxcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0yODU2LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMTQ4PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzE1NS1cXG5tbS9tZW1jb250cm9sLmM6MzE1NjpcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzE1Ny1cXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxOTY9c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMDQtXFx0aWYgKCFvYmpfY2dyb3VwX2lzX3Jvb3Qob2JqY2cpKVxcbm1tL21lbWNvbnRyb2wuYzo1MjA1OlxcdFxcdHJldCA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcCwgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG5tbS9tZW1jb250cm9sLmMtNTIwNi1cXHRpZiAocmV0KSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTYxNj1ib29sIG1lbV9jZ3JvdXBfc2tfY2hhcmdlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU2MjMtXFxubW0vbWVtY29udHJvbC5jOjU2MjQ6XFx0aWYgKHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIGdmcF9tYXNrLCBucl9wYWdlcykgPT0gMCkge1xcbm1tL21lbWNvbnRyb2wuYy01NjI1LVxcdFxcdG1vZF9tZW1jZ19zdGF0ZShtZW1jZywgTUVNQ0dfU09DSywgbnJfcGFnZXMpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU2ODI9aW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzE5LS8qKlxcbm1tL21lbWNvbnRyb2wuYzo1NzIwOiAqIF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAgLSB0cnkgY2hhcmdpbmcgc3dhcCBzcGFjZSBmb3IgYSBmb2xpb1xcbm1tL21lbWNvbnRyb2wuYy01NzIxLSAqIEBmb2xpbzogZm9saW8gYmVpbmcgYWRkZWQgdG8gc3dhcFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3MjYtICovXFxubW0vbWVtY29udHJvbC5jOjU3Mjc6aW50IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9tZW1jb250cm9sLmMtNTcyOC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc1NS1cXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1jb250cm9sLmM6NTc1NjpcXHQgICAgIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFxcdTAwMjZjb3VudGVyKSkge1xcbm1tL21lbWNvbnRyb2wuYy01NzU3LVxcdFxcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpO1xcbi0tXFxubW0vcGFnZV9jb3VudGVyLmM9NzY9dm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS9wYWdlX2NvdW50ZXIuYy0xMDktLyoqXFxubW0vcGFnZV9jb3VudGVyLmM6MTEwOiAqIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlIC0gdHJ5IHRvIGhpZXJhcmNoaWNhbGx5IGNoYXJnZSBwYWdlc1xcbm1tL3BhZ2VfY291bnRlci5jLTExMS0gKiBAY291bnRlcjogY291bnRlclxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtMTE3LSAqL1xcbm1tL3BhZ2VfY291bnRlci5jOjExODpib29sIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXFxubW0vcGFnZV9jb3VudGVyLmMtMTE5LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jPTE5Nz1pbnQgcGFnZV9jb3VudGVyX3NldF9tYXgoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jLTIwOC1cXHRcXHQgKiBhbmQgYWZ0ZXIsIHNvIHRoZSByZWFkLXN3YXAtcmVhZCBpcyBvcmRlcmVkIGFuZFxcbm1tL3BhZ2VfY291bnRlci5jOjIwOTpcXHRcXHQgKiBlbnN1cmVzIGNvaGVyZW5jeSB3aXRoIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKCk6XFxubW0vcGFnZV9jb3VudGVyLmMtMjEwLVxcdFxcdCAqIHRoYXQgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGNvdW50IGJlZm9yZSBjaGVja2luZ1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xNzQwPWludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE3NzctXFx0LyogTmVlZCB0byBjYWxsIHRoaXMgZXZlbiBpZiBhbGxvY2F0aW9uIGZhaWxlZCwgZm9yIE1FTUNHX1NXQVBfRkFJTC4gKi9cXG5tbS9zd2FwZmlsZS5jOjE3Nzg6XFx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpXFxubW0vc3dhcGZpbGUuYy0xNzc5LVxcdFxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzg6NDQuMjQzNTc1MzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI4NzA1MDI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ2hhcmdlIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbWVtb3J5IGNoYXJnZXMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW52b2tlIGB0cnlfY2hhcmdlX21lbWNnYC5cblxuSXQgbG9va3MgbGlrZSB0aGUga2V5IHBsYXllcnMgYXJlOiBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgY2hhcmdlX21lbWNnYCwgYG9ial9jZ3JvdXBfY2hhcmdlX3BhZ2VzYCwgYW5kIHRoYXQgaW50cmlndWluZyBgX19tZW1jZ19tZW1vcnlfZXZlbnRgLiBJJ2xsIHdhbnQgdG8gcGF5IHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoYXQgbGFzdCBvbmUgaXMgbW9kaWZpZWQgYXQgaXRzIGNhbGxzaXRlLlxuXG5gY2hhcmdlX21lbWNnYCBzZWVtcyB0byBiZSBjZW50cmFsLCBiZWluZyBjYWxsZWQgYnkgYSBmZXcgaW1wb3J0YW50IG90aGVycyBsaWtlIGBtZW1fY2dyb3VwX2NoYXJnZWAgYW5kIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLiBOb3csIGxldCdzIHNwZWNpZmljYWxseSBleGFtaW5lIHRoZSBgbWVtX2Nncm91cF9jaGFyZ2VgIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbGVycyB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBwcmV0dHkgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIHRoZSBjb3JlIG1lbW9yeSBjaGFyZ2luZyBsb2dpYyByZXNpZGVzLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDU5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM4OjUwLjUzMDYyODI2NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgwMjMzMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhcmdlX21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9MjU1NT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI2NDQtXFxubW0vbWVtY29udHJvbC5jOjI2NDU6c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vbWVtY29udHJvbC5jLTI2NDYtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yODQ5PXN0YXRpYyBpbmxpbmUgaW50IHRyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODU0LVxcbm1tL21lbWNvbnRyb2wuYzoyODU1OlxcdHJldHVybiB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnBfbWFzaywgbnJfcGFnZXMpO1xcbm1tL21lbWNvbnRyb2wuYy0yODU2LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0zMTQ4PXN0YXRpYyBpbnQgb2JqX2Nncm91cF9jaGFyZ2VfcGFnZXMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzE1NS1cXG5tbS9tZW1jb250cm9sLmM6MzE1NjpcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIG5yX3BhZ2VzKTtcXG5tbS9tZW1jb250cm9sLmMtMzE1Ny1cXHRpZiAocmV0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxODE9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxOTUtXFxubW0vbWVtY29udHJvbC5jOjUxOTY6c3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy01MTk3LVxcdFxcdFxcdGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjA0LVxcdGlmICghb2JqX2Nncm91cF9pc19yb290KG9iamNnKSlcXG5tbS9tZW1jb250cm9sLmM6NTIwNTpcXHRcXHRyZXQgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBnZnAsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxubW0vbWVtY29udHJvbC5jLTUyMDYtXFx0aWYgKHJldCkge1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMTY9aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjIxLVxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XFxubW0vbWVtY29udHJvbC5jOjUyMjI6XFx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcXG5tbS9tZW1jb250cm9sLmMtNTIyMy1cXHRjc3NfcHV0KFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjQwPWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjUzLVxcbm1tL21lbWNvbnRyb2wuYzo1MjU0OlxcdGlmIChjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApKVxcbm1tL21lbWNvbnRyb2wuYy01MjU1LVxcdFxcdHJldCA9IC1FTk9NRU07XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI3ND1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyODgtXFxubW0vbWVtY29udHJvbC5jOjUyODk6XFx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcXG5tbS9tZW1jb250cm9sLmMtNTI5MC1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NjE2PWJvb2wgbWVtX2Nncm91cF9za19jaGFyZ2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTYyMy1cXG5tbS9tZW1jb250cm9sLmM6NTYyNDpcXHRpZiAodHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgZ2ZwX21hc2ssIG5yX3BhZ2VzKSA9PSAwKSB7XFxubW0vbWVtY29udHJvbC5jLTU2MjUtXFx0XFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TT0NLLCBucl9wYWdlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM4OjUwLjU5ODY1NTM2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDk3NzU0ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBDb250cm9sbGVyIEZ1bmN0aW9uYWxpdHkgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBrZXJuZWwgZnVuY3Rpb25zIGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLCBlc3BlY2lhbGx5IHRob3NlIHJlbGV2YW50IGZvciBmdXp6aW5nLCBrZWVwaW5nIGluIG1pbmQgdGhlIG5lZWQgdG8gYXZvaWQgZ2VuZXJpYyBmdW5jdGlvbnMgYW5kIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLlxuXG5JJ20gc3RhcnRpbmcgYnkgbG9va2luZyBhdCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG1lbnRpb25lZDogYF9fbWVtX2Nncm91cF9jaGFyZ2VgLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLCBhbmQgYG1lbV9jZ3JvdXBfc2tfY2hhcmdlYCwgYWxvbmcgd2l0aCBgX19tZW1jZ19tZW1vcnlfZXZlbnRgLiBJJ20gdmVyaWZ5aW5nIHRoYXQgYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCBpcyBpbmRlZWQgbm9uLXN0YXRpYyBhbmQgZXhwb3J0ZWQuXG5cblRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIgc2VlbXMgdG8gYmUgaW4gYHRyeV9jaGFyZ2VfbWVtY2dgLCB3aGVyZSB0aGUgcGF0Y2ggYWZmZWN0cyB3aGVuIGBfX21lbWNnX21lbW9yeV9ldmVudGAgZ2V0cyBjYWxsZWQuIFRoaXMgbWFrZXMgaXQgYSBkaXJlY3QgdGFyZ2V0LCBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIG90aGVyIGNoYXJnZSBmdW5jdGlvbnMgdG9vLCBzbyBJJ2xsIGluY2x1ZGUgdGhlbSBpbiBteSBGb2N1c1N5bWJvbHMuXG5cbk5vdywgbGV0J3MgZXhhbWluZSBkZXBlbmRlbmNpZXMuIEknbSBjaGVja2luZyBgS2NvbmZpZ2AgZm9yIHRoZSBgTUVNQ0dgIGNvbmZpZ3VyYXRpb24sIHNpbmNlIHRoaXMgaXMgaW4gdGhlIG1lbW9yeSBjb250cm9sIG1vZHVsZS4gSSBmb3VuZCBpdCwgYW5kIGl0IGRlcGVuZHMgb24gYENHUk9VUFNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgbm8gb3RoZXIgY29uZmlncyBhcmUgbmVlZGVkLiBMb29raW5nIGF0IGBpbml0L0tjb25maWdgIGFnYWluLCBpdCBsb29rcyBsaWtlIGBNRU1DR2Agc2VsZWN0cyBgUEFHRV9DT1VOVEVSYCwgYEVWRU5URkRgLCBgU0xBQl9PQkpfRVhUYCwgYW5kIGBWTV9FVkVOVF9DT1VOVEVSU2AgYnV0IHRoZXNlIGFyZSBhbGwgc2VsZWN0ZWQgYW5kIHNob3VsZCBub3QgcmVxdWlyZSBhbnkgZnVydGhlciBjb25zaWRlcmF0aW9uLlxuXG5TbywgaW4gc3VtbWFyeSwgSSdtIHNldHRpbmcgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgdG8gdHJ1ZSwgYW5kIG15IGBGb2N1c1N5bWJvbHNgIGFyZSBgX19tZW1jZ19tZW1vcnlfZXZlbnRgLCBgbWVtX2Nncm91cF9za19jaGFyZ2VgLCBgX19tZW1fY2dyb3VwX2NoYXJnZWAsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgQ0dST1VQU2AgYW5kIGBNRU1DR2AuIE15IHJlYXNvbmluZyBjZW50ZXJzIG9uIHRoZSBjaGFuZ2UgaW4gZXZlbnQgcmVwb3J0aW5nIGJlaGF2aW9yIGluIHRoZSBtZW1vcnkgY29udHJvbGxlciBkdXJpbmcgY2hhcmdpbmcgYWdhaW5zdCBgbWVtb3J5Lm1heGAgaW4gbm9uLWJsb2NraW5nIG9yIE9PTSBzY2VuYXJpb3MuIFRoaXMgaW1wYWN0cyBmdW5jdGlvbiByZWFjaGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWwgaW1wYWN0LCB3aGljaCBtYWtlcyB0aGlzIHdvcnRod2hpbGUgZm9yIGZ1enppbmcuXG5cbkZpbmFsbHksIEkgd2lsbCBydW4gdGhlIHNldC1yZXN1bHRzIHRvb2wgZm9yIGEgc2FuaXR5IGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgxMSwiT3V0cHV0VG9rZW5zIjoxNzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzk6MDkuNjk2NDEyODU0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAwMzAxMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNHUk9VUFNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19tZW1jZ19tZW1vcnlfZXZlbnRcIixcbiAgICBcIm1lbV9jZ3JvdXBfc2tfY2hhcmdlXCIsXG4gICAgXCJfX21lbV9jZ3JvdXBfY2hhcmdlXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiXCIsXG4gICAgXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtZW1vcnkgY29udHJvbGxlciAobWVtY2cpIGNoYXJnaW5nIHBhdGggaW4gdHJ5X2NoYXJnZV9tZW1jZygpIHRvIHJhaXNlIE1FTUNHX01BWCBtZW1vcnkgZXZlbnRzIGltbWVkaWF0ZWx5IHdoZW4gdGhlIHBhZ2UgY291bnRlciBleGNlZWRzIHRoZSBsaW1pdCwgYmVmb3JlIGFueSBlYXJseSBiYWlsLW91dHMgKHN1Y2ggYXMgbm9uLWJsb2NraW5nIGFsbG9jYXRpb25zLCBPT00gdGFza3MsIG9yIGV4aXRpbmcgT09NIHZpY3RpbXMpLiBUaGlzIGZ1bmN0aW9uYWxseSBhZmZlY3RzIG1lbW9yeSBldmVudCBjb3VudGluZyBhbmQgbm90aWZpY2F0aW9ucyBmb3IgbWVtb3J5LmV2ZW50cyBhbmQgbWVtb3J5LmV2ZW50cy5sb2NhbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fbWVtY2dfbWVtb3J5X2V2ZW50XCIsXG4gICAgXCJtZW1fY2dyb3VwX3NrX2NoYXJnZVwiLFxuICAgIFwiX19tZW1fY2dyb3VwX2NoYXJnZVwiLFxuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiLFxuICAgIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgKG1lbWNnKSBjaGFyZ2luZyBwYXRoIGluIHRyeV9jaGFyZ2VfbWVtY2coKSB0byByYWlzZSBNRU1DR19NQVggbWVtb3J5IGV2ZW50cyBpbW1lZGlhdGVseSB3aGVuIHRoZSBwYWdlIGNvdW50ZXIgZXhjZWVkcyB0aGUgbGltaXQsIGJlZm9yZSBhbnkgZWFybHkgYmFpbC1vdXRzIChzdWNoIGFzIG5vbi1ibG9ja2luZyBhbGxvY2F0aW9ucywgT09NIHRhc2tzLCBvciBleGl0aW5nIE9PTSB2aWN0aW1zKS4gVGhpcyBmdW5jdGlvbmFsbHkgYWZmZWN0cyBtZW1vcnkgZXZlbnQgY291bnRpbmcgYW5kIG5vdGlmaWNhdGlvbnMgZm9yIG1lbW9yeS5ldmVudHMgYW5kIG1lbW9yeS5ldmVudHMubG9jYWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM5OjA5Ljc3NjQ0OTIzOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0Njc0NjMzMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozOTowOS43NzY5NTYzMThaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTQ2Njk1MTQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbnRyb2wgZmxvdyBpbiBgdHJ5X2NoYXJnZV9tZW1jZygpYCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2Agc28gdGhhdCB0aGUgYE1FTUNHX01BWGAgZXZlbnQgKGBfX21lbWNnX21lbW9yeV9ldmVudGApIGlzIHJlY29yZGVkIGVhcmxpZXIgd2hlbmV2ZXIgYSBtZW1vcnkgY2dyb3VwIGxpbWl0IGlzIGV4Y2VlZGVkLCBlbnN1cmluZyBpdCBpcyBhY2NvdW50ZWQgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBiYWlscyBvdXQgZWFybHkgKGUuZy4gbm9uLWJsb2NraW5nIEdGUCBtYXNrcyBvciBPT00gc2NlbmFyaW9zKS5cXG5cXG5BbGwgdmFyaWFibGVzIGludm9sdmVkIChgbWVtX292ZXJfbGltaXRgLCBgYWxsb3dfc3Bpbm5pbmdgLCBgcmFpc2VkX21heF9ldmVudGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgY29weWluZyB0byB1c2Vyc3BhY2UsIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zIHRoYXQgY291bGQgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxcblxcblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmc7IHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgdGVzdCBjb25maWd1cmF0aW9ucyBhcmUgYXBwcm9wcmlhdGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTZmZThkZjU2YTI4ZGRiNzkxMmI3MzM1NWQ2NmI2MGYyMmNiNzZhM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDIzOjM3OjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxMjcxZDM5MGI2MTdlLi4zOTA0ZmU5YTdiMmU5IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0yNjgzLDYgKzI2ODMsMTEgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdGdvdG8gcmV0cnk7XG4gXHR9XG4gXG4rXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpIHtcbitcdFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xuK1x0XHRyYWlzZWRfbWF4X2V2ZW50ID0gdHJ1ZTtcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBQcmV2ZW50IHVuYm91bmRlZCByZWN1cnNpb24gd2hlbiByZWNsYWltIG9wZXJhdGlvbnMgbmVlZCB0b1xuIFx0ICogYWxsb2NhdGUgbWVtb3J5LiBUaGlzIG1pZ2h0IGV4Y2VlZCB0aGUgbGltaXRzIHRlbXBvcmFyaWx5LFxuQEAgLTI3MTEsOSArMjcxNiw2IEBAIHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuIFx0ICAgIG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2Vvb21fbW0pKVxuIFx0XHRnb3RvIG5vbWVtO1xuIFxuLVx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xuLVx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XG4tXG4gXHRwc2lfbWVtc3RhbGxfZW50ZXIoXHUwMDI2cGZsYWdzKTtcbiBcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxuIFx0XHRcdFx0XHRcdCAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTtcbkBAIC0yNzczLDEzICsyNzc1LDYgQEAgc3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRpZiAoIShnZnBfbWFzayBcdTAwMjYgKF9fR0ZQX05PRkFJTCB8IF9fR0ZQX0hJR0gpKSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gZm9yY2U6XG4tXHQvKlxuLVx0ICogSWYgdGhlIGFsbG9jYXRpb24gaGFzIHRvIGJlIGVuZm9yY2VkLCBkb24ndCBmb3JnZXQgdG8gcmFpc2Vcbi1cdCAqIGEgTUVNQ0dfTUFYIGV2ZW50LlxuLVx0ICovXG4tXHRpZiAoIXJhaXNlZF9tYXhfZXZlbnQpXG4tXHRcdF9fbWVtY2dfbWVtb3J5X2V2ZW50KG1lbV9vdmVyX2xpbWl0LCBNRU1DR19NQVgsIGFsbG93X3NwaW5uaW5nKTtcbi1cbiBcdC8qXG4gXHQgKiBUaGUgYWxsb2NhdGlvbiBlaXRoZXIgY2FuJ3QgZmFpbCBvciB3aWxsIGxlYWQgdG8gbW9yZSBtZW1vcnlcbiBcdCAqIGJlaW5nIGZyZWVkIHZlcnkgc29vbi4gIEFsbG93IG1lbW9yeSB1c2FnZSBnbyBvdmVyIHRoZSBsaW1pdFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzk6MDkuNzc2OTU3MjE4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0ODAyMjE0OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgZGlyZWN0aXZlcywgc3RydWN0dXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50IG9mIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG1tL21lbWNvbnRyb2wuY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBkaWZmIGFuZCBzdXJyb3VuZGluZyBjb2RlIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBzdWdnZXN0cyB0aGVyZSdzIHNvbWUgY2hhbmdlIG9yIGJ1ZyByZXBvcnQgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIGFuZCB0aGlzIGZpbGUgaXMgdGhlIGZvY2FsIHBvaW50LiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBJJ2xsIHdhbnQgdG8gdXNlIGByZWFkLWZpbGVgLCBsaWtlbHkgYXJvdW5kIGxpbmUgMjY4MC4gVGhhdCBsaW5lIG51bWJlciB3aWxsIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgcG9pbnQgdG8gZXhhbWluZSB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlIG9yIGlzc3VlLiBUaGlzIGlzIG15IGdvLXRvIGFwcHJvYWNoIOKAkyBjb250ZXh0IGZpcnN0LCB0aGVuIHRoZSBzcGVjaWZpYyBtb2RpZmljYXRpb24sIGhlbHBzIG1lIGdldCB0aGUgZnVsbCBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM5OjI0LjU3OTE3NTEyMloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2NjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjYwOlxcdHJldHJ5OlxcbjI2NjE6XFx0XFx0aWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSlcXG4yNjYyOlxcdFxcdFxcdHJldHVybiAwO1xcbjI2NjM6XFx0XFxuMjY2NDpcXHRcXHRpZiAoIWFsbG93X3NwaW5uaW5nKVxcbjI2NjU6XFx0XFx0XFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXFxuMjY2NjpcXHRcXHRcXHRiYXRjaCA9IG5yX3BhZ2VzO1xcbjI2Njc6XFx0XFxuMjY2ODpcXHRcXHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xcbjI2Njk6XFx0XFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcXG4yNjcwOlxcdFxcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBiYXRjaCwgXFx1MDAyNmNvdW50ZXIpKSB7XFxuMjY3MTpcXHRcXHRcXHRpZiAocGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpXFxuMjY3MjpcXHRcXHRcXHRcXHRnb3RvIGRvbmVfcmVzdG9jaztcXG4yNjczOlxcdFxcdFxcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXFxuMjY3NDpcXHRcXHRcXHRcXHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgYmF0Y2gpO1xcbjI2NzU6XFx0XFx0XFx0bWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fY291bnRlcihjb3VudGVyLCBtZW1vcnkpO1xcbjI2NzY6XFx0XFx0fSBlbHNlIHtcXG4yNjc3OlxcdFxcdFxcdG1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX2NvdW50ZXIoY291bnRlciwgbWVtc3cpO1xcbjI2Nzg6XFx0XFx0XFx0cmVjbGFpbV9vcHRpb25zIFxcdTAwMjY9IH5NRU1DR19SRUNMQUlNX01BWV9TV0FQO1xcbjI2Nzk6XFx0XFx0fVxcbjI2ODA6XFx0XFxuMjY4MTpcXHRcXHRpZiAoYmF0Y2ggXFx1MDAzZSBucl9wYWdlcykge1xcbjI2ODI6XFx0XFx0XFx0YmF0Y2ggPSBucl9wYWdlcztcXG4yNjgzOlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjY4NDpcXHRcXHR9XFxuMjY4NTpcXHRcXG4yNjg2OlxcdFxcdGlmICghcmFpc2VkX21heF9ldmVudCkge1xcbjI2ODc6XFx0XFx0XFx0X19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO1xcbjI2ODg6XFx0XFx0XFx0cmFpc2VkX21heF9ldmVudCA9IHRydWU7XFxuMjY4OTpcXHRcXHR9XFxuMjY5MDpcXHRcXG4yNjkxOlxcdFxcdC8qXFxuMjY5MjpcXHRcXHQgKiBQcmV2ZW50IHVuYm91bmRlZCByZWN1cnNpb24gd2hlbiByZWNsYWltIG9wZXJhdGlvbnMgbmVlZCB0b1xcbjI2OTM6XFx0XFx0ICogYWxsb2NhdGUgbWVtb3J5LiBUaGlzIG1pZ2h0IGV4Y2VlZCB0aGUgbGltaXRzIHRlbXBvcmFyaWx5LFxcbjI2OTQ6XFx0XFx0ICogYnV0IHdlIHByZWZlciBmYWNpbGl0YXRpbmcgbWVtb3J5IHJlY2xhaW0gYW5kIGdldHRpbmcgYmFja1xcbjI2OTU6XFx0XFx0ICogdW5kZXIgdGhlIGxpbWl0IG92ZXIgdHJpZ2dlcmluZyBPT00ga2lsbHMgaW4gdGhlc2UgY2FzZXMuXFxuMjY5NjpcXHRcXHQgKi9cXG4yNjk3OlxcdFxcdGlmICh1bmxpa2VseShjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DKSlcXG4yNjk4OlxcdFxcdFxcdGdvdG8gZm9yY2U7XFxuMjY5OTpcXHRcXG4yNzAwOlxcdFxcdGlmICh1bmxpa2VseSh0YXNrX2luX21lbWNnX29vbShjdXJyZW50KSkpXFxuMjcwMTpcXHRcXHRcXHRnb3RvIG5vbWVtO1xcbjI3MDI6XFx0XFxuMjcwMzpcXHRcXHRpZiAoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcF9tYXNrKSlcXG4yNzA0OlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjcwNTpcXHRcXG4yNzA2OlxcdFxcdC8qXFxuMjcwNzpcXHRcXHQgKiBPT00gdmljdGltIHN0aWxsIG5lZWRzIHRvIGNoYXJnZSBtZW1vcnkgdG8gZXhpdC4gT09NIHJlYXBlciBzaG91bGRcXG4yNzA4OlxcdFxcdCAqIGhlbHAgYnV0IGl0IG1pZ2h0IGZhaWwgb24gbW1hcF9sb2NrIGNvbnRlbnRpb24uIElmIHRoZSB2aWN0aW0gaXMgYVxcbjI3MDk6XFx0XFx0ICogbGFyZ2UgdGhyZWFkIGdyb3VwIHRoZW4gYWxsIGV4aXRpbmcgdGhyZWFkcyBtaWdodCBjb21wZXRlIG9uIG9vbV9sb2NrXFxuMjcxMDpcXHRcXHQgKiBqdXN0IHRvIGxlYXJuIHRoYXQgdGhlcmUgaXMgbm90aGluZyByZWFsbHkga2lsbGFibGUgYW55bW9yZS4gQmFpbFxcbjI3MTE6XFx0XFx0ICogb3V0IGVhcmx5IGFuZCBmYWlsIHRoZSBjaGFyZ2UgdG8gZXhwZWRpdGUgdGhlaXIgZXhpdC4gVGhleSBhcmVcXG4yNzEyOlxcdFxcdCAqIGNvbnNpZGVyZWQgZnVsbHkgcmVjbGFpbWVkIGJ5IHRoZSBvb20gcmVhcGVyIGFuZCB0aGV5IHNob3VsZG4ndFxcbjI3MTM6XFx0XFx0ICogY29udHJpYnV0ZSBmdXJ0aGVyIGNoYXJnZXMuXFxuMjcxNDpcXHRcXHQgKi9cXG4yNzE1OlxcdFxcdGlmICh0c2tfaXNfb29tX3ZpY3RpbShjdXJyZW50KSBcXHUwMDI2XFx1MDAyNlxcbjI3MTY6XFx0XFx0ICAgIG1tX2ZsYWdzX3Rlc3QoTU1GX09PTV9TS0lQLCBjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZW9vbV9tbSkpXFxuMjcxNzpcXHRcXHRcXHRnb3RvIG5vbWVtO1xcbjI3MTg6XFx0XFxuMjcxOTpcXHRcXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxuMjcyMDpcXHRcXHRucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcyxcXG4yNzIxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTtcXG4yNzIyOlxcdFxcdHBzaV9tZW1zdGFsbF9sZWF2ZShcXHUwMDI2cGZsYWdzKTtcXG4yNzIzOlxcdFxcbjI3MjQ6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfbWFyZ2luKG1lbV9vdmVyX2xpbWl0KSBcXHUwMDNlPSBucl9wYWdlcylcXG4yNzI1OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjcyNjpcXHRcXG4yNzI3OlxcdFxcdGlmICghZHJhaW5lZCkge1xcbjI3Mjg6XFx0XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbV9vdmVyX2xpbWl0KTtcXG4yNzI5OlxcdFxcdFxcdGRyYWluZWQgPSB0cnVlO1xcbjI3MzA6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yNzMxOlxcdFxcdH1cXG4yNzMyOlxcdFxcbjI3MzM6XFx0XFx0aWYgKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfTk9SRVRSWSlcXG4yNzM0OlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjczNTpcXHRcXHQvKlxcbjI3MzY6XFx0XFx0ICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW1cXG4yNzM3OlxcdFxcdCAqIG1heSBoYXZlIGJlZW4gYWJsZSB0byBmcmVlIHNvbWUgcGFnZXMuICBSZXRyeSB0aGUgY2hhcmdlXFxuMjczODpcXHRcXHQgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay5cXG4yNzM5OlxcdFxcdCAqXFxuMjc0MDpcXHRcXHQgKiBPbmx5IGZvciByZWd1bGFyIHBhZ2VzLCB0aG91Z2g6IGh1Z2UgcGFnZXMgYXJlIHJhdGhlclxcbjI3NDE6XFx0XFx0ICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2tcXG4yNzQyOlxcdFxcdCAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS5cXG4yNzQzOlxcdFxcdCAqL1xcbjI3NDQ6XFx0XFx0aWYgKG5yX3JlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiBucl9wYWdlcyBcXHUwMDNjPSAoMSBcXHUwMDNjXFx1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikpXFxuMjc0NTpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjI3NDY6XFx0XFxuMjc0NzpcXHRcXHRpZiAobnJfcmV0cmllcy0tKVxcbjI3NDg6XFx0XFx0XFx0Z290byByZXRyeTtcXG4yNzQ5OlxcdFxcbjI3NTA6XFx0XFx0aWYgKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfUkVUUllfTUFZRkFJTClcXG4yNzUxOlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjc1MjpcXHRcXG4yNzUzOlxcdFxcdC8qIEF2b2lkIGVuZGxlc3MgbG9vcCBmb3IgdGFza3MgYnlwYXNzZWQgYnkgdGhlIG9vbSBraWxsZXIgKi9cXG4yNzU0OlxcdFxcdGlmIChwYXNzZWRfb29tIFxcdTAwMjZcXHUwMDI2IHRhc2tfaXNfZHlpbmcoKSlcXG4yNzU1OlxcdFxcdFxcdGdvdG8gbm9tZW07XFxuMjc1NjpcXHRcXG4yNzU3OlxcdFxcdC8qXFxuMjc1ODpcXHRcXHQgKiBrZWVwIHJldHJ5aW5nIGFzIGxvbmcgYXMgdGhlIG1lbWNnIG9vbSBraWxsZXIgaXMgYWJsZSB0byBtYWtlXFxuMjc1OTpcXHRcXHQgKiBhIGZvcndhcmQgcHJvZ3Jlc3Mgb3IgYnlwYXNzIHRoZSBjaGFyZ2UgaWYgdGhlIG9vbSBraWxsZXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzk6MjQuNTc5Njg0NTgxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwODQyMTU2NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdHJ5X2NoYXJnZV9tZW1jZzogQSBEZWVwZXIgRGl2ZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgaW4gYHRyeV9jaGFyZ2VfbWVtY2dgLiBUaGUgcHJldmlvdXMgY29tbWl0IGludHJvZHVjZWQgc29tZXRoaW5nLCBhbmQgSSd2ZSBnb3QgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCwgYXMgYWx3YXlzLCBpcyB0byBmb2xsb3cgdGhlIGNvZGUuIEZpcnN0LCBsZXQncyBsb29rIGF0IHdoZXJlIGB0cnlfY2hhcmdlX21lbWNnYCBpcyB1c2VkIGluIHRoZSByZXN0IG9mIHRoZSBjb2RlLCBpbiB0aGlzIGNvbnRleHQuIFRoZW4gSSdsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbiBpdHNlbGYsIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgYW5kIHRoZSBpbnRlcm5hbHMuIENvbnRleHQgaXMga2luZyBoZXJlOyB1bmRlcnN0YW5kaW5nICpob3cqIGl0J3MgYmVpbmcgdXNlZCBpcyBqdXN0IGFzIHZpdGFsIGFzIHVuZGVyc3RhbmRpbmcgKndoYXQqIGl0IGRvZXMuIEZyb20gdGhlcmUgSSdsbCBiZSBhYmxlIHRvIHNlZSB0aGUgbW9kaWZpY2F0aW9ucyBhbmQgd2h5IHRoZXkgd2VyZSBtYWRlLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBpbnZvbHZlIGxvb2tpbmcgYXQgbWVtb3J5IGFjY291bnRpbmcsIHJlc291cmNlIGxpbWl0aW5nLCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lIHdpdGhpbiB0aGUgY2dyb3VwIGhpZXJhcmNoeS4gUmlnaHQsIGxldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzk6MzUuNDIxODQ0NjQ2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjYzNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjYzNTpcXHRcXHQgKiBuZWVkIHRvIGFjY291bnQgZm9yIGFueSBpbGwtYmVnb3R0ZW4gamlmZmllcyB0byBwYXkgdGhlbSBvZmYgbGF0ZXIuXFxuMjYzNjpcXHRcXHQgKi9cXG4yNjM3OlxcdFxcdHBzaV9tZW1zdGFsbF9lbnRlcihcXHUwMDI2cGZsYWdzKTtcXG4yNjM4OlxcdFxcdHNjaGVkdWxlX3RpbWVvdXRfa2lsbGFibGUocGVuYWx0eV9qaWZmaWVzKTtcXG4yNjM5OlxcdFxcdHBzaV9tZW1zdGFsbF9sZWF2ZShcXHUwMDI2cGZsYWdzKTtcXG4yNjQwOlxcdFxcbjI2NDE6XFx0b3V0OlxcbjI2NDI6XFx0XFx0Y3NzX3B1dChcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcyk7XFxuMjY0MzpcXHR9XFxuMjY0NDpcXHRcXG4yNjQ1OlxcdHN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbjI2NDY6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4yNjQ3OlxcdHtcXG4yNjQ4OlxcdFxcdHVuc2lnbmVkIGludCBiYXRjaCA9IG1heChNRU1DR19DSEFSR0VfQkFUQ0gsIG5yX3BhZ2VzKTtcXG4yNjQ5OlxcdFxcdGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcXG4yNjUwOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1fb3Zlcl9saW1pdDtcXG4yNjUxOlxcdFxcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7XFxuMjY1MjpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDtcXG4yNjUzOlxcdFxcdGJvb2wgcGFzc2VkX29vbSA9IGZhbHNlO1xcbjI2NTQ6XFx0XFx0dW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucztcXG4yNjU1OlxcdFxcdGJvb2wgZHJhaW5lZCA9IGZhbHNlO1xcbjI2NTY6XFx0XFx0Ym9vbCByYWlzZWRfbWF4X2V2ZW50ID0gZmFsc2U7XFxuMjY1NzpcXHRcXHR1bnNpZ25lZCBsb25nIHBmbGFncztcXG4yNjU4OlxcdFxcdGJvb2wgYWxsb3dfc3Bpbm5pbmcgPSBnZnBmbGFnc19hbGxvd19zcGlubmluZyhnZnBfbWFzayk7XFxuMjY1OTpcXHRcXG4yNjYwOlxcdHJldHJ5OlxcbjI2NjE6XFx0XFx0aWYgKGNvbnN1bWVfc3RvY2sobWVtY2csIG5yX3BhZ2VzKSlcXG4yNjYyOlxcdFxcdFxcdHJldHVybiAwO1xcbjI2NjM6XFx0XFxuMjY2NDpcXHRcXHRpZiAoIWFsbG93X3NwaW5uaW5nKVxcbjI2NjU6XFx0XFx0XFx0LyogQXZvaWQgdGhlIHJlZmlsbCBhbmQgZmx1c2ggb2YgdGhlIG9sZGVyIHN0b2NrICovXFxuMjY2NjpcXHRcXHRcXHRiYXRjaCA9IG5yX3BhZ2VzO1xcbjI2Njc6XFx0XFxuMjY2ODpcXHRcXHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQO1xcbjI2Njk6XFx0XFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkgfHxcXG4yNjcwOlxcdFxcdCAgICBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBiYXRjaCwgXFx1MDAyNmNvdW50ZXIpKSB7XFxuMjY3MTpcXHRcXHRcXHRpZiAocGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIGJhdGNoLCBcXHUwMDI2Y291bnRlcikpXFxuMjY3MjpcXHRcXHRcXHRcXHRnb3RvIGRvbmVfcmVzdG9jaztcXG4yNjczOlxcdFxcdFxcdGlmIChkb19tZW1zd19hY2NvdW50KCkpXFxuMjY3NDpcXHRcXHRcXHRcXHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1zdywgYmF0Y2gpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozOTozNS40MjIwNzE5ODZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA1MTkyODMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBDaGFyZ2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZSBpbiBgdHJ5X2NoYXJnZV9tZW1jZ2AuIEl0IHNlZW1zIHRoZSBjcnVjaWFsIHBhcnQgbGllcyBpbiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBjb25jZXJuaW5nIG1lbW9yeSBldmVudHMuIFByZXZpb3VzbHksIHRoZSBgX19tZW1jZ19tZW1vcnlfZXZlbnQobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgYWxsb3dfc3Bpbm5pbmcpO2AgY2FsbCwgYWxvbmcgd2l0aCB0aGUgYHJhaXNlZF9tYXhfZXZlbnQgPSB0cnVlO2AgZmxhZywgd2FzIHNpdHVhdGVkICphZnRlciogdGhlIGBwc2lfbWVtc3RhbGxfZW50ZXJgIGFuZCB3aXRoaW4gdGhlIGBmb3JjZTpgIGJsb2NrLiBOb3csIHRoZSBwYXRjaCBoYXMgc2hpZnRlZCB0aGlzIGNydWNpYWwgY2hlY2sgYW5kIGNhbGwgc2lnbmlmaWNhbnRseSBlYXJsaWVyLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgYGlmIChiYXRjaCBcdTAwM2UgbnJfcGFnZXMpIC4uLmAgY29uZGl0aW9uLiBUaGlzIGlzIHBsYWNlZCBiZWZvcmUgdGhlIGBpZiAodW5saWtlbHkoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpKWAgYW5kLCBpbXBvcnRhbnRseSwgYmVmb3JlIGFsbCB0aG9zZSBgbm9tZW1gIGNoZWNrcyDigJMgdGhlIG9uZXMgZGVhbGluZyB3aXRoIGB0YXNrX2luX21lbWNnX29vbWAsIHdoZXRoZXIgYmxvY2tpbmcgaXMgYWxsb3dlZCB3aXRoIGAhZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmdgLCBhbmQgc28gb24uIFRoZXkgYWxzbyB0b29rIG91dCB0aGUgZHVwbGljYXRlIGNhbGwgaW4gYGZvcmNlOmAuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBvcnRhbnQgY2hhbmdlIGluIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgbWVtb3J5IG92ZXJjb21taXQgc2NlbmFyaW9zLlxuXG5Ob3csIEkgd2FudCB0byBjb25maXJtIHdoYXQgdGhpcyBlYXJseSBjYWxsIHRvIGBfX21lbWNnX21lbW9yeV9ldmVudGAgYWN0dWFsbHkgZG9lcy4gTGV0J3Mgc2VlLi4uIEknbGwganVzdCBncmVwIGZvciBgX19tZW1jZ19tZW1vcnlfZXZlbnRgIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgZXhhY3RseSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTU1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzk6MzguNDc0MDAyNDhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTY4NDIyODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBfX21lbWNnX21lbW9yeV9ldmVudFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05OTc9c3RhdGljIGlubGluZSB2b2lkIGNvdW50X21lbWNnX2V2ZW50X21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTAwMi1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMDAzOnZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwMDQtXFx0XFx0XFx0ICBlbnVtIG1lbWNnX21lbW9yeV9ldmVudCBldmVudCwgYm9vbCBhbGxvd19zcGlubmluZyk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTg4MD11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTg5OC1cXG5tbS9tZW1jb250cm9sLmM6MTg5OTp2b2lkIF9fbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLmMtMTkwMC1cXHRcXHRcXHQgIGVudW0gbWVtY2dfbWVtb3J5X2V2ZW50IGV2ZW50LCBib29sIGFsbG93X3NwaW5uaW5nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozOTo0MC4zNzA4NTU0MDlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI3MDg4NzA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbW0vbWVtY29udHJvbC5jYCoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gYG1tL21lbWNvbnRyb2wuY2AgbmVhciBsaW5lIDE4OTkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgc3BlY2lmaWMgYXJlYSBvZiBtZW1vcnkgY29udHJvbCBpcyB3b3JraW5nLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBzb21lIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24gb3IgZGF0YSBzdHJ1Y3R1cmUgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBtZW1vcnkgY2dyb3VwIGltcGxlbWVudGF0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhcm91bmQgaG93IG1lbW9yeSBhY2NvdW50aW5nIGlzIGRvbmUsIHBvc3NpYmx5IHJlbGF0aW5nIHRvIGEgc3BlY2lmaWMgbWVtb3J5IHJlc291cmNlIG9yIGV2ZW50LiBHaXZlbiB0aGUgbGluZSBudW1iZXIsIGl0J3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21lIGxldmVsIG9mIG1lbW9yeSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24gb3IgdHJhY2tpbmcuIExldCdzIHNlZSBpZiB0aGlzIGludm9sdmVzIHBhZ2UgZmF1bHRzLCBzd2FwcGluZywgb3IgcGVyaGFwcyBtZW1vcnkgbGltaXRzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk0MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIzOjM5OjQ0LjY0MTc0NDc1MloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjEyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4OTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4OTU6XFx0XFx0fVxcbjE4OTY6XFx0XFx0cmV0dXJuIG1heDtcXG4xODk3OlxcdH1cXG4xODk4OlxcdFxcbjE4OTk6XFx0dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuMTkwMDpcXHRcXHRcXHRcXHQgIGVudW0gbWVtY2dfbWVtb3J5X2V2ZW50IGV2ZW50LCBib29sIGFsbG93X3NwaW5uaW5nKVxcbjE5MDE6XFx0e1xcbjE5MDI6XFx0XFx0Ym9vbCBzd2FwX2V2ZW50ID0gZXZlbnQgPT0gTUVNQ0dfU1dBUF9ISUdIIHx8IGV2ZW50ID09IE1FTUNHX1NXQVBfTUFYIHx8XFxuMTkwMzpcXHRcXHRcXHRcXHQgIGV2ZW50ID09IE1FTUNHX1NXQVBfRkFJTDtcXG4xOTA0OlxcdFxcbjE5MDU6XFx0XFx0LyogRm9yIG5vdyBvbmx5IE1FTUNHX01BWCBjYW4gaGFwcGVuIHdpdGggIWFsbG93X3NwaW5uaW5nIGNvbnRleHQuICovXFxuMTkwNjpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIWFsbG93X3NwaW5uaW5nIFxcdTAwMjZcXHUwMDI2IGV2ZW50ICE9IE1FTUNHX01BWCk7XFxuMTkwNzpcXHRcXG4xOTA4OlxcdFxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNfbG9jYWxbZXZlbnRdKTtcXG4xOTA5OlxcdFxcdGlmICghc3dhcF9ldmVudCBcXHUwMDI2XFx1MDAyNiBhbGxvd19zcGlubmluZylcXG4xOTEwOlxcdFxcdFxcdGNncm91cF9maWxlX25vdGlmeShcXHUwMDI2bWVtY2ctXFx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcXG4xOTExOlxcdFxcbjE5MTI6XFx0XFx0ZG8ge1xcbjE5MTM6XFx0XFx0XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c1tldmVudF0pO1xcbjE5MTQ6XFx0XFx0XFx0aWYgKGFsbG93X3NwaW5uaW5nKSB7XFxuMTkxNTpcXHRcXHRcXHRcXHRpZiAoc3dhcF9ldmVudClcXG4xOTE2OlxcdFxcdFxcdFxcdFxcdGNncm91cF9maWxlX25vdGlmeShcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXBfZXZlbnRzX2ZpbGUpO1xcbjE5MTc6XFx0XFx0XFx0XFx0ZWxzZVxcbjE5MTg6XFx0XFx0XFx0XFx0XFx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFxcdTAwMjZtZW1jZy1cXHUwMDNlZXZlbnRzX2ZpbGUpO1xcbjE5MTk6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMzozOTo0NC42NDE5Njg5NjJaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA2MDE5MTczMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4vS0FTQU4gQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiB0cnlfY2hhcmdlX21lbWNnKCkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWNoIG1vZGlmaWVzIGBtbS9tZW1jb250cm9sLmM6dHJ5X2NoYXJnZV9tZW1jZygpYCwgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY2hhbmdlIGlzIGNlbnRlcmVkIGFyb3VuZCB3aGVuIHRoZSBgTUVNQ0dfTUFYYCBtZW1vcnkgZXZlbnQgaXMgcmFpc2VkIHdpdGhpbiB0aGUgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aGVuIGEgY2hhcmdpbmcgZmFpbHVyZSBvY2N1cnMgYW5kIHdlJ3JlIG92ZXIgdGhlIG1lbW9yeSBsaW1pdCAoYG1lbV9vdmVyX2xpbWl0YCkuIEVzc2VudGlhbGx5LCBpdCBtb3ZlcyB0aGUgZXZlbnQgbm90aWZpY2F0aW9uIGVhcmxpZXIgaW4gdGhlIGV4ZWN1dGlvbiBwYXRoLCBiZWZvcmUgdGhlIGNvZGUgYmFpbHMgb3V0IHRvIGBub21lbWAgb3IganVtcHMgdG8gYGZvcmNlOmAuIFByZXZpb3VzbHksIGNlcnRhaW4gY29uZGl0aW9ucyB3b3VsZCBieXBhc3MgdGhlIGV2ZW50LlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgbWVtb3J5IHNhZmV0eSwgc28gSSdtIHJ1bm5pbmcgdGhyb3VnaCBteSBLTVNBTi9LQVNBTiBjaGVja2xpc3QuXG5cbkZpcnN0LCAqd2hhdCBkb2VzIGl0IHRvdWNoKj8gSXQncyBwcmltYXJpbHkgYWJvdXQgY29udHJvbCBmbG93IGFuZCBldmVudCByYWlzaW5nLiBJdCBsb29rcyBsaWtlIGByYWlzZWRfbWF4X2V2ZW50YCBpcyBhIGxvY2FsIGJvb2xlYW4sIGluaXRpYWxpemVkIHRvIGBmYWxzZWAuIGBtZW1fb3Zlcl9saW1pdGAgaXMgc2V0IGluIHRoZSBgaWZgIHN0YXRlbWVudCByaWdodCBhYm92ZSB0aGUgcmVsZXZhbnQgbGluZXMuIGBhbGxvd19zcGlubmluZ2AgaXMgaW5pdGlhbGl6ZWQgYXQgZnVuY3Rpb24gZW50cnkuIFNvLCBmcm9tIHRoZSBpbml0aWFsIGxvb2ssIGV2ZXJ5dGhpbmcgc2VlbXMgaW5pdGlhbGl6ZWQgYXMgZXhwZWN0ZWQuXG5cblRoZW4sICpkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBtZW1vcnkgc2FmZXR5IHJpc2tzKj8gSSdtIGNoZWNraW5nIGZvciBhbGwgdGhlIGNsYXNzaWMgS01TQU4gY29uY2VybnM6XG5cbiogICAqKlVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzOioqIE5vcGUuIGByYWlzZWRfbWF4X2V2ZW50YCwgYG1lbV9vdmVyX2xpbWl0YCBhbmQgYGFsbG93X3NwaW5uaW5nYCBhcmUgYWxsIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXG4qICAgKipLZXJuZWwgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBzZW50IHRvIHVzZXJzcGFjZToqKiBEb2Vzbid0IHNlZW0gcmVsZXZhbnQgaGVyZS4gTm8gc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXJzcGFjZS5cbiogICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vLiBDb250cm9sIGZsb3cgcmVsaWVzIG9uIGluaXRpYWxpemVkIHZhcmlhYmxlcyBsaWtlIGBtZW1fb3Zlcl9saW1pdGAuXG4qICAgKipNZW1vcnkgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBidWdzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBmaWVsZHM6KiogTm90IGEgZmFjdG9yLiBUaGUgY2hhbmdlIGlzIGF0IGFuIGVhcmxpZXIgcG9pbnQsIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgdXNlZCBvciBpbml0aWFsaXplZC5cbiogICAqKkJ1ZmZlciBpbmRleGluZy9ib3VuZHMgY2hhbmdlcyBleHBvc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzOioqIE5vdCBpbiBwbGF5IGhlcmUuXG5cbkkndmUgZ29uZSB0aHJvdWdoIHRob3NlIGNvcmUgcG9pbnRzLiBUaGVyZSBpcyBub3RoaW5nIGluIHRoaXMgcGF0Y2ggdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IGFsbCwgb3IgdGhhdCBpbnRyb2R1Y2VzIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBnbyB0aHJvdWdoIG15IGZvdXItcG9pbnQgcmV2aWV3OlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzOioqIFN0aWxsIG5vLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vLlxuMy4gICoqQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkczoqKiBOb3RoaW5nIG5ldyBoZXJlLlxuNC4gICoqQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlczoqKiBObywgdGhpcyBkb2VzIG5vdCBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhhdC5cblxuU28sICpteSBjb25jbHVzaW9uPyogVGhpcyBpcyBhbGwgS0FTQU4gdGVycml0b3J5LiBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuIFN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIHZlcmlmeSBtZW1vcnkgc2FmZXR5IGFuZCB0aGUgbG9jayBoYW5kbGluZy4gVGhlcmUncyBub3RoaW5nIGluIHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy5cbioqTmVlZHNLTVNBTiA9IGZhbHNlLioqXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NzIsIk91dHB1dFRva2VucyI6MjEwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjM6Mzk6NTUuMjQzODg4ODA0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29udHJvbCBmbG93IGluIGB0cnlfY2hhcmdlX21lbWNnKClgIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYCBzbyB0aGF0IHRoZSBgTUVNQ0dfTUFYYCBldmVudCAoYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCkgaXMgcmVjb3JkZWQgZWFybGllciB3aGVuZXZlciBhIG1lbW9yeSBjZ3JvdXAgbGltaXQgaXMgZXhjZWVkZWQsIGVuc3VyaW5nIGl0IGlzIGFjY291bnRlZCBldmVuIGlmIHRoZSBhbGxvY2F0aW9uIGJhaWxzIG91dCBlYXJseSAoZS5nLiBub24tYmxvY2tpbmcgR0ZQIG1hc2tzIG9yIE9PTSBzY2VuYXJpb3MpLlxcblxcbkFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKGBtZW1fb3Zlcl9saW1pdGAsIGBhbGxvd19zcGlubmluZ2AsIGByYWlzZWRfbWF4X2V2ZW50YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBjb3B5aW5nIHRvIHVzZXJzcGFjZSwgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHN0cnVjdCBpbml0aWFsaXphdGlvbnMgdGhhdCBjb3VsZCByZXN1bHQgaW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZzsgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCB0ZXN0IGNvbmZpZ3VyYXRpb25zIGFyZSBhcHByb3ByaWF0ZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29udHJvbCBmbG93IGluIGB0cnlfY2hhcmdlX21lbWNnKClgIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYCBzbyB0aGF0IHRoZSBgTUVNQ0dfTUFYYCBldmVudCAoYF9fbWVtY2dfbWVtb3J5X2V2ZW50YCkgaXMgcmVjb3JkZWQgZWFybGllciB3aGVuZXZlciBhIG1lbW9yeSBjZ3JvdXAgbGltaXQgaXMgZXhjZWVkZWQsIGVuc3VyaW5nIGl0IGlzIGFjY291bnRlZCBldmVuIGlmIHRoZSBhbGxvY2F0aW9uIGJhaWxzIG91dCBlYXJseSAoZS5nLiBub24tYmxvY2tpbmcgR0ZQIG1hc2tzIG9yIE9PTSBzY2VuYXJpb3MpLlxcblxcbkFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKGBtZW1fb3Zlcl9saW1pdGAsIGBhbGxvd19zcGlubmluZ2AsIGByYWlzZWRfbWF4X2V2ZW50YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBjb3B5aW5nIHRvIHVzZXJzcGFjZSwgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHN0cnVjdCBpbml0aWFsaXphdGlvbnMgdGhhdCBjb3VsZCByZXN1bHQgaW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZzsgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCB0ZXN0IGNvbmZpZ3VyYXRpb25zIGFyZSBhcHByb3ByaWF0ZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowdtcpv[1] Phase: Succeeded StartedAt: 2026-08-27 23:40:06 +0000 UTC FinishedAt: 2026-08-27 23:40:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 23:40:06 +0000 UTC FinishedAt: 2026-08-27 23:40:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2] Phase: Succeeded StartedAt: 2026-08-27 23:40:06 +0000 UTC FinishedAt: 2026-08-28 03:28:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-27 23:40:06 +0000 UTC FinishedAt: 2026-08-28 03:28:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-27 23:40:06 +0000 UTC FinishedAt: 2026-08-27 23:40:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-27 23:40:06 +0000 UTC FinishedAt: 2026-08-27 23:40:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdtcpv/series-workflowdtcpv-convert-artifact-3473591579/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-27 23:40:16 +0000 UTC FinishedAt: 2026-08-28 00:01:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-27 23:40:16 +0000 UTC FinishedAt: 2026-08-28 00:01:30 +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:*fbafb488-a537-4605-9d76-bef7e96a48fb,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-workflowdtcpv/series-workflowdtcpv-convert-artifact-3473591579/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": "1119569e-ab53-43fc-9db7-b43d2a30bcb0", "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-workflowdtcpv/series-workflowdtcpv-build-action-3762313561/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-27 23:40:16 +0000 UTC FinishedAt: 2026-08-28 00:01:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*fbafb488-a537-4605-9d76-bef7e96a48fb,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-workflowdtcpv/series-workflowdtcpv-convert-artifact-3473591579/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": "1119569e-ab53-43fc-9db7-b43d2a30bcb0", "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-workflowdtcpv/series-workflowdtcpv-build-action-3762313561/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-28 00:01:30 +0000 UTC FinishedAt: 2026-08-28 00:01:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-28 00:01:30 +0000 UTC FinishedAt: 2026-08-28 00:01:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-28 00:01:30 +0000 UTC FinishedAt: 2026-08-28 00:01:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-28 00:01:30 +0000 UTC FinishedAt: 2026-08-28 00:01:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdtcpv/series-workflowdtcpv-convert-artifact-477431154/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-28 00:01:40 +0000 UTC FinishedAt: 2026-08-28 00:03:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-28 00:01:40 +0000 UTC FinishedAt: 2026-08-28 00:03:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1119569e-ab53-43fc-9db7-b43d2a30bcb0,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-workflowdtcpv/series-workflowdtcpv-build-action-3762313561/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-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-28 00:03:34 +0000 UTC FinishedAt: 2026-08-28 00:03:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-28 00:03:34 +0000 UTC FinishedAt: 2026-08-28 00:03:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-28 00:03:34 +0000 UTC FinishedAt: 2026-08-28 00:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-28 00:03:34 +0000 UTC FinishedAt: 2026-08-28 00:24:00 +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:*fbafb488-a537-4605-9d76-bef7e96a48fb,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-workflowdtcpv/series-workflowdtcpv-convert-artifact-477431154/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": "f42cb116-0d54-47c3-81f8-b36f167d5771", "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-workflowdtcpv/series-workflowdtcpv-build-action-1143145734/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-28 00:03:34 +0000 UTC FinishedAt: 2026-08-28 00:23:30 +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:*fbafb488-a537-4605-9d76-bef7e96a48fb,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-workflowdtcpv/series-workflowdtcpv-convert-artifact-477431154/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": "f42cb116-0d54-47c3-81f8-b36f167d5771", "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-workflowdtcpv/series-workflowdtcpv-build-action-1143145734/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-28 00:24:00 +0000 UTC FinishedAt: 2026-08-28 00:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-28 00:24:00 +0000 UTC FinishedAt: 2026-08-28 00:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-28 00:24:00 +0000 UTC FinishedAt: 2026-08-28 00:25:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-28 00:24:00 +0000 UTC FinishedAt: 2026-08-28 00:25:44 +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:*f42cb116-0d54-47c3-81f8-b36f167d5771,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-workflowdtcpv/series-workflowdtcpv-build-action-1143145734/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-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-28 00:25:54 +0000 UTC FinishedAt: 2026-08-28 03:28:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-28 00:25:54 +0000 UTC FinishedAt: 2026-08-28 03:28:43 +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":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*1119569e-ab53-43fc-9db7-b43d2a30bcb0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f42cb116-0d54-47c3-81f8-b36f167d5771,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-workflowdtcpv/series-workflowdtcpv-build-action-3762313561/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-workflowdtcpv/series-workflowdtcpv-build-action-1143145734/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-28 00:25:54 +0000 UTC FinishedAt: 2026-08-28 00:26:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-28 00:25:54 +0000 UTC FinishedAt: 2026-08-28 00:25:58 +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":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdtcpv/series-workflowdtcpv-convert-artifact-2598501575/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-28 00:25:54 +0000 UTC FinishedAt: 2026-08-28 00:25:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-28 00:25:54 +0000 UTC FinishedAt: 2026-08-28 00:25:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-28 00:25:54 +0000 UTC FinishedAt: 2026-08-28 00:25:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-28 00:26:04 +0000 UTC FinishedAt: 2026-08-28 03:28:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdtcpv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__memcg_memory_event","mem_cgroup_sk_charge","__mem_cgroup_charge","mem_cgroup_charge_hugetlb","mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3d83758432b5e6ed9507500a57efb0f3af41ee7d","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG"],"series_id":"9f9a8715-8ae0-42f0-9a9c-fed59f3f085d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-28 00:26:04 +0000 UTC FinishedAt: 2026-08-28 03:28:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1119569e-ab53-43fc-9db7-b43d2a30bcb0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f42cb116-0d54-47c3-81f8-b36f167d5771,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-workflowdtcpv/series-workflowdtcpv-build-action-3762313561/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-workflowdtcpv/series-workflowdtcpv-build-action-1143145734/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-workflowdtcpv/series-workflowdtcpv-convert-artifact-2598501575/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,}